Skip to content

feat(providers): promote groq, deepseek, mistral, together to first-class defaults (closes #5)#39

Merged
ernestprovo23 merged 1 commit into
mainfrom
feat/first-class-providers
Jun 9, 2026
Merged

feat(providers): promote groq, deepseek, mistral, together to first-class defaults (closes #5)#39
ernestprovo23 merged 1 commit into
mainfrom
feat/first-class-providers

Conversation

@ernestprovo23

Copy link
Copy Markdown
Member

Summary

Implements issue #5: promotes four direct-key, OpenAI-compatible vendors to typed first-class friendly-name defaults — groq, deepseek, mistral, together. Each endpoint URL, key env-var name, and default model id was verified against current vendor docs before adding.

No native adapter was added: all four are OpenAI chat-completions compatible, so each is served by the existing OpenAICompatAdapter. Aggregators/routers (e.g. OpenRouter) are deliberately not promoted to first-class to preserve the no-middleman positioning (PDD §11); they remain available config-only via endpoints:.

Providers added (verified against vendor docs)

Friendly name Base URL Env var Default model id
groq https://api.groq.com/openai/v1/chat/completions GROQ_API_KEY groq/llama-3.3-70b-versatile
deepseek https://api.deepseek.com/v1/chat/completions DEEPSEEK_API_KEY deepseek/deepseek-chat
mistral https://api.mistral.ai/v1/chat/completions MISTRAL_API_KEY mistral/mistral-large-latest
together https://api.together.xyz/v1/chat/completions TOGETHER_API_KEY together/meta-llama/Llama-3.3-70B-Instruct-Turbo

Dropped candidate: fireworks — vendor docs set OPENAI_API_KEY in examples rather than a dedicated FIREWORKS_API_KEY, and no conventional env-var name is clearly documented. Dropped rather than guess (would collide with OpenAI's var). Stays usable config-only via endpoints:.

Single-source-of-truth wiring

Declared once in registry.OPENAI_COMPAT_PROVIDERS with matching adapters.openai_compat.OPENAI_COMPAT_URLS entries. PROVIDER_ENV_VARS, redact() coverage, the import-time drift guard, and conclave providers all derive from it. The drift guard stays green and still fails loudly on a half-registration (verified). redact() covers the new key env vars automatically via the single-source derivation.

Tests (offline, transport-mocked) — 151 → 172

Per new provider: name → URL + model id + env var resolution; end-to-end call_model via mocked transport; missing-key skip; redact() scrubbing the key value out of an error string. Plus a conclave providers listing assertion for all four.

  • python -m pytest -q: 172 passed
  • ruff check .: All checks passed
  • ruff format --check .: clean

Out of scope

config.example.yml's stale "LiteLLM model id" note is left untouched (separate docs cleanup, per issue).

…lass defaults (closes #5)

Promote four direct-key, OpenAI-compatible vendors to typed first-class
friendly-name defaults: groq, deepseek, mistral, together. Each endpoint URL,
key env-var name, and default model id was verified against current vendor docs.

All four are OpenAI chat-completions compatible, so each is served by the
existing OpenAICompatAdapter; no native adapter was added. Aggregators/routers
(e.g. OpenRouter) are deliberately NOT promoted to first-class to preserve the
no-middleman positioning (PDD section 11); they remain config-only via endpoints:.

Wiring follows the single-source-of-truth pattern: providers are declared once in
registry.OPENAI_COMPAT_PROVIDERS with matching entries in
adapters.openai_compat.OPENAI_COMPAT_URLS. PROVIDER_ENV_VARS, redact() coverage,
the import-time drift guard, and conclave providers all derive from it and stay
consistent. The drift guard stays green and still fails on a half-registration.

Tests (offline, transport-mocked): per-provider name -> URL + model id + env var
resolution, end-to-end call_model via mocked transport, missing-key skip, and
redact() scrubbing each new provider's key value out of an error string. Also
asserts conclave providers lists the new providers. 151 -> 172 tests.

Docs: README provider table + extension note, PDD section 5 matrix, section 9 #3
marked LANDED, adapter/module descriptions updated. config.example.yml left
unchanged (separate docs cleanup).
@ernestprovo23 ernestprovo23 merged commit f717621 into main Jun 9, 2026
5 checks passed
@ernestprovo23 ernestprovo23 deleted the feat/first-class-providers branch June 10, 2026 00:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant