mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: avoid an errant license warning banner on new deployments that d… (#26239)
Problem: CODER_AI_GATEWAY_ENABLED defaulted to true, which both started the in-memory gateway and enabled the licensed FeatureAIBridge. As a result, deployments that never configured AI Gateway saw a spurious "AI Governance add-on is required" warning whenever they had an older (non-add-on) Premium license, since the feature was enabled-and-entitled by default. Fix: Decouple "external AI Gateway API enabled" from "in-memory daemon running," so the external/licensed surface is off by default while Coder Agents retain access by default.
This commit is contained in:
+9
-4
@@ -1053,10 +1053,15 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
|
||||
// dispatch LLM requests via the in-process transport without
|
||||
// crossing the gated /api/v2/aibridge HTTP route. The HTTP route
|
||||
// itself is registered (and license-gated) only by enterprise/coderd;
|
||||
// in AGPL builds it does not exist at all. The daemon starts here
|
||||
// unconditionally when the bridge feature is enabled by config so
|
||||
// chatd can use it regardless of license entitlement.
|
||||
if vals.AI.BridgeConfig.Enabled.Value() {
|
||||
// in AGPL builds it does not exist at all.
|
||||
//
|
||||
// The daemon must run whenever either consumer needs it: the
|
||||
// external/licensed AI Gateway HTTP API (CODER_AI_GATEWAY_ENABLED)
|
||||
// or Coder Agents routing chat traffic through the in-process
|
||||
// transport (CODER_CHAT_AI_GATEWAY_ROUTING_ENABLED). Agents get
|
||||
// access regardless of license entitlement; the external HTTP
|
||||
// route stays license-gated.
|
||||
if vals.AI.BridgeConfig.Enabled.Value() || vals.AI.Chat.AIGatewayRoutingEnabled.Value() {
|
||||
aibridgeReg := prometheus.WrapRegistererWithPrefix("coder_aibridged_", coderAPI.PrometheusRegistry)
|
||||
aibridgeMetrics := aibridge.NewMetrics(aibridgeReg)
|
||||
aibridgeProviders, _, err := BuildProviders(aibridgeInitCtx, options.Database, vals.AI.BridgeConfig, logger.Named("aibridge.providers"), aibridgeMetrics)
|
||||
|
||||
+1
-1
@@ -183,7 +183,7 @@ AI GATEWAY OPTIONS:
|
||||
Length of time to retain data such as interceptions and all related
|
||||
records (token, prompt, tool use).
|
||||
|
||||
--ai-gateway-enabled bool, $CODER_AI_GATEWAY_ENABLED (default: true)
|
||||
--ai-gateway-enabled bool, $CODER_AI_GATEWAY_ENABLED (default: false)
|
||||
Whether to start an in-memory AI Gateway instance.
|
||||
|
||||
--ai-gateway-max-concurrency int, $CODER_AI_GATEWAY_MAX_CONCURRENCY (default: 0)
|
||||
|
||||
+4
-4
@@ -779,8 +779,8 @@ chat:
|
||||
aibridge:
|
||||
# Deprecated: use --ai-gateway-enabled or CODER_AI_GATEWAY_ENABLED instead.
|
||||
# Whether to start an in-memory aibridged instance.
|
||||
# (default: true, type: bool)
|
||||
enabled: true
|
||||
# (default: false, type: bool)
|
||||
enabled: false
|
||||
# Deprecated: use --ai-gateway-openai-base-url or CODER_AI_GATEWAY_OPENAI_BASE_URL
|
||||
# instead. The base URL of the OpenAI API.
|
||||
# (default: https://api.openai.com/v1/, type: string)
|
||||
@@ -878,8 +878,8 @@ aibridge:
|
||||
circuit_breaker_max_requests: 3
|
||||
ai_gateway:
|
||||
# Whether to start an in-memory AI Gateway instance.
|
||||
# (default: true, type: bool)
|
||||
enabled: true
|
||||
# (default: false, type: bool)
|
||||
enabled: false
|
||||
# Deprecated: manage AI Providers from the Coder UI or HTTP API. If set, this
|
||||
# option seeds provider configuration at startup only exactly once. It will not be
|
||||
# used in service runtime. The base URL of the OpenAI API.
|
||||
|
||||
Reference in New Issue
Block a user