amogus/docs/openrouter_api.md
Antigravity 071906df59 feat: Complete LLM agent framework with fog-of-war, meeting flow, and prompt assembly
- Core engine: simulator, game mechanics, triggers (138 tests)
- Fog-of-war per-player state tracking
- Meeting flow: interrupt, discussion, voting, consolidation
- Prompt assembler with strategy injection tiers
- LLM client with fallbacks for models without JSON/system support
- Prompt templates: action, discussion, voting, reflection
- Full integration in main.py orchestrator
- Verified working with free OpenRouter models (Gemma)
2026-02-01 00:00:34 -05:00

119 lines
2.6 KiB
Markdown

# OpenRouter API Reference
Quick reference for The Glass Box League LLM integration.
## Base URL
```
https://openrouter.ai/api/v1
```
## Authentication
```
Authorization: Bearer $OPENROUTER_API_KEY
```
## Chat Completions Endpoint
**POST** `/chat/completions`
### Request Body
```json
{
"model": "google/gemini-2.0-flash-lite-preview-02-05:free",
"messages": [
{"role": "system", "content": "You are an Among Us player."},
{"role": "user", "content": "What do you do?"}
],
"temperature": 0.7,
"max_tokens": 1024,
"top_p": 0.9,
"frequency_penalty": 0.0,
"presence_penalty": 0.0,
"stream": false,
"response_format": {"type": "json_object"}
}
```
### Response
```json
{
"id": "gen-...",
"model": "google/gemini-2.0-flash-lite-preview-02-05:free",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\"action\": \"move\", \"target\": \"electrical\"}"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 100,
"completion_tokens": 50,
"total_tokens": 150
}
}
```
## Key Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| `model` | string | Model ID (see available_models.json) |
| `messages` | array | Conversation history |
| `temperature` | float | Randomness (0.0-2.0) |
| `max_tokens` | int | Max response length |
| `top_p` | float | Nucleus sampling (0.0-1.0) |
| `stream` | bool | Enable streaming |
| `response_format` | object | Force JSON output |
| `seed` | int | For deterministic output |
## Structured Output (JSON Mode)
```json
{
"response_format": {
"type": "json_object"
}
}
```
## Headers
```
Content-Type: application/json
Authorization: Bearer $OPENROUTER_API_KEY
HTTP-Referer: https://your-app.com (optional, for rankings)
X-Title: Glass Box League (optional, for rankings)
```
## Python Example
```python
import os
import requests
def chat(messages, model="google/gemini-2.0-flash-lite-preview-02-05:free"):
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.getenv('OPENROUTER_API_KEY')}",
"Content-Type": "application/json"
},
json={
"model": model,
"messages": messages,
"temperature": 0.7,
"response_format": {"type": "json_object"}
}
)
return response.json()["choices"][0]["message"]["content"]
```
## Free Models
See `available_models.json` for current free tier models.
Run `python fetch_models.py` to refresh the list.
## Rate Limits
- Free tier: varies by model
- Check response headers for remaining quota