From 86c7122f90a58d365fe482aaeb0d0d8f18e15b5a Mon Sep 17 00:00:00 2001 From: Vanalite Date: Fri, 3 Oct 2025 20:54:54 +0700 Subject: [PATCH 1/6] fix: Add header to anthropic get models api --- web-app/package.json | 2 +- web-app/src/consts/providers.ts | 12 +++++++++++- web-app/src/services/providers/tauri.ts | 6 ++++++ web-app/src/types/modelProviders.d.ts | 6 ++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/web-app/package.json b/web-app/package.json index da7849f87..9ead687c2 100644 --- a/web-app/package.json +++ b/web-app/package.json @@ -82,7 +82,7 @@ "remark-math": "6.0.0", "sonner": "2.0.5", "tailwindcss": "4.1.4", - "token.js": "npm:token.js-fork@0.7.27", + "token.js": "npm:token.js-fork@0.7.29", "tw-animate-css": "1.2.8", "ulidx": "2.4.1", "unified": "11.0.5", diff --git a/web-app/src/consts/providers.ts b/web-app/src/consts/providers.ts index 328ba3a9a..3eea297c2 100644 --- a/web-app/src/consts/providers.ts +++ b/web-app/src/consts/providers.ts @@ -96,7 +96,7 @@ export const predefinedProviders = [ { active: true, api_key: '', - base_url: 'https://api.anthropic.com', + base_url: 'https://api.anthropic.com/v1', provider: 'anthropic', explore_models_url: 'https://docs.anthropic.com/en/docs/about-claude/models', @@ -127,6 +127,16 @@ export const predefinedProviders = [ }, ], models: [], + custom_header: [ + { + header: 'anthropic-version', + value: '2023-06-01' + }, + { + header: 'anthropic-dangerous-direct-browser-access', + value: 'true' + } + ] }, { active: true, diff --git a/web-app/src/services/providers/tauri.ts b/web-app/src/services/providers/tauri.ts index a8ca36fbb..4e08ee751 100644 --- a/web-app/src/services/providers/tauri.ts +++ b/web-app/src/services/providers/tauri.ts @@ -151,6 +151,12 @@ export class TauriProvidersService extends DefaultProvidersService { headers['Authorization'] = `Bearer ${provider.api_key}` } + if (provider.custom_header) { + provider.custom_header.forEach((header) => { + headers[header.header] = header.value + }) + } + // Always use Tauri's fetch to avoid CORS issues const response = await fetchTauri(`${provider.base_url}/models`, { method: 'GET', diff --git a/web-app/src/types/modelProviders.d.ts b/web-app/src/types/modelProviders.d.ts index 93cdd0df2..bf79f401c 100644 --- a/web-app/src/types/modelProviders.d.ts +++ b/web-app/src/types/modelProviders.d.ts @@ -48,6 +48,7 @@ type ProviderObject = { settings: ProviderSetting[] models: Model[] persist?: boolean + custom_header: ProviderCustomHeader[] | null } /** @@ -71,3 +72,8 @@ type ProxyOptions = { verifyHostSSL: boolean noProxy: string } + +type ProviderCustomHeader = { + header: string + value: string +} \ No newline at end of file From 7bee282875940541e452865b76bd978e817c875c Mon Sep 17 00:00:00 2001 From: Vanalite Date: Fri, 3 Oct 2025 21:05:09 +0700 Subject: [PATCH 2/6] fix: Fix Cohere base url --- web-app/src/consts/providers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-app/src/consts/providers.ts b/web-app/src/consts/providers.ts index 3eea297c2..d3d806888 100644 --- a/web-app/src/consts/providers.ts +++ b/web-app/src/consts/providers.ts @@ -141,7 +141,7 @@ export const predefinedProviders = [ { active: true, api_key: '', - base_url: 'https://api.cohere.ai/compatibility/v1', + base_url: 'https://api.cohere.ai/v1', explore_models_url: 'https://docs.cohere.com/v2/docs/models', provider: 'cohere', settings: [ From 651ba446bf35ee2aff2ba2bb402aa5579c74e9df Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Fri, 3 Oct 2025 21:40:59 +0700 Subject: [PATCH 3/6] chore: migration base_url anthropic --- web-app/src/hooks/useModelProvider.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/web-app/src/hooks/useModelProvider.ts b/web-app/src/hooks/useModelProvider.ts index a0b5a96ce..484b08f97 100644 --- a/web-app/src/hooks/useModelProvider.ts +++ b/web-app/src/hooks/useModelProvider.ts @@ -320,9 +320,32 @@ export const useModelProvider = create()( }) } + if (version <= 3 && state?.providers) { + state.providers.forEach((provider) => { + // Migrate Anthropic provider base URL and add custom headers + if (provider.provider === 'anthropic') { + if (provider.base_url === 'https://api.anthropic.com') { + provider.base_url = 'https://api.anthropic.com/v1' + } + if (!provider.custom_header) { + provider.custom_header = [ + { + header: 'anthropic-version', + value: '2023-06-01', + }, + { + header: 'anthropic-dangerous-direct-browser-access', + value: 'true', + }, + ] + } + } + }) + } + return state }, - version: 3, + version: 4, } ) ) From d3ea61b2e9d8cfd8ebea34a250ba1ecf4bcbc2d3 Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Fri, 3 Oct 2025 21:49:42 +0700 Subject: [PATCH 4/6] chore: update setting base url also --- web-app/src/hooks/useModelProvider.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/web-app/src/hooks/useModelProvider.ts b/web-app/src/hooks/useModelProvider.ts index 484b08f97..8e74be32a 100644 --- a/web-app/src/hooks/useModelProvider.ts +++ b/web-app/src/hooks/useModelProvider.ts @@ -327,6 +327,28 @@ export const useModelProvider = create()( if (provider.base_url === 'https://api.anthropic.com') { provider.base_url = 'https://api.anthropic.com/v1' } + + // Update base-url in settings + if (provider.settings) { + const baseUrlSetting = provider.settings.find( + (s) => s.key === 'base-url' + ) + if ( + baseUrlSetting?.controller_props?.value === + 'https://api.anthropic.com' + ) { + baseUrlSetting.controller_props.value = + 'https://api.anthropic.com/v1' + } + if ( + baseUrlSetting?.controller_props?.placeholder === + 'https://api.anthropic.com' + ) { + baseUrlSetting.controller_props.placeholder = + 'https://api.anthropic.com/v1' + } + } + if (!provider.custom_header) { provider.custom_header = [ { From 7fd83e0bf8580d44c25f89bea22b6d7badbe8b55 Mon Sep 17 00:00:00 2001 From: Vanalite Date: Fri, 3 Oct 2025 21:55:28 +0700 Subject: [PATCH 5/6] feat: add migration for cohere provider --- web-app/src/hooks/useModelProvider.ts | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/web-app/src/hooks/useModelProvider.ts b/web-app/src/hooks/useModelProvider.ts index 8e74be32a..926cbdd0d 100644 --- a/web-app/src/hooks/useModelProvider.ts +++ b/web-app/src/hooks/useModelProvider.ts @@ -362,6 +362,34 @@ export const useModelProvider = create()( ] } } + + if (provider.provider === 'cohere') { + if (provider.base_url === 'https://api.cohere.ai/compatibility/v1') { + provider.base_url = 'https://api.cohere.ai/v1' + } + + // Update base-url in settings + if (provider.settings) { + const baseUrlSetting = provider.settings.find( + (s) => s.key === 'base-url' + ) + if ( + baseUrlSetting?.controller_props?.value === + 'https://api.cohere.ai/compatibility/v1' + ) { + baseUrlSetting.controller_props.value = + 'https://api.cohere.ai/v1' + } + if ( + baseUrlSetting?.controller_props?.placeholder === + 'https://api.cohere.ai/compatibility/v1' + ) { + baseUrlSetting.controller_props.placeholder = + 'https://api.cohere.ai/v1' + } + } + } + }) } From 9046927bf3f812d4f5d005e4a6373b6a0a29c46e Mon Sep 17 00:00:00 2001 From: Vanalite Date: Fri, 3 Oct 2025 22:05:52 +0700 Subject: [PATCH 6/6] fix: optional custom header --- web-app/src/routes/settings/providers/index.tsx | 2 +- web-app/src/types/modelProviders.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web-app/src/routes/settings/providers/index.tsx b/web-app/src/routes/settings/providers/index.tsx index b22487390..7b9afd905 100644 --- a/web-app/src/routes/settings/providers/index.tsx +++ b/web-app/src/routes/settings/providers/index.tsx @@ -39,7 +39,7 @@ function ModelProviders() { toast.error(t('providerAlreadyExists', { name })) return } - const newProvider = { + const newProvider: ProviderObject = { provider: name, active: true, models: [], diff --git a/web-app/src/types/modelProviders.d.ts b/web-app/src/types/modelProviders.d.ts index bf79f401c..2225adee0 100644 --- a/web-app/src/types/modelProviders.d.ts +++ b/web-app/src/types/modelProviders.d.ts @@ -48,7 +48,7 @@ type ProviderObject = { settings: ProviderSetting[] models: Model[] persist?: boolean - custom_header: ProviderCustomHeader[] | null + custom_header?: ProviderCustomHeader[] | null } /**