fix: local ollama provider with custom API Endpoint

This commit is contained in:
José Moreira 2025-03-25 16:26:58 +00:00 committed by GitHub
parent fb55a24341
commit 2b643e3a6e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,4 +1,4 @@
import React, { useEffect, useState, useCallback } from 'react'; import React, { useEffect, useState, useCallback, useMemo } from 'react';
import { Switch } from '~/components/ui/Switch'; import { Switch } from '~/components/ui/Switch';
import { useSettings } from '~/lib/hooks/useSettings'; import { useSettings } from '~/lib/hooks/useSettings';
import { LOCAL_PROVIDERS, URL_CONFIGURABLE_PROVIDERS } from '~/lib/stores/settings'; import { LOCAL_PROVIDERS, URL_CONFIGURABLE_PROVIDERS } from '~/lib/stores/settings';
@ -33,7 +33,7 @@ const PROVIDER_DESCRIPTIONS: Record<ProviderName, string> = {
}; };
// Add a constant for the Ollama API base URL // Add a constant for the Ollama API base URL
const OLLAMA_API_URL = 'http://127.0.0.1:11434'; const DEFAULT_OLLAMA_API_URL = 'http://127.0.0.1:11434';
interface OllamaModel { interface OllamaModel {
name: string; name: string;
@ -140,20 +140,16 @@ export default function LocalProvidersTab() {
setCategoryEnabled(newCategoryState); setCategoryEnabled(newCategoryState);
}, [filteredProviders]); }, [filteredProviders]);
// Fetch Ollama models when enabled /* Ollama */
useEffect(() => { const ollamaProvider = useMemo(() => filteredProviders.find((p) => p.name === 'Ollama'), [filteredProviders]);
const ollamaProvider = filteredProviders.find((p) => p.name === 'Ollama'); const OLLAMA_API_URL = ollamaProvider?.settings.baseUrl || DEFAULT_OLLAMA_API_URL;
console.log(ollamaProvider);
if (ollamaProvider?.settings.enabled) {
fetchOllamaModels();
}
}, [filteredProviders]);
const fetchOllamaModels = async () => { const fetchOllamaModels = async () => {
try { try {
setIsLoadingModels(true); setIsLoadingModels(true);
const response = await fetch('http://127.0.0.1:11434/api/tags'); const response = await fetch(`${OLLAMA_API_URL}/api/tags`);
const data = (await response.json()) as { models: OllamaModel[] }; const data = (await response.json()) as { models: OllamaModel[] };
setOllamaModels( setOllamaModels(
@ -169,6 +165,13 @@ export default function LocalProvidersTab() {
} }
}; };
// Fetch Ollama models when enabled
useEffect(() => {
if (ollamaProvider?.settings.enabled) {
fetchOllamaModels();
}
}, [ollamaProvider]);
const updateOllamaModel = async (modelName: string): Promise<boolean> => { const updateOllamaModel = async (modelName: string): Promise<boolean> => {
try { try {
const response = await fetch(`${OLLAMA_API_URL}/api/pull`, { const response = await fetch(`${OLLAMA_API_URL}/api/pull`, {
@ -223,7 +226,7 @@ export default function LocalProvidersTab() {
} }
} }
const updatedResponse = await fetch('http://127.0.0.1:11434/api/tags'); const updatedResponse = await fetch(`${OLLAMA_API_URL}/api/tags`);
const updatedData = (await updatedResponse.json()) as { models: OllamaModel[] }; const updatedData = (await updatedResponse.json()) as { models: OllamaModel[] };
const updatedModel = updatedData.models.find((m) => m.name === modelName); const updatedModel = updatedData.models.find((m) => m.name === modelName);
@ -485,7 +488,7 @@ export default function LocalProvidersTab() {
{editingProvider === provider.name ? ( {editingProvider === provider.name ? (
<input <input
type="text" type="text"
defaultValue={provider.settings.baseUrl || OLLAMA_API_URL} defaultValue={OLLAMA_API_URL}
placeholder="Enter Ollama base URL" placeholder="Enter Ollama base URL"
className={classNames( className={classNames(
'w-full px-3 py-2 rounded-lg text-sm', 'w-full px-3 py-2 rounded-lg text-sm',
@ -516,7 +519,7 @@ export default function LocalProvidersTab() {
> >
<div className="flex items-center gap-2 text-bolt-elements-textSecondary"> <div className="flex items-center gap-2 text-bolt-elements-textSecondary">
<div className="i-ph:link text-sm" /> <div className="i-ph:link text-sm" />
<span>{provider.settings.baseUrl || OLLAMA_API_URL}</span> <span>{OLLAMA_API_URL}</span>
</div> </div>
</div> </div>
)} )}