diff --git a/frontend/components/analysis/AnalysisForm.tsx b/frontend/components/analysis/AnalysisForm.tsx index 4935d1c0..19b284b5 100644 --- a/frontend/components/analysis/AnalysisForm.tsx +++ b/frontend/components/analysis/AnalysisForm.tsx @@ -113,15 +113,15 @@ export function AnalysisForm({ onSubmit, loading = false }: AnalysisFormProps) { const quickThinkLlm = form.getValues("quick_think_llm"); const deepThinkLlm = form.getValues("deep_think_llm"); - // Set base URLs based on selected models - form.setValue("quick_think_base_url", getBaseUrlForModel(quickThinkLlm)); - form.setValue("deep_think_base_url", getBaseUrlForModel(deepThinkLlm)); - form.setValue("embedding_base_url", "https://api.openai.com/v1"); + // Set base URLs based on selected models (custom URL takes precedence) + form.setValue("quick_think_base_url", getBaseUrlForModel(quickThinkLlm, savedSettings.custom_base_url)); + form.setValue("deep_think_base_url", getBaseUrlForModel(deepThinkLlm, savedSettings.custom_base_url)); + form.setValue("embedding_base_url", savedSettings.custom_base_url || "https://api.openai.com/v1"); // Set API keys based on selected models form.setValue("quick_think_api_key", getApiKeyForModel(quickThinkLlm, savedSettings)); form.setValue("deep_think_api_key", getApiKeyForModel(deepThinkLlm, savedSettings)); - form.setValue("embedding_api_key", savedSettings.openai_api_key); + form.setValue("embedding_api_key", savedSettings.custom_api_key || savedSettings.openai_api_key); form.setValue("alpha_vantage_api_key", savedSettings.alpha_vantage_api_key); }, [form, form.watch("quick_think_llm"), form.watch("deep_think_llm")]); diff --git a/frontend/components/settings/ApiSettingsDialog.tsx b/frontend/components/settings/ApiSettingsDialog.tsx index 22aeb156..d811f0fa 100644 --- a/frontend/components/settings/ApiSettingsDialog.tsx +++ b/frontend/components/settings/ApiSettingsDialog.tsx @@ -47,6 +47,10 @@ const formSchema = z.object({ grok_api_key: z.string().optional().or(z.literal("")), deepseek_api_key: z.string().optional().or(z.literal("")), qwen_api_key: z.string().optional().or(z.literal("")), + + // Custom endpoint + custom_base_url: z.string().optional().or(z.literal("")), + custom_api_key: z.string().optional().or(z.literal("")), }); type FormValues = z.infer; @@ -90,6 +94,7 @@ export function ApiSettingsDialog() { return ( + {/* @ts-ignore - React 19 type compatibility issue with Radix UI */}