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"
11
12#ifdef YAZE_AI_RUNTIME_AVAILABLE
14#endif
15
16namespace yaze {
17namespace cli {
18
20 std::string api_key;
21 std::string base_url =
22 "https://api.openai.com"; // LMStudio: http://localhost:1234
23 std::string model = "gpt-4o-mini"; // Default to cost-effective model
24 float temperature = 0.7f;
26 std::string system_instruction;
28 std::string prompt_version = "v3";
29 bool verbose = false;
30
31 OpenAIConfig() = default;
32 explicit OpenAIConfig(const std::string& key) : api_key(key) {}
33};
34
35#ifdef YAZE_AI_RUNTIME_AVAILABLE
36
37class OpenAIAIService : public AIService {
38 public:
39 explicit OpenAIAIService(const OpenAIConfig& config);
40 void SetRomContext(Rom* rom) override;
41
42 // Primary interface
43 absl::StatusOr<AgentResponse> GenerateResponse(
44 const std::string& prompt) override;
45 absl::StatusOr<AgentResponse> GenerateResponse(
46 const std::vector<agent::ChatMessage>& history) override;
47
48 // Health check
49 absl::Status CheckAvailability();
50
51 // List available models from OpenAI API
52 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override;
53
54 std::string GetProviderName() const override { return kProviderOpenAi; }
55
56 // Function calling support
57 void EnableFunctionCalling(bool enable = true);
58 std::vector<std::string> GetAvailableTools() const;
59
60 private:
61 std::string BuildSystemInstruction();
62 absl::StatusOr<AgentResponse> ParseOpenAIResponse(
63 const std::string& response_body);
64
65 bool function_calling_enabled_ = true;
66
67 OpenAIConfig config_;
68 PromptBuilder prompt_builder_;
69};
70
71#else // !YAZE_AI_RUNTIME_AVAILABLE
72
73// Stub implementation when AI runtime is disabled
74class OpenAIAIService : public AIService {
75 public:
76 explicit OpenAIAIService(const OpenAIConfig&) {}
77 void SetRomContext(Rom*) override {}
78 absl::StatusOr<AgentResponse> GenerateResponse(
79 const std::string& prompt) override {
80 return absl::FailedPreconditionError(
81 "OpenAI AI runtime is disabled (prompt: " + prompt + ")");
82 }
83 absl::StatusOr<AgentResponse> GenerateResponse(
84 const std::vector<agent::ChatMessage>&) override {
85 return absl::FailedPreconditionError("OpenAI AI runtime is disabled");
86 }
87 absl::Status CheckAvailability() {
88 return absl::FailedPreconditionError("OpenAI AI runtime is disabled");
89 }
91 std::vector<std::string> GetAvailableTools() const { return {}; }
92 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override {
93 return absl::FailedPreconditionError("OpenAI AI runtime is disabled");
94 }
95 std::string GetProviderName() const override { return kProviderOpenAi; }
96};
97
98#endif // YAZE_AI_RUNTIME_AVAILABLE
99
100} // namespace cli
101} // namespace yaze
102
103#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
constexpr char kProviderOpenAi[]
OpenAIConfig(const std::string &key)