mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 22:32:27 +08:00
fix: add customize anthropic baseURL (#28)
* fix: add custom anthropic baseURL * feat: add baseURL support for all AI providers - Add GOOGLE_BASE_URL for Google Generative AI - Add AZURE_BASE_URL for Azure OpenAI - Add OLLAMA_BASE_URL support (was documented but not implemented) - Add OPENROUTER_BASE_URL for OpenRouter - Fix missing semicolon in Anthropic case - Update env.example with new environment variables Closes #20 --------- Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
This commit is contained in:
@@ -20,16 +20,20 @@ AI_MODEL=global.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|||||||
|
|
||||||
# Anthropic (Direct) Configuration
|
# Anthropic (Direct) Configuration
|
||||||
# ANTHROPIC_API_KEY=sk-ant-...
|
# ANTHROPIC_API_KEY=sk-ant-...
|
||||||
|
# ANTHROPIC_BASE_URL=https://your-custom-anthropic/v1
|
||||||
|
|
||||||
# Google Generative AI Configuration
|
# Google Generative AI Configuration
|
||||||
# GOOGLE_GENERATIVE_AI_API_KEY=...
|
# GOOGLE_GENERATIVE_AI_API_KEY=...
|
||||||
|
# GOOGLE_BASE_URL=https://generativelanguage.googleapis.com/v1beta # Optional: Custom endpoint
|
||||||
|
|
||||||
# Azure OpenAI Configuration
|
# Azure OpenAI Configuration
|
||||||
# AZURE_RESOURCE_NAME=your-resource-name
|
# AZURE_RESOURCE_NAME=your-resource-name
|
||||||
# AZURE_API_KEY=...
|
# AZURE_API_KEY=...
|
||||||
|
# AZURE_BASE_URL=https://your-resource.openai.azure.com # Optional: Custom endpoint (overrides resourceName)
|
||||||
|
|
||||||
# Ollama (Local) Configuration
|
# Ollama (Local) Configuration
|
||||||
# OLLAMA_BASE_URL=http://localhost:11434/api # Optional, defaults to localhost
|
# OLLAMA_BASE_URL=http://localhost:11434/api # Optional, defaults to localhost
|
||||||
|
|
||||||
# OpenRouter Configuration
|
# OpenRouter Configuration
|
||||||
# OPENROUTER_API_KEY=sk-or-v1-...
|
# OPENROUTER_API_KEY=sk-or-v1-...
|
||||||
|
# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 # Optional: Custom endpoint
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { bedrock } from '@ai-sdk/amazon-bedrock';
|
import { bedrock } from '@ai-sdk/amazon-bedrock';
|
||||||
import { openai, createOpenAI } from '@ai-sdk/openai';
|
import { openai, createOpenAI } from '@ai-sdk/openai';
|
||||||
import { anthropic } from '@ai-sdk/anthropic';
|
import { createAnthropic } from '@ai-sdk/anthropic';
|
||||||
import { google } from '@ai-sdk/google';
|
import { google, createGoogleGenerativeAI } from '@ai-sdk/google';
|
||||||
import { azure } from '@ai-sdk/azure';
|
import { azure, createAzure } from '@ai-sdk/azure';
|
||||||
import { ollama } from 'ollama-ai-provider-v2';
|
import { ollama, createOllama } from 'ollama-ai-provider-v2';
|
||||||
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
|
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
|
||||||
|
|
||||||
export type ProviderName =
|
export type ProviderName =
|
||||||
@@ -115,26 +115,55 @@ export function getAIModel(): ModelConfig {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'anthropic':
|
case 'anthropic':
|
||||||
model = anthropic(modelId);
|
const customProvider = createAnthropic({
|
||||||
|
apiKey: process.env.ANTHROPIC_API_KEY,
|
||||||
|
baseURL: process.env.ANTHROPIC_BASE_URL || 'https://api.anthropic.com/v1',
|
||||||
|
headers: ANTHROPIC_BETA_HEADERS,
|
||||||
|
});
|
||||||
|
model = customProvider(modelId);
|
||||||
// Add beta headers for fine-grained tool streaming
|
// Add beta headers for fine-grained tool streaming
|
||||||
headers = ANTHROPIC_BETA_HEADERS;
|
headers = ANTHROPIC_BETA_HEADERS;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'google':
|
case 'google':
|
||||||
|
if (process.env.GOOGLE_BASE_URL) {
|
||||||
|
const customGoogle = createGoogleGenerativeAI({
|
||||||
|
apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY,
|
||||||
|
baseURL: process.env.GOOGLE_BASE_URL,
|
||||||
|
});
|
||||||
|
model = customGoogle(modelId);
|
||||||
|
} else {
|
||||||
model = google(modelId);
|
model = google(modelId);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'azure':
|
case 'azure':
|
||||||
|
if (process.env.AZURE_BASE_URL) {
|
||||||
|
const customAzure = createAzure({
|
||||||
|
apiKey: process.env.AZURE_API_KEY,
|
||||||
|
baseURL: process.env.AZURE_BASE_URL,
|
||||||
|
});
|
||||||
|
model = customAzure(modelId);
|
||||||
|
} else {
|
||||||
model = azure(modelId);
|
model = azure(modelId);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'ollama':
|
case 'ollama':
|
||||||
|
if (process.env.OLLAMA_BASE_URL) {
|
||||||
|
const customOllama = createOllama({
|
||||||
|
baseURL: process.env.OLLAMA_BASE_URL,
|
||||||
|
});
|
||||||
|
model = customOllama(modelId);
|
||||||
|
} else {
|
||||||
model = ollama(modelId);
|
model = ollama(modelId);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'openrouter':
|
case 'openrouter':
|
||||||
const openrouter = createOpenRouter({
|
const openrouter = createOpenRouter({
|
||||||
apiKey: process.env.OPENROUTER_API_KEY,
|
apiKey: process.env.OPENROUTER_API_KEY,
|
||||||
|
...(process.env.OPENROUTER_BASE_URL && { baseURL: process.env.OPENROUTER_BASE_URL }),
|
||||||
});
|
});
|
||||||
model = openrouter(modelId);
|
model = openrouter(modelId);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user