diff --git a/README.md b/README.md index 74c0988..7efc83f 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Diagrams are represented as XML that can be rendered in draw.io. The AI processe ## Multi-Provider Support - AWS Bedrock (default) -- OpenAI +- OpenAI / OpenAI-compatible APIs (via `OPENAI_BASE_URL`) - Anthropic - Google AI - Azure OpenAI diff --git a/env.example b/env.example index f6fb271..8d01d0e 100644 --- a/env.example +++ b/env.example @@ -14,6 +14,7 @@ AI_MODEL=global.anthropic.claude-sonnet-4-5-20250929-v1:0 # OpenAI Configuration # OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com/v1 # Optional: Custom OpenAI-compatible endpoint # OPENAI_ORGANIZATION=org-... # Optional # OPENAI_PROJECT=proj_... # Optional diff --git a/lib/ai-providers.ts b/lib/ai-providers.ts index d3e9692..13c359e 100644 --- a/lib/ai-providers.ts +++ b/lib/ai-providers.ts @@ -1,5 +1,5 @@ import { bedrock } from '@ai-sdk/amazon-bedrock'; -import { openai } from '@ai-sdk/openai'; +import { openai, createOpenAI } from '@ai-sdk/openai'; import { anthropic } from '@ai-sdk/anthropic'; import { google } from '@ai-sdk/google'; import { azure } from '@ai-sdk/azure'; @@ -61,6 +61,7 @@ function validateProviderCredentials(provider: ProviderName): void { * * Provider-specific env vars: * - OPENAI_API_KEY: OpenAI API key + * - OPENAI_BASE_URL: Custom OpenAI-compatible endpoint (optional) * - ANTHROPIC_API_KEY: Anthropic API key * - GOOGLE_GENERATIVE_AI_API_KEY: Google API key * - AZURE_RESOURCE_NAME, AZURE_API_KEY: Azure OpenAI credentials @@ -97,7 +98,15 @@ export function getAIModel(): ModelConfig { break; case 'openai': - model = openai(modelId); + if (process.env.OPENAI_BASE_URL) { + const customOpenAI = createOpenAI({ + apiKey: process.env.OPENAI_API_KEY, + baseURL: process.env.OPENAI_BASE_URL, + }); + model = customOpenAI.chat(modelId); + } else { + model = openai(modelId); + } break; case 'anthropic':