Google Gemini Provider

Two providers for Google's Gemini models:

  • GoogleProvider — Google AI Studio (Generative AI API) via ApiProtocol::GoogleGenerativeAi
  • GoogleVertexProvider — Google Cloud Vertex AI via ApiProtocol::GoogleVertex

Google AI Studio

#![allow(unused)]
fn main() {
use phi_core::BasicAgent;
use phi_core::provider::ModelConfig;

let api_key = std::env::var("GOOGLE_API_KEY").unwrap();
let agent = BasicAgent::new(ModelConfig::google(
    "gemini-2.0-flash",
    "Gemini 2.0 Flash",
    &api_key,
));
}

API Details

  • Endpoint: {base_url}/v1beta/models/{model}:streamGenerateContent?alt=sse&key={api_key}
  • Auth: API key as query parameter
  • Default base URL: https://generativelanguage.googleapis.com
  • Default context window: 1,000,000 tokens

Message Format

Google uses a different message format than OpenAI/Anthropic:

phi-coreGoogle API
user roleuser role
assistant rolemodel role
Content::Text{"text": "..."}
Content::Image{"inlineData": {...}}
Content::ToolCall{"functionCall": {...}}
Message::ToolResult{"functionResponse": {...}}
System promptsystemInstruction field
Toolstools[].functionDeclarations[]

Streaming

Uses SSE format (alt=sse). Each chunk contains candidates with content.parts and optional usageMetadata.

Google Vertex AI

GoogleVertexProvider uses the same message format but with Vertex AI authentication and endpoints.

#![allow(unused)]
fn main() {
use phi_core::BasicAgent;
use phi_core::provider::{ModelConfig, ApiProtocol};

// Vertex AI uses OAuth2 Bearer tokens as the api_key
let access_token = get_access_token(); // your OAuth2 helper
let agent = BasicAgent::new(ModelConfig {
    id: "gemini-2.0-flash".into(),
    name: "Gemini 2.0 Flash (Vertex)".into(),
    api: ApiProtocol::GoogleVertex,
    provider: "google_vertex".into(),
    base_url: "https://us-central1-aiplatform.googleapis.com".into(),
    api_key: access_token,
    ..Default::default()
});
}
  • Protocol: ApiProtocol::GoogleVertex
  • Auth: OAuth2 / service account credentials (Bearer token in api_key)
  • Endpoint pattern: https://{region}-aiplatform.googleapis.com/v1/projects/{project}/locations/{region}/publishers/google/models/{model}:streamGenerateContent