fix: prevent duplicate AI models in selector and fix TypeScript errors
Some checks failed
Release Binaries / release (push) Has been cancelled

Changes:
1. Enhanced removeDuplicateProviders() to filter out duplicate providers from SDK
   when the same provider exists in extras (qwen-oauth, zai, ollama-cloud, antigravity)
2. Added logic to remove any Qwen-related SDK providers when qwen-oauth is authenticated
3. Fixed missing setActiveParentSession import in instance-shell2.tsx

These changes ensure:
- No duplicate models appear in the model selector
- Qwen OAuth models don't duplicate with any SDK Qwen providers
- TypeScript compilation passes successfully
This commit is contained in:
Gemini AI
2025-12-28 03:27:31 +04:00
Unverified
parent babce0e0a9
commit 38cb8bcb0c
6 changed files with 777 additions and 305 deletions

View File

@@ -331,20 +331,32 @@ async function fetchExtraProviders(): Promise<Provider[]> {
}
function removeDuplicateProviders(base: Provider[], extras: Provider[]): Provider[] {
// Collect all extra provider IDs and model IDs to prevent duplicates
const extraProviderIds = new Set(extras.map((provider) => provider.id))
const extraModelIds = new Set(extras.flatMap((provider) => provider.models.map((model) => model.id)))
if (!extras.some((provider) => provider.id === "opencode-zen")) {
return base
}
return base.filter((provider) => {
if (provider.id === "opencode-zen") return false
if (provider.id === "opencode" && provider.models.every((model) => extraModelIds.has(model.id))) {
// Remove base providers that have the same ID as an extra provider
// This prevents qwen-oauth, zai, ollama-cloud, antigravity duplicates
if (extraProviderIds.has(provider.id)) {
return false
}
// Special case: remove opencode if opencode-zen is present and covers all models
if (provider.id === "opencode" && extraProviderIds.has("opencode-zen") &&
provider.models.every((model) => extraModelIds.has(model.id))) {
return false
}
// Remove any qwen-related SDK providers when qwen-oauth is present
if (extraProviderIds.has("qwen-oauth") &&
(provider.id.toLowerCase().includes("qwen") ||
provider.models.some((m) => m.id.toLowerCase().includes("qwen")))) {
return false
}
return true
})
}
interface SessionForkResponse {
id: string
title?: string