env-llm-defaults.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import type { LlmConfig, ProviderConfigs } from "@/stores/wiki-store"
  2. import {
  3. normalizeUserLlmContextSize,
  4. normalizeUserLlmMaxOutputTokens,
  5. } from "@/lib/llm-context-size"
  6. const trimEnv = (value: unknown): string => {
  7. return typeof value === "string" ? value.trim() : ""
  8. }
  9. const readContextSize = (): number => {
  10. const raw = Number(trimEnv(import.meta.env.VITE_QMAI_LLM_CONTEXT_SIZE))
  11. return normalizeUserLlmContextSize(raw)
  12. }
  13. const readMaxOutputTokens = (): number => {
  14. const raw = Number(trimEnv(import.meta.env.VITE_QMAI_LLM_MAX_OUTPUT_TOKENS))
  15. return normalizeUserLlmMaxOutputTokens(raw)
  16. }
  17. export function loadEnvLlmDefault(): {
  18. config: LlmConfig
  19. providerConfigs: ProviderConfigs
  20. activePresetId: string
  21. } | null {
  22. const apiKey = trimEnv(import.meta.env.VITE_QMAI_LLM_API_KEY)
  23. const customEndpoint = trimEnv(import.meta.env.VITE_QMAI_LLM_ENDPOINT)
  24. const model = trimEnv(import.meta.env.VITE_QMAI_LLM_MODEL)
  25. if (!apiKey || !customEndpoint || !model) return null
  26. const maxContextSize = readContextSize()
  27. const maxOutputTokens = readMaxOutputTokens()
  28. const config: LlmConfig = {
  29. provider: "custom",
  30. apiKey,
  31. model,
  32. ollamaUrl: "http://localhost:11434",
  33. customEndpoint,
  34. maxContextSize,
  35. maxOutputTokens,
  36. apiMode: "chat_completions",
  37. reasoning: { mode: "auto" },
  38. }
  39. return {
  40. config,
  41. providerConfigs: {
  42. custom: {
  43. apiKey,
  44. model,
  45. baseUrl: customEndpoint,
  46. apiMode: "chat_completions",
  47. maxContextSize,
  48. maxOutputTokens,
  49. reasoning: { mode: "auto" },
  50. },
  51. },
  52. activePresetId: "custom",
  53. }
  54. }