yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
openai_ai_service.h
Go to the documentation of this file.
1#ifndef YAZE_SRC_CLI_OPENAI_AI_SERVICE_H_
2#define YAZE_SRC_CLI_OPENAI_AI_SERVICE_H_
3
4#include <string>
5#include <vector>
6
7#include "absl/status/status.h"
8#include "absl/status/statusor.h"
10
11#ifdef YAZE_AI_RUNTIME_AVAILABLE
13#endif
14
15namespace yaze {
16namespace cli {
17
19 std::string api_key;
20 std::string base_url = "https://api.openai.com"; // LMStudio: http://localhost:1234
21 std::string model = "gpt-4o-mini"; // Default to cost-effective model
22 float temperature = 0.7f;
24 std::string system_instruction;
26 std::string prompt_version = "v3";
27 bool verbose = false;
28
29 OpenAIConfig() = default;
30 explicit OpenAIConfig(const std::string& key) : api_key(key) {}
31};
32
33#ifdef YAZE_AI_RUNTIME_AVAILABLE
34
35class OpenAIAIService : public AIService {
36 public:
37 explicit OpenAIAIService(const OpenAIConfig& config);
38 void SetRomContext(Rom* rom) override;
39
40 // Primary interface
41 absl::StatusOr<AgentResponse> GenerateResponse(
42 const std::string& prompt) override;
43 absl::StatusOr<AgentResponse> GenerateResponse(
44 const std::vector<agent::ChatMessage>& history) override;
45
46 // Health check
47 absl::Status CheckAvailability();
48
49 // List available models from OpenAI API
50 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override;
51
52 std::string GetProviderName() const override { return "openai"; }
53
54 // Function calling support
55 void EnableFunctionCalling(bool enable = true);
56 std::vector<std::string> GetAvailableTools() const;
57
58 private:
59 std::string BuildSystemInstruction();
60 std::string BuildFunctionCallSchemas();
61 absl::StatusOr<AgentResponse> ParseOpenAIResponse(
62 const std::string& response_body);
63
64 bool function_calling_enabled_ = true;
65
66 OpenAIConfig config_;
67 PromptBuilder prompt_builder_;
68};
69
70#else // !YAZE_AI_RUNTIME_AVAILABLE
71
72// Stub implementation when AI runtime is disabled
73class OpenAIAIService : public AIService {
74 public:
75 explicit OpenAIAIService(const OpenAIConfig&) {}
76 void SetRomContext(Rom*) override {}
77 absl::StatusOr<AgentResponse> GenerateResponse(
78 const std::string& prompt) override {
79 return absl::FailedPreconditionError(
80 "OpenAI AI runtime is disabled (prompt: " + prompt + ")");
81 }
82 absl::StatusOr<AgentResponse> GenerateResponse(
83 const std::vector<agent::ChatMessage>&) override {
84 return absl::FailedPreconditionError("OpenAI AI runtime is disabled");
85 }
86 absl::Status CheckAvailability() {
87 return absl::FailedPreconditionError("OpenAI AI runtime is disabled");
88 }
90 std::vector<std::string> GetAvailableTools() const { return {}; }
91 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override {
92 return absl::FailedPreconditionError("OpenAI AI runtime is disabled");
93 }
94 std::string GetProviderName() const override { return "openai"; }
95};
96
97#endif // YAZE_AI_RUNTIME_AVAILABLE
98
99} // namespace cli
100} // namespace yaze
101
102#endif // YAZE_SRC_CLI_OPENAI_AI_SERVICE_H_
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
absl::StatusOr< AgentResponse > GenerateResponse(const std::vector< agent::ChatMessage > &) override
absl::StatusOr< AgentResponse > GenerateResponse(const std::string &prompt) override
absl::StatusOr< std::vector< ModelInfo > > ListAvailableModels() override
void SetRomContext(Rom *) override
std::string GetProviderName() const override
OpenAIAIService(const OpenAIConfig &)
std::vector< std::string > GetAvailableTools() const
OpenAIConfig(const std::string &key)