LiteLLM
LiteLLM reaches any OpenAI-compatible API through its openai/ prefix, so ozeye needs no plugin. LiteLLM strips the prefix before calling ozeye, which receives the plain model id.
Proxy
Add one entry per model. model_name is what your clients send to the proxy; model is the ozeye id from the models page.
# config.yaml
model_list:
- model_name: glm-5.3
litellm_params:
model: openai/glm-5.3 # openai/ = any OpenAI-compatible API
api_base: https://ozeye.ai/v1
api_key: os.environ/OZEYE_API_KEY
- model_name: mistral-small-latest
litellm_params:
model: openai/mistral-small-latest
api_base: https://ozeye.ai/v1
api_key: os.environ/OZEYE_API_KEY
export OZEYE_API_KEY=oz_your_key_here
litellm --config config.yaml # proxy on http://localhost:4000
# or with Docker
docker run -v $(pwd)/config.yaml:/app/config.yaml \
-e OZEYE_API_KEY -e LITELLM_MASTER_KEY=sk-change-me \
-p 4000:4000 docker.litellm.ai/berriai/litellm:latest --config /app/config.yaml
Clients then call the proxy at http://localhost:4000/v1 with the LiteLLM master key, and LiteLLM forwards to ozeye with your ozeye key.
Python SDK
import os, litellm
response = litellm.completion(
model="openai/glm-5.3",
api_base="https://ozeye.ai/v1",
api_key=os.environ["OZEYE_API_KEY"],
messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)
Good to know
api_basemust end in/v1, with nothing after it. A Not Found error almost always means the/v1is missing.- LiteLLM doesn't know ozeye's prices, so its spend tracking shows zero unless you add
model_infowithinput_cost_per_tokenandoutput_cost_per_token. Your real balance and usage are always in the ozeye dashboard. - Without a database, LiteLLM does not enforce budgets. Set a credit limit on the ozeye key itself (API keys) to cap spending.
- Streaming, tool calls and JSON mode pass through unchanged.