yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
gemini_ai_service.h
Go to the documentation of this file.
1#ifndef YAZE_SRC_CLI_GEMINI_AI_SERVICE_H_
2#define YAZE_SRC_CLI_GEMINI_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 model = "gemini-2.5-flash"; // Default to flash model
22 float temperature = 0.7f;
24 mutable std::string
25 system_instruction; // Mutable to allow lazy initialization
26 bool use_enhanced_prompting = true; // Enable few-shot examples
28 true; // Use native Gemini function calling (enabled by default for 2.0+)
29 std::string prompt_version =
30 "v3"; // Which prompt file to use (default, v2, v3, etc.)
31 bool verbose = false; // Enable debug logging
32
33 GeminiConfig() = default;
34 explicit GeminiConfig(const std::string& key) : api_key(key) {}
35};
36
37#ifdef YAZE_AI_RUNTIME_AVAILABLE
38
39class GeminiAIService : public AIService {
40 public:
41 explicit GeminiAIService(const GeminiConfig& config);
42 void SetRomContext(Rom* rom) override;
43
44 // Primary interface
45 absl::StatusOr<AgentResponse> GenerateResponse(
46 const std::string& prompt) override;
47 absl::StatusOr<AgentResponse> GenerateResponse(
48 const std::vector<agent::ChatMessage>& history) override;
49
50 // Health check
51 absl::Status CheckAvailability();
52
53 // List available models
54 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override;
55
56 std::string GetProviderName() const override { return kProviderGemini; }
57
58 // Function calling support
59 void EnableFunctionCalling(bool enable = true);
60 std::vector<std::string> GetAvailableTools() const;
61
62 // Multimodal support (vision + text)
63 absl::StatusOr<AgentResponse> GenerateMultimodalResponse(
64 const std::string& image_path, const std::string& prompt);
65
66 private:
67 std::string BuildSystemInstruction();
68 absl::StatusOr<AgentResponse> ParseGeminiResponse(
69 const std::string& response_body);
70
71 // Helper for encoding images as base64
72 absl::StatusOr<std::string> EncodeImageToBase64(
73 const std::string& image_path) const;
74
75 bool function_calling_enabled_ = true;
76
77 GeminiConfig config_;
78 PromptBuilder prompt_builder_;
79};
80
81#else // !YAZE_AI_RUNTIME_AVAILABLE
82
83class GeminiAIService : public AIService {
84 public:
85 explicit GeminiAIService(const GeminiConfig&) {}
86 void SetRomContext(Rom*) override {}
87 absl::StatusOr<AgentResponse> GenerateResponse(
88 const std::string& prompt) override {
89 return absl::FailedPreconditionError(
90 "Gemini AI runtime is disabled (prompt: " + prompt + ")");
91 }
92 absl::StatusOr<AgentResponse> GenerateResponse(
93 const std::vector<agent::ChatMessage>&) override {
94 return absl::FailedPreconditionError("Gemini AI runtime is disabled");
95 }
96 absl::Status CheckAvailability() {
97 return absl::FailedPreconditionError("Gemini AI runtime is disabled");
98 }
100 std::vector<std::string> GetAvailableTools() const { return {}; }
101 absl::StatusOr<AgentResponse> GenerateMultimodalResponse(const std::string&,
102 const std::string&) {
103 return absl::FailedPreconditionError("Gemini AI runtime is disabled");
104 }
105 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override {
106 return absl::FailedPreconditionError("Gemini AI runtime is disabled");
107 }
108 std::string GetProviderName() const override { return kProviderGemini; }
109};
110
111#endif // YAZE_AI_RUNTIME_AVAILABLE
112
113} // namespace cli
114} // namespace yaze
115
116#endif // YAZE_SRC_CLI_GEMINI_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 > GenerateMultimodalResponse(const std::string &, const std::string &)
absl::StatusOr< AgentResponse > GenerateResponse(const std::vector< agent::ChatMessage > &) override
std::vector< std::string > GetAvailableTools() const
absl::StatusOr< std::vector< ModelInfo > > ListAvailableModels() override
GeminiAIService(const GeminiConfig &)
void SetRomContext(Rom *) override
std::string GetProviderName() const override
absl::StatusOr< AgentResponse > GenerateResponse(const std::string &prompt) override
constexpr char kProviderGemini[]
Definition provider_ids.h:9
GeminiConfig(const std::string &key)