Class: Ace::LLM::Providers::CLI::GeminiClient
- Inherits:
-
Organisms::BaseClient
- Object
- Organisms::BaseClient
- Ace::LLM::Providers::CLI::GeminiClient
- Includes:
- CliArgsSupport
- Defined in:
- lib/ace/llm/providers/cli/gemini_client.rb
Overview
Client for interacting with Google Gemini CLI Provides access to Gemini models through subprocess execution
Constant Summary collapse
- API_BASE_URL =
Not used for CLI interaction but required by BaseClient
"https://generativelanguage.googleapis.com"- DEFAULT_GENERATION_CONFIG =
{}.freeze
- DEFAULT_MAX_PROMPT_LENGTH =
Default maximum prompt length before switching to file-based prompts (100K characters) This can be overridden via config: default_options.max_prompt_length Gemini’s actual token limit is much higher (~1M tokens), but this provides a reasonable safeguard for accidental misuse
100_000- DEFAULT_MODEL =
Default model (can be overridden by config)
"gemini-2.5-flash"
Class Method Summary collapse
-
.provider_name ⇒ Object
Provider registration - auto-registers as “gemini”.
Instance Method Summary collapse
-
#generate(messages, **options) ⇒ Hash
Generate a response from the LLM.
-
#initialize(model: nil, **options) ⇒ GeminiClient
constructor
A new instance of GeminiClient.
-
#list_models ⇒ Object
List available Gemini models Note: This list should stay in sync with .ace-defaults/llm/providers/gemini.yml Project-level additions (like preview models) are handled by the config cascade.
-
#needs_credentials? ⇒ Boolean
Override to indicate this client doesn’t need API credentials.
Constructor Details
#initialize(model: nil, **options) ⇒ GeminiClient
Returns a new instance of GeminiClient.
36 37 38 39 40 41 |
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 36 def initialize(model: nil, **) @model = model || DEFAULT_MODEL # Skip normal BaseClient initialization that requires API key @options = @generation_config = [:generation_config] || {} end |
Class Method Details
.provider_name ⇒ Object
Provider registration - auto-registers as “gemini”
29 30 31 |
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 29 def self.provider_name "gemini" end |
Instance Method Details
#generate(messages, **options) ⇒ Hash
Generate a response from the LLM
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 52 def generate(, **) validate_gemini_availability! # Convert messages to prompt format prompt = () cmd = build_gemini_command(prompt, ) stdout, stderr, status = execute_gemini_command(cmd, prompt, ) parse_gemini_response(stdout, stderr, status, prompt, ) end |
#list_models ⇒ Object
List available Gemini models Note: This list should stay in sync with .ace-defaults/llm/providers/gemini.yml Project-level additions (like preview models) are handled by the config cascade
67 68 69 70 71 72 73 74 |
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 67 def list_models [ {id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", description: "Fast, efficient Gemini model", context_size: 1_048_576}, {id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", description: "Advanced Gemini model", context_size: 1_048_576}, {id: "gemini-2.0-flash", name: "Gemini 2.0 Flash", description: "Fast Gemini model", context_size: 1_048_576}, {id: "gemini-1.5-pro-latest", name: "Gemini 1.5 Pro", description: "Previous generation Pro model", context_size: 2_097_152} ] end |
#needs_credentials? ⇒ Boolean
Override to indicate this client doesn’t need API credentials
44 45 46 |
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 44 def needs_credentials? false end |