Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# fusionAIze Gate Changelog

## v1.12.0 - Unreleased

### Added

- Added a provider source catalog line with startup refresh, dashboard/API summaries, and operator-facing alert actions across `faigate-doctor`, `faigate-provider-probe`, and Quick Setup so model/pricing drift is visible earlier instead of hiding behind stale curated assumptions
- Added explicit Kilo paid workhorse lanes for Sonnet and Opus plus Kilo-specific routing fit scoring, which lets Gate model premium, balanced, and free Kilo traffic without relying on opaque `kilo-auto/*` header behavior
- Added route-preview coverage for Kilo frontier lane selection so operators can see when Gate chose `kilo-opus`, `kilo-sonnet`, or `kilocode` and why
- Added stronger release automation dry-run coverage so the release helper itself is exercised in CI before a tagged release is cut

### Changed

- Hardened release automation end-to-end: local release scripts now validate versions more strictly, verify package metadata coherency, and point to the dedicated `fusionAIze/homebrew-tap` repository instead of assuming a local formula in this repo
- Release artifact publishing now validates tag/version alignment before publishing and reuses prebuilt Python artifacts for PyPI instead of rebuilding a second time in the publish job
- Reframed the legacy `blackbox-free` route as a low-cost burst path rather than a guaranteed free path, because the currently working curated model is not reliably the `:free` SKU for every key
- Updated Kilo defaults and examples to use the current gateway base URL without the stale `/v1` suffix

## v1.11.2 - 2026-03-29

