From a0f163fe9e7a125e9835d0b127624a5497ecd76c Mon Sep 17 00:00:00 2001 From: Dayuan Jiang <34411969+DayuanJiang@users.noreply.github.com> Date: Thu, 11 Dec 2025 21:49:50 +0900 Subject: [PATCH] fix: improve Azure provider auto-detection and validation (#223) (#225) * fix: improve Azure provider auto-detection and validation (#223) - Fix detectProvider() to only detect Azure when it has complete config (both AZURE_API_KEY and AZURE_RESOURCE_NAME or AZURE_BASE_URL) - Add validation in validateProviderCredentials() for Azure to provide clear error messages when configuration is incomplete - Update docs/ai-providers.md to clarify Azure requires resource name * docs: add Azure reasoning options to documentation --- docs/ai-providers.md | 14 ++++++++++++-- lib/ai-providers.ts | 23 ++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/ai-providers.md b/docs/ai-providers.md index 14e0c92..330b3ee 100644 --- a/docs/ai-providers.md +++ b/docs/ai-providers.md @@ -80,13 +80,23 @@ SILICONFLOW_BASE_URL=https://api.siliconflow.com/v1 # or https://api.siliconflo ```bash AZURE_API_KEY=your_api_key +AZURE_RESOURCE_NAME=your-resource-name # Required: your Azure resource name AI_MODEL=your-deployment-name ``` -Optional custom endpoint: +Or use a custom endpoint instead of resource name: ```bash -AZURE_BASE_URL=https://your-resource.openai.azure.com +AZURE_API_KEY=your_api_key +AZURE_BASE_URL=https://your-resource.openai.azure.com # Alternative to AZURE_RESOURCE_NAME +AI_MODEL=your-deployment-name +``` + +Optional reasoning configuration: + +```bash +AZURE_REASONING_EFFORT=low # Optional: low, medium, high +AZURE_REASONING_SUMMARY=detailed # Optional: none, brief, detailed ``` ### AWS Bedrock diff --git a/lib/ai-providers.ts b/lib/ai-providers.ts index b98dc1e..875888f 100644 --- a/lib/ai-providers.ts +++ b/lib/ai-providers.ts @@ -371,7 +371,16 @@ function detectProvider(): ProviderName | null { continue } if (process.env[envVar]) { - configuredProviders.push(provider as ProviderName) + // Azure requires additional config (baseURL or resourceName) + if (provider === "azure") { + const hasBaseUrl = !!process.env.AZURE_BASE_URL + const hasResourceName = !!process.env.AZURE_RESOURCE_NAME + if (hasBaseUrl || hasResourceName) { + configuredProviders.push(provider as ProviderName) + } + } else { + configuredProviders.push(provider as ProviderName) + } } } @@ -393,6 +402,18 @@ function validateProviderCredentials(provider: ProviderName): void { `Please set it in your .env.local file.`, ) } + + // Azure requires either AZURE_BASE_URL or AZURE_RESOURCE_NAME in addition to API key + if (provider === "azure") { + const hasBaseUrl = !!process.env.AZURE_BASE_URL + const hasResourceName = !!process.env.AZURE_RESOURCE_NAME + if (!hasBaseUrl && !hasResourceName) { + throw new Error( + `Azure requires either AZURE_BASE_URL or AZURE_RESOURCE_NAME to be set. ` + + `Please set one in your .env.local file.`, + ) + } + } } /**