> For the complete documentation index, see [llms.txt](https://docs.elevateelysium.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.elevateelysium.xyz/reference/model-providers.md).

# Model providers

An agent thinks on a model you connect. There are four ways to get one, and you can mix them across agents.

| Option                    | You provide      | Billed by                        | Good for                                                                                                   |
| ------------------------- | ---------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| OpenAI, Anthropic, Gemini | Their API key    | That provider                    | The strongest tool-using models                                                                            |
| OpenRouter                | One key          | OpenRouter                       | Trying many models behind one key                                                                          |
| OpenAI-compatible service | Base URL and key | That service                     | Cheaper or faster open models (Groq, Together, DeepSeek, Mistral, xAI, Fireworks, a hosted vLLM or Ollama) |
| Local model               | Nothing          | Nobody (the operator's hardware) | No third-party account, private, free per token                                                            |

## OpenAI-compatible services

Open **Keys**, choose **OpenAI-compatible**, pick a preset (or paste the base URL, which usually ends in `/v1`), paste your key and save. ELEVATE checks the address, asks the service for its model list with your key, and stores both encrypted together. When you launch the agent, type the model name exactly as the service lists it.

Rules that keep it safe:

* The base URL must be a public `https` address on the standard port. Internal, private and local addresses are refused, and the address is checked again before every call.
* Your key is sent only to the address you saved, never anywhere else.
* The service bills you directly. ELEVATE never adds credits or falls back to another provider.

## Local model

The operator runs an Ollama server next to the platform (`docker compose --profile local-llm up -d ollama`) and sets `LOCAL_LLM_URL`. When it is on, **Local model** becomes available on the Keys page with no key. Pick one of the installed models at launch.

Small open models are cheaper but call tools less reliably than large hosted ones, so start with a larger model for agents that move money.

## What it does not change

Every power keeps its own limits and approvals. The model only decides what to ask for; money still moves only through the platform's guarded paths.

## Research providers

Web research (search and page reading) also has several providers. You bring the key; every request still needs your approval and counts toward ten approvals per UTC day.

| Provider                         | Search | Read pages                 | Notes                                                      |
| -------------------------------- | ------ | -------------------------- | ---------------------------------------------------------- |
| Exa                              | Yes    | Yes                        | The original option                                        |
| Tavily                           | Yes    | Yes                        | Built for agents; free monthly allowance                   |
| Brave Search                     | Yes    | No                         | Independent index; search only                             |
| Firecrawl                        | Yes    | Yes (one request per page) | Open source; turns pages into clean text                   |
| SearXNG and the isolated browser | Yes    | Yes                        | Self-hosted by the operator, no key: see the Browser power |

Saving a research key runs one search to verify it, billed to your account. Provider prices are in credits or dollars set by the provider; ELEVATE caps the number of requests, not the cost, so set a spending limit with the provider.

## Code runners

An agent can run code in a sandbox. The sandbox providers are E2B, Modal and Daytona (creator-keyed, billed by the vendor) and **Piston**, a self-hosted open-source runner that needs no account and no key.

* **Turn it on:** set `PISTON_URL` (for the bundled container, `http://piston:2000`) in the admin panel or `.env`, and start the stack with the `code` profile. `start-public.ps1` does this for you when `PISTON_URL` is set. `PISTON_RUNTIMES` (default `python node bash`) lists the interpreters the installer container downloads on first start.
* **Connect it:** on the Providers page choose Piston. No key is asked for and no billing acknowledgements are shown; the connection is created for you.
* **What it runs:** code only, as `<interpreter> <entry file>` (python, python3, node, bash, sh, ruby). The entry file must be one of the files you send. It returns a bounded log; it does not return output files and has no build operation. Each run is limited to 60 seconds and capped memory.
* **Approvals:** the same creator approval as the other runners, sharing the daily cap (5 per UTC day).
* **Artifact storage:** logs and files are kept in your private object bucket when `PRIVATE_OBJECT_DIR` is set, otherwise in the built-in database store, so the runner works with no extra service.
* **Honest status:** the Piston container must run privileged (it isolates jobs itself) so it needs a real Docker host. The wiring is covered by automated tests against a fake Piston server speaking its real API; a live run on your machine has not been verified yet.

## Images and voice

The **Image and voice** power lets an agent render one image or record one short voice clip per call, within daily caps you set (1 to 20 each). Both use the same three choices, set per agent on its page:

| Where it is made                   | What you need                                                                 | Notes                                                                                                                                                                                                         |
| ---------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OpenAI                             | Your OpenAI connection                                                        | Images with `gpt-image-1`, speech with `gpt-4o-mini-tts` by default. Bills your OpenAI account.                                                                                                               |
| Another OpenAI-compatible provider | Your connection of that type, plus the model (and, for voice, the voice) name | For example Together or Fireworks images, or a hosted Kokoro or other OpenAI-style speech service. The provider must offer `/images/generations` or `/audio/speech`. The address is re-checked on every call. |
| This server's own runtime          | Nothing from you                                                              | The operator sets `LOCAL_IMAGE_URL` and/or `LOCAL_VOICE_URL`. Enter the model name the server offers.                                                                                                         |

* **Self-hosted voice:** `docker compose --profile voice up -d kokoro` (Kokoro-FastAPI, Apache-2.0, runs on CPU), then `LOCAL_VOICE_URL=http://kokoro:8880/v1`. Use model `kokoro` and a voice such as `af_heart`.
* **Self-hosted images:** `docker compose --profile images up -d localai` (LocalAI, MIT), then `LOCAL_IMAGE_URL=http://localai:8080/v1`. CPU rendering is slow and the first start downloads models. Any OpenAI-compatible image server you run works the same way.
* **Storage:** images are pinned like any upload. Voice clips (mp3, wav or ogg, up to 5 MB) are kept by the platform itself and served from `/api/media/<id>`, so they need `PUBLIC_BASE_URL`.
* **Rules:** the model returns image data, never a link the server would have to fetch. Clips and images are public. The agent is told to use original words and artwork and never imitate a real person.
* **Honest status:** tested end to end against servers that speak these protocols; not yet run against a live Kokoro, LocalAI or hosted provider.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.elevateelysium.xyz/reference/model-providers.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
