@n8n/ai-utilities 0.22.7 → 0.23.1

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 (101) hide show
  1. package/dist/cjs/model-discovery/index.d.ts +16 -0
  2. package/dist/cjs/model-discovery/index.js +73 -0
  3. package/dist/cjs/model-discovery/index.js.map +1 -0
  4. package/dist/cjs/model-discovery/providers/anthropic.d.ts +2 -0
  5. package/dist/cjs/model-discovery/providers/anthropic.js +23 -0
  6. package/dist/cjs/model-discovery/providers/anthropic.js.map +1 -0
  7. package/dist/cjs/model-discovery/providers/cohere.d.ts +2 -0
  8. package/dist/cjs/model-discovery/providers/cohere.js +23 -0
  9. package/dist/cjs/model-discovery/providers/cohere.js.map +1 -0
  10. package/dist/cjs/model-discovery/providers/deepseek.d.ts +1 -0
  11. package/dist/cjs/model-discovery/providers/deepseek.js +16 -0
  12. package/dist/cjs/model-discovery/providers/deepseek.js.map +1 -0
  13. package/dist/cjs/model-discovery/providers/google.d.ts +2 -0
  14. package/dist/cjs/model-discovery/providers/google.js +26 -0
  15. package/dist/cjs/model-discovery/providers/google.js.map +1 -0
  16. package/dist/cjs/model-discovery/providers/groq.d.ts +2 -0
  17. package/dist/cjs/model-discovery/providers/groq.js +20 -0
  18. package/dist/cjs/model-discovery/providers/groq.js.map +1 -0
  19. package/dist/cjs/model-discovery/providers/mistral.d.ts +2 -0
  20. package/dist/cjs/model-discovery/providers/mistral.js +22 -0
  21. package/dist/cjs/model-discovery/providers/mistral.js.map +1 -0
  22. package/dist/cjs/model-discovery/providers/nvidia.d.ts +2 -0
  23. package/dist/cjs/model-discovery/providers/nvidia.js +32 -0
  24. package/dist/cjs/model-discovery/providers/nvidia.js.map +1 -0
  25. package/dist/cjs/model-discovery/providers/openai.d.ts +3 -0
  26. package/dist/cjs/model-discovery/providers/openai.js +42 -0
  27. package/dist/cjs/model-discovery/providers/openai.js.map +1 -0
  28. package/dist/cjs/model-discovery/providers/openrouter.d.ts +1 -0
  29. package/dist/cjs/model-discovery/providers/openrouter.js +16 -0
  30. package/dist/cjs/model-discovery/providers/openrouter.js.map +1 -0
  31. package/dist/cjs/model-discovery/providers/vercel.d.ts +1 -0
  32. package/dist/cjs/model-discovery/providers/vercel.js +16 -0
  33. package/dist/cjs/model-discovery/providers/vercel.js.map +1 -0
  34. package/dist/cjs/model-discovery/providers/xai.d.ts +1 -0
  35. package/dist/cjs/model-discovery/providers/xai.js +16 -0
  36. package/dist/cjs/model-discovery/providers/xai.js.map +1 -0
  37. package/dist/cjs/model-discovery/request.d.ts +10 -0
  38. package/dist/cjs/model-discovery/request.js +51 -0
  39. package/dist/cjs/model-discovery/request.js.map +1 -0
  40. package/dist/cjs/model-discovery/types.d.ts +11 -0
  41. package/dist/cjs/model-discovery/types.js +13 -0
  42. package/dist/cjs/model-discovery/types.js.map +1 -0
  43. package/dist/cjs/node-catalog/get.js +41 -2
  44. package/dist/cjs/node-catalog/get.js.map +1 -1
  45. package/dist/cjs/node-catalog/search-engine.js +4 -4
  46. package/dist/cjs/node-catalog/search-engine.js.map +1 -1
  47. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  48. package/dist/cjs/utils/redact-headers.d.ts +1 -3
  49. package/dist/cjs/utils/redact-headers.js +5 -5
  50. package/dist/cjs/utils/redact-headers.js.map +1 -1
  51. package/dist/esm/model-discovery/index.d.ts +16 -0
  52. package/dist/esm/model-discovery/index.js +63 -0
  53. package/dist/esm/model-discovery/index.js.map +1 -0
  54. package/dist/esm/model-discovery/providers/anthropic.d.ts +2 -0
  55. package/dist/esm/model-discovery/providers/anthropic.js +13 -0
  56. package/dist/esm/model-discovery/providers/anthropic.js.map +1 -0
  57. package/dist/esm/model-discovery/providers/cohere.d.ts +2 -0
  58. package/dist/esm/model-discovery/providers/cohere.js +13 -0
  59. package/dist/esm/model-discovery/providers/cohere.js.map +1 -0
  60. package/dist/esm/model-discovery/providers/deepseek.d.ts +1 -0
  61. package/dist/esm/model-discovery/providers/deepseek.js +6 -0
  62. package/dist/esm/model-discovery/providers/deepseek.js.map +1 -0
  63. package/dist/esm/model-discovery/providers/google.d.ts +2 -0
  64. package/dist/esm/model-discovery/providers/google.js +16 -0
  65. package/dist/esm/model-discovery/providers/google.js.map +1 -0
  66. package/dist/esm/model-discovery/providers/groq.d.ts +2 -0
  67. package/dist/esm/model-discovery/providers/groq.js +10 -0
  68. package/dist/esm/model-discovery/providers/groq.js.map +1 -0
  69. package/dist/esm/model-discovery/providers/mistral.d.ts +2 -0
  70. package/dist/esm/model-discovery/providers/mistral.js +12 -0
  71. package/dist/esm/model-discovery/providers/mistral.js.map +1 -0
  72. package/dist/esm/model-discovery/providers/nvidia.d.ts +2 -0
  73. package/dist/esm/model-discovery/providers/nvidia.js +22 -0
  74. package/dist/esm/model-discovery/providers/nvidia.js.map +1 -0
  75. package/dist/esm/model-discovery/providers/openai.d.ts +3 -0
  76. package/dist/esm/model-discovery/providers/openai.js +32 -0
  77. package/dist/esm/model-discovery/providers/openai.js.map +1 -0
  78. package/dist/esm/model-discovery/providers/openrouter.d.ts +1 -0
  79. package/dist/esm/model-discovery/providers/openrouter.js +6 -0
  80. package/dist/esm/model-discovery/providers/openrouter.js.map +1 -0
  81. package/dist/esm/model-discovery/providers/vercel.d.ts +1 -0
  82. package/dist/esm/model-discovery/providers/vercel.js +6 -0
  83. package/dist/esm/model-discovery/providers/vercel.js.map +1 -0
  84. package/dist/esm/model-discovery/providers/xai.d.ts +1 -0
  85. package/dist/esm/model-discovery/providers/xai.js +6 -0
  86. package/dist/esm/model-discovery/providers/xai.js.map +1 -0
  87. package/dist/esm/model-discovery/request.d.ts +10 -0
  88. package/dist/esm/model-discovery/request.js +41 -0
  89. package/dist/esm/model-discovery/request.js.map +1 -0
  90. package/dist/esm/model-discovery/types.d.ts +11 -0
  91. package/dist/esm/model-discovery/types.js +3 -0
  92. package/dist/esm/model-discovery/types.js.map +1 -0
  93. package/dist/esm/node-catalog/get.js +41 -2
  94. package/dist/esm/node-catalog/get.js.map +1 -1
  95. package/dist/esm/node-catalog/search-engine.js +3 -3
  96. package/dist/esm/node-catalog/search-engine.js.map +1 -1
  97. package/dist/esm/typecheck.tsbuildinfo +1 -1
  98. package/dist/esm/utils/redact-headers.d.ts +1 -3
  99. package/dist/esm/utils/redact-headers.js +4 -4
  100. package/dist/esm/utils/redact-headers.js.map +1 -1
  101. package/package.json +16 -7
