# 使用 Google Gemini

4AICode 的 Gemini 模型走 OpenAI-compatible `chat/completions` 协议。用户侧只需要使用自己的 `sk-4ai-...` token，并把 `model` 换成 `google/gemini-*`。平台根据可用性，通过 AI Studio 或 Vertex AI 转发请求。

## 可用模型

| 模型 | 推荐场景 |
|---|---|
| `google/gemini-3.1-pro-preview` | 复杂推理、长上下文、预览特性 |
| `google/gemini-3-flash-preview` | 更快响应、预览特性 |
| `google/gemini-2.5-flash` | 日常问答、轻量代码、低成本 |
| `google/gemini-2.5-pro` | 复杂任务、代码分析、稳定质量 |


## 模型路由

请求中使用 `google/gemini-*` 模型名，平台负责上游路由。当前可用模型与费率以控制台为准；上游额度限制或服务中断可能影响可用性。

## Python

```python
from openai import OpenAI

client = OpenAI(
    base_url="https://relay.4aicode.net/v1",
    api_key="sk-4ai-xxxxxxxxxxxxxxxx",
)

resp = client.chat.completions.create(
    model="google/gemini-2.5-flash",
    messages=[
        {"role": "user", "content": "用一句话介绍 Gemini"},
    ],
)

print(resp.choices[0].message.content)
```

## TypeScript / Node.js

```ts
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://relay.4aicode.net/v1",
  apiKey: "sk-4ai-xxxxxxxxxxxxxxxx",
});

const resp = await client.chat.completions.create({
  model: "google/gemini-2.5-flash",
  messages: [{ role: "user", content: "写一个 TypeScript hello world" }],
});

console.log(resp.choices[0].message.content);
```

## curl

```bash
curl https://relay.4aicode.net/v1/chat/completions \
  -H "Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-2.5-flash",
    "messages": [
      {"role": "user", "content": "ping"}
    ]
  }'
```

## 流式输出

```bash
curl https://relay.4aicode.net/v1/chat/completions \
  -H "Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-2.5-flash",
    "stream": true,
    "messages": [
      {"role": "user", "content": "写一个 Go hello world"}
    ]
  }'
```

返回格式仍是 OpenAI SSE：

```text
data: {"choices":[{"delta":{"content":"Hello"}}]}
data: [DONE]
```

## 图片输入

Gemini 当前支持 base64 data URL 图片输入：

```python
resp = client.chat.completions.create(
    model="google/gemini-2.5-flash",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "描述这张图"},
            {
                "type": "image_url",
                "image_url": {
                    "url": "data:image/png;base64,iVBORw0KGgo..."
                },
            },
        ],
    }],
)
```

远程 `https://...` 图片 URL 当前会返回明确错误。先把图片下载并转成 base64 data URL 再发送。

## 常见错误

| 错误 | 处理 |
|---|---|
| `model not supported` | 确认模型名是上表之一 |
| `no available google account` | 上游 Gemini 服务暂时不可用，请联系支持 |
| `quota exceeded` | 余额或配额不足，充值或联系团队管理员 |
| `upstream error` | Google 上游波动或 API key 额度问题，稍后重试 |
