Gemini
通过 Google Gemini generateContent 协议调用 Gemini 以及其他任意对话模型。
Gemini 端点兼容 Google Gen AI SDK,和 Google 的 API 一样,模型写在 URL 里。Gemini 模型以及模型列表中的其他对话模型都会返回 GenerateContentResponse。
| 生成 | POST https://api.ohmygpt.com/v1/models/{model}:generateContent |
| 流式 | POST https://api.ohmygpt.com/v1/models/{model}:streamGenerateContent |
| SDK Base URL | https://api.ohmygpt.com,API 版本 v1 |
| 鉴权 | x-goog-api-key: $OHMYGPT_API_KEY 或 Authorization: Bearer $OHMYGPT_API_KEY |
{model} 是 GET /v1/models 中的完整模型 ID,包括斜杠:/v1/models/google/gemini-3.1-flash-lite:generateContent。按下面的示例把 SDK 的 API 版本设为 v1。
import os
from google import genai
from google.genai import types
client = genai.Client(
api_key=os.environ["OHMYGPT_API_KEY"],
http_options=types.HttpOptions(base_url="https://api.ohmygpt.com", api_version="v1"),
)
response = client.models.generate_content(
model="google/gemini-3.1-flash-lite",
contents="Explain QUIC in two sentences.",
)
print(response.text)
for chunk in client.models.generate_content_stream(
model="google/gemini-3.1-flash-lite",
contents="Explain QUIC in two sentences.",
):
print(chunk.text or "", end=""){
"candidates": [
{
"index": 0,
"finishReason": "STOP",
"content": {
"role": "model",
"parts": [{ "text": "This is a mock reply from OhMyGPT. Your integration works; switch to a real model when ready." }]
}
}
],
"usageMetadata": { "promptTokenCount": 15, "candidatesTokenCount": 17, "totalTokenCount": 32 }
}安全设置
请求不带 safetySettings 时,OhMyGPT 会把 HARM_CATEGORY_HARASSMENT、HARM_CATEGORY_HATE_SPEECH、HARM_CATEGORY_SEXUALLY_EXPLICIT 和 HARM_CATEGORY_DANGEROUS_CONTENT 设为 "threshold": "OFF"。需要过滤时,发送你自己的 safetySettings,Gemini 模型会原样收到。
{
"contents": [{ "role": "user", "parts": [{ "text": "ping" }] }],
"safetySettings": [
{ "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE" }
]
}其他模型
GPT、Claude 和其他所有对话模型都接受同样的请求。systemInstruction、contents、tools、toolConfig 和 thinkingConfig(见思考)都会完整保留,模型有对应项的 generationConfig 设置也一样。模型没有对应项的设置(例如发给 Claude 的 seed)不会发送,模型按自己的默认行为作答。其他模型每个请求只返回一个候选,所以 candidateCount 大于 1 会返回 400 并指出 generationConfig.candidateCount。safetySettings 不会发给其他模型。cachedContent 是 Gemini 的功能,请配合 Gemini 模型使用。
流式输出
:streamGenerateContent 以 server-sent events 返回,带不带 ?alt=sse 都可以。每个事件是一个 GenerateContentResponse 数据块。带 finishReason 的数据块标志内容结束,最后一个数据块带有 usageMetadata:
data: {"candidates":[{"content":{"role":"model","parts":[{"text":" ready."}]},"index":0}]}
data: {"candidates":[{"content":{"role":"model","parts":[]},"finishReason":"STOP","index":0}]}
data: {"usageMetadata":{"promptTokenCount":29,"candidatesTokenCount":17,"totalTokenCount":46},"candidates":[{"content":{"role":"model","parts":[]},"index":0}]}要查看一次 Gemini 流式请求的费用,用该请求的 X-Request-ID 响应头查询,见流式请求的费用。
错误
错误使用 Google 的 google.rpc.Status 格式:
{
"error": {
"code": 404,
"status": "NOT_FOUND",
"message": "The model `google/gemini-0-nonexistent` does not exist. List available models with `GET /v1/models`.",
"details": [
{ "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "MODEL_NOT_FOUND", "domain": "ohmygpt.com" }
]
}
}