@@ -1,7 +1,5 @@
1
+ import type { SerializedFields } from '@langchain/core/dist/load/map_keys';
1
2
  import type { SerializedNotImplemented, SerializedSecret } from '@langchain/core/load/serializable';
2
- interface SerializedFields {
3
- [key: string]: any;
4
- }
5
3
  type SerializedOptions = SerializedSecret | SerializedNotImplemented | SerializedFields;
6
4
  export declare function redactHeaderValues(options: SerializedOptions, headerNames: string[]): SerializedOptions;
7
5
  export {};
@@ -4,13 +4,13 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "@n8n/utils"], factory);
7
+ define(["require", "exports", "@n8n/utils/is-record"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.redactHeaderValues = redactHeaderValues;
13
- const utils_1 = require("@n8n/utils");
13
+ const is_record_1 = require("@n8n/utils/is-record");
14
14
  const REDACTED_HEADER_VALUE = '**********';
15
15
  const HEADER_CONTAINER_KEYS = ['defaultheaders', 'headers'];
16
16
  const ALWAYS_REDACTED_HEADERS = ['authorization', 'x-api-key', 'api-key', 'cookie'];
@@ -38,11 +38,11 @@
38
38
  });
39
39
  return result ?? value;
40
40
  }
41
- if (!(0, utils_1.isRecord)(value))
41
+ if (!(0, is_record_1.isRecord)(value))
42
42
  return value;
43
43
  let result;
44
44
  for (const [key, child] of Object.entries(value)) {
45
- const masked = HEADER_CONTAINER_KEYS.includes(key.toLowerCase()) && (0, utils_1.isRecord)(child)
45
+ const masked = HEADER_CONTAINER_KEYS.includes(key.toLowerCase()) && (0, is_record_1.isRecord)(child)
46
46
  ? maskHeaderContainer(child, lowerHeaderNames)
47
47
  : redactValue(child, lowerHeaderNames);
48
48
  if (masked !== child) {
@@ -54,7 +54,7 @@
54
54
  }
55
55
  function redactHeaderValues(options, headerNames) {
56
56
  const redacted = redactValue(options, headerNames.map((name) => name.toLowerCase()));
57
- return (0, utils_1.isRecord)(redacted) ? redacted : options;
57
+ return (0, is_record_1.isRecord)(redacted) ? redacted : options;
58
58
  }
59
59
  });
