feat(providers): add Fireworks AI as preferred provider
Bundle Fireworks AI as a first-class BYOK provider across the CLI, web/TUI, and desktop onboarding. - New model-provider plugin with attribution headers (HTTP-Referer / X-Title) so Fireworks can attribute Hermes traffic; PAYG-safe default aux + fallback models (accounts/fireworks/models/...), IDs tracking fw-ai/fireconnect. - Registered in CANONICAL_PROVIDERS so it appears in the CLI/web/TUI pickers. - Alias wiring (fireworks-ai, fw) into both CLI resolvers. - First-class wiring: OPTIONAL_ENV_VARS, HERMES_OVERLAYS (FIREWORKS_BASE_URL override), doctor env hints. Live catalog + model_metadata are auto-derived. - doctor: treat Fireworks' native slash-form IDs (accounts/fireworks/...) as valid, not aggregator vendor prefixes, so it no longer tells Fireworks users to switch to openrouter or drop the prefix. - picker: plugin providers with no static curated list now lead with their profile fallback_models, so the default is an agentic chat model instead of whatever the live catalog returns first (Fireworks listed an image model, flux-*, ahead of its chat models). - Desktop onboarding: Fireworks as a RECOMMENDED hero card with the official Fireworks logomark and a brand-purple badge, routing to the BYOK key form; i18n in en/ja/zh/zh-hant. - Tests: profile contract, first-class wiring (both resolvers, overlay, config, doctor incl. the slash-form regression, aux headers, credentials), discovery spot-check, and a live smoke test driven through the Hermes runtime. Fire Pass (fpk_) support is coming soon; the future wiring is kept as a commented-out scaffold in the plugin.
This commit is contained in:
committed by
Teknium
parent
8041be7954
commit
c97d9a4c07
+14
-1
@@ -1051,6 +1051,9 @@ class ProviderEntry(NamedTuple):
|
||||
|
||||
CANONICAL_PROVIDERS: list[ProviderEntry] = [
|
||||
ProviderEntry("nous", "Nous Portal", "Nous Portal (Everything your agent needs, 300+ models with bundled tool use)"),
|
||||
# Fireworks AI — preferred BYOK inference partner. Sits directly below Nous
|
||||
# Portal (Nous's own provider stays first); everything else follows.
|
||||
ProviderEntry("fireworks", "Fireworks AI", "Fireworks AI (Fastest inference for production AI, 300+ models, one API key)"),
|
||||
ProviderEntry("openrouter", "OpenRouter", "OpenRouter (Pay-per-use API aggregator)"),
|
||||
ProviderEntry("moa", "Mixture of Agents", "Mixture of Agents (named presets; aggregator acts after reference models)"),
|
||||
ProviderEntry("novita", "NovitaAI", "NovitaAI (Cloud: Model API, Agent Sandbox, GPU Cloud)"),
|
||||
@@ -1243,6 +1246,8 @@ _PROVIDER_ALIASES = {
|
||||
"arceeai": "arcee",
|
||||
"gmi-cloud": "gmi",
|
||||
"gmicloud": "gmi",
|
||||
"fireworks-ai": "fireworks",
|
||||
"fw": "fireworks",
|
||||
"minimax-china": "minimax-cn",
|
||||
"minimax_cn": "minimax-cn",
|
||||
"minimax-portal": "minimax-oauth",
|
||||
@@ -2491,7 +2496,15 @@ def provider_model_ids(provider: Optional[str], *, force_refresh: bool = False)
|
||||
# live API is the authoritative catalog, so they merge
|
||||
# live-first — live entries lead and stale curated entries
|
||||
# no longer pollute the top of the picker. (#49129)
|
||||
curated = list(_PROVIDER_MODELS.get(normalized, []))
|
||||
#
|
||||
# Plugin providers with no static _PROVIDER_MODELS entry fall
|
||||
# back to the profile's curated fallback_models so their
|
||||
# agentic picks lead the picker instead of whatever the live
|
||||
# catalog happens to return first (e.g. Fireworks lists an
|
||||
# image model, flux-*, ahead of its chat models).
|
||||
curated = list(_PROVIDER_MODELS.get(normalized, [])) or list(
|
||||
_p.fallback_models or ()
|
||||
)
|
||||
if curated:
|
||||
if normalized in _LIVE_FIRST_PICKER_PROVIDERS:
|
||||
primary, secondary = live, curated
|
||||
|
||||
Reference in New Issue
Block a user