Models & Pricing

Manage LLM providers and models, Sync models from external registries, run health checks, and configure per-organization API keys for independent billing.

Provider Management

Entity Enricher supports a wide range of LLM providers. Each provider can have multiple models with individual pricing, capabilities, and configuration.

Providers and models sit side by side because that is how they are managed: the API key belongs to the provider, pricing and capabilities to each model.

Supported Providers

AnthropicOpenAIGoogleGoogle VertexMistralDeepSeekGroqTogether AIFireworks AICoherexAIMoonshotZ.AINVIDIA NIMOllamaAzure OpenAI

Provider Types

StandardMost providers (Anthropic, OpenAI, Mistral, etc.) use standard API endpoints with bearer token authentication. A Standard provider can also point at a custom OpenAI-compatible endpoint — see Custom & Corporate Endpoints below.
AzureAzure OpenAI uses custom deployment endpoints with API version configuration.
OllamaSelf-hosted Ollama instances with custom endpoint URLs and automatic model discovery.

Custom & Corporate Endpoints

Many teams route LLM traffic through a corporate AI gateway, a regional endpoint, or a provider that isn't built in — for example an enterprise LiteLLM proxy, Cloudflare AI Gateway, or Alibaba DashScope (for Qwen models). You add these as their own Standard (OpenAI-compatible)provider with a custom base URL.

Adding a gateway provider

  1. Create a provider with a name that isn't one of the built-ins (e.g. acme-openai-gw). Built-in names like openai or anthropic are reserved.
  2. Choose the Standard (OpenAI-compatible) type and fill in Custom API endpoint (base URL) — e.g. https://gateway.example.com/v1. This field is required for any provider Entity Enricher has no built-in client for.
  3. Add the gateway's key as an Organization key for that provider (API Keys → AI Provider Keys), so it bills and rotates per organization.
  4. Add the models the gateway serves. The model identifier is sent verbatim, so it must match exactly what the gateway expects.

Good to know

  • Built-in providers hide the endpoint field. Anthropic, OpenAI, Mistral, and the other recognised providers already know their endpoint, so there is nothing to configure. If a custom provider later becomes built-in, its stored endpoint stays visible so you can clear it.
  • Public HTTPS only. Endpoints must be public https:// URLs. Loopback and private ranges (localhost, 10.x, 192.168.x) are rejected to prevent SSRF — a self-hosted server must be reachable over the internet. For a local Ollama, use the dedicated Ollama tunnel instead.
  • OpenAI-compatible wire format. Calls to a custom provider are routed through the OpenAI-compatible API, so the endpoint must speak the OpenAI /v1 protocol (chat completions, /models).
  • Test connection probes {endpoint}/models to verify the key and base URL before you run an enrichment.

Rate Budgets & Concurrency (per key)

Every call made with an API key is paced under the budget the provider grants that key — requests and tokens per minute, per model — so a fan-out never runs into 429 errors. The budget is not typed in: it is read off the provider's own response headers, learned from a rejection when the provider states nothing, or, as a last resort, typed by an owner.

  • Read from the provider. Mistral, OpenAI, Azure, Groq, xAI, Anthropic and Cohere state the key's limits on every response; the first call to a model learns them and the calls that follow respect them.
  • Learned when the provider is silent. Google, DeepSeek, Moonshot, Z.AI, Together and Alibaba state nothing: a rejection teaches a budget of 80% of what was sent in the last minute, which then grows back slowly. Owners can also type a rule from the API Keys page.
  • Bounded per key and model. Every organization key and the shared global key has its own budgets, per model — on Mistral one key may allow 15 requests a minute on one model and 1000 on another.
  • Concurrency follows. The number of calls in flight is derived from that budget and the observed latency. The provider's Max concurrent calls per key setting is only for targets that never answer 429 but choke on parallel calls, such as a laptop running Ollama.
  • Visible per key. The Rate limits action on a key lists its rules, where each came from, and the live usage of the current minute. A capability probe also records the provider's stated limits in the Models table's TPM and RPM columns.

