Skip to content

Commit 4826555

Browse files
fix: use provider settings baseUrl in LocalProvidersTab instead of hardcoded URL
1 parent e98393d commit 4826555

5 files changed

Lines changed: 26 additions & 16 deletions

File tree

app/components/@settings/core/constants.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,11 @@ export const DEFAULT_TAB_CONFIG = [
6262
{ id: 'local-providers', visible: true, window: 'user' as const, order: 3 },
6363
{ id: 'connection', visible: true, window: 'user' as const, order: 4 },
6464
{ id: 'notifications', visible: true, window: 'user' as const, order: 5 },
65-
{ id: 'event-logs', visible: true, window: 'user' as const, order: 6 },
6665

6766
// User Window Tabs (In dropdown, initially hidden)
6867
{ id: 'profile', visible: false, window: 'user' as const, order: 7 },
6968
{ id: 'settings', visible: false, window: 'user' as const, order: 8 },
7069
{ id: 'api-keys', visible: true, window: 'user' as const, order: 9 },
71-
{ id: 'task-manager', visible: false, window: 'user' as const, order: 10 },
7270
{ id: 'service-status', visible: false, window: 'user' as const, order: 11 },
7371

7472
// User Window Tabs (Hidden, controlled by TaskManagerTab)
@@ -82,11 +80,9 @@ export const DEFAULT_TAB_CONFIG = [
8280
{ id: 'local-providers', visible: true, window: 'developer' as const, order: 3 },
8381
{ id: 'connection', visible: true, window: 'developer' as const, order: 4 },
8482
{ id: 'notifications', visible: true, window: 'developer' as const, order: 5 },
85-
{ id: 'event-logs', visible: true, window: 'developer' as const, order: 6 },
8683
{ id: 'profile', visible: true, window: 'developer' as const, order: 7 },
8784
{ id: 'settings', visible: true, window: 'developer' as const, order: 8 },
8885
{ id: 'api-keys', visible: true, window: 'developer' as const, order: 9 },
89-
{ id: 'task-manager', visible: true, window: 'developer' as const, order: 10 },
9086
{ id: 'service-status', visible: true, window: 'developer' as const, order: 11 },
9187
{ id: 'debug', visible: true, window: 'developer' as const, order: 12 },
9288
{ id: 'update', visible: true, window: 'developer' as const, order: 13 },

app/components/@settings/tabs/providers/cloud/CloudProvidersTab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const PROVIDER_ICONS: Record<ProviderName, string> = {
4444
// Update PROVIDER_DESCRIPTIONS to use the same type
4545
const PROVIDER_DESCRIPTIONS: Partial<Record<ProviderName, string>> = {
4646
Anthropic: 'Access Claude and other Anthropic models',
47-
OpenAI: 'Use GPT-4, GPT-3.5, and other OpenAI models',
47+
OpenAI: 'Use GPT-5.2, GPT-4.5, and other OpenAI models',
4848
};
4949

5050
const CloudProvidersTab = () => {

app/components/@settings/tabs/providers/local/LocalProvidersTab.tsx

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,15 @@ export default function LocalProvidersTab() {
148148
try {
149149
setIsLoadingModels(true);
150150

151-
const response = await fetch('http://127.0.0.1:11434/api/tags');
151+
const ollamaProvider = filteredProviders.find((p) => p.name === 'Ollama');
152+
const baseUrl = ollamaProvider?.settings.baseUrl || OLLAMA_API_URL;
153+
154+
const response = await fetch(`${baseUrl}/api/tags`);
155+
156+
if (!response.ok) {
157+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
158+
}
159+
152160
const data = (await response.json()) as { models: OllamaModel[] };
153161

154162
setOllamaModels(
@@ -159,14 +167,20 @@ export default function LocalProvidersTab() {
159167
);
160168
} catch (error) {
161169
console.error('Error fetching Ollama models:', error);
170+
171+
const errorMsg = error instanceof Error ? error.message : 'Unknown error occurred';
172+
toast(`Failed to fetch Ollama models: ${errorMsg}`);
162173
} finally {
163174
setIsLoadingModels(false);
164175
}
165176
};
166177

167178
const updateOllamaModel = async (modelName: string): Promise<boolean> => {
168179
try {
169-
const response = await fetch(`${OLLAMA_API_URL}/api/pull`, {
180+
const ollamaProvider = filteredProviders.find((p) => p.name === 'Ollama');
181+
const baseUrl = ollamaProvider?.settings.baseUrl || OLLAMA_API_URL;
182+
183+
const response = await fetch(`${baseUrl}/api/pull`, {
170184
method: 'POST',
171185
headers: { 'Content-Type': 'application/json' },
172186
body: JSON.stringify({ name: modelName }),
@@ -218,7 +232,7 @@ export default function LocalProvidersTab() {
218232
}
219233
}
220234

221-
const updatedResponse = await fetch('http://127.0.0.1:11434/api/tags');
235+
const updatedResponse = await fetch(`${baseUrl}/api/tags`);
222236
const updatedData = (await updatedResponse.json()) as { models: OllamaModel[] };
223237
const updatedModel = updatedData.models.find((m) => m.name === modelName);
224238

@@ -275,7 +289,10 @@ export default function LocalProvidersTab() {
275289

276290
const handleDeleteOllamaModel = async (modelName: string) => {
277291
try {
278-
const response = await fetch(`${OLLAMA_API_URL}/api/delete`, {
292+
const ollamaProvider = filteredProviders.find((p) => p.name === 'Ollama');
293+
const baseUrl = ollamaProvider?.settings.baseUrl || OLLAMA_API_URL;
294+
295+
const response = await fetch(`${baseUrl}/api/delete`, {
279296
method: 'DELETE',
280297
headers: {
281298
'Content-Type': 'application/json',

app/lib/modules/llm/manager.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,7 @@ export class LLMManager {
129129
// For local providers like Ollama and LMStudio, check if baseUrl is configured
130130
if (provider.name === 'Ollama' || provider.name === 'LMStudio') {
131131
const baseUrlKey = provider.name === 'Ollama' ? 'OLLAMA_API_BASE_URL' : 'LMSTUDIO_API_BASE_URL';
132-
const hasBaseUrl =
133-
providerSettings?.[provider.name]?.baseUrl ||
134-
apiKeys?.[baseUrlKey] ||
135-
serverEnv?.[baseUrlKey];
132+
const hasBaseUrl = providerSettings?.[provider.name]?.baseUrl || apiKeys?.[baseUrlKey] || serverEnv?.[baseUrlKey];
136133

137134
if (!hasBaseUrl) {
138135
return false;

app/lib/modules/llm/providers/ollama.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ export default class OllamaProvider extends BaseProvider {
8686
if (isDocker) {
8787
try {
8888
const url = new URL(baseUrl);
89+
8990
if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') {
9091
url.hostname = 'host.docker.internal';
9192
baseUrl = url.toString().replace(/\/$/, '');
@@ -99,9 +100,7 @@ export default class OllamaProvider extends BaseProvider {
99100
const response = await fetch(`${baseUrl}/api/tags`);
100101

101102
if (!response.ok) {
102-
throw new Error(
103-
`Failed to fetch Ollama models: HTTP ${response.status} ${response.statusText}`,
104-
);
103+
throw new Error(`Failed to fetch Ollama models: HTTP ${response.status} ${response.statusText}`);
105104
}
106105

107106
const data = (await response.json()) as OllamaApiResponse;
@@ -147,6 +146,7 @@ export default class OllamaProvider extends BaseProvider {
147146
if (isDocker) {
148147
try {
149148
const url = new URL(baseUrl);
149+
150150
if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') {
151151
url.hostname = 'host.docker.internal';
152152
baseUrl = url.toString().replace(/\/$/, '');

0 commit comments

Comments
 (0)