### Changed
Expand Down
14 changes: 7 additions & 7 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ model_shortcuts:
aliases:
- blackbox
- bb
description: BLACKBOX free-tier route
description: BLACKBOX budget burst route (legacy id)
target: blackbox-free
deepseek-chat:
aliases:
Expand Down Expand Up @@ -557,10 +557,10 @@ providers:
backend: openai-compat
base_url: ${BLACKBOX_BASE_URL:-https://api.blackbox.ai}
capabilities:
cost_tier: free
cost_tier: cheap
latency_tier: fast
lane:
benchmark_cluster: free-coding
benchmark_cluster: budget-chat
canonical_model: aggregator/blackbox-grok-code-fast
cluster: budget-general
context_strength: mid
Expand All @@ -571,15 +571,15 @@ providers:
freshness_hint: benchmark and cost assumptions were reviewed recently
freshness_status: fresh
last_reviewed: '2026-03-22'
name: free-burst
quality_tier: free
name: burst
quality_tier: budget
reasoning_strength: mid
review_age_days: 1
route_type: aggregator
same_model_group: aggregator/blackbox-grok-code-fast
tool_strength: mid
max_tokens: 8000
model: blackboxai/x-ai/grok-code-fast-1:free
model: blackboxai/x-ai/grok-code-fast-1
tier: fallback
timeout:
connect_s: 10
Expand Down Expand Up @@ -797,7 +797,7 @@ providers:
kilocode:
api_key: ${KILOCODE_API_KEY}
backend: openai-compat
base_url: ${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway/v1}
base_url: ${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway}
capabilities:
cost_tier: free
latency_tier: balanced
Expand Down
24 changes: 24 additions & 0 deletions docs/FAIGATE-ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,30 @@ The detailed design lives in [Adaptive model orchestration](./ADAPTIVE-ORCHESTRA

The next block should stay disciplined: build on the workstation baseline, keep packaging practical, and avoid turning fusionAIze Gate into a sprawling platform.

## Current release target: `v1.12.0`

The next release should land as a clean operational release, not as another loose pile of runtime slices.

`v1.12.0` should close around three themes that now fit together:

- provider source cataloging and alerting as a first-class operator surface
- clearer aggregator behavior for Kilo and BLACKBOX, especially where "free", "budget", "wallet", and explicit paid lanes are easy to conflate
- hardened release automation after the `v1.11.x` release failures

The release should feel coherent from an operator point of view:

- Quick Setup, Doctor, Provider Probe, Dashboard, and route preview all explain drift or route pressure using the same language
- Kilo explicit Sonnet/Opus lanes are visible as deliberate routing choices instead of hidden aggregator magic
- release prep, tag validation, and publish dry-runs are boring and repeatable again

What is intentionally not in scope for `v1.12.0`:

- the virtual key layer
- gateway-level response caching
- fully automated external provider-source crawling on a long-running schedule

Those stay as follow-on tracks once the operator surfaces, release path, and aggregator semantics are stable enough to trust.

## Shipped: `v1.8.0` – `v1.9.1`

The adaptive model orchestration foundation is fully in place:
Expand Down
6 changes: 3 additions & 3 deletions docs/examples/faigate-multi-provider-stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -108,12 +108,12 @@ routing_policies:
select:
prefer_tiers: ["cheap", "default"]

# Optional additional fallback providers with free-tier or free-model paths:
# Optional additional fallback providers with free-tier or low-cost model paths:
#
# providers:
# kilocode:
# backend: openai-compat
# base_url: "${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway/v1}"
# base_url: "${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway}"
# api_key: "${KILOCODE_API_KEY}"
# model: "z-ai/glm-5:free"
# max_tokens: 8000
Expand All @@ -123,6 +123,6 @@ routing_policies:
# backend: openai-compat
# base_url: "${BLACKBOX_BASE_URL:-https://api.blackbox.ai}"
# api_key: "${BLACKBOX_API_KEY}"
# model: "blackboxai/x-ai/grok-code-fast-1:free"
# model: "blackboxai/x-ai/grok-code-fast-1"
# max_tokens: 8000
# tier: fallback
5 changes: 4 additions & 1 deletion docs/examples/provider-blackbox.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ providers:
backend: openai-compat
base_url: "${BLACKBOX_BASE_URL:-https://api.blackbox.ai}"
api_key: "${BLACKBOX_API_KEY}"
model: "blackboxai/x-ai/grok-code-fast-1:free"
model: "blackboxai/x-ai/grok-code-fast-1"
max_tokens: 8000
tier: fallback

# `blackbox-free` is kept as a legacy provider id for compatibility.
# The current curated route is low-cost, not guaranteed free.

fallback_chain:
- blackbox-free
2 changes: 1 addition & 1 deletion docs/examples/provider-kilocode.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
# explicit key is the more stable operator path.

KILOCODE_API_KEY=replace-me
KILOCODE_BASE_URL=https://api.kilo.ai/api/gateway/v1
KILOCODE_BASE_URL=https://api.kilo.ai/api/gateway
25 changes: 24 additions & 1 deletion docs/examples/provider-kilocode.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
providers:
kilocode:
backend: openai-compat
base_url: "${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway/v1}"
base_url: "${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway}"
api_key: "${KILOCODE_API_KEY}"
model: "z-ai/glm-5:free"
max_tokens: 8000
tier: fallback
kilo-sonnet:
backend: openai-compat
base_url: "${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway}"
api_key: "${KILOCODE_API_KEY}"
model: "anthropic/claude-sonnet-4.6"
max_tokens: 16000
tier: mid
kilo-opus:
backend: openai-compat
base_url: "${KILOCODE_BASE_URL:-https://api.kilo.ai/api/gateway}"
api_key: "${KILOCODE_API_KEY}"
model: "anthropic/claude-opus-4.6"
max_tokens: 32000
tier: mid

fallback_chain:
- kilo-sonnet
- kilo-opus
- kilocode

# Notes
# - Kilo explicit paid lanes let Gate model Sonnet and Opus separately instead of relying on
# `kilo-auto/*` header hints.
# - If Kilo reports `usage.is_byok: true`, the request is not billed to your Kilo balance.
# In that case verify whether a user- or org-scoped BYOK provider key exists, or treat the
# flag as a Kilo-side billing-signal issue until proven otherwise.
103 changes: 97 additions & 6 deletions faigate/lane_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,14 +354,42 @@ def get_active_model_label(canonical_id: str) -> str:
"same_model_group": "aggregator/kilo-glm5-free",
"degrade_to": ["aggregator/blackbox-grok-code-fast", "google/gemini-flash-lite"],
},
"kilo-sonnet": {
"family": "kilo",
"name": "sonnet",
"canonical_model": "anthropic/sonnet-4.6",
"route_type": "aggregator",
"cluster": "quality-workhorse",
"benchmark_cluster": "quality-coding",
"quality_tier": "high",
"reasoning_strength": "high",
"context_strength": "high",
"tool_strength": "high",
"same_model_group": "anthropic/sonnet-4.6",
"degrade_to": ["anthropic/haiku-4.5", "deepseek/chat", "google/gemini-flash"],
},
"kilo-opus": {
"family": "kilo",
"name": "opus",
"canonical_model": "anthropic/opus-4.6",
"route_type": "aggregator",
"cluster": "elite-reasoning",
"benchmark_cluster": "quality-coding",
"quality_tier": "premium",
"reasoning_strength": "high",
"context_strength": "high",
"tool_strength": "high",
"same_model_group": "anthropic/opus-4.6",
"degrade_to": ["anthropic/sonnet-4.6", "openai/gpt-4o", "deepseek/reasoner"],
},
"blackbox-free": {
"family": "blackbox",
"name": "free-burst",
"name": "burst",
"canonical_model": "aggregator/blackbox-grok-code-fast",
"route_type": "aggregator",
"cluster": "budget-general",
"benchmark_cluster": "free-coding",
"quality_tier": "free",
"benchmark_cluster": "budget-chat",
"quality_tier": "budget",
"reasoning_strength": "mid",
"context_strength": "mid",
"tool_strength": "mid",
Expand Down Expand Up @@ -519,6 +547,40 @@ def _lane_binding_with_freshness(binding: dict[str, Any]) -> dict[str, Any]:
"free-tier model availability and path behavior should be revalidated regularly",
],
},
"kilo-sonnet": {
"profile": "kilo-openai-compat",
"compatibility": "aggregator",
"probe_confidence": "medium",
"auth_mode": "bearer",
"probe_strategy": "chat",
"probe_payload_kind": "kilo-chat-minimal",
"probe_payload_text": "ping",
"probe_payload_max_tokens": 1,
"models_path": "",
"chat_path": "/chat/completions",
"supports_models_probe": False,
"notes": [
"aggregator route uses a shallow chat probe instead of assuming /models support",
"paid Kilo routes should be revalidated against current gateway behavior periodically",
],
},
"kilo-opus": {
"profile": "kilo-openai-compat",
"compatibility": "aggregator",
"probe_confidence": "medium",
"auth_mode": "bearer",
"probe_strategy": "chat",
"probe_payload_kind": "kilo-chat-minimal",
"probe_payload_text": "ping",
"probe_payload_max_tokens": 1,
"models_path": "",
"chat_path": "/chat/completions",
"supports_models_probe": False,
"notes": [
"aggregator route uses a shallow chat probe instead of assuming /models support",
"paid Kilo routes should be revalidated against current gateway behavior periodically",
],
},
"blackbox-free": {
"profile": "blackbox-openai-compat",
"compatibility": "aggregator",
Expand All @@ -533,7 +595,10 @@ def _lane_binding_with_freshness(binding: dict[str, Any]) -> dict[str, Any]:
"supports_models_probe": False,
"notes": [
"aggregator route uses a shallow chat probe instead of assuming /models support",
"free-tier route volatility is high; auth and model availability can shift quickly",
(
"low-cost BLACKBOX routes can shift quickly in pricing, auth behavior, "
"or model availability"
),
],
},
}
Expand All @@ -558,10 +623,10 @@ def _lane_binding_with_freshness(binding: dict[str, Any]) -> dict[str, Any]:
},
{
"route_id": "kilocode/anthropic-opus-4.6",
"provider_name": "kilocode-anthropic-opus",
"provider_name": "kilo-opus",
"provider_family": "kilo",
"route_type": "aggregator",
"availability": "catalog",
"availability": "configured",
"route_group": "same-lane",
},
{
Expand All @@ -573,6 +638,32 @@ def _lane_binding_with_freshness(binding: dict[str, Any]) -> dict[str, Any]:
"route_group": "same-lane",
},
],
"anthropic/sonnet-4.6": [
{
"route_id": "anthropic-direct/sonnet-4.6",
"provider_name": "anthropic-sonnet",
"provider_family": "anthropic",
"route_type": "direct",
"availability": "catalog",
"route_group": "same-lane",
},
{
"route_id": "kilocode/anthropic-sonnet-4.6",
"provider_name": "kilo-sonnet",
"provider_family": "kilo",
"route_type": "aggregator",
"availability": "configured",
"route_group": "same-lane",
},
{
"route_id": "openrouter/anthropic-sonnet-4.6",
"provider_name": "openrouter-anthropic-sonnet",
"provider_family": "openrouter",
"route_type": "aggregator",
"availability": "catalog",
"route_group": "same-lane",
},
],
"openai/gpt-4o": [
{
"route_id": "openai-direct/gpt-4o",
Expand Down
50 changes: 43 additions & 7 deletions faigate/provider_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,47 @@
"notes": "Current curated Kilo free-tier model; free and budget tracks can move quickly",
"last_reviewed": "2026-03-19",
},
"kilo-sonnet": {
"recommended_model": "anthropic/claude-sonnet-4.6",
"aliases": ["anthropic/claude-sonnet-4.6", "kilo-auto/frontier", "kilo-auto/balanced"],
"track": "stable",
"offer_track": "gateway-paid",
"provider_type": "aggregator",
"auth_modes": ["api_key", "byok"],
"volatility": "medium",
"evidence_level": "official",
"official_source_url": "https://kilo.ai/docs/gateway/models-and-providers",
"signup_url": "https://kilo.ai/",
"watch_sources": [],
"notes": (
"Kilo paid Sonnet lane; useful as the workhorse path when you want "
"Kilo credits to absorb balanced coding traffic"
),
"last_reviewed": "2026-03-29",
},
"kilo-opus": {
"recommended_model": "anthropic/claude-opus-4.6",
"aliases": ["anthropic/claude-opus-4.6", "kilo-auto/frontier"],
"track": "stable",
"offer_track": "gateway-paid",
"provider_type": "aggregator",
"auth_modes": ["api_key", "byok"],
"volatility": "medium",
"evidence_level": "official",
"official_source_url": "https://kilo.ai/docs/gateway/models-and-providers",
"signup_url": "https://kilo.ai/",
"watch_sources": [],
"notes": (
"Kilo paid Opus lane; useful when expiring Kilo credits should absorb "
"premium reasoning traffic"
),
"last_reviewed": "2026-03-29",
},
"blackbox-free": {
"recommended_model": "blackboxai/x-ai/grok-code-fast-1:free",
"aliases": ["blackboxai/x-ai/grok-code-fast-1:free"],
"track": "free",
"offer_track": "free",
"recommended_model": "blackboxai/x-ai/grok-code-fast-1",
"aliases": ["blackboxai/x-ai/grok-code-fast-1"],
"track": "cheap",
"offer_track": "credit",
"provider_type": "aggregator",
"auth_modes": ["api_key"],
"volatility": "high",
Expand All @@ -129,10 +165,10 @@
"signup_url": "https://cloud.blackbox.ai/",
"watch_sources": [_COMMUNITY_WATCHLIST],
"notes": (
"Current curated BLACKBOX free-tier path; verify often because free "
"offerings can rotate"
"Legacy provider id for the current low-cost BLACKBOX Grok Code Fast route; "
"verify often because pricing and model availability can rotate"
),
"last_reviewed": "2026-03-19",
"last_reviewed": "2026-03-29",
},
"openai-gpt4o": {
"recommended_model": "gpt-4o",
Expand Down
Loading
Loading