@dexto/core 1.5.6 → 1.5.8

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.
Files changed (217) hide show
  1. package/dist/agent/DextoAgent.cjs +189 -30
  2. package/dist/agent/DextoAgent.d.ts +44 -9
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +190 -31
  5. package/dist/agent/schemas.cjs +5 -0
  6. package/dist/agent/schemas.d.ts +456 -66
  7. package/dist/agent/schemas.d.ts.map +1 -1
  8. package/dist/agent/schemas.js +5 -0
  9. package/dist/context/manager.cjs +1 -1
  10. package/dist/context/manager.js +1 -1
  11. package/dist/context/utils.cjs +90 -17
  12. package/dist/context/utils.d.ts.map +1 -1
  13. package/dist/context/utils.js +90 -17
  14. package/dist/errors/types.cjs +2 -1
  15. package/dist/errors/types.d.ts +2 -1
  16. package/dist/errors/types.d.ts.map +1 -1
  17. package/dist/errors/types.js +2 -1
  18. package/dist/events/index.cjs +4 -1
  19. package/dist/events/index.d.ts +37 -2
  20. package/dist/events/index.d.ts.map +1 -1
  21. package/dist/events/index.js +4 -1
  22. package/dist/image/types.d.ts +15 -0
  23. package/dist/image/types.d.ts.map +1 -1
  24. package/dist/index.browser.d.ts +1 -1
  25. package/dist/index.browser.d.ts.map +1 -1
  26. package/dist/llm/curation-config.cjs +82 -0
  27. package/dist/llm/curation-config.d.ts +13 -0
  28. package/dist/llm/curation-config.d.ts.map +1 -0
  29. package/dist/llm/curation-config.js +59 -0
  30. package/dist/llm/curation.cjs +57 -0
  31. package/dist/llm/curation.d.ts +16 -0
  32. package/dist/llm/curation.d.ts.map +1 -0
  33. package/dist/llm/curation.js +34 -0
  34. package/dist/llm/error-codes.cjs +1 -0
  35. package/dist/llm/error-codes.d.ts +1 -0
  36. package/dist/llm/error-codes.d.ts.map +1 -1
  37. package/dist/llm/error-codes.js +1 -0
  38. package/dist/llm/errors.cjs +16 -1
  39. package/dist/llm/errors.d.ts +15 -8
  40. package/dist/llm/errors.d.ts.map +1 -1
  41. package/dist/llm/errors.js +16 -1
  42. package/dist/llm/executor/provider-options.cjs +1 -1
  43. package/dist/llm/executor/provider-options.js +1 -1
  44. package/dist/llm/executor/turn-executor.cjs +35 -2
  45. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  46. package/dist/llm/executor/turn-executor.js +35 -2
  47. package/dist/llm/index.cjs +14 -3
  48. package/dist/llm/index.d.ts +3 -1
  49. package/dist/llm/index.d.ts.map +1 -1
  50. package/dist/llm/index.js +13 -2
  51. package/dist/llm/registry/auto-update.cjs +263 -0
  52. package/dist/llm/registry/auto-update.d.ts +27 -0
  53. package/dist/llm/registry/auto-update.d.ts.map +1 -0
  54. package/dist/llm/registry/auto-update.js +227 -0
  55. package/dist/llm/registry/index.cjs +806 -0
  56. package/dist/llm/{registry.d.ts → registry/index.d.ts} +67 -13
  57. package/dist/llm/registry/index.d.ts.map +1 -0
  58. package/dist/llm/registry/index.js +756 -0
  59. package/dist/llm/registry/models.generated.cjs +4861 -0
  60. package/dist/llm/registry/models.generated.d.ts +431 -0
  61. package/dist/llm/registry/models.generated.d.ts.map +1 -0
  62. package/dist/llm/registry/models.generated.js +4838 -0
  63. package/dist/llm/registry/models.manual.cjs +44 -0
  64. package/dist/llm/registry/models.manual.d.ts +22 -0
  65. package/dist/llm/registry/models.manual.d.ts.map +1 -0
  66. package/dist/llm/registry/models.manual.js +21 -0
  67. package/dist/llm/registry/sync.cjs +354 -0
  68. package/dist/llm/registry/sync.d.ts +41 -0
  69. package/dist/llm/registry/sync.d.ts.map +1 -0
  70. package/dist/llm/registry/sync.js +328 -0
  71. package/dist/llm/resolver.cjs +29 -7
  72. package/dist/llm/resolver.d.ts +1 -1
  73. package/dist/llm/resolver.d.ts.map +1 -1
  74. package/dist/llm/resolver.js +31 -8
  75. package/dist/llm/schemas.cjs +13 -1
  76. package/dist/llm/schemas.d.ts +59 -59
  77. package/dist/llm/schemas.d.ts.map +1 -1
  78. package/dist/llm/schemas.js +14 -1
  79. package/dist/llm/services/factory.cjs +43 -27
  80. package/dist/llm/services/factory.d.ts +20 -1
  81. package/dist/llm/services/factory.d.ts.map +1 -1
  82. package/dist/llm/services/factory.js +44 -28
  83. package/dist/llm/services/test-utils.integration.cjs +5 -1
  84. package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
  85. package/dist/llm/services/test-utils.integration.js +5 -1
  86. package/dist/llm/services/vercel.cjs +4 -1
  87. package/dist/llm/services/vercel.d.ts +1 -0
  88. package/dist/llm/services/vercel.d.ts.map +1 -1
  89. package/dist/llm/services/vercel.js +4 -1
  90. package/dist/llm/types.cjs +5 -2
  91. package/dist/llm/types.d.ts +1 -1
  92. package/dist/llm/types.d.ts.map +1 -1
  93. package/dist/llm/types.js +5 -2
  94. package/dist/llm/validation.cjs +1 -1
  95. package/dist/llm/validation.js +1 -1
  96. package/dist/logger/v2/dexto-logger.cjs +4 -0
  97. package/dist/logger/v2/dexto-logger.d.ts +3 -0
  98. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  99. package/dist/logger/v2/dexto-logger.js +4 -0
  100. package/dist/logger/v2/types.d.ts +2 -0
  101. package/dist/logger/v2/types.d.ts.map +1 -1
  102. package/dist/mcp/error-codes.cjs +1 -0
  103. package/dist/mcp/error-codes.d.ts +1 -0
  104. package/dist/mcp/error-codes.d.ts.map +1 -1
  105. package/dist/mcp/error-codes.js +1 -0
  106. package/dist/mcp/errors.cjs +13 -0
  107. package/dist/mcp/errors.d.ts +7 -0
  108. package/dist/mcp/errors.d.ts.map +1 -1
  109. package/dist/mcp/errors.js +13 -0
  110. package/dist/mcp/manager.cjs +46 -4
  111. package/dist/mcp/manager.d.ts +10 -2
  112. package/dist/mcp/manager.d.ts.map +1 -1
  113. package/dist/mcp/manager.js +46 -4
  114. package/dist/mcp/mcp-client.cjs +89 -5
  115. package/dist/mcp/mcp-client.d.ts +5 -1
  116. package/dist/mcp/mcp-client.d.ts.map +1 -1
  117. package/dist/mcp/mcp-client.js +89 -5
  118. package/dist/mcp/schemas.cjs +6 -1
  119. package/dist/mcp/schemas.d.ts +1 -1
  120. package/dist/mcp/schemas.d.ts.map +1 -1
  121. package/dist/mcp/schemas.js +6 -1
  122. package/dist/mcp/types.d.ts +5 -0
  123. package/dist/mcp/types.d.ts.map +1 -1
  124. package/dist/prompts/index.d.ts +1 -1
  125. package/dist/prompts/index.d.ts.map +1 -1
  126. package/dist/prompts/prompt-manager.cjs +90 -4
  127. package/dist/prompts/prompt-manager.d.ts +16 -6
  128. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  129. package/dist/prompts/prompt-manager.js +90 -4
  130. package/dist/prompts/providers/config-prompt-provider.cjs +104 -10
  131. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  132. package/dist/prompts/providers/config-prompt-provider.js +105 -11
  133. package/dist/prompts/providers/custom-prompt-provider.cjs +1 -0
  134. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  135. package/dist/prompts/providers/custom-prompt-provider.js +1 -0
  136. package/dist/prompts/providers/mcp-prompt-provider.cjs +1 -0
  137. package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
  138. package/dist/prompts/providers/mcp-prompt-provider.js +1 -0
  139. package/dist/prompts/schemas.cjs +28 -2
  140. package/dist/prompts/schemas.d.ts +130 -0
  141. package/dist/prompts/schemas.d.ts.map +1 -1
  142. package/dist/prompts/schemas.js +28 -2
  143. package/dist/prompts/types.d.ts +55 -3
  144. package/dist/prompts/types.d.ts.map +1 -1
  145. package/dist/resources/handlers/filesystem-handler.cjs +25 -0
  146. package/dist/resources/handlers/filesystem-handler.d.ts +1 -0
  147. package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
  148. package/dist/resources/handlers/filesystem-handler.js +25 -0
  149. package/dist/session/chat-session.cjs +1 -1
  150. package/dist/session/chat-session.d.ts +1 -1
  151. package/dist/session/chat-session.d.ts.map +1 -1
  152. package/dist/session/chat-session.js +1 -1
  153. package/dist/session/index.d.ts +1 -1
  154. package/dist/session/index.d.ts.map +1 -1
  155. package/dist/session/message-queue.cjs +29 -5
  156. package/dist/session/message-queue.d.ts +3 -1
  157. package/dist/session/message-queue.d.ts.map +1 -1
  158. package/dist/session/message-queue.js +29 -5
  159. package/dist/session/session-manager.cjs +84 -3
  160. package/dist/session/session-manager.d.ts +12 -0
  161. package/dist/session/session-manager.d.ts.map +1 -1
  162. package/dist/session/session-manager.js +74 -3
  163. package/dist/session/types.d.ts +1 -0
  164. package/dist/session/types.d.ts.map +1 -1
  165. package/dist/systemPrompt/contributors.cjs +42 -0
  166. package/dist/systemPrompt/contributors.d.ts +13 -0
  167. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  168. package/dist/systemPrompt/contributors.js +41 -0
  169. package/dist/tools/errors.cjs +7 -3
  170. package/dist/tools/errors.d.ts +5 -1
  171. package/dist/tools/errors.d.ts.map +1 -1
  172. package/dist/tools/errors.js +7 -3
  173. package/dist/tools/internal-tools/constants.cjs +2 -1
  174. package/dist/tools/internal-tools/constants.d.ts +1 -1
  175. package/dist/tools/internal-tools/constants.d.ts.map +1 -1
  176. package/dist/tools/internal-tools/constants.js +2 -1
  177. package/dist/tools/internal-tools/implementations/invoke-skill-tool.cjs +140 -0
  178. package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts +24 -0
  179. package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts.map +1 -0
  180. package/dist/tools/internal-tools/implementations/invoke-skill-tool.js +117 -0
  181. package/dist/tools/internal-tools/provider.cjs +15 -0
  182. package/dist/tools/internal-tools/provider.d.ts +15 -1
  183. package/dist/tools/internal-tools/provider.d.ts.map +1 -1
  184. package/dist/tools/internal-tools/provider.js +15 -0
  185. package/dist/tools/internal-tools/registry.cjs +6 -0
  186. package/dist/tools/internal-tools/registry.d.ts +35 -1
  187. package/dist/tools/internal-tools/registry.d.ts.map +1 -1
  188. package/dist/tools/internal-tools/registry.js +6 -0
  189. package/dist/tools/schemas.d.ts +1 -1
  190. package/dist/tools/schemas.d.ts.map +1 -1
  191. package/dist/tools/tool-call-metadata.cjs +75 -0
  192. package/dist/tools/tool-call-metadata.d.ts +16 -0
  193. package/dist/tools/tool-call-metadata.d.ts.map +1 -0
  194. package/dist/tools/tool-call-metadata.js +51 -0
  195. package/dist/tools/tool-manager.cjs +481 -103
  196. package/dist/tools/tool-manager.d.ts +131 -9
  197. package/dist/tools/tool-manager.d.ts.map +1 -1
  198. package/dist/tools/tool-manager.js +482 -104
  199. package/dist/utils/api-key-resolver.cjs +5 -2
  200. package/dist/utils/api-key-resolver.d.ts.map +1 -1
  201. package/dist/utils/api-key-resolver.js +5 -2
  202. package/dist/utils/env.cjs +49 -0
  203. package/dist/utils/env.d.ts +4 -0
  204. package/dist/utils/env.d.ts.map +1 -0
  205. package/dist/utils/env.js +24 -0
  206. package/dist/utils/index.cjs +3 -1
  207. package/dist/utils/index.d.ts +1 -0
  208. package/dist/utils/index.d.ts.map +1 -1
  209. package/dist/utils/index.js +1 -0
  210. package/dist/utils/service-initializer.cjs +25 -7
  211. package/dist/utils/service-initializer.d.ts +24 -1
  212. package/dist/utils/service-initializer.d.ts.map +1 -1
  213. package/dist/utils/service-initializer.js +25 -7
  214. package/package.json +6 -2
  215. package/dist/llm/registry.cjs +0 -1631
  216. package/dist/llm/registry.d.ts.map +0 -1
  217. package/dist/llm/registry.js +0 -1586
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var models_manual_exports = {};
20
+ __export(models_manual_exports, {
21
+ MANUAL_MODELS_BY_PROVIDER: () => MANUAL_MODELS_BY_PROVIDER
22
+ });
23
+ module.exports = __toCommonJS(models_manual_exports);
24
+ const MANUAL_MODELS_BY_PROVIDER = {
25
+ openai: [
26
+ {
27
+ name: "gpt-4o-audio-preview",
28
+ displayName: "GPT-4o Audio Preview",
29
+ maxInputTokens: 128e3,
30
+ supportedFileTypes: ["audio"],
31
+ pricing: {
32
+ inputPerM: 2.5,
33
+ outputPerM: 10,
34
+ cacheReadPerM: 1.25,
35
+ currency: "USD",
36
+ unit: "per_million_tokens"
37
+ }
38
+ }
39
+ ]
40
+ };
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ MANUAL_MODELS_BY_PROVIDER
44
+ });
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Manually-maintained registry entries for models that we want to support even when models.dev
3
+ * doesn't include them (e.g., legacy IDs used in configs/tests).
4
+ *
5
+ * Keep this list small and intentional.
6
+ */
7
+ export declare const MANUAL_MODELS_BY_PROVIDER: {
8
+ openai: {
9
+ name: string;
10
+ displayName: string;
11
+ maxInputTokens: number;
12
+ supportedFileTypes: "audio"[];
13
+ pricing: {
14
+ inputPerM: number;
15
+ outputPerM: number;
16
+ cacheReadPerM: number;
17
+ currency: "USD";
18
+ unit: "per_million_tokens";
19
+ };
20
+ }[];
21
+ };
22
+ //# sourceMappingURL=models.manual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.manual.d.ts","sourceRoot":"","sources":["../../../src/llm/registry/models.manual.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;CAgBe,CAAC"}
@@ -0,0 +1,21 @@
1
+ import "../../chunk-PTJYTZNU.js";
2
+ const MANUAL_MODELS_BY_PROVIDER = {
3
+ openai: [
4
+ {
5
+ name: "gpt-4o-audio-preview",
6
+ displayName: "GPT-4o Audio Preview",
7
+ maxInputTokens: 128e3,
8
+ supportedFileTypes: ["audio"],
9
+ pricing: {
10
+ inputPerM: 2.5,
11
+ outputPerM: 10,
12
+ cacheReadPerM: 1.25,
13
+ currency: "USD",
14
+ unit: "per_million_tokens"
15
+ }
16
+ }
17
+ ]
18
+ };
19
+ export {
20
+ MANUAL_MODELS_BY_PROVIDER
21
+ };
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var sync_exports = {};
20
+ __export(sync_exports, {
21
+ MODELS_DEV_URL: () => MODELS_DEV_URL,
22
+ buildModelsByProviderFromParsedSources: () => buildModelsByProviderFromParsedSources,
23
+ buildModelsByProviderFromRemote: () => buildModelsByProviderFromRemote,
24
+ parseModelsDevApi: () => parseModelsDevApi
25
+ });
26
+ module.exports = __toCommonJS(sync_exports);
27
+ var import_DextoValidationError = require("../../errors/DextoValidationError.js");
28
+ var import_DextoRuntimeError = require("../../errors/DextoRuntimeError.js");
29
+ var import_types = require("../../errors/types.js");
30
+ const MODELS_DEV_URL = "https://models.dev/api.json";
31
+ function isRecord(value) {
32
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33
+ }
34
+ function makeIssue(message, path) {
35
+ return {
36
+ code: "llm_registry_models_dev_parse",
37
+ message,
38
+ scope: import_types.ErrorScope.LLM,
39
+ type: import_types.ErrorType.USER,
40
+ severity: "error",
41
+ ...path ? { path } : {}
42
+ };
43
+ }
44
+ function requireRecord(value, label) {
45
+ if (!isRecord(value))
46
+ throw new import_DextoValidationError.DextoValidationError([makeIssue(`Expected ${label} to be an object`)]);
47
+ return value;
48
+ }
49
+ function requireString(value, label) {
50
+ if (typeof value !== "string")
51
+ throw new import_DextoValidationError.DextoValidationError([makeIssue(`Expected ${label} to be a string`)]);
52
+ return value;
53
+ }
54
+ function requireNumber(value, label) {
55
+ if (typeof value !== "number" || Number.isNaN(value)) {
56
+ throw new import_DextoValidationError.DextoValidationError([makeIssue(`Expected ${label} to be a number`)]);
57
+ }
58
+ return value;
59
+ }
60
+ function parseModelsDevApi(json) {
61
+ const root = requireRecord(json, "models.dev api.json root");
62
+ const api = {};
63
+ function parseModalitiesArray(value) {
64
+ if (!Array.isArray(value)) return [];
65
+ const result = [];
66
+ for (const item of value) {
67
+ if (item === "text" || item === "audio" || item === "image" || item === "video" || item === "pdf") {
68
+ result.push(item);
69
+ }
70
+ }
71
+ return result;
72
+ }
73
+ for (const [providerId, providerValue] of Object.entries(root)) {
74
+ if (!isRecord(providerValue)) continue;
75
+ const provider = providerValue;
76
+ const models = requireRecord(provider.models, `models.dev provider '${providerId}'.models`);
77
+ const parsedProvider = {
78
+ id: requireString(provider.id ?? providerId, `models.dev provider '${providerId}'.id`),
79
+ name: requireString(
80
+ provider.name ?? providerId,
81
+ `models.dev provider '${providerId}'.name`
82
+ ),
83
+ models: {}
84
+ };
85
+ for (const [modelId, modelValue] of Object.entries(models)) {
86
+ if (!isRecord(modelValue)) continue;
87
+ const m = modelValue;
88
+ const limit = requireRecord(
89
+ m.limit,
90
+ `models.dev model '${providerId}/${modelId}'.limit`
91
+ );
92
+ const parsedModel = {
93
+ id: requireString(
94
+ m.id ?? modelId,
95
+ `models.dev model '${providerId}/${modelId}'.id`
96
+ ),
97
+ name: requireString(
98
+ m.name ?? modelId,
99
+ `models.dev model '${providerId}/${modelId}'.name`
100
+ ),
101
+ attachment: Boolean(m.attachment),
102
+ limit: {
103
+ context: requireNumber(
104
+ limit.context,
105
+ `models.dev model '${providerId}/${modelId}'.limit.context`
106
+ ),
107
+ ...typeof limit.input === "number" ? { input: limit.input } : {},
108
+ ...typeof limit.output === "number" ? { output: limit.output } : {}
109
+ },
110
+ modalities: isRecord(m.modalities) ? {
111
+ input: parseModalitiesArray(m.modalities.input),
112
+ output: parseModalitiesArray(m.modalities.output)
113
+ } : void 0,
114
+ cost: isRecord(m.cost) && typeof m.cost.input === "number" && typeof m.cost.output === "number" ? {
115
+ input: m.cost.input,
116
+ output: m.cost.output,
117
+ ...typeof m.cost.cache_read === "number" ? { cache_read: m.cost.cache_read } : {},
118
+ ...typeof m.cost.cache_write === "number" ? { cache_write: m.cost.cache_write } : {},
119
+ ...m.cost.context_over_200k != null ? { context_over_200k: m.cost.context_over_200k } : {}
120
+ } : void 0
121
+ };
122
+ parsedProvider.models[modelId] = parsedModel;
123
+ }
124
+ api[providerId] = parsedProvider;
125
+ }
126
+ return api;
127
+ }
128
+ function getSupportedFileTypesFromModel(provider, model) {
129
+ const inputModalities = model.modalities?.input ?? [];
130
+ const fileTypes = [];
131
+ if (inputModalities.includes("pdf")) fileTypes.push("pdf");
132
+ if (inputModalities.includes("image")) fileTypes.push("image");
133
+ if (inputModalities.includes("audio")) fileTypes.push("audio");
134
+ if (provider === "openai" && model.attachment === true && inputModalities.includes("image")) {
135
+ if (!fileTypes.includes("pdf")) fileTypes.unshift("pdf");
136
+ }
137
+ return fileTypes;
138
+ }
139
+ function getPricing(model) {
140
+ if (!model.cost) return void 0;
141
+ return {
142
+ inputPerM: model.cost.input,
143
+ outputPerM: model.cost.output,
144
+ ...typeof model.cost.cache_read === "number" ? { cacheReadPerM: model.cost.cache_read } : {},
145
+ ...typeof model.cost.cache_write === "number" ? { cacheWritePerM: model.cost.cache_write } : {},
146
+ currency: "USD",
147
+ unit: "per_million_tokens"
148
+ };
149
+ }
150
+ function modelToModelInfo(provider, model, options) {
151
+ const pricing = getPricing(model);
152
+ return {
153
+ name: model.id,
154
+ displayName: model.name,
155
+ maxInputTokens: model.limit.input ?? model.limit.context,
156
+ supportedFileTypes: getSupportedFileTypesFromModel(provider, model),
157
+ ...pricing ? { pricing } : {},
158
+ ...options.defaultModelId === model.id ? { default: true } : {}
159
+ };
160
+ }
161
+ function buildModelsFromModelsDevProvider(params) {
162
+ const { spec, modelsDevApi } = params;
163
+ const modelsDevProvider = modelsDevApi[spec.modelsDevProviderId];
164
+ if (!modelsDevProvider) {
165
+ throw new import_DextoRuntimeError.DextoRuntimeError(
166
+ "llm_registry_models_dev_provider_missing",
167
+ import_types.ErrorScope.LLM,
168
+ import_types.ErrorType.THIRD_PARTY,
169
+ `models.dev provider '${spec.modelsDevProviderId}' not found (needed for dexto-nova provider '${spec.provider}')`,
170
+ { modelsDevProviderId: spec.modelsDevProviderId, provider: spec.provider }
171
+ );
172
+ }
173
+ const results = [];
174
+ for (const [modelId, model] of Object.entries(modelsDevProvider.models)) {
175
+ if (!spec.includeModelId(modelId)) continue;
176
+ const options = {
177
+ ...spec.defaultModelId ? { defaultModelId: spec.defaultModelId } : {}
178
+ };
179
+ results.push(modelToModelInfo(spec.provider, model, options));
180
+ }
181
+ results.sort((a, b) => a.name.localeCompare(b.name));
182
+ return results;
183
+ }
184
+ function buildModelsByProviderFromParsedSources(params) {
185
+ const { modelsDevApi } = params;
186
+ const defaults = {
187
+ openai: "gpt-5-mini",
188
+ anthropic: "claude-haiku-4-5-20251001",
189
+ google: "gemini-3-flash-preview",
190
+ groq: "llama-3.3-70b-versatile",
191
+ xai: "grok-4",
192
+ cohere: "command-a-03-2025",
193
+ minimax: "MiniMax-M2.1",
194
+ glm: "glm-4.7",
195
+ vertex: "gemini-3-flash-preview",
196
+ bedrock: "anthropic.claude-sonnet-4-5-20250929-v1:0"
197
+ };
198
+ const include = {
199
+ openai: (id) => id.startsWith("gpt-") || id.startsWith("o"),
200
+ anthropic: (id) => id.startsWith("claude-"),
201
+ google: (id) => id.startsWith("gemini-"),
202
+ groq: (_id) => true,
203
+ xai: (id) => id.startsWith("grok-"),
204
+ cohere: (id) => id.startsWith("command-"),
205
+ minimax: (_id) => true,
206
+ glm: (id) => id.startsWith("glm-"),
207
+ vertex: (_id) => true,
208
+ bedrock: (_id) => true,
209
+ openrouter: (_id) => true
210
+ };
211
+ const modelsByProvider = {
212
+ openai: buildModelsFromModelsDevProvider({
213
+ spec: {
214
+ provider: "openai",
215
+ modelsDevProviderId: "openai",
216
+ ...defaults.openai ? { defaultModelId: defaults.openai } : {},
217
+ includeModelId: include.openai
218
+ },
219
+ modelsDevApi
220
+ }),
221
+ "openai-compatible": [],
222
+ anthropic: buildModelsFromModelsDevProvider({
223
+ spec: {
224
+ provider: "anthropic",
225
+ modelsDevProviderId: "anthropic",
226
+ ...defaults.anthropic ? { defaultModelId: defaults.anthropic } : {},
227
+ includeModelId: include.anthropic
228
+ },
229
+ modelsDevApi
230
+ }),
231
+ google: buildModelsFromModelsDevProvider({
232
+ spec: {
233
+ provider: "google",
234
+ modelsDevProviderId: "google",
235
+ ...defaults.google ? { defaultModelId: defaults.google } : {},
236
+ includeModelId: include.google
237
+ },
238
+ modelsDevApi
239
+ }),
240
+ groq: buildModelsFromModelsDevProvider({
241
+ spec: {
242
+ provider: "groq",
243
+ modelsDevProviderId: "groq",
244
+ ...defaults.groq ? { defaultModelId: defaults.groq } : {},
245
+ includeModelId: include.groq
246
+ },
247
+ modelsDevApi
248
+ }),
249
+ xai: buildModelsFromModelsDevProvider({
250
+ spec: {
251
+ provider: "xai",
252
+ modelsDevProviderId: "xai",
253
+ ...defaults.xai ? { defaultModelId: defaults.xai } : {},
254
+ includeModelId: include.xai
255
+ },
256
+ modelsDevApi
257
+ }),
258
+ cohere: buildModelsFromModelsDevProvider({
259
+ spec: {
260
+ provider: "cohere",
261
+ modelsDevProviderId: "cohere",
262
+ ...defaults.cohere ? { defaultModelId: defaults.cohere } : {},
263
+ includeModelId: include.cohere
264
+ },
265
+ modelsDevApi
266
+ }),
267
+ minimax: buildModelsFromModelsDevProvider({
268
+ spec: {
269
+ provider: "minimax",
270
+ modelsDevProviderId: "minimax",
271
+ ...defaults.minimax ? { defaultModelId: defaults.minimax } : {},
272
+ includeModelId: include.minimax
273
+ },
274
+ modelsDevApi
275
+ }),
276
+ glm: buildModelsFromModelsDevProvider({
277
+ spec: {
278
+ provider: "glm",
279
+ modelsDevProviderId: "zhipuai",
280
+ ...defaults.glm ? { defaultModelId: defaults.glm } : {},
281
+ includeModelId: include.glm
282
+ },
283
+ modelsDevApi
284
+ }),
285
+ openrouter: buildModelsFromModelsDevProvider({
286
+ spec: {
287
+ provider: "openrouter",
288
+ modelsDevProviderId: "openrouter",
289
+ includeModelId: include.openrouter
290
+ },
291
+ modelsDevApi
292
+ }),
293
+ litellm: [],
294
+ glama: [],
295
+ vertex: [
296
+ ...buildModelsFromModelsDevProvider({
297
+ spec: {
298
+ provider: "vertex",
299
+ modelsDevProviderId: "google-vertex",
300
+ ...defaults.vertex ? { defaultModelId: defaults.vertex } : {},
301
+ includeModelId: include.vertex
302
+ },
303
+ modelsDevApi
304
+ }),
305
+ ...buildModelsFromModelsDevProvider({
306
+ spec: {
307
+ provider: "vertex",
308
+ modelsDevProviderId: "google-vertex-anthropic",
309
+ includeModelId: include.vertex
310
+ },
311
+ modelsDevApi
312
+ })
313
+ ].sort((a, b) => a.name.localeCompare(b.name)),
314
+ bedrock: buildModelsFromModelsDevProvider({
315
+ spec: {
316
+ provider: "bedrock",
317
+ modelsDevProviderId: "amazon-bedrock",
318
+ ...defaults.bedrock ? { defaultModelId: defaults.bedrock } : {},
319
+ includeModelId: include.bedrock
320
+ },
321
+ modelsDevApi
322
+ }).map((m) => ({ ...m, name: m.name.replace(/^(eu\.|us\.|global\.)/i, "") })).filter((m, idx, arr) => arr.findIndex((x) => x.name === m.name) === idx).sort((a, b) => a.name.localeCompare(b.name)),
323
+ local: [],
324
+ ollama: [],
325
+ "dexto-nova": []
326
+ };
327
+ return modelsByProvider;
328
+ }
329
+ async function buildModelsByProviderFromRemote(options) {
330
+ const timeoutMs = options?.timeoutMs ?? 3e4;
331
+ const userAgent = options?.userAgent ?? "dexto-llm-registry";
332
+ const modelsDevRes = await fetch(options?.modelsDevUrl ?? MODELS_DEV_URL, {
333
+ headers: { "User-Agent": userAgent },
334
+ signal: AbortSignal.timeout(timeoutMs)
335
+ });
336
+ if (!modelsDevRes.ok) {
337
+ throw new import_DextoRuntimeError.DextoRuntimeError(
338
+ "llm_registry_models_dev_fetch_failed",
339
+ import_types.ErrorScope.LLM,
340
+ import_types.ErrorType.THIRD_PARTY,
341
+ `Failed to fetch models.dev (${modelsDevRes.status} ${modelsDevRes.statusText})`,
342
+ { status: modelsDevRes.status, statusText: modelsDevRes.statusText }
343
+ );
344
+ }
345
+ const modelsDevApi = parseModelsDevApi(await modelsDevRes.json());
346
+ return buildModelsByProviderFromParsedSources({ modelsDevApi });
347
+ }
348
+ // Annotate the CommonJS export names for ESM import in node:
349
+ 0 && (module.exports = {
350
+ MODELS_DEV_URL,
351
+ buildModelsByProviderFromParsedSources,
352
+ buildModelsByProviderFromRemote,
353
+ parseModelsDevApi
354
+ });
@@ -0,0 +1,41 @@
1
+ import type { LLMProvider } from '../types.js';
2
+ import type { ModelInfo } from './index.js';
3
+ export declare const MODELS_DEV_URL = "https://models.dev/api.json";
4
+ type ModelsDevApi = Record<string, ModelsDevProvider>;
5
+ type ModelsDevProvider = {
6
+ id: string;
7
+ name: string;
8
+ models: Record<string, ModelsDevModel>;
9
+ };
10
+ type ModelsDevModel = {
11
+ id: string;
12
+ name: string;
13
+ attachment: boolean;
14
+ limit: {
15
+ context: number;
16
+ input?: number;
17
+ output?: number;
18
+ };
19
+ modalities?: {
20
+ input: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>;
21
+ output: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>;
22
+ } | undefined;
23
+ cost?: {
24
+ input: number;
25
+ output: number;
26
+ cache_read?: number;
27
+ cache_write?: number;
28
+ context_over_200k?: unknown;
29
+ } | undefined;
30
+ };
31
+ export declare function parseModelsDevApi(json: unknown): ModelsDevApi;
32
+ export declare function buildModelsByProviderFromParsedSources(params: {
33
+ modelsDevApi: ModelsDevApi;
34
+ }): Record<LLMProvider, ModelInfo[]>;
35
+ export declare function buildModelsByProviderFromRemote(options?: {
36
+ modelsDevUrl?: string;
37
+ userAgent?: string;
38
+ timeoutMs?: number;
39
+ }): Promise<Record<LLMProvider, ModelInfo[]>>;
40
+ export {};
41
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/llm/registry/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,eAAO,MAAM,cAAc,gCAAgC,CAAC;AAE5D,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACtD,KAAK,iBAAiB,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C,CAAC;AACF,KAAK,cAAc,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EACL;QACI,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;KAC/D,GACD,SAAS,CAAC;IAChB,IAAI,CAAC,EACC;QACI,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC/B,GACD,SAAS,CAAC;CACnB,CAAC;AAoCF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAgG7D;AA2FD,wBAAgB,sCAAsC,CAAC,MAAM,EAAE;IAC3D,YAAY,EAAE,YAAY,CAAC;CAC9B,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAuJnC;AAED,wBAAsB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAoB5C"}