|
52 | 52 | <% if (aiEnabled) { %> |
53 | 53 | <% |
54 | 54 | // Extract provider from API URL |
55 | | - let provider = 'Unknown'; |
56 | | - if (aiConfig.apiUrl.includes('api.groq.com')) { |
57 | | - provider = 'Groq'; |
58 | | - } else if (aiConfig.apiUrl.includes('api.openai.com')) { |
59 | | - provider = 'OpenAI'; |
60 | | - } else if (aiConfig.apiUrl.includes('api.anthropic.com')) { |
61 | | - provider = 'Anthropic'; |
62 | | - } else if (aiConfig.apiUrl.includes('generativelanguage.googleapis.com')) { |
63 | | - provider = 'Google Gemini'; |
64 | | - } else if (aiConfig.apiUrl.includes('api.perplexity.ai')) { |
65 | | - provider = 'Perplexity'; |
66 | | - } else if (aiConfig.apiUrl.includes('api.cohere.ai')) { |
67 | | - provider = 'Cohere'; |
68 | | - } else if (aiConfig.apiUrl.includes('api.mistral.ai')) { |
69 | | - provider = 'Mistral'; |
70 | | - } else if (aiConfig.apiUrl.includes('localhost') || aiConfig.apiUrl.includes('127.0.0.1') || aiConfig.apiUrl.includes('0.0.0.0')) { |
71 | | - provider = 'Local LLM'; |
72 | | - } else { |
73 | | - // Try to extract domain from URL |
| 55 | + const providers = [ |
| 56 | + { pattern: 'api.groq.com', name: 'Groq' }, |
| 57 | + { pattern: 'api.openai.com', name: 'OpenAI' }, |
| 58 | + { pattern: 'api.anthropic.com', name: 'Anthropic' }, |
| 59 | + { pattern: 'generativelanguage.googleapis.com', name: 'Google Gemini' }, |
| 60 | + { pattern: 'api.perplexity.ai', name: 'Perplexity' }, |
| 61 | + { pattern: 'api.cohere.ai', name: 'Cohere' }, |
| 62 | + { pattern: 'api.mistral.ai', name: 'Mistral' }, |
| 63 | + ]; |
| 64 | + const localPatterns = ['localhost', '127.0.0.1', '0.0.0.0']; |
| 65 | +
|
| 66 | + const apiUrl = aiConfig.apiUrl; |
| 67 | +
|
| 68 | + // Helper to extract provider name from domain |
| 69 | + const extractProviderFromDomain = (url) => { |
74 | 70 | try { |
75 | | - const url = new URL(aiConfig.apiUrl); |
76 | | - const hostname = url.hostname; |
77 | | - if (hostname.startsWith('api.')) { |
78 | | - provider = hostname.substring(4).split('.')[0]; |
79 | | - } else { |
80 | | - provider = hostname.split('.')[0]; |
81 | | - } |
82 | | - provider = provider.charAt(0).toUpperCase() + provider.slice(1); |
| 71 | + const { hostname } = new URL(url); |
| 72 | + const domain = hostname.startsWith('api.') |
| 73 | + ? hostname.substring(4).split('.')[0] |
| 74 | + : hostname.split('.')[0]; |
| 75 | + return domain.charAt(0).toUpperCase() + domain.slice(1); |
83 | 76 | } catch (e) { |
84 | | - provider = 'Custom Provider'; |
| 77 | + return 'Custom Provider'; |
85 | 78 | } |
86 | | - } |
| 79 | + }; |
| 80 | +
|
| 81 | + // Determine provider: local → known providers → domain extraction |
| 82 | + const provider = localPatterns.some(pattern => apiUrl.includes(pattern)) |
| 83 | + ? 'Local LLM' |
| 84 | + : providers.find(p => apiUrl.includes(p.pattern))?.name |
| 85 | + || extractProviderFromDomain(apiUrl); |
87 | 86 | %> |
88 | 87 | <p><%= __('about.ai.description') %></p> |
89 | 88 | <p><%- __('about.ai.provider_info', {provider: provider, model: aiConfig.model}) %></p> |
|
0 commit comments