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"
10
11#ifdef YAZE_AI_RUNTIME_AVAILABLE
13#endif
14
15namespace yaze {
16namespace cli {
17
19 std::string api_key;
20 std::string model = "gemini-2.5-flash"; // Default to flash model
21 float temperature = 0.7f;
23 mutable std::string
24 system_instruction; // Mutable to allow lazy initialization
25 bool use_enhanced_prompting = true; // Enable few-shot examples
27 true; // Use native Gemini function calling (enabled by default for 2.0+)
28 std::string prompt_version =
29 "v3"; // Which prompt file to use (default, v2, v3, etc.)
30 bool verbose = false; // Enable debug logging
31
32 GeminiConfig() = default;
33 explicit GeminiConfig(const std::string& key) : api_key(key) {}
34};
35
36#ifdef YAZE_AI_RUNTIME_AVAILABLE
37
38class GeminiAIService : public AIService {
39 public:
40 explicit GeminiAIService(const GeminiConfig& config);
41 void SetRomContext(Rom* rom) override;
42
43 // Primary interface
44 absl::StatusOr<AgentResponse> GenerateResponse(
45 const std::string& prompt) override;
46 absl::StatusOr<AgentResponse> GenerateResponse(
47 const std::vector<agent::ChatMessage>& history) override;
48
49 // Health check
50 absl::Status CheckAvailability();
51
52 // List available models
53 absl::StatusOr<std::vector<ModelInfo>> ListAvailableModels() override;
54
55 std::string GetProviderName() const override { return "gemini"; }
56
57 // Function calling support
58 void EnableFunctionCalling(bool enable = true);
59 std::vector<std::string> GetAvailableTools() const;
60
61 // Multimodal support (vision + text)
62 absl::StatusOr<AgentResponse> GenerateMultimodalResponse(
63 const std::string& image_path, const std::string& prompt);
64
65 private:
66 std::string BuildSystemInstruction();
67 std::string BuildFunctionCallSchemas();
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 "gemini"; }
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:24
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
GeminiConfig(const std::string &key)