Spaces:
Sleeping
Sleeping
| title: opencode-api | |
| emoji: 🤖 | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| app_port: 7860 | |
| pinned: false | |
| license: mit | |
| # OpenCode API | |
| LLM Agent API Server - ported from TypeScript [opencode](https://github.com/anomalyco/opencode) to Python. | |
| ## Features | |
| - **Multi-provider LLM support**: Anthropic (Claude), OpenAI (GPT-4) | |
| - **Tool system**: Web search, web fetch, todo management | |
| - **Session management**: Persistent conversations with history | |
| - **SSE streaming**: Real-time streaming responses | |
| - **REST API**: FastAPI with automatic OpenAPI docs | |
| ## API Endpoints | |
| ### Sessions | |
| - `GET /session` - List all sessions | |
| - `POST /session` - Create a new session | |
| - `GET /session/{id}` - Get session details | |
| - `DELETE /session/{id}` - Delete a session | |
| - `POST /session/{id}/message` - Send a message (SSE streaming response) | |
| - `POST /session/{id}/abort` - Cancel ongoing generation | |
| ### Providers | |
| - `GET /provider` - List available LLM providers | |
| - `GET /provider/{id}` - Get provider details | |
| - `GET /provider/{id}/model` - List provider models | |
| ### Events | |
| - `GET /event` - Subscribe to real-time events (SSE) | |
| ## Environment Variables | |
| Set these as Hugging Face Space secrets: | |
| | Variable | Description | | |
| | -------------------------- | ----------------------------------- | | |
| | `ANTHROPIC_API_KEY` | Anthropic API key for Claude models | | |
| | `OPENAI_API_KEY` | OpenAI API key for GPT models | | |
| | `BLABLADOR_API_KEY` | Blablador API key | | |
| | `TOKEN` | Authentication token for API access | | |
| | `OPENCODE_SERVER_PASSWORD` | Optional: Basic auth password | | |
| ## Local Development | |
| ```bash | |
| # Install dependencies | |
| pip install -r requirements.txt | |
| # Run server | |
| python app.py | |
| # Or with uvicorn | |
| uvicorn app:app --host 0.0.0.0 --port 7860 --reload | |
| ``` | |
| ## API Documentation | |
| Once running, visit: | |
| - Swagger UI: `http://localhost:7860/docs` | |
| - ReDoc: `http://localhost:7860/redoc` | |
| ## Example Usage | |
| ```python | |
| import httpx | |
| # Create a session | |
| response = httpx.post("http://localhost:7860/session") | |
| session = response.json() | |
| session_id = session["id"] | |
| # Send a message (with SSE streaming) | |
| with httpx.stream( | |
| "POST", | |
| f"http://localhost:7860/session/{session_id}/message", | |
| json={"content": "Hello, what can you help me with?"} | |
| ) as response: | |
| for line in response.iter_lines(): | |
| if line.startswith("data: "): | |
| print(line[6:]) | |
| ``` | |
| ## License | |
| MIT | |