File size: 1,172 Bytes
86042ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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<void, ModelsResponse>(
  { 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,
    };
  }
);