mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
refactor(coderd/x/chatd): remove dead model-routing dispatch shim (#26942)
Follow-up to #26862 ("remove direct chat routing"), which collapsed the routing discriminated union into a single `aiGatewayModelRoute` but left a one-path dispatch shim behind in `model_routing.go`. Removes `resolveModelRouteForConfig`/`resolveModelRouteForProviderType`/`newModel` wrapper functions that did nothing but call their `*AIGateway*` counterparts, and renames the `*AIGateway*` targets to take over those names directly. Also collapses a redundant if/else in `title_override.go` where both branches called the same function with the same effective argument, and has `chatutil.NormalizedStringPointer` delegate to the existing `coderd/util/strings.EmptyToNil` instead of reimplementing empty-string-to-nil logic. No behavior change. <details> <summary>Investigation notes / decision log</summary> Two independent read-only investigations were run over `coderd/x/chatd` looking for cleanup opportunities following #26862: one focused on residue from that PR specifically, one a general over-engineering pass on the whole package. Both independently converged on the `model_routing.go` shim as the top finding (verified zero divergent call sites). Other candidates considered and explicitly deferred/rejected for this PR: - Renaming away the vestigial `AIGateway` prefix package-wide: cosmetic-only, touches many call sites, skipped. - Inlining the `chatcost` subpackage into `chatd`: unrelated to #26862, skipped. - Deleting the deprecated `AIGatewayRoutingEnabled` deployment flag: confirmed dead/no-op, but intentionally kept as a back-compat shim per #26862; removal should follow the same deprecation cadence as other deprecated deployment options, as a separate, differently-timed change. - Folding `chatutil` entirely into `chatprovider`/`chatopenai`: `NormalizedStringPointer` overlapped with `coderd/util/strings.EmptyToNil` (now reused), but `NormalizedEnumValue` has no equivalent elsewhere in the repo and still has 2 real call sites, so the package stays. </details> --- Generated by Coder Agents on behalf of @johnstcn.
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
package chatutil
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"strings"
|
||||
|
||||
stringutil "github.com/coder/coder/v2/coderd/util/strings"
|
||||
)
|
||||
|
||||
// NormalizedStringPointer trims a string pointer and returns nil for nil or
|
||||
// empty values.
|
||||
@@ -8,11 +12,7 @@ func NormalizedStringPointer(value *string) *string {
|
||||
if value == nil {
|
||||
return nil
|
||||
}
|
||||
trimmed := strings.TrimSpace(*value)
|
||||
if trimmed == "" {
|
||||
return nil
|
||||
}
|
||||
return &trimmed
|
||||
return stringutil.EmptyToNil(strings.TrimSpace(*value))
|
||||
}
|
||||
|
||||
// NormalizedEnumValue returns the canonical allowed value matching value after
|
||||
|
||||
@@ -52,31 +52,6 @@ func (p *Server) enabledAIProviderByID(ctx context.Context, providerID uuid.UUID
|
||||
return provider, nil
|
||||
}
|
||||
|
||||
func (p *Server) resolveModelRouteForConfig(
|
||||
ctx context.Context,
|
||||
ownerID uuid.UUID,
|
||||
modelConfig database.ChatModelConfig,
|
||||
) (aiGatewayModelRoute, error) {
|
||||
return p.resolveAIGatewayModelRouteForConfig(ctx, ownerID, modelConfig)
|
||||
}
|
||||
|
||||
func (p *Server) resolveModelRouteForProviderType(
|
||||
ctx context.Context,
|
||||
ownerID uuid.UUID,
|
||||
providerType string,
|
||||
) (aiGatewayModelRoute, error) {
|
||||
return p.resolveAIGatewayModelRouteForProviderType(ctx, ownerID, providerType)
|
||||
}
|
||||
|
||||
func (p *Server) newModel(
|
||||
ctx context.Context,
|
||||
req modelClientRequest,
|
||||
route aiGatewayModelRoute,
|
||||
opts modelBuildOptions,
|
||||
) (fantasy.LanguageModel, error) {
|
||||
return p.newAIGatewayModel(ctx, req, route, opts)
|
||||
}
|
||||
|
||||
func newLanguageModel(
|
||||
providerHint string,
|
||||
modelName string,
|
||||
|
||||
@@ -110,7 +110,7 @@ func isOpenRouterLikeAIGatewayProvider(provider database.AIProvider) bool {
|
||||
return host == "openrouter.ai" || strings.HasSuffix(host, ".openrouter.ai")
|
||||
}
|
||||
|
||||
func (p *Server) newAIGatewayModel(
|
||||
func (p *Server) newModel(
|
||||
_ context.Context,
|
||||
req modelClientRequest,
|
||||
route aiGatewayModelRoute,
|
||||
@@ -267,7 +267,7 @@ func (p *Server) resolveAIGatewayRoute(
|
||||
return newAIGatewayModelRoute(provider, modelProviderHint, auth), nil
|
||||
}
|
||||
|
||||
func (p *Server) resolveAIGatewayModelRouteForConfig(
|
||||
func (p *Server) resolveModelRouteForConfig(
|
||||
ctx context.Context,
|
||||
ownerID uuid.UUID,
|
||||
modelConfig database.ChatModelConfig,
|
||||
@@ -279,7 +279,7 @@ func (p *Server) resolveAIGatewayModelRouteForConfig(
|
||||
return p.resolveAIGatewayRoute(ctx, ownerID, provider, string(provider.Type))
|
||||
}
|
||||
|
||||
func (p *Server) resolveAIGatewayModelRouteForProviderType(
|
||||
func (p *Server) resolveModelRouteForProviderType(
|
||||
ctx context.Context,
|
||||
ownerID uuid.UUID,
|
||||
providerType string,
|
||||
|
||||
@@ -54,18 +54,7 @@ func (p *Server) resolveTitleGenerationModelOverride(
|
||||
chat.OwnerID,
|
||||
p.resolveModelConfigAndNormalizedProvider,
|
||||
func(ctx context.Context, ownerID uuid.UUID, aiProviderID uuid.UUID) (chatprovider.ProviderAPIKeys, error) {
|
||||
if aiProviderID == uuid.Nil {
|
||||
resolvedProviderKeys, err := p.resolveUserProviderAPIKeys(ctx, ownerID, uuid.Nil)
|
||||
if err != nil {
|
||||
return chatprovider.ProviderAPIKeys{}, err
|
||||
}
|
||||
return resolvedProviderKeys, nil
|
||||
}
|
||||
resolvedProviderKeys, err := p.resolveUserProviderAPIKeys(ctx, ownerID, aiProviderID)
|
||||
if err != nil {
|
||||
return chatprovider.ProviderAPIKeys{}, err
|
||||
}
|
||||
return resolvedProviderKeys, nil
|
||||
return p.resolveUserProviderAPIKeys(ctx, ownerID, aiProviderID)
|
||||
},
|
||||
modelOverrideFailureModeHard,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user