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_base must end in /v1, with nothing after it. A Not Found error almost always means the /v1 is missing.
  • LiteLLM doesn't know ozeye's prices, so its spend tracking shows zero unless you add model_info with input_cost_per_token and output_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.