Skip to main content

Google (Gemini) provider for Metorial

Project description

metorial-google

Google (Gemini) provider integration for Metorial.

Installation

pip install metorial-google
# or
uv add metorial-google
# or
poetry add metorial-google

Features

  • 🤖 Gemini Integration: Full support for Gemini Pro, Gemini Flash, and other Google AI models
  • 📡 Session Management: Automatic tool lifecycle handling
  • 🔄 Format Conversion: Converts Metorial tools to Google function declaration format
  • Async Support: Full async/await support

Supported Models

All Google Gemini models that support function calling:

  • gemini-1.5-pro: Most capable Gemini model with 2M context window
  • gemini-1.5-flash: Fast and efficient Gemini model
  • gemini-pro: Standard Gemini Pro model
  • gemini-pro-vision: Gemini Pro with vision capabilities

Usage

Quick Start (Recommended)

import asyncio
import google.generativeai as genai
from metorial import Metorial

async def main():
  # Initialize clients
  metorial = Metorial(api_key="...your-metorial-api-key...") # async by default
  genai.configure(api_key="...your-google-api-key...")
  google_client = genai.GenerativeModel('gemini-pro')
  
  # One-liner chat with automatic session management
  response = await metorial.run(
    "What are the latest commits in the metorial/websocket-explorer repository?",
    "...your-mcp-server-deployment-id...", # can also be list
    google_client,
    model="gemini-pro",
    max_iterations=25
  )
  
  print("Response:", response)

asyncio.run(main())

Streaming Chat

import asyncio
import google.generativeai as genai
from metorial import Metorial
from metorial.types import StreamEventType

async def streaming_example():
  # Initialize clients
  metorial = Metorial(api_key="...your-metorial-api-key...")
  genai.configure(api_key="...your-google-api-key...")
  google_client = genai.GenerativeModel('gemini-pro')
  
  # Streaming chat with real-time responses
  async def stream_action(session):
    messages = [
      {"role": "user", "content": "Explain quantum computing"}
    ]
    
    async for event in metorial.stream(
      google_client, session, messages, 
      model="gemini-pro",
      max_iterations=25
    ):
      if event.type == StreamEventType.CONTENT:
        print(f"🤖 {event.content}", end="", flush=True)
      elif event.type == StreamEventType.TOOL_CALL:
        print(f"\n🔧 Executing {len(event.tool_calls)} tool(s)...")
      elif event.type == StreamEventType.COMPLETE:
        print(f"\n✅ Complete!")
  
  await metorial.with_session("...your-server-deployment-id...", stream_action)

asyncio.run(streaming_example())

Advanced Usage with Session Management

import asyncio
import google.generativeai as genai
from metorial import Metorial
from metorial_google import MetorialGoogleSession

async def main():
  # Initialize clients
  metorial = Metorial(api_key="...your-metorial-api-key...")
  genai.configure(api_key="...your-google-api-key...")
  
  # Create session with your server deployments
  async with metorial.session(["...your-server-deployment-id..."]) as session:
    # Create Google-specific wrapper
    google_session = MetorialGoogleSession(session.tool_manager)
    
    model = genai.GenerativeModel(
      model_name="gemini-pro",
      tools=google_session.tools
    )
    
    response = model.generate_content("What are the latest commits?")
    
    # Handle function calls if present
    if response.candidates[0].content.parts:
      function_calls = [
        part.function_call for part in response.candidates[0].content.parts
        if hasattr(part, 'function_call') and part.function_call
      ]
      
      if function_calls:
        tool_response = await google_session.call_tools(function_calls)
        # Continue conversation with tool_response

asyncio.run(main())

Using Convenience Functions

from metorial_google import build_google_tools, call_google_tools

async def example_with_functions():
  # Get tools in Google format
  tools = build_google_tools(tool_manager)
  
  # Call tools from Google response
  response = await call_google_tools(tool_manager, function_calls)

API Reference

MetorialGoogleSession

Main session class for Google integration.

session = MetorialGoogleSession(tool_manager)

Properties:

  • tools: List of tools in Google function declaration format

Methods:

  • async call_tools(function_calls): Execute function calls and return user content

build_google_tools(tool_mgr)

Build Google-compatible tool definitions.

Returns: List of tool definitions in Google format

call_google_tools(tool_mgr, function_calls)

Execute function calls from Google response.

Returns: User content with function responses

Tool Format

Tools are converted to Google's function declaration format:

[{
  "function_declarations": [
    {
      "name": "tool_name",
      "description": "Tool description",
      "parameters": {
        "type": "object",
        "properties": {...},
        "required": [...]
      }
    }
  ]
}]

Error Handling

try:
    response = await google_session.call_tools(function_calls)
except Exception as e:
    print(f"Tool execution failed: {e}")

Tool errors are returned as error objects in the response format.

License

MIT License - see LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

metorial_google-1.0.0rc5.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metorial_google-1.0.0rc5-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file metorial_google-1.0.0rc5.tar.gz.

File metadata

  • Download URL: metorial_google-1.0.0rc5.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metorial_google-1.0.0rc5.tar.gz
Algorithm Hash digest
SHA256 fd4b40c9be0aefc298757d6b706a598dd7bda0b813bae79e4439fbd0367e698e
MD5 0bb5f8f3f340db113a1e50184cd57f19
BLAKE2b-256 70232e675adfe9e5563f55836f1ca069ee43e417ed897c65eb440c82d36c6325

See more details on using hashes here.

Provenance

The following attestation bundles were made for metorial_google-1.0.0rc5.tar.gz:

Publisher: release.yml on metorial/metorial-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file metorial_google-1.0.0rc5-py3-none-any.whl.

File metadata

File hashes

Hashes for metorial_google-1.0.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 5f880d460488184a1abfc4b4356814a6733f4504b3e76af0a4c4522e562c24b7
MD5 4238ab64b62b141fac7f053b9c0fd06c
BLAKE2b-256 4841a7093907036217928d6c2ba855fdc00bfb9c0ae78ef087176809ea42aab1

See more details on using hashes here.

Provenance

The following attestation bundles were made for metorial_google-1.0.0rc5-py3-none-any.whl:

Publisher: release.yml on metorial/metorial-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page