Prompt Tools 0.3.2
Loading...
Searching...
No Matches
openai_embedding.hpp
Go to the documentation of this file.
1#pragma once
2
4
5namespace prompt
6{
7
16{
17public:
24
32 virtual void initialize(rclcpp::Node::SharedPtr node) override
33 {
34 // initialize base class
35 initialize_embed_base(node, "OpenAIEmbedding", "OPENAI_API_KEY");
36 }
37
38protected:
48 virtual Poco::JSON::Object toJson(prompt::EmbedRequest& input) override
49 {
50 // add options (model, temperature, etc.)
51 Poco::JSON::Object result = handle_options(input.options);
52
53 // /v1/responses uses `input` to send the text directly as a string.
54 result.set("input", input.text );
55 return result;
56 }
57
67 virtual prompt::EmbedResponse fromJson(const Poco::JSON::Object::Ptr object) override
68 {
70 try
71 {
72 // Embeddings API returns 'data' array with one or more items containing 'embedding' and 'index'
73 if (object->has("data"))
74 {
75 Poco::JSON::Array::Ptr data_array = object->getArray("data");
76 for (size_t di = 0; di < data_array->size(); ++di)
77 {
78 Poco::JSON::Object::Ptr embed_obj = data_array->getObject(di);
80
81 if (embed_obj->has("embedding"))
82 {
83 if (embed_obj->isArray("embedding"))
84 {
85 Poco::JSON::Array::Ptr arr = embed_obj->getArray("embedding");
86 emb.float_embedding.reserve(arr->size());
87 for (size_t i = 0; i < arr->size(); ++i)
88 {
89 emb.float_embedding.push_back(static_cast<float>(arr->get(i).convert<double>()));
90 }
91 emb.is_float = true;
92 }
93 else
94 {
95 // Treat as base64 string
96 emb.base64_embedding = embed_obj->getValue<std::string>("embedding");
97 emb.is_float = false;
98 }
99 }
100
101 if (embed_obj->has("index"))
102 {
103 emb.index = embed_obj->getValue<int>("index");
104 }
105
106 res.embeddings.push_back(emb);
107 }
108 }
109
110 // Top-level metadata
111 if (object->has("model"))
112 {
113 res.model = object->getValue<std::string>("model");
114 }
115 if (object->has("usage"))
116 {
117 try
118 {
119 Poco::JSON::Object::Ptr usage = object->getObject("usage");
120 if (usage->has("prompt_tokens"))
121 {
122 res.prompt_tokens = usage->getValue<int>("prompt_tokens");
123 }
124 if (usage->has("total_tokens"))
125 {
126 res.total_tokens = usage->getValue<int>("total_tokens");
127 }
128 }
129 catch (const Poco::Exception& ex)
130 {
131 RCLCPP_WARN(node_->get_logger(), "Failed to parse usage: %s", ex.what());
132 }
133 }
134
135 res.success = !res.embeddings.empty();
136 }
137 catch (const Poco::Exception& ex)
138 {
139 RCLCPP_WARN(node_->get_logger(), "Failed to parse OpenAI embeddings response: %s", ex.what());
140 res.error = ex.what();
141 res.success = false;
142 }
143 return res;
144 }
145};
146
147} // namespace prompt
rclcpp::Node::SharedPtr node_
Node shared pointer.
Definition base_class.hpp:105
EmbedBaseClass.
Definition embed_base_class.hpp:17
virtual void initialize_embed_base(rclcpp::Node::SharedPtr node, std::string plugin_name="EmbedBaseClass", std::string api_key_name="")
Initialize the REST base class.
Definition embed_base_class.hpp:45
OpenAIEmbedding.
Definition openai_embedding.hpp:16
virtual Poco::JSON::Object toJson(prompt::EmbedRequest &input) override
Convert a embed request to a JSON object.
Definition openai_embedding.hpp:48
OpenAIEmbedding()
Construct a new OpenAI Embedding Provider object.
Definition openai_embedding.hpp:21
virtual prompt::EmbedResponse fromJson(const Poco::JSON::Object::Ptr object) override
Convert a JSON object to a prompt response for OpenAI Embeddings.
Definition openai_embedding.hpp:67
virtual void initialize(rclcpp::Node::SharedPtr node) override
Initialize the OpenAIEmbedding.
Definition openai_embedding.hpp:32
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:46
std::vector< PromptOption > options
Definition structs.hpp:49
std::string text
Definition structs.hpp:47
Definition structs.hpp:61
bool success
Definition structs.hpp:63
std::vector< Embedding > embeddings
Definition structs.hpp:62
std::string model
Definition structs.hpp:65
int prompt_tokens
Definition structs.hpp:66
int total_tokens
Definition structs.hpp:67
std::string error
Definition structs.hpp:64
Definition structs.hpp:53
bool is_float
Definition structs.hpp:56
int index
Definition structs.hpp:57
std::vector< float > float_embedding
Definition structs.hpp:55
std::string base64_embedding
Definition structs.hpp:54