This is separate from your plan's max concurrent jobs limit, which caps how many enrichment jobs your whole organization runs at once across all providers.

Model Capabilities

Each model tracks its capabilities, which are displayed as icons in the model selector:

CapabilityDescription
VisionCan process image and visual inputs
Tool CallsSupports function calling / tool use
Audio InputCan process audio inputs
PDF InputCan process PDF documents
Prompt CachingSupports prompt caching for cost reduction
ReasoningExtended thinking / chain-of-thought capabilities
EmbeddingsTurns text into a vector instead of answering — what semantic IDs are resolved with. Embedding models are their own family, with their own vector size, and never appear in an enrichment picker

Letting the platform pick the model

Naming a model is optional. Enrichment, schema generation and sample generation all accept auto — and treat an omitted model as auto — which is resolved on the server, per task, at the moment the job starts. The run reports which model it picked, so automatic never means opaque.

1. Your organization's pinned default

Owners can pin a preferred model per task under Settings → Organization → Model selection. If one is set for the task at hand, it wins.

2. Otherwise, the best measured model

Failing a pin, the pick is the model with the best blended score from your scoring-source benchmarks — your own measurements of quality, speed and cost on your own schemas. With no scoring source at all the request is refused rather than guessed at.

3. Narrowed by what the job needs

Turning on web search, or attaching a document that must be sent as-is, restricts the candidates to models that can actually do it — and if none qualifies, you get an explicit error instead of a silent downgrade.

  1. 1Quality, speed and cost, scored by your own benchmarks
  2. 2Leave it on Auto, or pin one model for this task
  3. 3Each task shows what Auto resolves to right now, and its score
The weights are set per task, so schema generation can insist on quality while enrichment leans on cost. A model showing dashes instead of scores has never been measured here, and Auto never picks it.

A model can also be barred from one task without being deactivated: a model that enriches well but generates poor schemas can be hidden from the schema and sample generation pickers only, either for your organization or globally by an administrator. It stays fully available everywhere else — a softer instrument than the deactivation below.

Automatic Pricing Sync

System Admin

Keep model pricing up to date by syncing from external registries. The sync process detects new models, price changes, and removed models automatically.

LiteLLM Registry

The default pricing source. Fetches from LiteLLM's community-maintained registry on GitHub with real API model names, pricing, context lengths, and capabilities.

Covers ~30 providers. Does not include display names, benchmarks, or generation speed.

PricePerToken

An alternative source from pricepertoken.com. Includes display names, benchmarks (coding and math scores), and generation speed (tokens per second).

Covers ~20 providers. Provides richer metadata than LiteLLM.

Z.AI

An official authenticated catalog for GLM model identifiers, with pricing parsed directly from Z.AI documentation and capability gaps researched there.

Replaces Z.AI entries previously imported from LiteLLM and PricePerToken.

Sync Process

  1. Dry-run preview — See what will change before applying. View new models, price updates, and deactivations.
  2. Source-scoped matching — Each source only affects models from that source. Manual models are never touched.
  3. Stable sync keys — Models are matched by a stable identifier, not by name. You can rename models without breaking sync.
  4. Transactional apply — All changes are applied in a single database transaction for consistency.
  5. Auto-provider creation — If a synced model belongs to an unknown provider, the provider is created automatically.

Model Health Checks

Proactively validate whether models are reachable by running a minimal health check prompt. This catches broken models before users encounter errors during enrichment.

PassModel responds successfully. If it was previously auto-deactivated, it is reactivated.
Not FoundModel returns a “not found” error. It is automatically deactivated to prevent future failures.
Other ErrorAuth errors, timeouts, or rate limits are reported but do not trigger deactivation.

Health checks can be run on all models, a specific provider's models, or a single model. Results stream in real time via SSE with a progress bar showing pass/fail counts.

Auto-Deactivation

When an enrichment call fails with a “model not found” error, the model is automatically deactivated to prevent repeated failures. This happens in real time during normal enrichment operations.

