Models

Pointing the agent at your own OpenAI-compatible or Anthropic-compatible endpoint — and the two rules that trip everyone up.

This tab is for your own models. Anything with an OpenAI-compatible or Anthropic-compatible API — Groq, OpenRouter, Together, Fireworks, DeepSeek, a Claude proxy, a model running locally under Ollama, your company's internal gateway — becomes a model you can pick in any conversation.

It isn't where you choose which model a conversation uses; that's the picker in the chat composer. It's where you make one available in the first place.

→ Choosing the model

Adding one#

Add model opens a form. Four fields are required — Name, Base URL, Model ID, and API Key — and the Create button stays greyed out until all four are filled. It doesn't tell you which one is missing, so if it won't light up, check the key.

Name is yours; it's what appears in the model picker. Llama 3.3 70B (Groq).

Provider preset is a shortcut, not a setting. Picking one fills in the Base URL; the control is just a mirror of that field, so editing the URL by hand changes what it shows. Nothing separate is stored.

Base URL is the field that goes wrong, because the rule inverts depending on the protocol below it:

  • OpenAI-compatible — include the version path. https://api.groq.com/openai/v1, not https://api.groq.com. The URL is used exactly as you typed it.
  • Anthropic (Messages API) — leave the version path off. https://api.kie.ai/claude, not .../v1. Semantix appends the rest.

Every shipped preset already has the OpenAI form right, so if you started from one, don't add to it.

Model ID is the provider's exact model string, sent verbatim: llama-3.3-70b-versatile. A typo here won't be caught until you use it.

API protocol picks between the two shapes above. Choose Anthropic for Claude-compatible sources.

API Key is masked, with an eye to reveal it.

Alias, Context window and the two $/1M tok fields are optional. Context window sizes the context gauge in chat — leave it blank and Semantix assumes 128,000, which will read wrong for a model with a different window. The prices are a fallback: most OpenAI-compatible endpoints don't report billing, so Semantix works cost out from your numbers instead. If the provider does report a cost, that wins.

Fill neither and cost shows as a dash. Fill only one and the other side is counted as free — you get a confidently wrong low number rather than a blank.

Note

The three number fields quietly ignore anything that isn't a positive number — including 0. A rejected value isn't flagged; the field simply behaves as if you'd left it empty.

Nothing is checked when you save#

There is no test button, and no verification of any kind happens at save time. A wrong base URL, a dead key, a model id that doesn't exist — all three save cleanly and appear in your picker as though everything is fine.

You find out at first use. Select the model, send a message, and the turn fails in the chat with the provider's error. That's the only place the truth surfaces, so when a new model doesn't work, read the failed turn rather than coming back here.

Note

If saving itself fails, the message you get is just the HTTP status — HTTP 500: Internal Server Error. It won't say why.

Editing and deleting#

Edit reopens the form with everything filled in except the key, which is deliberately blank and marked •••••••• (unchanged). Leave it alone to keep the stored key; type a new one to rotate it. There's no way to read back a key you've saved.

Delete asks once and removes it immediately. No undo.

If you delete a model a conversation was using, that conversation doesn't error — the picker quietly switches it to Claude Code, not to another of your custom models. This is easy to miss, so if a conversation's answers suddenly change character, check which model it's on. Scheduled and background runs are clearer: they fail with model "<id>" is not in custom-models.json — was it removed from your Semantix models?

Where your keys are stored#

Your models and their keys are written to a plain JSON file on your machine:

~/.semantix/USER/custom-models.json

The keys are stored in plain text. On Linux and macOS the file is created readable only by your own user account; on Windows it gets no special permissions. Nothing is encrypted, and the keys are readable by anything that can reach the on-device Semantix server.

Treat that file like any other secrets file. Use scoped, revocable keys where your provider offers them, and remember that a home-directory backup or a synced home directory carries your keys with it.

Because this file sits in ~/.semantix/USER/, your models are available in every project on this machine — and don't travel to another one.

What this tab doesn't do#

It doesn't list or configure Claude Code, which is always available and needs nothing here. It doesn't set temperature, token limits or system prompts. It doesn't import a provider's catalogue — every field is typed by hand. And there's no search, sorting, import or export.

Note

Manage Team, the second sub-tab, isn't active yet. You can set a Primary and Secondary model there and they'll be remembered, but nothing uses them today.