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
12namespace yaze {
13namespace cli {
14
16 std::string api_key;
17 std::string model = "gemini-2.5-flash"; // Default to flash model
18 float temperature = 0.7f;
20 mutable std::string system_instruction; // Mutable to allow lazy initialization
21 bool use_enhanced_prompting = true; // Enable few-shot examples
22 bool use_function_calling = true; // Use native Gemini function calling (enabled by default for 2.0+)
23 std::string prompt_version = "v3"; // Which prompt file to use (default, v2, v3, etc.)
24 bool verbose = false; // Enable debug logging
25
26 GeminiConfig() = default;
27 explicit GeminiConfig(const std::string& key) : api_key(key) {}
28};
29
30class GeminiAIService : public AIService {
31 public:
32 explicit GeminiAIService(const GeminiConfig& config);
33 void SetRomContext(Rom* rom) override;
34
35 // Primary interface
36 absl::StatusOr<AgentResponse> GenerateResponse(
37 const std::string& prompt) override;
38 absl::StatusOr<AgentResponse> GenerateResponse(
39 const std::vector<agent::ChatMessage>& history) override;
40
41 // Health check
42 absl::Status CheckAvailability();
43
44 // Function calling support
45 void EnableFunctionCalling(bool enable = true);
46 std::vector<std::string> GetAvailableTools() const;
47
48 // Multimodal support (vision + text)
49 absl::StatusOr<AgentResponse> GenerateMultimodalResponse(
50 const std::string& image_path, const std::string& prompt);
51
52 private:
53 std::string BuildSystemInstruction();
54 std::string BuildFunctionCallSchemas();
55 absl::StatusOr<AgentResponse> ParseGeminiResponse(
56 const std::string& response_body);
57
58 // Helper for encoding images as base64
59 absl::StatusOr<std::string> EncodeImageToBase64(
60 const std::string& image_path) const;
61
63
66};
67
68} // namespace cli
69} // namespace yaze
70
71#endif // YAZE_SRC_CLI_GEMINI_AI_SERVICE_H_
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
absl::StatusOr< AgentResponse > GenerateMultimodalResponse(const std::string &image_path, const std::string &prompt)
void EnableFunctionCalling(bool enable=true)
std::vector< std::string > GetAvailableTools() const
void SetRomContext(Rom *rom) override
absl::StatusOr< std::string > EncodeImageToBase64(const std::string &image_path) const
absl::StatusOr< AgentResponse > ParseGeminiResponse(const std::string &response_body)
absl::StatusOr< AgentResponse > GenerateResponse(const std::string &prompt) override
Main namespace for the application.
GeminiConfig(const std::string &key)