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
This commit is contained in:
Dayuan Jiang
2025-12-11 21:49:50 +09:00
committed by GitHub
parent 8fd3830b9d
commit a0f163fe9e
2 changed files with 34 additions and 3 deletions

View File

@@ -80,13 +80,23 @@ SILICONFLOW_BASE_URL=https://api.siliconflow.com/v1 # or https://api.siliconflo
```bash ```bash
AZURE_API_KEY=your_api_key AZURE_API_KEY=your_api_key
AZURE_RESOURCE_NAME=your-resource-name # Required: your Azure resource name
AI_MODEL=your-deployment-name AI_MODEL=your-deployment-name
``` ```
Optional custom endpoint: Or use a custom endpoint instead of resource name:
```bash ```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 ### AWS Bedrock

View File

@@ -371,7 +371,16 @@ function detectProvider(): ProviderName | null {
continue continue
} }
if (process.env[envVar]) { 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.`, `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.`,
)
}
}
} }
/** /**