import { api } from "encore.dev/api"; import { secret } from "encore.dev/config"; import log from "encore.dev/log"; import { LLMProviderService } from "../lib/llm-provider"; import type { ModelInfo, LLMProvider } from "../lib/types"; const llmProvider = secret("LLMProvider"); const ollamaBaseURL = secret("OllamaBaseURL"); const huggingFaceAPIKey = secret("HuggingFaceAPIKey"); const defaultModel = secret("DefaultModel"); function getProvider(): LLMProviderService { return new LLMProviderService({ provider: llmProvider() as LLMProvider, ollamaBaseURL: ollamaBaseURL(), huggingFaceAPIKey: huggingFaceAPIKey(), defaultModel: defaultModel(), }); } export interface ModelsResponse { provider: string; models: ModelInfo[]; } // Lists all available LLM models. export const listModels = api( { expose: true, method: "GET", path: "/models" }, async () => { log.info("Models list requested"); const provider = getProvider(); const models = await provider.listModels(); log.info("Models listed", { count: models.length }); return { provider: provider.getProvider(), models, }; } );