@dexto/server 1.10.2 → 1.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,6 +49,7 @@ class UsageEventSubscriber {
49
49
  database;
50
50
  targetUrl;
51
51
  authToken;
52
+ llmRegistry;
52
53
  runtimeId;
53
54
  runId;
54
55
  deliveryOptions;
@@ -62,6 +63,7 @@ class UsageEventSubscriber {
62
63
  this.database = config.database;
63
64
  this.targetUrl = config.targetUrl;
64
65
  this.authToken = config.authToken;
66
+ this.llmRegistry = config.llmRegistry ?? import_llm.DEFAULT_MODEL_REGISTRY;
65
67
  this.runtimeId = config.runtimeId;
66
68
  this.runId = config.runId;
67
69
  const flushIntervalMs = requirePositiveIntegerOption(
@@ -130,7 +132,10 @@ class UsageEventSubscriber {
130
132
  return null;
131
133
  }
132
134
  const resolvedCostBreakdown = payload.costBreakdown ?? (payload.provider && payload.model ? (() => {
133
- const pricing = (0, import_llm.getModelPricing)(payload.provider, payload.model);
135
+ const pricing = this.llmRegistry.getModelPricing(
136
+ payload.provider,
137
+ payload.model
138
+ );
134
139
  if (!pricing) {
135
140
  return void 0;
136
141
  }
@@ -1,10 +1,12 @@
1
1
  import { AgentEventBus, type Database } from '@dexto/core';
2
+ import { type ModelRegistry } from '@dexto/llm';
2
3
  import type { EventSubscriber } from './types.js';
3
4
  import type { UsageEventDeliveryOptions } from './usage-event-types.js';
4
5
  interface UsageEventSubscriberConfig extends UsageEventDeliveryOptions {
5
6
  database: Database;
6
7
  targetUrl: string;
7
8
  authToken: string;
9
+ llmRegistry?: ModelRegistry;
8
10
  runtimeId?: string;
9
11
  runId?: string;
10
12
  }
@@ -12,6 +14,7 @@ export declare class UsageEventSubscriber implements EventSubscriber {
12
14
  private readonly database;
13
15
  private readonly targetUrl;
14
16
  private readonly authToken;
17
+ private readonly llmRegistry;
15
18
  private readonly runtimeId;
16
19
  private readonly runId;
17
20
  private readonly deliveryOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"usage-event-subscriber.d.ts","sourceRoot":"","sources":["../../src/events/usage-event-subscriber.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAIb,KAAK,QAAQ,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAGR,yBAAyB,EAC5B,MAAM,wBAAwB,CAAC;AAqBhC,UAAU,0BAA2B,SAAQ,yBAAyB;IAClE,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,qBAAa,oBAAqB,YAAW,eAAe;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IACtE,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,+BAA+B,CAAC,CAAkB;IAC1D,OAAO,CAAC,aAAa,CAAC,CAAiC;IACvD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,0BAA0B;IA0B9C,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IA2BxC,OAAO,IAAI,IAAI;IAmBF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,OAAO,CAAC,eAAe;YAuCT,iBAAiB;YAajB,kBAAkB;YA2BlB,YAAY;YAsBZ,cAAc;CA2E/B"}
1
+ {"version":3,"file":"usage-event-subscriber.d.ts","sourceRoot":"","sources":["../../src/events/usage-event-subscriber.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAIb,KAAK,QAAQ,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAGR,yBAAyB,EAC5B,MAAM,wBAAwB,CAAC;AAqBhC,UAAU,0BAA2B,SAAQ,yBAAyB;IAClE,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,qBAAa,oBAAqB,YAAW,eAAe;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IACtE,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,+BAA+B,CAAC,CAAkB;IAC1D,OAAO,CAAC,aAAa,CAAC,CAAiC;IACvD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,0BAA0B;IA2B9C,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IA2BxC,OAAO,IAAI,IAAI;IAmBF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,OAAO,CAAC,eAAe;YA0CT,iBAAiB;YAajB,kBAAkB;YA2BlB,YAAY;YAsBZ,cAAc;CA2E/B"}
@@ -3,7 +3,7 @@ import {
3
3
  hasMeaningfulTokenUsage,
4
4
  logger
5
5
  } from "@dexto/core";
6
- import { calculateCostBreakdown, getModelPricing } from "@dexto/llm";
6
+ import { calculateCostBreakdown, DEFAULT_MODEL_REGISTRY } from "@dexto/llm";
7
7
  const OUTBOX_KEY_PREFIX = "usage-outbox:";
8
8
  const DEFAULT_DELIVERY_OPTIONS = {
9
9
  fetchFn: fetch,
@@ -29,6 +29,7 @@ class UsageEventSubscriber {
29
29
  database;
30
30
  targetUrl;
31
31
  authToken;
32
+ llmRegistry;
32
33
  runtimeId;
33
34
  runId;
34
35
  deliveryOptions;
@@ -42,6 +43,7 @@ class UsageEventSubscriber {
42
43
  this.database = config.database;
43
44
  this.targetUrl = config.targetUrl;
44
45
  this.authToken = config.authToken;
46
+ this.llmRegistry = config.llmRegistry ?? DEFAULT_MODEL_REGISTRY;
45
47
  this.runtimeId = config.runtimeId;
46
48
  this.runId = config.runId;
47
49
  const flushIntervalMs = requirePositiveIntegerOption(
@@ -110,7 +112,10 @@ class UsageEventSubscriber {
110
112
  return null;
111
113
  }
112
114
  const resolvedCostBreakdown = payload.costBreakdown ?? (payload.provider && payload.model ? (() => {
113
- const pricing = getModelPricing(payload.provider, payload.model);
115
+ const pricing = this.llmRegistry.getModelPricing(
116
+ payload.provider,
117
+ payload.model
118
+ );
114
119
  if (!pricing) {
115
120
  return void 0;
116
121
  }
@@ -49,7 +49,7 @@ const CatalogQuerySchema = import_zod_openapi.z.object({
49
49
  ).describe("Include only default models (true or false)"),
50
50
  mode: import_zod_openapi.z.enum(["grouped", "flat"]).default("grouped").describe("Response format mode (grouped by provider or flat list)")
51
51
  }).strict().describe("Query parameters for filtering and formatting the LLM catalog");
52
- const SwitchLLMBodySchema = import_core.LLMUpdatesSchema.and(
52
+ const SwitchLLMBodySchema = import_core.LLMUpdatesShapeSchema.and(
53
53
  import_zod_openapi.z.object({
54
54
  sessionId: import_zod_openapi.z.string().optional().describe("Session identifier for session-specific LLM configuration")
55
55
  })
@@ -478,12 +478,12 @@ function createLlmRouter(getAgent) {
478
478
  }
479
479
  return deduped;
480
480
  };
481
- const buildModelPickerSections = async () => {
481
+ const buildModelPickerSections = async (registry) => {
482
482
  const byKey = /* @__PURE__ */ new Map();
483
483
  const customSection = [];
484
484
  const hydrateStateEntry = (entry) => {
485
- const providerInfo = import_llm.LLM_REGISTRY[entry.provider];
486
- const modelInfo = providerInfo.models.find((model) => model.name === entry.model);
485
+ const providerInfo = registry.getProvider(entry.provider);
486
+ const modelInfo = registry.getModel(entry.provider, entry.model);
487
487
  const supportedFileTypes = Array.isArray(modelInfo?.supportedFileTypes) && modelInfo.supportedFileTypes.length > 0 ? modelInfo.supportedFileTypes : providerInfo.supportedFileTypes;
488
488
  const source = entry.provider === "local" ? "local-installed" : entry.baseURL ? "custom" : "catalog";
489
489
  return {
@@ -499,8 +499,8 @@ function createLlmRouter(getAgent) {
499
499
  if (!isProviderEnabled(provider)) {
500
500
  continue;
501
501
  }
502
- const providerInfo = import_llm.LLM_REGISTRY[provider];
503
- for (const model of (0, import_core.getAllModelsForProvider)(provider)) {
502
+ const providerInfo = registry.getProvider(provider);
503
+ for (const model of (0, import_core.getAllModelsForProvider)(provider, registry)) {
504
504
  const supportedFileTypes = Array.isArray(model.supportedFileTypes) && model.supportedFileTypes.length > 0 ? model.supportedFileTypes : providerInfo.supportedFileTypes;
505
505
  const entry = {
506
506
  provider,
@@ -521,7 +521,7 @@ function createLlmRouter(getAgent) {
521
521
  if (!isProviderEnabled(provider)) {
522
522
  continue;
523
523
  }
524
- const providerInfo = import_llm.LLM_REGISTRY[provider];
524
+ const providerInfo = registry.getProvider(provider);
525
525
  const entry = {
526
526
  provider,
527
527
  model: customModel.name,
@@ -533,7 +533,7 @@ function createLlmRouter(getAgent) {
533
533
  byKey.set((0, import_agent_management.toModelPickerKey)(entry), entry);
534
534
  customSection.push(entry);
535
535
  }
536
- const localProviderSupportedFileTypes = import_llm.LLM_REGISTRY.local.supportedFileTypes;
536
+ const localProviderSupportedFileTypes = registry.getProvider("local").supportedFileTypes;
537
537
  const installedLocalModels = await (0, import_agent_management.getAllInstalledModels)();
538
538
  for (const installedModel of installedLocalModels) {
539
539
  const modelInfo = (0, import_core.getLocalModelById)(installedModel.id);
@@ -547,10 +547,13 @@ function createLlmRouter(getAgent) {
547
547
  byKey.set((0, import_agent_management.toModelPickerKey)(entry), entry);
548
548
  }
549
549
  const featuredProviders = import_llm.LLM_PROVIDERS.filter((provider) => isProviderEnabled(provider));
550
- const featured = (0, import_core.getCuratedModelRefsForProviders)({
551
- providers: featuredProviders,
552
- max: MODEL_PICKER_FEATURED_LIMIT
553
- }).map((ref) => byKey.get((0, import_agent_management.toModelPickerKey)(ref))).filter((entry) => Boolean(entry));
550
+ const featured = (0, import_core.getCuratedModelRefsForProviders)(
551
+ {
552
+ providers: featuredProviders,
553
+ max: MODEL_PICKER_FEATURED_LIMIT
554
+ },
555
+ registry
556
+ ).map((ref) => byKey.get((0, import_agent_management.toModelPickerKey)(ref))).filter((entry) => Boolean(entry));
554
557
  const state = await (0, import_agent_management.loadModelPickerState)();
555
558
  for (const entry of [...state.recents, ...state.favorites]) {
556
559
  if (!isProviderEnabled(entry.provider)) {
@@ -584,13 +587,12 @@ function createLlmRouter(getAgent) {
584
587
  };
585
588
  return app.openapi(currentRoute, async (ctx) => {
586
589
  const agent = await getAgent(ctx);
590
+ const registry = agent.llmRegistry;
587
591
  const { sessionId } = ctx.req.valid("query");
588
592
  const currentConfig = sessionId ? agent.getEffectiveConfig(sessionId).llm : agent.getCurrentLLMConfig();
589
593
  let displayName;
590
594
  try {
591
- const model = import_llm.LLM_REGISTRY[currentConfig.provider]?.models.find(
592
- (m) => m.name.toLowerCase() === String(currentConfig.model).toLowerCase()
593
- );
595
+ const model = registry.getModel(currentConfig.provider, currentConfig.model);
594
596
  displayName = model?.displayName || void 0;
595
597
  if (!displayName) {
596
598
  const customModels = await (0, import_agent_management.loadCustomModels)();
@@ -616,7 +618,9 @@ function createLlmRouter(getAgent) {
616
618
  },
617
619
  200
618
620
  );
619
- }).openapi(catalogRoute, (ctx) => {
621
+ }).openapi(catalogRoute, async (ctx) => {
622
+ const agent = await getAgent(ctx);
623
+ const registry = agent.llmRegistry;
620
624
  const queryParams = ctx.req.valid("query");
621
625
  const includeModels = queryParams.includeModels ?? true;
622
626
  const scope = queryParams.scope ?? "all";
@@ -625,21 +629,21 @@ function createLlmRouter(getAgent) {
625
629
  if (provider === "dexto-nova" && !(0, import_agent_management.isDextoAuthEnabled)()) {
626
630
  continue;
627
631
  }
628
- const info = import_llm.LLM_REGISTRY[provider];
632
+ const info = registry.getProvider(provider);
629
633
  const displayName = provider === "dexto-nova" ? "Dexto Nova" : provider.charAt(0).toUpperCase() + provider.slice(1);
630
634
  const keyStatus = (0, import_agent_management.getProviderKeyStatus)(provider);
631
635
  const models = (() => {
632
636
  if (!includeModels) return [];
633
637
  if (scope === "all") {
634
- return (0, import_core.getAllModelsForProvider)(provider);
638
+ return (0, import_core.getAllModelsForProvider)(provider, registry);
635
639
  }
636
- return (0, import_core.getCuratedModelsForProvider)(provider);
640
+ return (0, import_core.getCuratedModelsForProvider)(provider, void 0, registry);
637
641
  })();
638
642
  providers[provider] = {
639
643
  name: displayName,
640
644
  hasApiKey: keyStatus.hasApiKey,
641
645
  primaryEnvVar: keyStatus.envVar,
642
- supportsBaseURL: (0, import_llm.supportsBaseURL)(provider),
646
+ supportsBaseURL: registry.supportsBaseURL(provider),
643
647
  models,
644
648
  supportedFileTypes: info.supportedFileTypes
645
649
  };
@@ -747,7 +751,8 @@ function createLlmRouter(getAgent) {
747
751
  }
748
752
  return ctx.json({ ok: true, deleted: name }, 200);
749
753
  }).openapi(modelPickerStateRoute, async (ctx) => {
750
- const sections = await buildModelPickerSections();
754
+ const agent = await getAgent(ctx);
755
+ const sections = await buildModelPickerSections(agent.llmRegistry);
751
756
  return ctx.json(sections, 200);
752
757
  }).openapi(recordRecentModelRoute, async (ctx) => {
753
758
  const modelRef = ctx.req.valid("json");
@@ -775,16 +780,23 @@ function createLlmRouter(getAgent) {
775
780
  },
776
781
  200
777
782
  );
778
- }).openapi(capabilitiesRoute, (ctx) => {
783
+ }).openapi(capabilitiesRoute, async (ctx) => {
784
+ const agent = await getAgent(ctx);
785
+ const registry = agent.llmRegistry;
779
786
  const { provider, model } = ctx.req.valid("query");
780
787
  let supportedFileTypes;
781
788
  try {
782
- supportedFileTypes = (0, import_core.getSupportedFileTypesForModel)(provider, model);
789
+ supportedFileTypes = (0, import_core.getSupportedFileTypesForModel)(
790
+ provider,
791
+ model,
792
+ void 0,
793
+ registry
794
+ );
783
795
  } catch {
784
- const providerInfo = import_llm.LLM_REGISTRY[provider];
796
+ const providerInfo = registry.getProvider(provider);
785
797
  supportedFileTypes = providerInfo?.supportedFileTypes ?? [];
786
798
  }
787
- const reasoning = (0, import_llm.getReasoningProfile)(provider, model);
799
+ const reasoning = (0, import_llm.getReasoningProfile)(provider, model, registry);
788
800
  return ctx.json(
789
801
  {
790
802
  provider,
@@ -57,7 +57,7 @@ declare const SwitchLLMBodySchema: z.ZodIntersection<z.ZodObject<{
57
57
  maxOutputTokens: z.ZodOptional<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
58
58
  temperature: z.ZodOptional<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
59
59
  allowedMediaTypes: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
60
- }, z.core.$strip>, z.ZodObject<{
60
+ }, z.core.$strict>, z.ZodObject<{
61
61
  sessionId: z.ZodOptional<z.ZodString>;
62
62
  }, z.core.$strip>>;
63
63
  declare const ModelPickerModelRefSchema: z.ZodObject<{
@@ -1156,7 +1156,7 @@ declare const switchRoute: {
1156
1156
  maxOutputTokens: z.ZodOptional<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
1157
1157
  temperature: z.ZodOptional<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
1158
1158
  allowedMediaTypes: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
1159
- }, z.core.$strip>, z.ZodObject<{
1159
+ }, z.core.$strict>, z.ZodObject<{
1160
1160
  sessionId: z.ZodOptional<z.ZodString>;
1161
1161
  }, z.core.$strip>>;
1162
1162
  };
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/hono/routes/llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAuBhE,OAAO,EAaH,iBAAiB,EAEpB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGlE,QAAA,MAAM,kBAAkB;;kBAQ+C,CAAC;AAExE,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;kBA0DsD,CAAC;AAI/E,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOoD,CAAC;AAE9E,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;kBAOuC,CAAC;AAiDvE,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;kBASgC,CAAC;AAE9D,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;kBAO6B,CAAC;AAE1D,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsChB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ChB,CAAC;AAEH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCf,CAAC;AAEH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqBzB,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B1B,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAocnD;AAED,KAAK,kBAAkB,GAAG,kBAAkB,CACxC,OAAO,YAAY,EACnB;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;CAAE,CAChD,CAAC;AACF,KAAK,kBAAkB,GAAG,kBAAkB,CACxC,OAAO,YAAY,EACnB;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;CAAE,CAChD,CAAC;AACF,KAAK,iBAAiB,GAAG,kBAAkB,CACvC,OAAO,WAAW,EAClB;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;CAAE,CAChD,CAAC;AACF,KAAK,2BAA2B,GAAG,kBAAkB,CAAC,OAAO,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACxF,KAAK,4BAA4B,GAAG,kBAAkB,CAClD,OAAO,sBAAsB,EAC7B;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;CAAE,CAC9C,CAAC;AACF,KAAK,4BAA4B,GAAG,kBAAkB,CAClD,OAAO,sBAAsB,EAC7B;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAC9B,CAAC;AACF,KAAK,uBAAuB,GAAG,kBAAkB,CAC7C,OAAO,iBAAiB,EACxB;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;CAAE,CACrD,CAAC;AACF,KAAK,2BAA2B,GAAG,kBAAkB,CAAC,OAAO,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACxF,KAAK,4BAA4B,GAAG,kBAAkB,CAClD,OAAO,sBAAsB,EAC7B;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;CAAE,CACtD,CAAC;AACF,KAAK,8BAA8B,GAAG,kBAAkB,CACpD,OAAO,wBAAwB,EAC/B;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;CAAE,CACtD,CAAC;AACF,KAAK,uBAAuB,GAAG,kBAAkB,CAC7C,OAAO,iBAAiB,EACxB;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;CAAE,CACnD,CAAC;AAEF,MAAM,MAAM,eAAe,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,2BAA2B,GAC3B,4BAA4B,GAC5B,4BAA4B,GAC5B,uBAAuB,GACvB,2BAA2B,GAC3B,4BAA4B,GAC5B,8BAA8B,GAC9B,uBAAuB,CAAC"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/hono/routes/llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAsBhE,OAAO,EAaH,iBAAiB,EAEpB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGlE,QAAA,MAAM,kBAAkB;;kBAQ+C,CAAC;AAExE,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;kBA0DsD,CAAC;AAI/E,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOoD,CAAC;AAE9E,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;kBAOuC,CAAC;AAiDvE,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;kBASgC,CAAC;AAE9D,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;kBAO6B,CAAC;AAE1D,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsChB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ChB,CAAC;AAEH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCf,CAAC;AAEH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqBzB,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B1B,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgdnD;AAED,KAAK,kBAAkB,GAAG,kBAAkB,CACxC,OAAO,YAAY,EACnB;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;CAAE,CAChD,CAAC;AACF,KAAK,kBAAkB,GAAG,kBAAkB,CACxC,OAAO,YAAY,EACnB;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;CAAE,CAChD,CAAC;AACF,KAAK,iBAAiB,GAAG,kBAAkB,CACvC,OAAO,WAAW,EAClB;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;CAAE,CAChD,CAAC;AACF,KAAK,2BAA2B,GAAG,kBAAkB,CAAC,OAAO,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACxF,KAAK,4BAA4B,GAAG,kBAAkB,CAClD,OAAO,sBAAsB,EAC7B;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;CAAE,CAC9C,CAAC;AACF,KAAK,4BAA4B,GAAG,kBAAkB,CAClD,OAAO,sBAAsB,EAC7B;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAC9B,CAAC;AACF,KAAK,uBAAuB,GAAG,kBAAkB,CAC7C,OAAO,iBAAiB,EACxB;IAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;CAAE,CACrD,CAAC;AACF,KAAK,2BAA2B,GAAG,kBAAkB,CAAC,OAAO,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACxF,KAAK,4BAA4B,GAAG,kBAAkB,CAClD,OAAO,sBAAsB,EAC7B;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;CAAE,CACtD,CAAC;AACF,KAAK,8BAA8B,GAAG,kBAAkB,CACpD,OAAO,wBAAwB,EAC/B;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;CAAE,CACtD,CAAC;AACF,KAAK,uBAAuB,GAAG,kBAAkB,CAC7C,OAAO,iBAAiB,EACxB;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;CAAE,CACnD,CAAC;AAEF,MAAM,MAAM,eAAe,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,2BAA2B,GAC3B,4BAA4B,GAC5B,4BAA4B,GAC5B,uBAAuB,GACvB,2BAA2B,GAC3B,4BAA4B,GAC5B,8BAA8B,GAC9B,uBAAuB,CAAC"}
@@ -9,14 +9,12 @@ import {
9
9
  getCuratedModelRefsForProviders,
10
10
  getSupportedFileTypesForModel,
11
11
  getLocalModelById,
12
- LLMUpdatesSchema
12
+ LLMUpdatesShapeSchema
13
13
  } from "@dexto/core";
14
14
  import {
15
- LLM_REGISTRY,
16
15
  LLM_PROVIDERS,
17
16
  SUPPORTED_FILE_TYPES,
18
- getReasoningProfile,
19
- supportsBaseURL
17
+ getReasoningProfile
20
18
  } from "@dexto/llm";
21
19
  import {
22
20
  getProviderKeyStatus,
@@ -67,7 +65,7 @@ const CatalogQuerySchema = z.object({
67
65
  ).describe("Include only default models (true or false)"),
68
66
  mode: z.enum(["grouped", "flat"]).default("grouped").describe("Response format mode (grouped by provider or flat list)")
69
67
  }).strict().describe("Query parameters for filtering and formatting the LLM catalog");
70
- const SwitchLLMBodySchema = LLMUpdatesSchema.and(
68
+ const SwitchLLMBodySchema = LLMUpdatesShapeSchema.and(
71
69
  z.object({
72
70
  sessionId: z.string().optional().describe("Session identifier for session-specific LLM configuration")
73
71
  })
@@ -496,12 +494,12 @@ function createLlmRouter(getAgent) {
496
494
  }
497
495
  return deduped;
498
496
  };
499
- const buildModelPickerSections = async () => {
497
+ const buildModelPickerSections = async (registry) => {
500
498
  const byKey = /* @__PURE__ */ new Map();
501
499
  const customSection = [];
502
500
  const hydrateStateEntry = (entry) => {
503
- const providerInfo = LLM_REGISTRY[entry.provider];
504
- const modelInfo = providerInfo.models.find((model) => model.name === entry.model);
501
+ const providerInfo = registry.getProvider(entry.provider);
502
+ const modelInfo = registry.getModel(entry.provider, entry.model);
505
503
  const supportedFileTypes = Array.isArray(modelInfo?.supportedFileTypes) && modelInfo.supportedFileTypes.length > 0 ? modelInfo.supportedFileTypes : providerInfo.supportedFileTypes;
506
504
  const source = entry.provider === "local" ? "local-installed" : entry.baseURL ? "custom" : "catalog";
507
505
  return {
@@ -517,8 +515,8 @@ function createLlmRouter(getAgent) {
517
515
  if (!isProviderEnabled(provider)) {
518
516
  continue;
519
517
  }
520
- const providerInfo = LLM_REGISTRY[provider];
521
- for (const model of getAllModelsForProvider(provider)) {
518
+ const providerInfo = registry.getProvider(provider);
519
+ for (const model of getAllModelsForProvider(provider, registry)) {
522
520
  const supportedFileTypes = Array.isArray(model.supportedFileTypes) && model.supportedFileTypes.length > 0 ? model.supportedFileTypes : providerInfo.supportedFileTypes;
523
521
  const entry = {
524
522
  provider,
@@ -539,7 +537,7 @@ function createLlmRouter(getAgent) {
539
537
  if (!isProviderEnabled(provider)) {
540
538
  continue;
541
539
  }
542
- const providerInfo = LLM_REGISTRY[provider];
540
+ const providerInfo = registry.getProvider(provider);
543
541
  const entry = {
544
542
  provider,
545
543
  model: customModel.name,
@@ -551,7 +549,7 @@ function createLlmRouter(getAgent) {
551
549
  byKey.set(toModelPickerKey(entry), entry);
552
550
  customSection.push(entry);
553
551
  }
554
- const localProviderSupportedFileTypes = LLM_REGISTRY.local.supportedFileTypes;
552
+ const localProviderSupportedFileTypes = registry.getProvider("local").supportedFileTypes;
555
553
  const installedLocalModels = await getAllInstalledModels();
556
554
  for (const installedModel of installedLocalModels) {
557
555
  const modelInfo = getLocalModelById(installedModel.id);
@@ -565,10 +563,13 @@ function createLlmRouter(getAgent) {
565
563
  byKey.set(toModelPickerKey(entry), entry);
566
564
  }
567
565
  const featuredProviders = LLM_PROVIDERS.filter((provider) => isProviderEnabled(provider));
568
- const featured = getCuratedModelRefsForProviders({
569
- providers: featuredProviders,
570
- max: MODEL_PICKER_FEATURED_LIMIT
571
- }).map((ref) => byKey.get(toModelPickerKey(ref))).filter((entry) => Boolean(entry));
566
+ const featured = getCuratedModelRefsForProviders(
567
+ {
568
+ providers: featuredProviders,
569
+ max: MODEL_PICKER_FEATURED_LIMIT
570
+ },
571
+ registry
572
+ ).map((ref) => byKey.get(toModelPickerKey(ref))).filter((entry) => Boolean(entry));
572
573
  const state = await loadModelPickerState();
573
574
  for (const entry of [...state.recents, ...state.favorites]) {
574
575
  if (!isProviderEnabled(entry.provider)) {
@@ -602,13 +603,12 @@ function createLlmRouter(getAgent) {
602
603
  };
603
604
  return app.openapi(currentRoute, async (ctx) => {
604
605
  const agent = await getAgent(ctx);
606
+ const registry = agent.llmRegistry;
605
607
  const { sessionId } = ctx.req.valid("query");
606
608
  const currentConfig = sessionId ? agent.getEffectiveConfig(sessionId).llm : agent.getCurrentLLMConfig();
607
609
  let displayName;
608
610
  try {
609
- const model = LLM_REGISTRY[currentConfig.provider]?.models.find(
610
- (m) => m.name.toLowerCase() === String(currentConfig.model).toLowerCase()
611
- );
611
+ const model = registry.getModel(currentConfig.provider, currentConfig.model);
612
612
  displayName = model?.displayName || void 0;
613
613
  if (!displayName) {
614
614
  const customModels = await loadCustomModels();
@@ -634,7 +634,9 @@ function createLlmRouter(getAgent) {
634
634
  },
635
635
  200
636
636
  );
637
- }).openapi(catalogRoute, (ctx) => {
637
+ }).openapi(catalogRoute, async (ctx) => {
638
+ const agent = await getAgent(ctx);
639
+ const registry = agent.llmRegistry;
638
640
  const queryParams = ctx.req.valid("query");
639
641
  const includeModels = queryParams.includeModels ?? true;
640
642
  const scope = queryParams.scope ?? "all";
@@ -643,21 +645,21 @@ function createLlmRouter(getAgent) {
643
645
  if (provider === "dexto-nova" && !isDextoAuthEnabled()) {
644
646
  continue;
645
647
  }
646
- const info = LLM_REGISTRY[provider];
648
+ const info = registry.getProvider(provider);
647
649
  const displayName = provider === "dexto-nova" ? "Dexto Nova" : provider.charAt(0).toUpperCase() + provider.slice(1);
648
650
  const keyStatus = getProviderKeyStatus(provider);
649
651
  const models = (() => {
650
652
  if (!includeModels) return [];
651
653
  if (scope === "all") {
652
- return getAllModelsForProvider(provider);
654
+ return getAllModelsForProvider(provider, registry);
653
655
  }
654
- return getCuratedModelsForProvider(provider);
656
+ return getCuratedModelsForProvider(provider, void 0, registry);
655
657
  })();
656
658
  providers[provider] = {
657
659
  name: displayName,
658
660
  hasApiKey: keyStatus.hasApiKey,
659
661
  primaryEnvVar: keyStatus.envVar,
660
- supportsBaseURL: supportsBaseURL(provider),
662
+ supportsBaseURL: registry.supportsBaseURL(provider),
661
663
  models,
662
664
  supportedFileTypes: info.supportedFileTypes
663
665
  };
@@ -765,7 +767,8 @@ function createLlmRouter(getAgent) {
765
767
  }
766
768
  return ctx.json({ ok: true, deleted: name }, 200);
767
769
  }).openapi(modelPickerStateRoute, async (ctx) => {
768
- const sections = await buildModelPickerSections();
770
+ const agent = await getAgent(ctx);
771
+ const sections = await buildModelPickerSections(agent.llmRegistry);
769
772
  return ctx.json(sections, 200);
770
773
  }).openapi(recordRecentModelRoute, async (ctx) => {
771
774
  const modelRef = ctx.req.valid("json");
@@ -793,16 +796,23 @@ function createLlmRouter(getAgent) {
793
796
  },
794
797
  200
795
798
  );
796
- }).openapi(capabilitiesRoute, (ctx) => {
799
+ }).openapi(capabilitiesRoute, async (ctx) => {
800
+ const agent = await getAgent(ctx);
801
+ const registry = agent.llmRegistry;
797
802
  const { provider, model } = ctx.req.valid("query");
798
803
  let supportedFileTypes;
799
804
  try {
800
- supportedFileTypes = getSupportedFileTypesForModel(provider, model);
805
+ supportedFileTypes = getSupportedFileTypesForModel(
806
+ provider,
807
+ model,
808
+ void 0,
809
+ registry
810
+ );
801
811
  } catch {
802
- const providerInfo = LLM_REGISTRY[provider];
812
+ const providerInfo = registry.getProvider(provider);
803
813
  supportedFileTypes = providerInfo?.supportedFileTypes ?? [];
804
814
  }
805
- const reasoning = getReasoningProfile(provider, model);
815
+ const reasoning = getReasoningProfile(provider, model, registry);
806
816
  return ctx.json(
807
817
  {
808
818
  provider,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dexto/server",
3
- "version": "1.10.2",
3
+ "version": "1.10.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -31,13 +31,13 @@
31
31
  "ws": "^8.18.1",
32
32
  "yaml": "^2.8.3",
33
33
  "@modelcontextprotocol/sdk": "^1.28.0",
34
- "@dexto/agent-config": "1.10.2",
35
- "@dexto/agent-management": "1.10.2",
36
- "@dexto/core": "1.10.2",
37
- "@dexto/image-local": "1.10.2",
38
- "@dexto/llm": "1.10.2",
39
- "@dexto/storage": "1.10.2",
40
- "@dexto/tools-scheduler": "1.10.2"
34
+ "@dexto/agent-config": "1.10.4",
35
+ "@dexto/agent-management": "1.10.4",
36
+ "@dexto/core": "1.10.4",
37
+ "@dexto/image-local": "1.10.4",
38
+ "@dexto/llm": "1.10.4",
39
+ "@dexto/storage": "1.10.4",
40
+ "@dexto/tools-scheduler": "1.10.4"
41
41
  },
42
42
  "files": [
43
43
  "dist",