Class: Ace::LLM::Providers::CLI::GeminiClient

Inherits:
Organisms::BaseClient
  • Object
show all
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

Instance Method Summary collapse

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, **options)
  @model = model || DEFAULT_MODEL
  # Skip normal BaseClient initialization that requires API key
  @options = options
  @generation_config = options[:generation_config] || {}
end

Class Method Details

.provider_nameObject

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

Parameters:

  • messages (Array<Hash>)

    Conversation messages

  • options (Hash)

    Generation options

Returns:

  • (Hash)

    Response with text and metadata



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 52

def generate(messages, **options)
  validate_gemini_availability!

  # Convert messages to prompt format
  prompt = format_messages_as_prompt(messages)

  cmd = build_gemini_command(prompt, options)
  stdout, stderr, status = execute_gemini_command(cmd, prompt, options)

  parse_gemini_response(stdout, stderr, status, prompt, options)
end

#list_modelsObject

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

Returns:

  • (Boolean)


44
45
46
# File 'lib/ace/llm/providers/cli/gemini_client.rb', line 44

def needs_credentials?
  false
end