Frox-nano / Model /api /DEVELOPER_API.md
Hritik045678's picture
Initial commit: Frox Morph Nano 1 (XL) Space
bd97ee9
|
Raw
History Blame Contribute Delete
2.52 kB
# Frox AI Developer API
An OpenAI-compatible developer API with **API keys, authentication, rate
limiting, and usage tracking**, layered in front of the Morph model server.
```
Developer client -> Developer Gateway (:8080) -> Morph model server (:8000)
Bearer frx-... auth + rate limit + usage raw /v1 inference
```
## Run
```bash
# 1. Start the model server (raw inference, no auth)
python scripts/serve.py --family classic --model ./ckpt --port 8000
# 2. Start the developer gateway in front of it
export MORPH_UPSTREAM_URL=http://localhost:8000
export MORPH_ADMIN_TOKEN=choose-a-strong-admin-secret
uvicorn api.developer_gateway:app --host 0.0.0.0 --port 8080
```
## Issue an API key (admin)
```bash
curl -X POST http://localhost:8080/dev/keys \
-H "X-Admin-Token: $MORPH_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "my-app", "plan": "pro"}'
# -> { "key": "frx-....", "plan": "pro", "rpm_limit": 120, ... }
```
The secret is shown **once**. Store it securely.
## Call the API (developer)
Use it exactly like the OpenAI API — just change the base URL and key:
```bash
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer frx-...." \
-H "Content-Type: application/json" \
-d '{"model": "classic", "messages": [{"role":"user","content":"Hi"}], "stream": true}'
```
Works with the official OpenAI SDKs:
```python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8080/v1", api_key="frx-....")
resp = client.chat.completions.create(
model="classic",
messages=[{"role": "user", "content": "Hello"}],
)
```
## Endpoints
| Method | Path | Auth | Purpose |
|--------|------|------|---------|
| POST | `/dev/keys` | admin | Issue a new API key |
| DELETE | `/dev/keys/{key}` | admin | Revoke a key |
| GET | `/dev/usage` | key | This key's usage counters |
| GET | `/v1/models` | key | List available models |
| POST | `/v1/chat/completions` | key | Chat completion (stream or full) |
| GET | `/health` | none | Gateway + upstream health |
## Plans & rate limits
| Plan | Requests / min |
|------|----------------|
| free | 20 |
| pro | 120 |
| scale | 600 |
## Production notes
- Swap the JSON `KeyStore` for a real database (interface is small: `create`,
`get`, `revoke`, `record_usage`).
- Set `MORPH_ADMIN_TOKEN` (without it, key management is open — dev only).
- Restrict `MORPH_CORS_ORIGINS` to your real client origins.
- Rate limiting is in-memory per process; use Redis for multi-instance.