transformModelForProvider only handled github-copilot provider, leaving google provider models untransformed. This caused ProviderModelNotFoundError when google/gemini-3-flash was sent to the API (correct ID is gemini-3-flash-preview). Changes: - Add google provider to transformModelForProvider with idempotent regex negative lookahead to prevent double -preview suffix - Fix category-default path in model-resolution-pipeline when availableModels is empty but connected provider exists - Fix getFirstFallbackModel first-run path that constructed raw model IDs without transformation - Fix github-copilot provider gemini transforms to also use idempotent regex (was vulnerable to double-transform) - Extract transformModelForProvider to shared module (single source of truth, imported by cli and shared layers) - Add 20 new test cases: unit tests for both providers, runtime integration tests for category-default and fallback-chain paths, double-transform prevention for both providers
19 lines
705 B
TypeScript
19 lines
705 B
TypeScript
export function transformModelForProvider(provider: string, model: string): string {
|
|
if (provider === "github-copilot") {
|
|
return model
|
|
.replace("claude-opus-4-6", "claude-opus-4.6")
|
|
.replace("claude-sonnet-4-6", "claude-sonnet-4.6")
|
|
.replace("claude-sonnet-4-5", "claude-sonnet-4.5")
|
|
.replace("claude-haiku-4-5", "claude-haiku-4.5")
|
|
.replace("claude-sonnet-4", "claude-sonnet-4")
|
|
.replace(/gemini-3-pro(?!-)/g, "gemini-3-pro-preview")
|
|
.replace(/gemini-3-flash(?!-)/g, "gemini-3-flash-preview")
|
|
}
|
|
if (provider === "google") {
|
|
return model
|
|
.replace(/gemini-3-pro(?!-)/g, "gemini-3-pro-preview")
|
|
.replace(/gemini-3-flash(?!-)/g, "gemini-3-flash-preview")
|
|
}
|
|
return model
|
|
}
|