Ollama Integration: - Add providerConfig.js for managing AI provider settings - Add toolConverter.js to convert between Claude and Ollama formats - Add ollama.js API handler with function calling support - Update diagramAI.ts with Ollama models (llama3.1, mistral, qwen2.5) - Route requests to appropriate provider based on selected model - Use 127.0.0.1 to avoid IPv6 resolution issues New modify_connection Tool: - Add modify_connection tool to change connection labels and colors - Support finding connections by label or by from/to entities - Add chatModifyConnection event handler in diagramManager - Clarify in tool descriptions that empty string removes labels 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
/**
|
|
* AI Provider Configuration
|
|
* Manages configuration for different AI providers (Claude, Ollama)
|
|
*/
|
|
|
|
// Default configuration
|
|
const DEFAULT_PROVIDER = 'claude';
|
|
// Use 127.0.0.1 instead of localhost to avoid IPv6 resolution issues
|
|
const DEFAULT_OLLAMA_URL = 'http://127.0.0.1:11434';
|
|
|
|
/**
|
|
* Get the current AI provider
|
|
* @returns {string} Provider name ('claude' or 'ollama')
|
|
*/
|
|
export function getProvider() {
|
|
return process.env.AI_PROVIDER || DEFAULT_PROVIDER;
|
|
}
|
|
|
|
/**
|
|
* Get Ollama API URL
|
|
* @returns {string} Ollama base URL
|
|
*/
|
|
export function getOllamaUrl() {
|
|
return process.env.OLLAMA_URL || DEFAULT_OLLAMA_URL;
|
|
}
|
|
|
|
/**
|
|
* Get Anthropic API URL
|
|
* @returns {string} Anthropic base URL
|
|
*/
|
|
export function getAnthropicUrl() {
|
|
return process.env.ANTHROPIC_API_URL || 'https://api.anthropic.com';
|
|
}
|
|
|
|
/**
|
|
* Get provider configuration for a specific provider
|
|
* @param {string} provider - Provider name
|
|
* @returns {object} Provider configuration
|
|
*/
|
|
export function getProviderConfig(provider) {
|
|
switch (provider) {
|
|
case 'ollama':
|
|
return {
|
|
name: 'ollama',
|
|
baseUrl: getOllamaUrl(),
|
|
chatEndpoint: '/api/chat',
|
|
requiresAuth: false
|
|
};
|
|
case 'claude':
|
|
default:
|
|
return {
|
|
name: 'claude',
|
|
baseUrl: getAnthropicUrl(),
|
|
chatEndpoint: '/v1/messages',
|
|
requiresAuth: true,
|
|
apiKey: process.env.ANTHROPIC_API_KEY
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determine provider from model ID
|
|
* @param {string} modelId - Model identifier
|
|
* @returns {string} Provider name
|
|
*/
|
|
export function getProviderFromModel(modelId) {
|
|
if (!modelId) return getProvider();
|
|
|
|
// Claude models start with 'claude-'
|
|
if (modelId.startsWith('claude-')) {
|
|
return 'claude';
|
|
}
|
|
|
|
// Known Ollama models
|
|
const ollamaModels = [
|
|
'llama', 'mistral', 'qwen', 'codellama', 'phi',
|
|
'gemma', 'neural-chat', 'starling', 'orca', 'vicuna',
|
|
'deepseek', 'dolphin', 'nous-hermes', 'openhermes'
|
|
];
|
|
|
|
for (const prefix of ollamaModels) {
|
|
if (modelId.toLowerCase().startsWith(prefix)) {
|
|
return 'ollama';
|
|
}
|
|
}
|
|
|
|
// Default to configured provider
|
|
return getProvider();
|
|
}
|
|
|
|
export default {
|
|
getProvider,
|
|
getOllamaUrl,
|
|
getAnthropicUrl,
|
|
getProviderConfig,
|
|
getProviderFromModel
|
|
};
|