34 virtual void initialize(rclcpp::Node::SharedPtr node)
override
57 result.set(
"input",
prompt.prompt);
73 std::vector<PromptDialogue>& conversation)
override
80 Poco::JSON::Array input_array;
85 Poco::JSON::Object message_obj;
86 message_obj.set(
"type",
"message");
87 message_obj.set(
"role", dialog.role);
89 Poco::JSON::Array content_array;
90 Poco::JSON::Object content_obj;
91 content_obj.set(
"type",
"input_text");
92 content_obj.set(
"text", dialog.content);
93 content_array.add(content_obj);
95 message_obj.set(
"content", content_array);
96 input_array.add(message_obj);
100 Poco::JSON::Object latest_message;
101 latest_message.set(
"type",
"message");
102 latest_message.set(
"role",
"user");
104 Poco::JSON::Array latest_content_array;
105 Poco::JSON::Object latest_content_obj;
106 latest_content_obj.set(
"type",
"input_text");
107 latest_content_obj.set(
"text",
prompt.prompt);
108 latest_content_array.add(latest_content_obj);
110 latest_message.set(
"content", latest_content_array);
111 input_array.add(latest_message);
114 result.set(
"input", input_array);
133 if (object->has(
"output"))
137 Poco::JSON::Array::Ptr output_array =
object->getArray(
"output");
138 for (
size_t i = 0; i < output_array->size(); ++i)
140 Poco::JSON::Object::Ptr out_item = output_array->getObject(i);
141 if (!out_item->has(
"content"))
144 Poco::JSON::Array::Ptr content_array = out_item->getArray(
"content");
145 for (
size_t j = 0; j < content_array->size(); ++j)
147 Poco::JSON::Object::Ptr content_obj = content_array->getObject(j);
148 if (content_obj->has(
"text"))
150 res.
response = content_obj->getValue<std::string>(
"text");
159 catch (
const Poco::Exception& ex)
161 RCLCPP_WARN(
node_->get_logger(),
"Failed to parse OpenAI /v1/responses output: %s", ex.what());
168 for (Poco::JSON::Object::ConstIterator it = object->begin(); it !=
object->end(); ++it)
170 if ((it->first ==
"output") || (it->first ==
"usage"))
175 if (!it->second.isEmpty() && it->second.isString())
179 else if (!it->second.isEmpty())
188 catch (
const Poco::Exception& ex)
190 RCLCPP_WARN(
node_->get_logger(),
"Failed to convert JSON key '%s': %s", it->first.c_str(), ex.what());
211 if (object->has(
"output"))
215 Poco::JSON::Array::Ptr output_array =
object->getArray(
"output");
216 for (
size_t i = 0; i < output_array->size(); ++i)
218 Poco::JSON::Object::Ptr out_item = output_array->getObject(i);
219 if (!out_item->has(
"content"))
222 Poco::JSON::Array::Ptr content_array = out_item->getArray(
"content");
223 for (
size_t j = 0; j < content_array->size(); ++j)
225 Poco::JSON::Object::Ptr content_obj = content_array->getObject(j);
226 if (content_obj->has(
"text"))
228 res.
response = content_obj->getValue<std::string>(
"text");
237 catch (
const Poco::Exception& ex)
239 RCLCPP_WARN(
node_->get_logger(),
"Failed to parse OpenAI /v1/responses output (conversation): %s", ex.what());
246 for (Poco::JSON::Object::ConstIterator it = object->begin(); it !=
object->end(); ++it)
248 if ((it->first ==
"output") || (it->first ==
"usage"))
253 if (!it->second.isEmpty() && it->second.isString())
257 else if (!it->second.isEmpty())
266 catch (
const Poco::Exception& ex)
268 RCLCPP_WARN(
node_->get_logger(),
"Failed to convert JSON key '%s': %s", it->first.c_str(), ex.what());
273 size_t startPos = res.
response.find(
"```xml\n");
274 if (startPos != std::string::npos)
276 res.
response.replace(startPos, 6,
"");
279 size_t endPos = res.
response.rfind(
"\n```");
280 if (endPos != std::string::npos)
282 res.
response.replace(endPos, 4,
"");
rclcpp::Node::SharedPtr node_
Node shared pointer.
Definition base_class.hpp:105
OpenAIProvider.
Definition openai_provider.hpp:17
OpenAIProvider()
Construct a new Chat Prompt Provider OpenAI object.
Definition openai_provider.hpp:23
virtual void initialize(rclcpp::Node::SharedPtr node) override
Initialize the OpenAIProvider.
Definition openai_provider.hpp:34
virtual Poco::JSON::Object toJson(prompt::PromptRequest &prompt) override
Convert a prompt request to a JSON object.
Definition openai_provider.hpp:50
virtual Poco::JSON::Object toJsonConversation(prompt::PromptRequest &prompt, std::vector< PromptDialogue > &conversation) override
Convert a prompt request with conversation history to a JSON object.
Definition openai_provider.hpp:72
virtual prompt::PromptResponse fromJson(const Poco::JSON::Object::Ptr object) override
Convert a JSON object to a prompt response.
Definition openai_provider.hpp:128
virtual prompt::PromptResponse fromJsonConversation(const Poco::JSON::Object::Ptr object) override
Convert a JSON object to a prompt response with conversation history.
Definition openai_provider.hpp:207
PromptBaseClass.
Definition prompt_base_class.hpp:17
virtual void initialize_prompt_base(rclcpp::Node::SharedPtr node, std::string plugin_name="PromptBaseClass", std::string api_key_name="")
Initialize the REST base class.
Definition prompt_base_class.hpp:45
virtual const Poco::JSON::Object handle_options(std::vector< prompt::PromptOption > &options)
Process options from the prompt request.
Definition rest_base_class.hpp:314
Definition base_class.hpp:8
Definition structs.hpp:17
Definition structs.hpp:24
Definition structs.hpp:35
bool success
Definition structs.hpp:39
std::string response
Definition structs.hpp:36
std::vector< PromptOption > options
Definition structs.hpp:38