File size: 1,401 Bytes
3dcf399
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""Google Gemini client - generateContent via generativelanguage.googleapis.com.

Key comes from GOOGLE_API_KEY env (never commit a real key).
"""
import os
import requests

BASE = os.getenv("GEMINI_API_BASE", "https://generativelanguage.googleapis.com/v1beta")
KEY = os.getenv("GOOGLE_API_KEY")


def _req(method, path, **kwargs):
    if not KEY:
        raise RuntimeError("GOOGLE_API_KEY not set")
    return requests.request(method, f"{BASE}{path}", params={"key": KEY}, **kwargs)


def generate_content(text, model="gemini-flash-latest", **kwargs):
    body = {"contents": [{"parts": [{"text": text}]}], **kwargs}
    r = _req("POST", f"/models/{model}:generateContent", json=body, timeout=120)
    try:
        return r.json()
    except Exception:
        return {"status_code": r.status_code, "text": r.text}


def chat(messages, model="gemini-flash-latest", **kwargs):
    """Simple OpenAI-style -> Gemini mapping for the router fallback chain."""
    system_parts = [m["content"] for m in messages if m.get("role") == "system"]
    user_text = " ".join(m["content"] for m in messages if m.get("role") in ("user", "assistant", "tool"))
    kwargs.setdefault("systemInstruction", {"parts": [{"text": system_parts[-1]}]} if system_parts else None)
    return generate_content(user_text, model=model, **kwargs)


def list_models():
    r = _req("GET", "/models", timeout=30)
    return r.json()