Guitar
AiApiBridge.h
Go to the documentation of this file.
1 #ifndef AIAPIBRIDGE_H
2 #define AIAPIBRIDGE_H
3 
4 #include <ai/GenerativeAI.h>
5 
6 #include <string>
7 #include <vector>
8 #include <optional>
9 #include <functional>
10 
11 class AbstractInetClient;
12 
13 /* example for Anthropic Claude responses API
14 
15 {
16  "model": "claude-sonnet-4-6",
17  "id": "msg_01QgGhfNSoB4mDVt55i55LXr",
18  "type": "message",
19  "role": "assistant",
20  "content": [
21  {
22  "type": "text",
23  "text": "Sure! Let me fetch today's quote for you right away!"
24  },
25  {
26  "type": "tool_use",
27  "id": "toolu_01USQo1v4iheZJ4CxkDxV1ku",
28  "name": "get_quote_of_the_day",
29  "input": {},
30  "caller": {
31  "type": "direct"
32  }
33  }
34  ],
35  "stop_reason": "tool_use",
36  "stop_sequence": null,
37  "stop_details": null,
38  "usage": {
39  "input_tokens": 354,
40  "cache_creation_input_tokens": 0,
41  "cache_read_input_tokens": 0,
42  "cache_creation": {
43  "ephemeral_5m_input_tokens": 0,
44  "ephemeral_1h_input_tokens": 0
45  },
46  "output_tokens": 47,
47  "service_tier": "standard",
48  "inference_geo": "global"
49  }
50 }
51 
52 */
53 
54 /* example for OpenAI responses API
55 
56 {
57  "id": "resp_0e4c24cb1691fbd5006a1d80ad01fc819a93ff21b72cd42581",
58  "object": "response",
59  "created_at": 1780318381,
60  "status": "completed",
61  "background": false,
62  "billing": {
63  "payer": "developer"
64  },
65  "completed_at": 1780318381,
66  "error": null,
67  "frequency_penalty": 0.0,
68  "incomplete_details": null,
69  "instructions": null,
70  "max_output_tokens": null,
71  "max_tool_calls": null,
72  "model": "gpt-5.4-mini-2026-03-17",
73  "moderation": null,
74  "output": [
75  {
76  "id": "fc_0e4c24cb1691fbd5006a1d80ad7c20819a9ee90cf849c1a37e",
77  "type": "function_call",
78  "status": "completed",
79  "arguments": "{}",
80  "call_id": "call_L8UWZP0N2eEkgc9F0Z9VjKcZ",
81  "name": "get_quote_of_the_day"
82  }
83  ],
84  "parallel_tool_calls": true,
85  "presence_penalty": 0.0,
86  "previous_response_id": null,
87  "prompt_cache_key": null,
88  "prompt_cache_retention": "in_memory",
89  "reasoning": {
90  "context": "current_turn",
91  "effort": "none",
92  "summary": null
93  },
94  "safety_identifier": null,
95  "service_tier": "default",
96  "store": true,
97  "temperature": 1.0,
98  "text": {
99  "format": {
100  "type": "text"
101  },
102  "verbosity": "medium"
103  },
104  "tool_choice": {
105  "type": "function",
106  "name": "get_quote_of_the_day"
107  },
108  "tools": [
109  {
110  "type": "function",
111  "description": "Get a quote of the day",
112  "name": "get_quote_of_the_day",
113  "parameters": {
114  "additionalProperties": false,
115  "type": "object",
116  "properties": {},
117  "required": []
118  },
119  "strict": true
120  }
121  ],
122  "top_logprobs": 0,
123  "top_p": 0.98,
124  "truncation": "disabled",
125  "usage": {
126  "input_tokens": 48,
127  "input_tokens_details": {
128  "cached_tokens": 0
129  },
130  "output_tokens": 17,
131  "output_tokens_details": {
132  "reasoning_tokens": 0
133  },
134  "total_tokens": 65
135  },
136  "user": null,
137  "metadata": {}
138 }
139 
140 */
141 
142 struct AiResponseEx {
144 
146  std::string type;
147  std::string text;
148  std::string id;
149  std::string name;
150  // std::string input;
151  std::string caller_type;
152  std::string content_json;
153  };
154 
156  std::string id;
157  std::string type;
158  std::string status;
159  std::string arguments;
160  std::string call_id;
161  std::string name;
162  struct Content {
163  std::string text;
164  };
165  std::vector<Content> content;
166  };
167 
169  struct FunctionCall {
170  std::string name;
171  // std::vector<Args> args;
172  std::string id;
173  std::string content_json;
174  std::string text;
176  };
177 
178  struct OpenAiChoice {
179  double index;
180  struct Message {
181  std::string role;
182  std::string content;
183  struct ToolCall {
184  std::string id;
185  std::string type;
186  struct {
187  std::string name;
188  std::string arguments;
189  } function;
190  };
191  std::vector<ToolCall> tool_calls;
193  std::string finish_reason;
194  };
195 
196  std::string model;
197  std::string id;
198  struct {
199  std::string type;
200  std::string role;
201  std::vector<AnthropicContentItem> content;
203  struct {
204  std::string object;
205  std::string status;
206  std::vector<OpenAiOutputItem> output;
207  std::vector<OpenAiChoice> choices;
209  struct {
210  std::vector<GoogleContentItem> content_parts;
212  std::string stop_reason;
213  // std::string stop_sequence;
214  // std::string stop_details;
215  struct Usage {
219  struct CacheCreation {
224  std::string service_tier;
225  std::string inference_geo;
226  } usage;
227  struct Error {
228  std::string type;
229  std::string message;
230  } error;
231 };
232 
234 struct AiResult {
235 
237  {
238  d.ex.api_id = api;
239  }
240 
241  struct Model {
242  std::string id;
243  std::string object;
244  std::string created;
245  std::string owned_by;
246  };
247 
248  struct Models {
249  std::vector<Model> list;
250  };
251 
252  struct Data {
253  bool completed = false;
254  std::string content;
255  std::string error_status;
256  std::string error_message;
257  std::string stop_reason;
259  } d;
260 
261  operator bool () const
262  {
263  return d.completed && d.error_status.empty() && d.error_message.empty();
264  }
265  std::string const &content() const
266  {
267  return d.content;
268  }
269  std::string const &error_status() const
270  {
271  return d.error_status;
272  }
273  std::string const &error_message() const
274  {
275  return d.error_message;
276  }
277 
278  bool is_error() const
279  {
280  return !d.error_status.empty() || !d.error_message.empty();
281  }
282 };
283 
284 class AiApiBridge {
285  friend class AiSession;
286 public:
287  struct Query2Request {
289  enum Type {
292  };
294  bool internal = false;
295  std::string prompt_text;
296  std::string prompt_json;
297  void set_text(std::string const &text)
298  {
299  type = TEXT;
300  prompt_text = text;
301  }
302  void set_tooluse(std::string const &json, std::string const &text)
303  {
304  type = JSON;
305  prompt_json = json;
306  prompt_text = text;
307  }
308  Query2Request() = default;
310  : eptype(eptype)
311  {
312  }
313  operator bool () const
314  {
315  return (type == TEXT && !prompt_text.empty()) || (type == JSON && !prompt_json.empty());
316  }
317  };
318 private:
319  struct Private;
322  std::string generate_prompt_json(const GenerativeAI::Model &model, const std::string &prompt, std::string const &system_role = {});
323  AiResult open();
324  AiResult x_request(Query2Request const &req);
325  void close();
326 public:
327  AiApiBridge();
328  ~AiApiBridge();
329 
330  AiResult Error(std::string const &status, std::string const &message) const
331  {
333  ret.d.error_status = status;
334  ret.d.error_message = message;
335  return ret;
336  }
337  GenerativeAI::Model model() const;
339  void set_system_role(std::string const &role);
340  AiResult request(GenerativeAI::EndPoint::Type eptype, std::string const &prompt, const Query2Request &req);
341  AiResult request(const std::string &prompt);
342  std::optional<AiResult::Models> queryModels();
343 };
344 
345 
346 #include <memory>
347 
348 class AiSession {
349 public:
351  std::shared_ptr<AiApiBridge> api_bridge;
353  : api_bridge(std::make_shared<AiApiBridge>())
354  {
355  }
357  {
358  close();
359  }
361  {
362  api_bridge->set_ai_model(model);
363  }
364  bool open()
365  {
366  AiResult result = api_bridge->open();
367  return !result.is_error();
368  }
369  void close()
370  {
371  api_bridge->close();
372  }
374  {
375  return api_bridge->x_request(req);
376  }
377 };
378 
379 #endif // AIAPIBRIDGE_H
Definition: inetclient.h:120
Definition: AiApiBridge.h:284
GenerativeAI::Model model() const
現在設定されているAIモデルを返す。
Definition: AiApiBridge.cpp:661
void close()
Definition: AiApiBridge.cpp:693
AiResult Error(std::string const &status, std::string const &message) const
Definition: AiApiBridge.h:330
Private * m
Definition: AiApiBridge.h:319
AbstractInetClient * http()
Definition: AiApiBridge.cpp:698
AiResult open()
Definition: AiApiBridge.cpp:680
AiApiBridge()
Definition: AiApiBridge.cpp:42
std::optional< AiResult::Models > queryModels()
Definition: AiApiBridge.cpp:846
std::string generate_prompt_json(const GenerativeAI::Model &model, const std::string &prompt, std::string const &system_role={})
プロンプトをプロバイダー固有のAPIリクエストJSON形式に変換する。
Definition: AiApiBridge.cpp:650
~AiApiBridge()
Definition: AiApiBridge.cpp:48
void set_ai_model(GenerativeAI::Model model)
使用するAIモデルを設定する。
Definition: AiApiBridge.cpp:670
void set_system_role(std::string const &role)
Definition: AiApiBridge.cpp:675
AiResult x_request(Query2Request const &req)
Definition: AiApiBridge.cpp:706
AiResult request(GenerativeAI::EndPoint::Type eptype, std::string const &prompt, const Query2Request &req)
指定されたエンドポイントタイプに対してプロンプトを送信し、AIの応答を取得する。
Definition: AiApiBridge.cpp:772
Definition: AiApiBridge.h:348
std::shared_ptr< AiApiBridge > api_bridge
Definition: AiApiBridge.h:351
void set_ai_model(GenerativeAI::Model model)
Definition: AiApiBridge.h:360
void close()
Definition: AiApiBridge.h:369
AiResult request(Quert2Resuest const &req)
Definition: AiApiBridge.h:373
bool open()
Definition: AiApiBridge.h:364
~AiSession()
Definition: AiApiBridge.h:356
AiSession()
Definition: AiApiBridge.h:352
ProviderID
Definition: GenerativeAI.h:9
Definition: GitTypes.h:74
Definition: AiApiBridge.cpp:11
Definition: AiApiBridge.h:287
void set_text(std::string const &text)
Definition: AiApiBridge.h:297
void set_tooluse(std::string const &json, std::string const &text)
Definition: AiApiBridge.h:302
Type type
Definition: AiApiBridge.h:293
Query2Request(GenerativeAI::EndPoint::Type eptype)
Definition: AiApiBridge.h:309
GenerativeAI::EndPoint::Type eptype
Definition: AiApiBridge.h:288
std::string prompt_json
Definition: AiApiBridge.h:296
Type
Definition: AiApiBridge.h:289
@ JSON
Definition: AiApiBridge.h:291
@ TEXT
Definition: AiApiBridge.h:290
std::string prompt_text
Definition: AiApiBridge.h:295
Definition: AiApiBridge.h:145
std::string id
Definition: AiApiBridge.h:148
std::string type
Definition: AiApiBridge.h:146
std::string text
Definition: AiApiBridge.h:147
std::string name
Definition: AiApiBridge.h:149
std::string caller_type
Definition: AiApiBridge.h:151
std::string content_json
Definition: AiApiBridge.h:152
Definition: AiApiBridge.h:227
std::string message
Definition: AiApiBridge.h:229
std::string type
Definition: AiApiBridge.h:228
std::string text
Definition: AiApiBridge.h:174
std::string name
Definition: AiApiBridge.h:170
std::string id
Definition: AiApiBridge.h:172
std::string content_json
Definition: AiApiBridge.h:173
Definition: AiApiBridge.h:168
struct AiResponseEx::GoogleContentItem::FunctionCall functionCall
std::string name
Definition: AiApiBridge.h:187
std::string type
Definition: AiApiBridge.h:185
std::string arguments
Definition: AiApiBridge.h:188
std::string id
Definition: AiApiBridge.h:184
Definition: AiApiBridge.h:180
std::string role
Definition: AiApiBridge.h:181
std::vector< ToolCall > tool_calls
Definition: AiApiBridge.h:191
std::string content
Definition: AiApiBridge.h:182
Definition: AiApiBridge.h:178
struct AiResponseEx::OpenAiChoice::Message message
std::string finish_reason
Definition: AiApiBridge.h:193
double index
Definition: AiApiBridge.h:179
Definition: AiApiBridge.h:162
std::string text
Definition: AiApiBridge.h:163
Definition: AiApiBridge.h:155
std::string type
Definition: AiApiBridge.h:157
std::string call_id
Definition: AiApiBridge.h:160
std::string status
Definition: AiApiBridge.h:158
std::string arguments
Definition: AiApiBridge.h:159
std::string name
Definition: AiApiBridge.h:161
std::string id
Definition: AiApiBridge.h:156
std::vector< Content > content
Definition: AiApiBridge.h:165
Definition: AiApiBridge.h:219
int ephemeral_5m_input_tokens
Definition: AiApiBridge.h:220
int ephemeral_1h_input_tokens
Definition: AiApiBridge.h:221
Definition: AiApiBridge.h:215
int cache_read_input_tokens
Definition: AiApiBridge.h:218
std::string inference_geo
Definition: AiApiBridge.h:225
int cache_creation_input_tokens
Definition: AiApiBridge.h:217
std::string service_tier
Definition: AiApiBridge.h:224
int input_tokens
Definition: AiApiBridge.h:216
struct AiResponseEx::Usage::CacheCreation cache_creation
int output_tokens
Definition: AiApiBridge.h:223
Definition: AiApiBridge.h:142
std::string type
Definition: AiApiBridge.h:199
std::string stop_reason
Definition: AiApiBridge.h:212
std::vector< GoogleContentItem > content_parts
Definition: AiApiBridge.h:210
std::vector< OpenAiOutputItem > output
Definition: AiApiBridge.h:206
std::string id
Definition: AiApiBridge.h:197
std::vector< AnthropicContentItem > content
Definition: AiApiBridge.h:201
std::string object
Definition: AiApiBridge.h:204
std::vector< OpenAiChoice > choices
Definition: AiApiBridge.h:207
struct AiResponseEx::@3 google
std::string model
Definition: AiApiBridge.h:196
GenerativeAI::ProviderID api_id
Definition: AiApiBridge.h:143
struct AiResponseEx::@1 anthropic
std::string role
Definition: AiApiBridge.h:200
struct AiResponseEx::@2 openai
struct AiResponseEx::Usage usage
std::string status
Definition: AiApiBridge.h:205
struct AiResponseEx::Error error
Definition: AiApiBridge.h:252
std::string content
AIが返したテキスト本文
Definition: AiApiBridge.h:254
std::string stop_reason
Definition: AiApiBridge.h:257
std::string error_message
エラーメッセージ
Definition: AiApiBridge.h:256
std::string error_status
エラー種別
Definition: AiApiBridge.h:255
bool completed
正常に完了したか
Definition: AiApiBridge.h:253
AiResponseEx ex
Definition: AiApiBridge.h:258
Definition: AiApiBridge.h:241
std::string object
Definition: AiApiBridge.h:243
std::string owned_by
Definition: AiApiBridge.h:245
std::string id
Definition: AiApiBridge.h:242
std::string created
Definition: AiApiBridge.h:244
Definition: AiApiBridge.h:248
std::vector< Model > list
Definition: AiApiBridge.h:249
AIレスポンスの解析結果を保持する内部構造体
Definition: AiApiBridge.h:234
AiResult(GenerativeAI::ProviderID api=GenerativeAI::ProviderID::Unknown)
Definition: AiApiBridge.h:236
bool is_error() const
Definition: AiApiBridge.h:278
struct AiResult::Data d
std::string const & content() const
Definition: AiApiBridge.h:265
std::string const & error_message() const
Definition: AiApiBridge.h:273
std::string const & error_status() const
Definition: AiApiBridge.h:269
Type
Definition: GenerativeAI.h:172
Definition: GenerativeAI.h:95
ProviderID api_compatibility() const
Definition: GenerativeAI.h:156