Integration guide
Odysseus
Odysseus is a self-hosted workspace for chat, agents, research, documents and notes. Add legit2compute as one model endpoint and every chat, agent and research run in your workspace can use our models, billed per token to your key.
1. Run Odysseus
Follow the Odysseus quick start:
git clone https://github.com/odysseus-dev/odysseus.git cd odysseus cp .env.example .env docker compose up -d --build
Open http://localhost:7011 and sign in as the admin (the first password is printed in docker compose logs odysseus).
2. Add legit2compute as a model endpoint
- Copy your
l2ck_key from legit2compute.com/developers. - In Odysseus, open Settings, go to the models section and add an endpoint (you need to be the admin).
- Base URL:
https://api.legit2compute.com/nodes/llm/v1 - API key: your
l2ck_key. Odysseus stores it encrypted and never shows it again. - Save. Odysseus reads our model list from
/v1/models, including each model's context window. - Pick
qwen3.8:27bas your default chat model. To keep the picker short, pin just the models you want on this endpoint.
3. Turn on native tool calls
For an endpoint added by hand, Odysseus decides on its own whether to send tools natively or as text, and there is no switch for it in the UI yet. Our models support native tool calls, which agents use more reliably, so tell Odysseus. Signed in as the admin, run this in your browser's developer console on the Odysseus tab:
// 1. find the endpoint's id
fetch('/api/model-endpoints', { credentials: 'same-origin' }).then(r => r.json()).then(console.log)
// 2. mark it as supporting native tools (replace ENDPOINT_ID)
fetch('/api/model-endpoints/ENDPOINT_ID', {
method: 'PATCH',
credentials: 'same-origin',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ supports_tools: true }),
}).then(r => r.json()).then(console.log)Setting supports_tools back to null returns the endpoint to Odysseus' automatic choice.
Things to know
- Embeddings are not offered by our gateway. Keep Odysseus' default embedding setup (its local fallback works with no configuration).
- Media. Odysseus has no documented way yet to import an outside skill, so our media skill is not part of this guide. Render media from the chat, the API, or an agent that reads skills (see the Hermes and OpenClaw guides).
- 503 with
"warming": true: the model is being loaded. Retry in a minute or use a resident model. - 402: out of credit. Top up at /developers. Per-request spend is on your activity page.
Models that suit Odysseus
| Model ID | Context | Takes images | $ / 1M in · out · cached | Now |
|---|---|---|---|---|
llama3.1Llama 3.1 8B |
128K | — | $0.016 · $0.032 · $0.008 | resident |
ornith-1.5:9bOrnith 1.5 9B (vision, 256K) |
256K | yes | $0.050 · $0.080 · $0.020 | resident |
ornith-1.5:35bOrnith 1.5 35B (vision, 256K) |
256K | yes | $0.18 · $0.30 · $0.050 | on demand |
qwen3.8:27bQwen3.8 27B (vision + text) |
128K | yes | $0.12 · $1.50 · $0.030 | resident |
llama3.1:70bLlama 3.1 70B |
128K | — | $0.32 · $0.32 · $0.10 | on demand |
deepseek-ocr:3bDeepSeek-OCR 3B |
128K | yes | $0.040 · $0.060 · $0.020 | on demand |
granite4.1:3bGranite 4.1 3B (text) |
128K | — | $0.040 · $0.060 · $0.020 | on demand |
Tool calling and at least 64K context, from the live catalog. A model that is not resident answers 503 with "warming": true for a minute or two while it starts; the resident ones answer straight away.