60
60
  //# sourceMappingURL=redact-headers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact-headers.js","sourceRoot":"","sources":["../../../src/utils/redact-headers.ts"],"names":[],"mappings":";;;;;;;;;;;IA6DA,gDASC;IArED,sCAAsC;IAStC,MAAM,qBAAqB,GAAG,YAAY,CAAC;IAE3C,MAAM,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAE5D,MAAM,uBAAuB,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEpF,SAAS,mBAAmB,CAC3B,OAAgC,EAChC,gBAA0B;QAE1B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvF,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;gBACpC,OAAO,GAAG,IAAI,CAAC;YAChB,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,SAAS,WAAW,CAAC,KAAc,EAAE,gBAA0B;QAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,MAA6B,CAAC;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;gBACxB,CAAC;YACF,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,IAAI,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,IAAA,gBAAQ,EAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,IAAI,MAA2C,CAAC;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,MAAM,GACX,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC;gBACnE,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC;gBAC9C,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACtB,MAAM,GAAG,MAAM,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACtB,CAAC;QACF,CAAC;QACD,OAAO,MAAM,IAAI,KAAK,CAAC;IACxB,CAAC;IAED,SAAgB,kBAAkB,CACjC,OAA0B,EAC1B,WAAqB;QAErB,MAAM,QAAQ,GAAG,WAAW,CAC3B,OAAO,EACP,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAC7C,CAAC;QACF,OAAO,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,CAAC"}