Deactivation ReasonSet ByAuto-Reactivated?
Model Not FoundEnrichment errors, health checks, or a capability probe no route answersYes (by pricing sync or validation)
No Structured OutputCapability probe: neither the tool nor the native channel on any reachable routeYes, by a later capability probe only
Sync RemovedPricing sync (model disappeared)Yes (if model reappears in registry)
ManualAdmin toggle in UINo (manual reactivation only)

Bring Your Own Key (BYOK)

Organizations can configure their own LLM provider API keys for independent billing and usage tracking. The system uses a two-tier key resolution with LRU selection:

1st
Organization Key Pool

Per-organization keys configured in the API Keys page. Supports multiple keys per provider with LRU rotation. Encrypted with Fernet.

2nd
Global Key Pool

System-wide keys managed by administrators. Shared across all organizations. Also supports multiple keys per provider with LRU rotation.

Each enrichment records which key was used, so you can track costs per key. Keys include health check support and usage counters. Within a pool, the enabled key with the oldest last-used timestamp is picked next; a key leaves the rotation only when you disable it by hand, so a provider error never silently removes a key from service. Learn how to manage keys in the API Keys guide.

Import & Export

Export your entire provider and model configuration as JSON for backup or transfer to another instance. Importing is always an upsert: existing providers and models are matched by name and updated in place, while new ones are added — nothing is deleted.

The export includes provider settings, model configurations, pricing, capabilities, and the canonical model specs — but never API keys, which are stored separately. After importing, configure API keys separately. System admins back up the full global catalog; organization owners export and import only their own organization’s providers and models — the shared global catalog can’t be created or edited through import.

Public Model Catalog

The models page presents the global catalog to anyone: vendor pricing, measured capabilities, and the scores every model earned on the benchmark scenarios published as global scoring sources. It reads two static JSON files that the nightly model refresh rewrites, and that you can download and reuse. A model the provider no longer serves (deactivated as “model not found”) is left out; every other model of the catalog is listed.

Files

  • /data/models.json — the table: one entry per provider × model, with lookup tables for providers, scenarios and specs.
  • /data/benchmarks.json — every public benchmark result, grouped by model key.

Both are served with an ETag and a one-hour public cache, gzip-encoded when the client accepts it. The version field increments on any change a consumer would have to adapt to.

Fields of models.json

generated_at, counts, default_weightsWhen the file was written, how many models, providers and scenarios it holds, and the quality / speed / cost blend (percent) behind every overall score.
providers[], scenarios[], specs{}Lookup tables: models reference a provider and the scenarios by index; specs are the public benchmark scores of the weights (intelligence, coding, math, and the rest under extra), keyed by canonical key so resellers of one model share them.
models[].key, model, display_name, canonical_keyThe composite key the API accepts (provider::model), the raw model id, its label, and the cross-provider identity.
models[].pricingVendor list prices in USD per million tokens: input, output, cache_read, cache_write, cache_write_1h, reasoning_output, plus web_search_per_query with its unit. Before any plan commission.
models[].capabilities[]The flags that hold: vision, pdf_input, audio_input, audio_output, video_input, tool_calls, tool_choice, response_schema, strict_structured_output, reasoning, reasoning_effort, web_search, prompt_caching, embeddings, requires_streaming. A missing flag is false or unmeasured.
models[].context_length, max_input_tokens, max_output_tokens, deprecation_date, latencyLimits, the vendor's retirement date when announced, and the scraped latency figures (tokens per second, time to first token).
models[].enrichment_capable, disabled_tasks[]Whether the model has a structured-output channel at all, and the tasks the app never offers it for (classification and arbitration need tool calls; schema and sample generation follow the schema-generation gate).
models[].scores{task}Per task type (enrichment, schema_generation, sample_generation): the mean quality, speed and cost over the public scenarios of that task, the overall under the default weights, and the scenario indexes. Speed and cost are relative to the other models on the same scenario.

How the quality, speed and cost scores are computed is explained in Benchmark Scoring.

Next Steps