Revert "fix: resolve chat conversation hanging and stream interruption issues (#1971)"

This reverts commit e68593f22d.
This commit is contained in:
Stijnus
2025-09-07 00:14:13 +02:00
committed by Stijnus
parent e68593f22d
commit 37217a5c7b
61 changed files with 1432 additions and 8811 deletions

View File

@@ -20,18 +20,6 @@ export default class AmazonBedrockProvider extends BaseProvider {
};
staticModels: ModelInfo[] = [
{
name: 'anthropic.claude-sonnet-4-20250514-v1:0',
label: 'Claude Sonnet 4 (Bedrock)',
provider: 'AmazonBedrock',
maxTokenAllowed: 200000,
},
{
name: 'anthropic.claude-opus-4-1-20250805-v1:0',
label: 'Claude Opus 4.1 (Bedrock)',
provider: 'AmazonBedrock',
maxTokenAllowed: 200000,
},
{
name: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
label: 'Claude 3.5 Sonnet v2 (Bedrock)',

View File

@@ -1,10 +1,10 @@
import { BaseProvider } from '~/lib/modules/llm/base-provider';
import type { ModelInfo } from '~/lib/modules/llm/types';
import type { IProviderSetting } from '~/types/model';
import type { LanguageModelV1 } from 'ai';
import type { IProviderSetting } from '~/types/model';
import { createAnthropic } from '@ai-sdk/anthropic';
export class AnthropicProvider extends BaseProvider {
export default class AnthropicProvider extends BaseProvider {
name = 'Anthropic';
getApiKeyLink = 'https://console.anthropic.com/settings/keys';
@@ -13,50 +13,6 @@ export class AnthropicProvider extends BaseProvider {
};
staticModels: ModelInfo[] = [
/*
* Claude Opus 4.1: Most powerful model for coding and reasoning
* Released August 5, 2025
*/
{
name: 'claude-opus-4-1-20250805',
label: 'Claude Opus 4.1',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 64000,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'claude-opus-4-1-20250805-smartai',
label: 'Claude Opus 4.1 (SmartAI)',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 64000,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
/*
* Claude Sonnet 4: Hybrid instant/extended response model
* Released May 14, 2025
*/
{
name: 'claude-sonnet-4-20250514',
label: 'Claude Sonnet 4',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 64000,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'claude-sonnet-4-20250514-smartai',
label: 'Claude Sonnet 4 (SmartAI)',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 64000,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
/*
* Essential fallback models - only the most stable/reliable ones
* Claude 3.5 Sonnet: 200k context, excellent for complex reasoning and coding
@@ -66,17 +22,7 @@ export class AnthropicProvider extends BaseProvider {
label: 'Claude 3.5 Sonnet',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 8192,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'claude-3-5-sonnet-20241022-smartai',
label: 'Claude 3.5 Sonnet (SmartAI)',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 8192,
supportsSmartAI: true,
isSmartAIEnabled: true,
maxCompletionTokens: 128000,
},
// Claude 3 Haiku: 200k context, fastest and most cost-effective
@@ -85,17 +31,16 @@ export class AnthropicProvider extends BaseProvider {
label: 'Claude 3 Haiku',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 4096,
supportsSmartAI: false, // Base model without SmartAI
maxCompletionTokens: 128000,
},
// Claude Opus 4: 200k context, 32k output limit (latest flagship model)
{
name: 'claude-3-haiku-20240307-smartai',
label: 'Claude 3 Haiku (SmartAI)',
name: 'claude-opus-4-20250514',
label: 'Claude 4 Opus',
provider: 'Anthropic',
maxTokenAllowed: 200000,
maxCompletionTokens: 4096,
supportsSmartAI: true,
isSmartAIEnabled: true,
maxCompletionTokens: 32000,
},
];
@@ -119,8 +64,7 @@ export class AnthropicProvider extends BaseProvider {
const response = await fetch(`https://api.anthropic.com/v1/models`, {
headers: {
'x-api-key': `${apiKey}`,
['anthropic-version']: '2023-06-01',
['Content-Type']: 'application/json',
'anthropic-version': '2023-06-01',
},
});
@@ -146,21 +90,15 @@ export class AnthropicProvider extends BaseProvider {
contextWindow = 200000; // Claude 3 Sonnet has 200k context
}
// Determine max completion tokens based on model
let maxCompletionTokens = 4096; // default fallback
// Determine completion token limits based on specific model
let maxCompletionTokens = 128000; // default for older Claude 3 models
if (m.id?.includes('claude-sonnet-4') || m.id?.includes('claude-opus-4')) {
maxCompletionTokens = 64000;
} else if (m.id?.includes('claude-3-7-sonnet')) {
maxCompletionTokens = 64000;
} else if (m.id?.includes('claude-3-5-sonnet')) {
maxCompletionTokens = 8192;
} else if (m.id?.includes('claude-3-haiku')) {
maxCompletionTokens = 4096;
} else if (m.id?.includes('claude-3-opus')) {
maxCompletionTokens = 4096;
} else if (m.id?.includes('claude-3-sonnet')) {
maxCompletionTokens = 4096;
if (m.id?.includes('claude-opus-4')) {
maxCompletionTokens = 32000; // Claude 4 Opus: 32K output limit
} else if (m.id?.includes('claude-sonnet-4')) {
maxCompletionTokens = 64000; // Claude 4 Sonnet: 64K output limit
} else if (m.id?.includes('claude-4')) {
maxCompletionTokens = 32000; // Other Claude 4 models: conservative 32K limit
}
return {
@@ -169,7 +107,6 @@ export class AnthropicProvider extends BaseProvider {
provider: this.name,
maxTokenAllowed: contextWindow,
maxCompletionTokens,
supportsSmartAI: true, // All Anthropic models support SmartAI
};
});
}
@@ -180,27 +117,19 @@ export class AnthropicProvider extends BaseProvider {
apiKeys?: Record<string, string>;
providerSettings?: Record<string, IProviderSetting>;
}) => LanguageModelV1 = (options) => {
const { model, serverEnv, apiKeys, providerSettings } = options;
const { apiKey, baseUrl } = this.getProviderBaseUrlAndKey({
const { apiKeys, providerSettings, serverEnv, model } = options;
const { apiKey } = this.getProviderBaseUrlAndKey({
apiKeys,
providerSettings: providerSettings?.[this.name],
providerSettings,
serverEnv: serverEnv as any,
defaultBaseUrlKey: '',
defaultApiTokenKey: 'ANTHROPIC_API_KEY',
});
if (!apiKey) {
throw `Missing API key for ${this.name} provider`;
}
const anthropic = createAnthropic({
apiKey,
baseURL: baseUrl || 'https://api.anthropic.com/v1',
headers: { 'anthropic-beta': 'output-128k-2025-02-19' },
});
// Handle SmartAI variant by using the base model name
const actualModel = model.replace('-smartai', '');
return anthropic(actualModel);
return anthropic(model);
};
}

View File

@@ -31,18 +31,6 @@ export default class OpenRouterProvider extends BaseProvider {
* Essential fallback models - only the most stable/reliable ones
* Claude 3.5 Sonnet via OpenRouter: 200k context
*/
{
name: 'anthropic/claude-sonnet-4-20250514',
label: 'Anthropic: Claude Sonnet 4 (OpenRouter)',
provider: 'OpenRouter',
maxTokenAllowed: 200000,
},
{
name: 'anthropic/claude-opus-4-1-20250805',
label: 'Anthropic: Claude Opus 4.1 (OpenRouter)',
provider: 'OpenRouter',
maxTokenAllowed: 200000,
},
{
name: 'anthropic/claude-3.5-sonnet',
label: 'Claude 3.5 Sonnet',

View File

@@ -17,23 +17,7 @@ export default class OpenAIProvider extends BaseProvider {
* Essential fallback models - only the most stable/reliable ones
* GPT-4o: 128k context, 4k standard output (64k with long output mode)
*/
{
name: 'gpt-4o',
label: 'GPT-4o',
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 4096,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'gpt-4o-smartai',
label: 'GPT-4o (SmartAI)',
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 4096,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
{ name: 'gpt-4o', label: 'GPT-4o', provider: 'OpenAI', maxTokenAllowed: 128000, maxCompletionTokens: 4096 },
// GPT-4o Mini: 128k context, cost-effective alternative
{
@@ -42,16 +26,6 @@ export default class OpenAIProvider extends BaseProvider {
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 4096,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'gpt-4o-mini-smartai',
label: 'GPT-4o Mini (SmartAI)',
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 4096,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
// GPT-3.5-turbo: 16k context, fast and cost-effective
@@ -61,16 +35,6 @@ export default class OpenAIProvider extends BaseProvider {
provider: 'OpenAI',
maxTokenAllowed: 16000,
maxCompletionTokens: 4096,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'gpt-3.5-turbo-smartai',
label: 'GPT-3.5 Turbo (SmartAI)',
provider: 'OpenAI',
maxTokenAllowed: 16000,
maxCompletionTokens: 4096,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
// o1-preview: 128k context, 32k output limit (reasoning model)
@@ -80,36 +44,10 @@ export default class OpenAIProvider extends BaseProvider {
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 32000,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'o1-preview-smartai',
label: 'o1-preview (SmartAI)',
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 32000,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
// o1-mini: 128k context, 65k output limit (reasoning model)
{
name: 'o1-mini',
label: 'o1-mini',
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 65000,
supportsSmartAI: false, // Base model without SmartAI
},
{
name: 'o1-mini-smartai',
label: 'o1-mini (SmartAI)',
provider: 'OpenAI',
maxTokenAllowed: 128000,
maxCompletionTokens: 65000,
supportsSmartAI: true,
isSmartAIEnabled: true,
},
{ name: 'o1-mini', label: 'o1-mini', provider: 'OpenAI', maxTokenAllowed: 128000, maxCompletionTokens: 65000 },
];
async getDynamicModels(
@@ -187,7 +125,6 @@ export default class OpenAIProvider extends BaseProvider {
provider: this.name,
maxTokenAllowed: Math.min(contextWindow, 128000), // Cap at 128k for safety
maxCompletionTokens,
supportsSmartAI: true, // All OpenAI models support SmartAI
};
});
}
@@ -216,9 +153,6 @@ export default class OpenAIProvider extends BaseProvider {
apiKey,
});
// Handle SmartAI variant by using the base model name
const actualModel = model.replace('-smartai', '');
return openai(actualModel);
return openai(model);
}
}

View File

@@ -1,4 +1,4 @@
import { AnthropicProvider } from './providers/anthropic';
import AnthropicProvider from './providers/anthropic';
import CohereProvider from './providers/cohere';
import DeepseekProvider from './providers/deepseek';
import GoogleProvider from './providers/google';

View File

@@ -11,12 +11,6 @@ export interface ModelInfo {
/** Maximum completion/output tokens - how many tokens the model can generate. If not specified, falls back to provider defaults */
maxCompletionTokens?: number;
/** Indicates if this model supports SmartAI enhanced feedback */
supportsSmartAI?: boolean;
/** Indicates if SmartAI is currently enabled for this model variant */
isSmartAIEnabled?: boolean;
}
export interface ProviderInfo {