1
+ {"version":3,"file":"redact-headers.js","sourceRoot":"","sources":["../../../src/utils/redact-headers.ts"],"names":[],"mappings":";;;;;;;;;;;IAyDA,gDASC;IAhED,oDAAgD;IAIhD,MAAM,qBAAqB,GAAG,YAAY,CAAC;IAE3C,MAAM,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAE5D,MAAM,uBAAuB,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEpF,SAAS,mBAAmB,CAC3B,OAAgC,EAChC,gBAA0B;QAE1B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvF,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;gBACpC,OAAO,GAAG,IAAI,CAAC;YAChB,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,SAAS,WAAW,CAAC,KAAc,EAAE,gBAA0B;QAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,MAA6B,CAAC;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;gBACxB,CAAC;YACF,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,IAAI,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,IAAA,oBAAQ,EAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,IAAI,MAA2C,CAAC;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,MAAM,GACX,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,IAAA,oBAAQ,EAAC,KAAK,CAAC;gBACnE,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC;gBAC9C,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACtB,MAAM,GAAG,MAAM,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACtB,CAAC;QACF,CAAC;QACD,OAAO,MAAM,IAAI,KAAK,CAAC;IACxB,CAAC;IAED,SAAgB,kBAAkB,CACjC,OAA0B,EAC1B,WAAqB;QAErB,MAAM,QAAQ,GAAG,WAAW,CAC3B,OAAO,EACP,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAC7C,CAAC;QACF,OAAO,IAAA,oBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ListModelsFn, ListModelsOptions, ProviderModel } from './types';
2
+ export declare const MODEL_DISCOVERY_PROVIDERS: Record<string, ListModelsFn>;
3
+ export declare function isModelDiscoveryProvider(provider: string): boolean;
4
+ export declare function listModelsForProvider(provider: string, options: ListModelsOptions): Promise<ProviderModel[]>;
5
+ export { listAnthropicModels } from './providers/anthropic';
6
+ export { listCohereModels } from './providers/cohere';
7
+ export { listDeepSeekModels } from './providers/deepseek';
8
+ export { listGoogleModels } from './providers/google';
9
+ export { listGroqModels } from './providers/groq';
10
+ export { listMistralModels } from './providers/mistral';
11
+ export { listNvidiaModels } from './providers/nvidia';
12
+ export { listOpenAiModels, shouldIncludeOpenAiModel } from './providers/openai';
13
+ export { listOpenRouterModels } from './providers/openrouter';
14
+ export { listVercelModels } from './providers/vercel';
15
+ export { listXaiModels } from './providers/xai';
16
+ export type { ListModelsFn, ListModelsOptions, ProviderModel } from './types';
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listXaiModels = exports.listVercelModels = exports.listOpenRouterModels = exports.shouldIncludeOpenAiModel = exports.listOpenAiModels = exports.listNvidiaModels = exports.listMistralModels = exports.listGroqModels = exports.listGoogleModels = exports.listDeepSeekModels = exports.listCohereModels = exports.listAnthropicModels = exports.MODEL_DISCOVERY_PROVIDERS = void 0;
4
+ exports.isModelDiscoveryProvider = isModelDiscoveryProvider;
5
+ exports.listModelsForProvider = listModelsForProvider;
6
+ const anthropic_1 = require("./providers/anthropic");
7
+ const cohere_1 = require("./providers/cohere");
8
+ const deepseek_1 = require("./providers/deepseek");
9
+ const google_1 = require("./providers/google");
10
+ const groq_1 = require("./providers/groq");
11
+ const mistral_1 = require("./providers/mistral");
12
+ const nvidia_1 = require("./providers/nvidia");
13
+ const openai_1 = require("./providers/openai");
14
+ const openrouter_1 = require("./providers/openrouter");
15
+ const vercel_1 = require("./providers/vercel");
16
+ const xai_1 = require("./providers/xai");
17
+ exports.MODEL_DISCOVERY_PROVIDERS = {
18
+ anthropic: anthropic_1.listAnthropicModels,
19
+ cohere: cohere_1.listCohereModels,
20
+ deepseek: deepseek_1.listDeepSeekModels,
21
+ google: google_1.listGoogleModels,
22
+ groq: groq_1.listGroqModels,
23
+ mistral: mistral_1.listMistralModels,
24
+ nvidia: nvidia_1.listNvidiaModels,
25
+ openai: openai_1.listOpenAiModels,
26
+ openrouter: openrouter_1.listOpenRouterModels,
27
+ vercel: vercel_1.listVercelModels,
28
+ xai: xai_1.listXaiModels,
29
+ };
30
+ function isModelDiscoveryProvider(provider) {
31
+ return provider in exports.MODEL_DISCOVERY_PROVIDERS;
32
+ }
33
+ async function listModelsForProvider(provider, options) {
34
+ const listModels = exports.MODEL_DISCOVERY_PROVIDERS[provider];
35
+ if (!listModels) {
36
+ throw new Error(`Unknown model discovery provider: "${provider}"`);
37
+ }
38
+ return await listModels(options);
39
+ }
40
+ var anthropic_2 = require("./providers/anthropic");
41
+ Object.defineProperty(exports, "listAnthropicModels", { enumerable: true, get: function () { return anthropic_2.listAnthropicModels; } });
42
+ var cohere_2 = require("./providers/cohere");
43
+ Object.defineProperty(exports, "listCohereModels", { enumerable: true, get: function () { return cohere_2.listCohereModels; } });
44
+ var deepseek_2 = require("./providers/deepseek");
45
+ Object.defineProperty(exports, "listDeepSeekModels", { enumerable: true, get: function () { return deepseek_2.listDeepSeekModels; } });
46
+ var google_2 = require("./providers/google");
47
+ Object.defineProperty(exports, "listGoogleModels", { enumerable: true, get: function () { return google_2.listGoogleModels; } });
48
+ var groq_2 = require("./providers/groq");
49
+ Object.defineProperty(exports, "listGroqModels", { enumerable: true, get: function () { return groq_2.listGroqModels; } });
50
+ var mistral_2 = require("./providers/mistral");
51
+ Object.defineProperty(exports, "listMistralModels", { enumerable: true, get: function () { return mistral_2.listMistralModels; } });
52
+ var nvidia_2 = require("./providers/nvidia");
53
+ Object.defineProperty(exports, "listNvidiaModels", { enumerable: true, get: function () { return nvidia_2.listNvidiaModels; } });
54
+ var openai_2 = require("./providers/openai");
55
+ Object.defineProperty(exports, "listOpenAiModels", { enumerable: true, get: function () { return openai_2.listOpenAiModels; } });
56
+ Object.defineProperty(exports, "shouldIncludeOpenAiModel", { enumerable: true, get: function () { return openai_2.shouldIncludeOpenAiModel; } });
57
+ var openrouter_2 = require("./providers/openrouter");
58
+ Object.defineProperty(exports, "listOpenRouterModels", { enumerable: true, get: function () { return openrouter_2.listOpenRouterModels; } });
59
+ var vercel_2 = require("./providers/vercel");
60
+ Object.defineProperty(exports, "listVercelModels", { enumerable: true, get: function () { return vercel_2.listVercelModels; } });
61
+ var xai_2 = require("./providers/xai");
62
+ Object.defineProperty(exports, "listXaiModels", { enumerable: true, get: function () { return xai_2.listXaiModels; } });
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/model-discovery/index.ts"],"names":[],"mappings":";;;AAsCA,4DAEC;AAED,sDASC;AAnDD,qDAA4D;AAC5D,+CAAsD;AACtD,mDAA0D;AAC1D,+CAAsD;AACtD,2CAAkD;AAClD,iDAAwD;AACxD,+CAAsD;AACtD,+CAAsD;AACtD,uDAA8D;AAC9D,+CAAsD;AACtD,yCAAgD;AAcnC,QAAA,yBAAyB,GAAiC;IACtE,SAAS,EAAE,+BAAmB;IAC9B,MAAM,EAAE,yBAAgB;IACxB,QAAQ,EAAE,6BAAkB;IAC5B,MAAM,EAAE,yBAAgB;IACxB,IAAI,EAAE,qBAAc;IACpB,OAAO,EAAE,2BAAiB;IAC1B,MAAM,EAAE,yBAAgB;IACxB,MAAM,EAAE,yBAAgB;IACxB,UAAU,EAAE,iCAAoB;IAChC,MAAM,EAAE,yBAAgB;IACxB,GAAG,EAAE,mBAAa;CAClB,CAAC;AAEF,SAAgB,wBAAwB,CAAC,QAAgB;IACxD,OAAO,QAAQ,IAAI,iCAAyB,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAC1C,QAAgB,EAChB,OAA0B;IAE1B,MAAM,UAAU,GAAG,iCAAyB,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,mDAA4D;AAAnD,gHAAA,mBAAmB,OAAA;AAC5B,6CAAsD;AAA7C,0GAAA,gBAAgB,OAAA;AACzB,iDAA0D;AAAjD,8GAAA,kBAAkB,OAAA;AAC3B,6CAAsD;AAA7C,0GAAA,gBAAgB,OAAA;AACzB,yCAAkD;AAAzC,sGAAA,cAAc,OAAA;AACvB,+CAAwD;AAA/C,4GAAA,iBAAiB,OAAA;AAC1B,6CAAsD;AAA7C,0GAAA,gBAAgB,OAAA;AACzB,6CAAgF;AAAvE,0GAAA,gBAAgB,OAAA;AAAE,kHAAA,wBAAwB,OAAA;AACnD,qDAA8D;AAArD,kHAAA,oBAAoB,OAAA;AAC7B,6CAAsD;AAA7C,0GAAA,gBAAgB,OAAA;AACzB,uCAAgD;AAAvC,oGAAA,aAAa,OAAA"}
@@ -0,0 +1,2 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare const listAnthropicModels: ListModelsFn;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listAnthropicModels = void 0;
4
+ const request_1 = require("../request");
5
+ const listAnthropicModels = async (options) => {
6
+ const data = (await (0, request_1.getJson)(`${(0, request_1.baseUrl)(options, 'https://api.anthropic.com')}/v1/models`, { 'x-api-key': options.apiKey, 'anthropic-version': '2023-06-01' }, options, 'anthropic'));
7
+ return (data.data ?? [])
8
+ .slice()
9
+ .sort((a, b) => new Date(b.created_at ?? 0).getTime() - new Date(a.created_at ?? 0).getTime())
10
+ .map((model) => ({ id: model.id, name: model.display_name ?? model.id }));
11
+ };
12
+ exports.listAnthropicModels = listAnthropicModels;
13
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/anthropic.ts"],"names":[],"mappings":";;;AAAA,wCAA8C;AAIvC,MAAM,mBAAmB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAClE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAC1B,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,2BAA2B,CAAC,YAAY,EAC5D,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,EAClE,OAAO,EACP,WAAW,CACX,CAAiF,CAAC;IAEnF,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;SACtB,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7F,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC,CAAC;AAZW,QAAA,mBAAmB,uBAY9B"}
@@ -0,0 +1,2 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare const listCohereModels: ListModelsFn;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listCohereModels = void 0;
4
+ const request_1 = require("../request");
5
+ const listCohereModels = async (options) => {
6
+ const data = (await (0, request_1.getJson)(`${(0, request_1.baseUrl)(options, 'https://api.cohere.ai')}/v1/models?page_size=100&endpoint=chat`, (0, request_1.bearerHeaders)(options), options, 'cohere'));
7
+ return (data.models ?? [])
8
+ .filter((model) => typeof model.name === 'string')
9
+ .map((model) => ({ id: model.name, name: model.name }))
10
+ .sort(request_1.byName);
11
+ };
12
+ exports.listCohereModels = listCohereModels;
13
+ //# sourceMappingURL=cohere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/cohere.ts"],"names":[],"mappings":";;;AAAA,wCAAqE;AAI9D,MAAM,gBAAgB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAC1B,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,uBAAuB,CAAC,wCAAwC,EACpF,IAAA,uBAAa,EAAC,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,CACR,CAA2C,CAAC;IAE7C,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC5E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;SACtD,IAAI,CAAC,gBAAM,CAAC,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B"}
@@ -0,0 +1 @@
1
+ export declare const listDeepSeekModels: import("..").ListModelsFn;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listDeepSeekModels = void 0;
4
+ const request_1 = require("../request");
5
+ exports.listDeepSeekModels = (0, request_1.makeBearerDataListing)('deepseek', 'https://api.deepseek.com');
6
+ //# sourceMappingURL=deepseek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/deepseek.ts"],"names":[],"mappings":";;;AAAA,wCAAmD;AAGtC,QAAA,kBAAkB,GAAG,IAAA,+BAAqB,EAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare const listGoogleModels: ListModelsFn;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listGoogleModels = void 0;
4
+ const request_1 = require("../request");
5
+ const listGoogleModels = async (options) => {
6
+ const base = (0, request_1.baseUrl)(options, 'https://generativelanguage.googleapis.com');
7
+ const data = (await (0, request_1.getJson)(`${base}/v1beta/models`, { 'x-goog-api-key': options.apiKey }, options, 'google'));
8
+ return (data.models ?? [])
9
+ .filter((model) => typeof model.name === 'string' &&
10
+ !model.name.includes('embedding') &&
11
+ !model.name.includes('imagen'))
12
+ .map((model) => ({ id: model.name, name: model.name }))
13
+ .sort(request_1.byName);
14
+ };
15
+ exports.listGoogleModels = listGoogleModels;
16
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/google.ts"],"names":[],"mappings":";;;AAAA,wCAAsD;AAU/C,MAAM,gBAAgB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,2CAA2C,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAC1B,GAAG,IAAI,gBAAgB,EACvB,EAAE,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE,EACpC,OAAO,EACP,QAAQ,CACR,CAA2C,CAAC;IAE7C,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SACxB,MAAM,CACN,CAAC,KAAK,EAA6B,EAAE,CACpC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QACjC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC/B;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;SACtD,IAAI,CAAC,gBAAM,CAAC,CAAC;AAChB,CAAC,CAAC;AAlBW,QAAA,gBAAgB,oBAkB3B"}
@@ -0,0 +1,2 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare const listGroqModels: ListModelsFn;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listGroqModels = void 0;
4
+ const request_1 = require("../request");
5
+ const listGroqModels = async (options) => {
6
+ const data = (await (0, request_1.getJson)(`${(0, request_1.baseUrl)(options, 'https://api.groq.com/openai/v1')}/models`, (0, request_1.bearerHeaders)(options), options, 'groq'));
7
+ return (0, request_1.idsToModels)((data.data ?? []).filter((model) => model.active === true && model.object === 'model'));
8
+ };
9
+ exports.listGroqModels = listGroqModels;
10
+ //# sourceMappingURL=groq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/groq.ts"],"names":[],"mappings":";;;AAAA,wCAA0E;AAInE,MAAM,cAAc,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC7D,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAC1B,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,gCAAgC,CAAC,SAAS,EAC9D,IAAA,uBAAa,EAAC,OAAO,CAAC,EACtB,OAAO,EACP,MAAM,CACN,CAA2E,CAAC;IAE7E,OAAO,IAAA,qBAAW,EACjB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CACtF,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,cAAc,kBAWzB"}
@@ -0,0 +1,2 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare const listMistralModels: ListModelsFn;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listMistralModels = void 0;
4
+ const request_1 = require("../request");
5
+ const listMistralModels = async (options) => {
6
+ const data = (await (0, request_1.getJson)(`${(0, request_1.baseUrl)(options, 'https://api.mistral.ai/v1')}/models`, (0, request_1.bearerHeaders)(options), options, 'mistral'));
7
+ return (0, request_1.idsToModels)(data.data ?? [])
8
+ .filter((model) => !model.id.includes('embed'))
9
+ .sort(request_1.byName);
10
+ };
11
+ exports.listMistralModels = listMistralModels;
12
+ //# sourceMappingURL=mistral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/mistral.ts"],"names":[],"mappings":";;;AAAA,wCAA+F;AAIxF,MAAM,iBAAiB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAC1B,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,2BAA2B,CAAC,SAAS,EACzD,IAAA,uBAAa,EAAC,OAAO,CAAC,EACtB,OAAO,EACP,SAAS,CACT,CAAwB,CAAC;IAE1B,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC9C,IAAI,CAAC,gBAAM,CAAC,CAAC;AAChB,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
@@ -0,0 +1,2 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare const listNvidiaModels: ListModelsFn;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listNvidiaModels = void 0;
4
+ const request_1 = require("../request");
5
+ const NVIDIA_SUPPORTED_MODELS = new Set([
6
+ 'nvidia/llama-3.1-nemotron-nano-8b-v1',
7
+ 'nvidia/llama-3.3-nemotron-super-49b-v1',
8
+ 'nvidia/llama-3.3-nemotron-super-49b-v1.5',
9
+ 'nvidia/nemotron-3-nano-30b-a3b',
10
+ 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning',
11
+ 'nvidia/nemotron-3-super-120b-a12b',
12
+ 'nvidia/nemotron-nano-12b-v2-vl',
13
+ 'nvidia/nvidia-nemotron-nano-9b-v2',
14
+ ]);
15
+ const listNvidiaModels = async (options) => {
16
+ const data = (await (0, request_1.getJson)(`${(0, request_1.baseUrl)(options, 'https://integrate.api.nvidia.com/v1')}/models`, (0, request_1.bearerHeaders)(options), options, 'nvidia'));
17
+ return (0, request_1.idsToModels)(data.data ?? [])
18
+ .filter((model) => NVIDIA_SUPPORTED_MODELS.has(model.id))
19
+ .sort(request_1.byName);
20
+ };
21
+ exports.listNvidiaModels = listNvidiaModels;
22
+ //# sourceMappingURL=nvidia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvidia.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/nvidia.ts"],"names":[],"mappings":";;;AAAA,wCAA+F;AAI/F,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACvC,sCAAsC;IACtC,wCAAwC;IACxC,0CAA0C;IAC1C,gCAAgC;IAChC,+CAA+C;IAC/C,mCAAmC;IACnC,gCAAgC;IAChC,mCAAmC;CACnC,CAAC,CAAC;AAEI,MAAM,gBAAgB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAC1B,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,qCAAqC,CAAC,SAAS,EACnE,IAAA,uBAAa,EAAC,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,CACR,CAAwB,CAAC;IAE1B,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACxD,IAAI,CAAC,gBAAM,CAAC,CAAC;AAChB,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B"}
@@ -0,0 +1,3 @@
1
+ import type { ListModelsFn } from '../types';
2
+ export declare function shouldIncludeOpenAiModel(modelId: string, isCustomApi: boolean): boolean;
3
+ export declare const listOpenAiModels: ListModelsFn;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listOpenAiModels = void 0;
4
+ exports.shouldIncludeOpenAiModel = shouldIncludeOpenAiModel;
5
+ const request_1 = require("../request");
6
+ const OFFICIAL_OPENAI_HOSTNAMES = ['api.openai.com', 'ai-assistant.n8n.io'];
7
+ function shouldIncludeOpenAiModel(modelId, isCustomApi) {
8
+ if (isCustomApi)
9
+ return true;
10
+ return !(modelId.startsWith('babbage') ||
11
+ modelId.startsWith('davinci') ||
12
+ modelId.startsWith('computer-use') ||
13
+ modelId.startsWith('dall-e') ||
14
+ modelId.startsWith('text-embedding') ||
15
+ modelId.startsWith('tts') ||
16
+ modelId.includes('-tts') ||
17
+ modelId.startsWith('whisper') ||
18
+ modelId.startsWith('omni-moderation') ||
19
+ modelId.startsWith('sora') ||
20
+ modelId.includes('-realtime') ||
21
+ (modelId.startsWith('gpt-') && modelId.includes('instruct')));
22
+ }
23
+ const listOpenAiModels = async (options) => {
24
+ const base = (0, request_1.baseUrl)(options, 'https://api.openai.com/v1');
25
+ const isCustomApi = !OFFICIAL_OPENAI_HOSTNAMES.includes(new URL(base).hostname);
26
+ const data = (await (0, request_1.getJson)(`${base}/models`, (0, request_1.bearerHeaders)(options), options, 'openai'));
27
+ return (0, request_1.idsToModels)(data.data ?? [])
28
+ .filter((model) => shouldIncludeOpenAiModel(model.id, isCustomApi))
29
+ .sort(request_1.byName);
30
+ };
31
+ exports.listOpenAiModels = listOpenAiModels;
32
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/openai.ts"],"names":[],"mappings":";;;AASA,4DAgBC;AAzBD,wCAA+F;AAG/F,MAAM,yBAAyB,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;AAM5E,SAAgB,wBAAwB,CAAC,OAAe,EAAE,WAAoB;IAC7E,IAAI,WAAW;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,CAAC,CACP,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7B,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;QAClC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC5B,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7B,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACrC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7B,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAC5D,CAAC;AACH,CAAC;AAGM,MAAM,gBAAgB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,IAAA,iBAAO,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAO,EAAC,GAAG,IAAI,SAAS,EAAE,IAAA,uBAAa,EAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAEvF,CAAC;IAEF,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;SAClE,IAAI,CAAC,gBAAM,CAAC,CAAC;AAChB,CAAC,CAAC;AAVW,QAAA,gBAAgB,oBAU3B"}
@@ -0,0 +1 @@
1
+ export declare const listOpenRouterModels: import("..").ListModelsFn;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listOpenRouterModels = void 0;
4
+ const request_1 = require("../request");
5
+ exports.listOpenRouterModels = (0, request_1.makeBearerDataListing)('openrouter', 'https://openrouter.ai/api/v1');
6
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/openrouter.ts"],"names":[],"mappings":";;;AAAA,wCAAmD;AAGtC,QAAA,oBAAoB,GAAG,IAAA,+BAAqB,EACxD,YAAY,EACZ,8BAA8B,CAC9B,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const listVercelModels: import("..").ListModelsFn;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listVercelModels = void 0;
4
+ const request_1 = require("../request");
5
+ exports.listVercelModels = (0, request_1.makeBearerDataListing)('vercel', 'https://ai-gateway.vercel.sh/v1');
6
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/vercel.ts"],"names":[],"mappings":";;;AAAA,wCAAmD;AAGtC,QAAA,gBAAgB,GAAG,IAAA,+BAAqB,EAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const listXaiModels: import("..").ListModelsFn;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listXaiModels = void 0;
4
+ const request_1 = require("../request");
5
+ exports.listXaiModels = (0, request_1.makeBearerDataListing)('xai', 'https://api.x.ai/v1');
6
+ //# sourceMappingURL=xai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.js","sourceRoot":"","sources":["../../../../src/model-discovery/providers/xai.ts"],"names":[],"mappings":";;;AAAA,wCAAmD;AAGtC,QAAA,aAAa,GAAG,IAAA,+BAAqB,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ListModelsFn, ListModelsOptions, ProviderModel } from './types';
2
+ export declare function getJson(url: string, headers: Record<string, string>, options: ListModelsOptions, provider: string): Promise<unknown>;
3
+ export declare function baseUrl(options: ListModelsOptions, fallback: string): string;
4
+ export declare function bearerHeaders(options: ListModelsOptions): Record<string, string>;
5
+ export declare function byName(a: ProviderModel, b: ProviderModel): number;
6
+ export interface IdItem {
7
+ id?: unknown;
8
+ }
9
+ export declare function idsToModels(items: IdItem[]): ProviderModel[];
10
+ export declare function makeBearerDataListing(provider: string, defaultBaseUrl: string): ListModelsFn;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getJson = getJson;
4
+ exports.baseUrl = baseUrl;
5
+ exports.bearerHeaders = bearerHeaders;
6
+ exports.byName = byName;
7
+ exports.idsToModels = idsToModels;
8
+ exports.makeBearerDataListing = makeBearerDataListing;
9
+ async function getJson(url, headers, options, provider) {
10
+ const fetchFn = options.fetch ?? globalThis.fetch;
11
+ const response = await fetchFn(url, {
12
+ method: 'GET',
13
+ headers: { ...headers, ...options.headers },
14
+ });
15
+ if (!response.ok) {
16
+ const body = await response.text().catch(() => '');
17
+ throw new Error(`Failed to list ${provider} models (status ${response.status})${body ? `: ${body.slice(0, 500)}` : ''}`);
18
+ }
19
+ return await response.json();
20
+ }
21
+ function baseUrl(options, fallback) {
22
+ return (options.baseURL ?? fallback).replace(/\/+$/, '');
23
+ }
24
+ function bearerHeaders(options) {
25
+ return { Authorization: `Bearer ${options.apiKey}` };
26
+ }
27
+ function byName(a, b) {
28
+ return a.name.localeCompare(b.name);
29
+ }
30
+ function idsToModels(items) {
31
+ return items
32
+ .filter((item) => typeof item.id === 'string' && item.id !== '')
33
+ .map((item) => ({ id: item.id, name: item.id }));
34
+ }
35
+ function makeBearerDataListing(provider, defaultBaseUrl) {
36
+ return async (options) => {
37
+ const data = (await getJson(`${baseUrl(options, defaultBaseUrl)}/models`, bearerHeaders(options), options, provider));
38
+ return idsToModels(data.data ?? []).sort(byName);
39
+ };
40
+ }
41
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/model-discovery/request.ts"],"names":[],"mappings":";;AAGA,0BAkBC;AAGD,0BAEC;AAED,sCAEC;AAED,wBAEC;AAOD,kCAIC;AAMD,sDAUC;AA1DM,KAAK,UAAU,OAAO,CAC5B,GAAW,EACX,OAA+B,EAC/B,OAA0B,EAC1B,QAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;KAC3C,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CACd,kBAAkB,QAAQ,mBAAmB,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACvG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAGD,SAAgB,OAAO,CAAC,OAA0B,EAAE,QAAgB;IACnE,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,aAAa,CAAC,OAA0B;IACvD,OAAO,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACtD,CAAC;AAED,SAAgB,MAAM,CAAC,CAAgB,EAAE,CAAgB;IACxD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAOD,SAAgB,WAAW,CAAC,KAAe;IAC1C,OAAO,KAAK;SACV,MAAM,CAAC,CAAC,IAAI,EAA0B,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;SACvF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAMD,SAAgB,qBAAqB,CAAC,QAAgB,EAAE,cAAsB;IAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAC1B,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,EAC5C,aAAa,CAAC,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,CACR,CAAwB,CAAC;QAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ProviderModel {
2
+ id: string;
3
+ name: string;
4
+ }
5
+ export interface ListModelsOptions {
6
+ apiKey: string;
7
+ baseURL?: string;
8
+ fetch?: typeof globalThis.fetch;
9
+ headers?: Record<string, string>;
10
+ }
11
+ export type ListModelsFn = (options: ListModelsOptions) => Promise<ProviderModel[]>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/model-discovery/types.ts"],"names":[],"mappings":""}
@@ -147,8 +147,21 @@ function getNodeVersions(nodeId, nodeDefinitionDirs) {
147
147
  }
148
148
  function resolveResourceOperationPath(nodeDir, targetVersion, nodeId, available, discriminators) {
149
149
  if (!discriminators?.resource || !discriminators?.operation) {
150
+ const index = (available.resources ?? [])
151
+ .map((resource) => {
152
+ try {
153
+ const ops = (0, node_fs_1.readdirSync)((0, node_path_1.join)(nodeDir, targetVersion, `resource_${toSnakeCase(resource)}`))
154
+ .filter((f) => f.startsWith('operation_') && f.endsWith('.ts'))
155
+ .map((f) => f.replace('operation_', '').replace('.ts', ''));
156
+ return `${resource} (${ops.join(', ')})`;
157
+ }
158
+ catch {
159
+ return resource;
160
+ }
161
+ })
162
+ .join('; ');
150
163
  return {
151
- error: `Error: Node '${nodeId}' requires resource and operation discriminators. Available resources: ${available.resources?.join(', ')}. Use search_nodes to see all options.`,
164
+ error: `Error: Node '${nodeId}' requires resource and operation discriminators. Available resource (operations): ${index}.`,
152
165
  requiresDiscriminators: true,
153
166
  availableDiscriminators: available,
154
167
  };
@@ -196,8 +209,18 @@ function resolveResourceOperationPath(nodeDir, targetVersion, nodeId, available,
196
209
  }
197
210
  function resolveModePath(nodeDir, targetVersion, nodeId, available, mode) {
198
211
  if (!mode) {
212
+ const variants = (available.modes ?? [])
213
+ .filter((m) => isValidPathComponent(m))
214
+ .sort()
215
+ .map((m) => ({
216
+ mode: m,
217
+ filePath: (0, node_path_1.join)(nodeDir, targetVersion, `mode_${toSnakeCase(m)}.ts`),
218
+ }))
219
+ .filter((variant) => validatePathWithinBase(variant.filePath, nodeDir) && (0, node_fs_1.existsSync)(variant.filePath));
220
+ if (variants.length > 0)
221
+ return { modeVariants: variants };
199
222
  return {
200
- error: `Error: Node '${nodeId}' requires mode discriminator. Available modes: ${available.modes?.join(', ')}. Use search_nodes to see all options.`,
223
+ error: `Error: Node '${nodeId}' requires mode discriminator. Available modes: ${available.modes?.join(', ')}.`,
201
224
  requiresDiscriminators: true,
202
225
  availableDiscriminators: available,
203
226
  };
@@ -303,6 +326,22 @@ function getNodeTypeDefinition(nodeId, version, nodeDefinitionDirs, discriminato
303
326
  error: pathResult.error,
304
327
  };
305
328
  }
329
+ if (pathResult.modeVariants) {
330
+ try {
331
+ const sections = pathResult.modeVariants.map((variant) => `// ── mode: ${variant.mode} ──\n${(0, node_fs_1.readFileSync)(variant.filePath, 'utf-8')}`);
332
+ const header = `// No mode discriminator was given — definitions for all ${String(pathResult.modeVariants.length)} modes of '${nodeId}' follow (pass \`mode\` to fetch a single one).`;
333
+ const actualVersion = pathResult.modeVariants[0].filePath.match(/\/(v\d+)(?:\/|\.ts)/)?.[1];
334
+ return { nodeId, version: actualVersion, content: [header, ...sections].join('\n\n') };
335
+ }
336
+ catch (error) {
337
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
338
+ return {
339
+ nodeId,
340
+ content: '',
341
+ error: `Error reading node definition for '${nodeId}': ${errorMessage}`,
342
+ };
343
+ }
344
+ }
306
345
  if (!pathResult.filePath) {
307
346
  return {
308
347
  nodeId,