0.0
The project is in a healthy, maintained state
Gemini provider integration for the LegionIO LLM routing framework.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

>= 1.2.1
>= 0.4.3
 Project Readme

lex-llm-gemini

LegionIO LLM provider extension for Google Gemini.

This gem lives under Legion::Extensions::Llm::Gemini and depends on lex-llm >= 0.4.3 for shared provider-neutral routing, response normalization, fleet responder execution, and schema primitives. It does not require or call legion-llm at runtime; legion-llm owns adapter creation, routing, and registry writes after discovering loaded lex-llm-* provider gems.

Load it with require 'legion/extensions/llm/gemini'.

What It Provides

  • Legion::Extensions::Llm::Provider registration as :gemini
  • Gemini-native chat requests through POST /v1beta/{model=models/*}:generateContent
  • Streaming chat support through POST /v1beta/{model=models/*}:streamGenerateContent?alt=sse
  • Model discovery through GET /v1beta/models
  • Embeddings through POST /v1beta/{model=models/*}:embedContent
  • Normalized chat, streaming, vision, function calling, and embedding capability mapping from supportedGenerationMethods
  • Best-effort llm.registry availability events published to AMQP when transport is loaded
  • Shared fleet/default settings via Legion::Extensions::Llm.provider_settings

File Map

Path Purpose
lib/legion/extensions/llm/gemini.rb Entry point; provider discovery metadata and defaults
lib/legion/extensions/llm/gemini/provider.rb Gemini provider (chat, streaming, models, embeddings)
lib/legion/extensions/llm/gemini/actors/fleet_worker.rb Provider-owned fleet subscription actor
lib/legion/extensions/llm/gemini/runners/fleet_worker.rb Fleet runner delegating to Legion::Extensions::Llm::Fleet::ProviderResponder
lib/legion/extensions/llm/gemini/version.rb VERSION constant

Defaults

Legion::Extensions::Llm::Gemini.default_settings
# {
#   provider_family: :gemini,
#   instances: {
#     default: {
#       endpoint: "https://generativelanguage.googleapis.com/v1beta",
#       tier: :frontier,
#       transport: :http,
#       credentials: { api_key: "env://GEMINI_API_KEY" },
#       usage: { inference: true, embedding: true },
#       limits: { concurrency: 4 }
#     }
#   }
# }

Configuration

Legion::Extensions::Llm.configure do |config|
  config.gemini_api_key = ENV.fetch("GEMINI_API_KEY")
  config.gemini_api_base = "https://generativelanguage.googleapis.com/v1beta"
  config.default_model = "gemini-2.0-flash"
  config.default_embedding_model = "gemini-embedding-001"
end

Fleet Responder

Provider instances can opt in to consuming Legion LLM fleet requests. The provider-owned fleet actor only starts when at least one discovered instance enables fleet.respond_to_requests, and execution delegates to Legion::Extensions::Llm::Fleet::ProviderResponder from lex-llm.

extensions:
  llm:
    gemini:
      instances:
        local:
          fleet:
            enabled: true
            respond_to_requests: true
            capabilities:
              - chat
              - stream_chat
              - embed

Observability

The Gemini entry point and provider use Legion::Logging::Helper:

  • list_models logs model discovery activity and publishes availability through the shared lex-llm registry publisher.
  • Fleet request execution is delegated to the shared responder helper so acking, response publishing, and responder failures stay inside the provider-neutral fleet boundary.
  • Registry publishing is best-effort and must not block provider calls when transport is unavailable.

Development

bundle install
bundle exec rspec --format json --out tmp/rspec_results.json --format progress --out tmp/rspec_progress.txt
bundle exec rubocop -A

License

Apache-2.0