diff --git a/apps/dokploy/server/api/routers/ai.ts b/apps/dokploy/server/api/routers/ai.ts index 6fa2e0cdc..6afc440d6 100644 --- a/apps/dokploy/server/api/routers/ai.ts +++ b/apps/dokploy/server/api/routers/ai.ts @@ -62,6 +62,12 @@ export const aiRouter = createTRPCRouter({ case "ollama": response = await fetch(`${input.apiUrl}/api/tags`, { headers }); break; + case "gemini": + response = await fetch( + `${input.apiUrl}/models?key=${encodeURIComponent(input.apiKey)}`, + { headers: {} } + ); + break; default: if (!input.apiKey) throw new TRPCError({ diff --git a/packages/server/src/utils/ai/select-ai-provider.ts b/packages/server/src/utils/ai/select-ai-provider.ts index c0715030b..03e59166e 100644 --- a/packages/server/src/utils/ai/select-ai-provider.ts +++ b/packages/server/src/utils/ai/select-ai-provider.ts @@ -16,6 +16,7 @@ export function getProviderName(apiUrl: string) { if (apiUrl.includes("api.mistral.ai")) return "mistral"; if (apiUrl.includes(":11434") || apiUrl.includes("ollama")) return "ollama"; if (apiUrl.includes("api.deepinfra.com")) return "deepinfra"; + if (apiUrl.includes("generativelanguage.googleapis.com")) return "gemini"; return "custom"; } @@ -66,6 +67,13 @@ export function selectAIProvider(config: { apiUrl: string; apiKey: string }) { baseURL: config.apiUrl, apiKey: config.apiKey, }); + case "gemini": + return createOpenAICompatible({ + name:"gemini", + baseURL:config.apiUrl, + queryParams:{ key: config.apiKey}, + headers:{} + }) case "custom": return createOpenAICompatible({ name: "custom",