@botpress/cognitive 0.1.8 → 0.1.10

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.
@@ -1,28 +1,28 @@
1
1
 
2
- > @botpress/cognitive@0.1.8 build /home/runner/work/botpress/botpress/packages/cognitive
2
+ > @botpress/cognitive@0.1.10 build /home/runner/work/botpress/botpress/packages/cognitive
3
3
  > pnpm build:type && pnpm build:neutral && size-limit
4
4
 
5
5
 
6
- > @botpress/cognitive@0.1.8 build:type /home/runner/work/botpress/botpress/packages/cognitive
6
+ > @botpress/cognitive@0.1.10 build:type /home/runner/work/botpress/botpress/packages/cognitive
7
7
  > tsup --tsconfig tsconfig.build.json ./src/index.ts --dts-resolve --dts-only --clean
8
8
 
9
9
  CLI Building entry: ./src/index.ts
10
10
  CLI Using tsconfig: tsconfig.build.json
11
11
  CLI tsup v8.0.2
12
12
  DTS Build start
13
- DTS ⚡️ Build success in 17458ms
14
- DTS dist/index.d.ts 495.72 KB
13
+ DTS ⚡️ Build success in 9051ms
14
+ DTS dist/index.d.ts 501.77 KB
15
15
 
16
- > @botpress/cognitive@0.1.8 build:neutral /home/runner/work/botpress/botpress/packages/cognitive
16
+ > @botpress/cognitive@0.1.10 build:neutral /home/runner/work/botpress/botpress/packages/cognitive
17
17
  > ts-node -T ./build.ts --neutral
18
18
 
19
19
  Done
20
20
 
21
21
  dist/index.cjs
22
22
  Size limit: 50 kB
23
- Size: 6.77 kB brotlied
23
+ Size: 6.86 kB brotlied
24
24
 
25
25
  dist/index.mjs
26
26
  Size limit: 50 kB
27
- Size: 6.65 kB brotlied
27
+ Size: 6.75 kB brotlied
28
28
 
package/build.ts CHANGED
@@ -1,4 +1,9 @@
1
+ import { llm } from '@botpress/common'
2
+ import { z } from '@botpress/sdk'
1
3
  import esbuild from 'esbuild'
4
+ import { writeFileSync } from 'fs'
5
+ import { format, resolveConfig } from 'prettier'
6
+
2
7
  import { devDependencies } from './package.json'
3
8
 
4
9
  const common: esbuild.BuildOptions = {
@@ -7,6 +12,20 @@ const common: esbuild.BuildOptions = {
7
12
  sourcemap: true,
8
13
  }
9
14
 
15
+ async function generateTypes() {
16
+ const code = `export type GenerateContentInput = ${llm.schemas.GenerateContentInputSchema(z.any()).toTypescript()};
17
+
18
+ export type GenerateContentOutput = ${llm.schemas.GenerateContentOutputSchema.toTypescript()};
19
+
20
+ export type Model = ${llm.schemas.ModelSchema.toTypescript()};
21
+ `.trim()
22
+
23
+ const filePath = './src/schemas.gen.ts'
24
+ const prettierConfig = await resolveConfig(filePath)
25
+ const formattedCode = await format(code, { ...prettierConfig!, filepath: filePath })
26
+ writeFileSync(filePath, formattedCode)
27
+ }
28
+
10
29
  const external = Object.keys(devDependencies)
11
30
 
12
31
  const buildCjs = () =>
@@ -34,6 +53,8 @@ const buildEsm = () =>
34
53
  })
35
54
 
36
55
  const main = async (argv: string[]) => {
56
+ await generateTypes()
57
+
37
58
  if (argv.includes('--neutral')) {
38
59
  await buildCjs()
39
60
  await buildEsm()
package/dist/index.cjs CHANGED
@@ -672,6 +672,7 @@ var getActionFromError = (error) => {
672
672
  return "abort";
673
673
  };
674
674
  var isNotFoundError = (error) => isBotpressError(error) && error.type === "ResourceNotFound";
675
+ var isForbiddenOrUnauthorizedError = (error) => isBotpressError(error) && (error.type === "Forbidden" || error.type === "Unauthorized");
675
676
  var isBotpressError = (error) => typeof error === "object" && error !== null && "isApiError" in error && "code" in error && "type" in error && "id" in error;
676
677
 
677
678
  // src/interceptors.ts
@@ -723,6 +724,7 @@ var InterceptorManager = class {
723
724
  // src/models.ts
724
725
  var DOWNTIME_THRESHOLD_MINUTES = 5;
725
726
  var PREFERENCES_FILE_SUFFIX = "models.config.json";
727
+ var DEFAULT_INTEGRATIONS = ["google-ai", "anthropic", "openai", "cerebras", "fireworks-ai", "groq"];
726
728
  var VendorPreferences = ["google-ai", "anthropic", "openai"];
727
729
  var BestModelPreferences = ["4o", "3-5-sonnet", "gemini-1.5-pro"];
728
730
  var FastModelPreferences = ["gemini-1.5-flash", "4o-mini", "flash", "haiku"];
@@ -790,14 +792,25 @@ var RemoteModelProvider = class extends ModelProvider {
790
792
  super();
791
793
  this._client = getExtendedClient(client);
792
794
  }
795
+ async _fetchInstalledIntegrationNames() {
796
+ try {
797
+ const { bot } = await this._client.getBot({ id: this._client.botId });
798
+ const integrations = Object.values(bot.integrations).filter((x) => x.status === "registered");
799
+ return integrations.map((x) => x.name);
800
+ } catch (err) {
801
+ if (isForbiddenOrUnauthorizedError(err)) {
802
+ return DEFAULT_INTEGRATIONS;
803
+ }
804
+ throw err;
805
+ }
806
+ }
793
807
  async fetchInstalledModels() {
794
- const { bot } = await this._client.getBot({ id: this._client.botId });
808
+ const integrationNames = await this._fetchInstalledIntegrationNames();
795
809
  const models = [];
796
- const registered = Object.values(bot.integrations).filter((x) => x.status === "registered");
797
810
  await Promise.allSettled(
798
- registered.map(async (integration) => {
811
+ integrationNames.map(async (integration) => {
799
812
  const { output } = await this._client.callAction({
800
- type: `${integration.name}:listLanguageModels`,
813
+ type: `${integration}:listLanguageModels`,
801
814
  input: {}
802
815
  });
803
816
  if (!output?.models?.length) {
@@ -806,8 +819,8 @@ var RemoteModelProvider = class extends ModelProvider {
806
819
  for (const model of output.models) {
807
820
  if (model.name && model.id && model.input && model.tags) {
808
821
  models.push({
809
- ref: `${integration.name}:${model.id}`,
810
- integration: integration.name,
822
+ ref: `${integration}:${model.id}`,
823
+ integration,
811
824
  id: model.id,
812
825
  name: model.name,
813
826
  description: model.description,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/options.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/jitter/jitter.factory.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/delay.base.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/always/always.delay.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/delay.factory.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/backoff.ts", "../src/index.ts", "../src/client.ts", "../../../node_modules/.pnpm/nanoevents@9.1.0/node_modules/nanoevents/index.js", "../src/bp-client.ts", "../src/errors.ts", "../src/interceptors.ts", "../src/models.ts"],
4
- "sourcesContent": [null, null, null, null, null, null, null, null, null, "export { Events, BotpressClientLike } from './types'\nexport * from './client'\nexport { ModelPreferences, ModelProvider, RemoteModelProvider, Model } from './models'\nexport { type GenerateContentInput, type GenerateContentOutput } from './llm'\n", "import { backOff } from 'exponential-backoff'\nimport { createNanoEvents, Unsubscribe } from 'nanoevents'\n\nimport { ExtendedClient, getExtendedClient } from './bp-client'\nimport { getActionFromError } from './errors'\nimport { InterceptorManager } from './interceptors'\nimport { GenerateContentOutput } from './llm'\nimport {\n DOWNTIME_THRESHOLD_MINUTES,\n getBestModels,\n getFastModels,\n Model,\n ModelPreferences,\n ModelProvider,\n ModelRef,\n pickModel,\n RemoteModelProvider,\n} from './models'\nimport { CognitiveProps, Events, InputProps, Request, Response } from './types'\n\nexport class Cognitive {\n public ['$$IS_COGNITIVE'] = true\n\n public static isCognitiveClient(obj: any): obj is Cognitive {\n return obj?.$$IS_COGNITIVE === true\n }\n\n public interceptors = {\n request: new InterceptorManager<Request>(),\n response: new InterceptorManager<Response>(),\n }\n\n private _client: ExtendedClient\n private _preferences: ModelPreferences | null = null\n private _provider: ModelProvider\n private _events = createNanoEvents<Events>()\n private _downtimes: ModelPreferences['downtimes'] = []\n private _models: Model[] = []\n\n public constructor(props: CognitiveProps) {\n this._client = getExtendedClient(props.client)\n this._provider = props.provider ?? new RemoteModelProvider(props.client)\n }\n\n public get client(): ExtendedClient {\n return this._client\n }\n\n public on<K extends keyof Events>(this: this, event: K, cb: Events[K]): Unsubscribe {\n return this._events.on(event, cb)\n }\n\n public async fetchInstalledModels(): Promise<Model[]> {\n if (!this._models.length) {\n this._models = await this._provider.fetchInstalledModels()\n }\n\n return this._models\n }\n\n public async fetchPreferences(): Promise<ModelPreferences> {\n if (this._preferences) {\n return this._preferences\n }\n\n this._preferences = await this._provider.fetchModelPreferences()\n\n if (this._preferences) {\n return this._preferences\n }\n\n const models = await this.fetchInstalledModels()\n\n this._preferences = {\n best: getBestModels(models).map((m) => m.ref),\n fast: getFastModels(models).map((m) => m.ref),\n downtimes: [],\n }\n\n await this._provider.saveModelPreferences(this._preferences)\n\n return this._preferences\n }\n\n public async setPreferences(preferences: ModelPreferences, save: boolean = false): Promise<void> {\n this._preferences = preferences\n\n if (save) {\n await this._provider.saveModelPreferences(preferences)\n }\n }\n\n private _cleanupOldDowntimes(): void {\n const now = Date.now()\n const thresholdMs = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n this._preferences!.downtimes = this._preferences!.downtimes.filter((downtime) => {\n const downtimeStart = new Date(downtime.startedAt).getTime()\n return now - downtimeStart <= thresholdMs\n })\n }\n\n private async _selectModel(ref: string): Promise<{ integration: string; model: string }> {\n const parseRef = (ref: string) => {\n const parts = ref.split(':')\n return { integration: parts[0]!, model: parts.slice(1).join(':') }\n }\n\n const preferences = await this.fetchPreferences()\n\n preferences.best ??= []\n preferences.fast ??= []\n preferences.downtimes ??= []\n\n const downtimes = [...preferences.downtimes, ...(this._downtimes ?? [])]\n\n if (ref === 'best') {\n return parseRef(pickModel(preferences.best, downtimes))\n }\n\n if (ref === 'fast') {\n return parseRef(pickModel(preferences.fast, downtimes))\n }\n\n return parseRef(pickModel([ref as ModelRef, ...preferences.best, ...preferences.fast], downtimes))\n }\n\n public async getModelDetails(model: string) {\n await this.fetchInstalledModels()\n const { integration, model: modelName } = await this._selectModel(model)\n const def = this._models.find((m) => m.integration === integration && (m.name === modelName || m.id === modelName))\n if (!def) {\n console.info('Models:', this._models)\n throw new Error(`Model ${modelName} not found`)\n }\n\n return def\n }\n\n public async generateContent(input: InputProps): Promise<Response> {\n const start = Date.now()\n\n const signal = input.signal ?? AbortSignal.timeout(30_000)\n\n const client = this._client.abortable(signal)\n\n let props: Request = { input }\n let integration: string\n let model: string\n\n const { output, meta } = await backOff<{\n output: GenerateContentOutput\n meta: any\n }>(\n async () => {\n const selection = await this._selectModel(input.model ?? 'best')\n\n integration = selection.integration\n model = selection.model\n\n props = await this.interceptors.request.run({ input }, signal)\n\n return client.callAction({\n type: `${integration}:generateContent`,\n input: {\n ...props.input,\n model: { id: model },\n },\n }) as Promise<{ output: GenerateContentOutput; meta: any }>\n },\n {\n retry: async (err, _attempt) => {\n if (signal?.aborted) {\n // We don't want to retry if the request was aborted\n this._events.emit('aborted', props, err)\n return false\n }\n\n if (_attempt > 3) {\n // We don't want to retry more than 3 times\n this._events.emit('error', props, err)\n return false\n }\n\n const action = getActionFromError(err)\n\n if (action === 'abort') {\n this._events.emit('error', props, err)\n return false\n }\n\n if (action === 'fallback') {\n // We don't want to retry if the request was already retried with a fallback model\n this._downtimes.push({\n ref: `${integration!}:${model!}`,\n startedAt: new Date().toISOString(),\n reason: 'Model is down',\n })\n\n this._cleanupOldDowntimes()\n\n await this._provider.saveModelPreferences({\n ...(this._preferences ?? { best: [], downtimes: [], fast: [] }),\n downtimes: [...(this._preferences!.downtimes ?? []), ...(this._downtimes ?? [])],\n })\n\n this._events.emit('fallback', props, err)\n return true\n }\n\n this._events.emit('retry', props, err)\n return true\n },\n }\n )\n\n const response = {\n output,\n meta: {\n cached: meta.cached ?? false,\n model: { integration: integration!, model: model! },\n latency: Date.now() - start,\n cost: { input: output.usage.inputCost, output: output.usage.outputCost },\n tokens: { input: output.usage.inputTokens, output: output.usage.outputTokens },\n },\n } satisfies Response\n\n this._events.emit('response', props, response)\n\n return this.interceptors.response.run(response, signal)\n }\n}\n", "export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n", "import { type Client } from '@botpress/client'\nimport { type AxiosInstance } from 'axios'\nimport { BotpressClientLike } from './types'\n\n/** @internal */\nexport type ExtendedClient = Client & {\n botId: string\n axios: AxiosInstance\n clone: () => ExtendedClient\n abortable: (signal: AbortSignal) => ExtendedClient\n}\n\nexport const getExtendedClient = (client: BotpressClientLike): ExtendedClient => {\n if (\n typeof client.constructor !== 'function' ||\n typeof client.callAction !== 'function' ||\n !client.config ||\n typeof client.config !== 'object' ||\n !client.config.headers\n ) {\n throw new Error('Client must be a valid instance of a Botpress client (@botpress/client)')\n }\n\n const botId = client.config.headers['x-bot-id'] as string\n\n if (!botId?.length) {\n throw new Error('Client must be instanciated with Bot ID')\n }\n\n const clone = () => {\n const c = client as any\n if (c.clone && typeof c.clone === 'function') {\n return getExtendedClient(c.clone())\n }\n return getExtendedClient(new c.constructor(c.config))\n }\n\n return {\n ...client,\n botId,\n axios: (client as any).axiosInstance as AxiosInstance,\n clone,\n abortable: (signal: AbortSignal) => {\n const abortable = clone()\n const instance = abortable.axios\n instance.defaults.signal = signal\n return abortable\n },\n } as ExtendedClient\n}\n", "import { type ErrorType } from '@botpress/client'\n\nexport type BotpressError = {\n isApiError: boolean\n code: number\n description: string\n type: ErrorType\n subtype?: string\n error?: unknown\n metadata?: unknown\n message?: string\n id: string\n}\n\ntype Action = 'fallback' | 'retry' | 'abort'\n\nexport const getActionFromError = (error: any): Action => {\n if (!isBotpressError(error)) {\n return 'retry'\n }\n\n if (error.type === 'InvalidDataFormat') {\n if (error.message?.includes('data/model/id')) {\n // Invalid Model ID, so we want to try another model\n return 'fallback'\n }\n\n // Usually means the request was malformed\n return 'abort'\n }\n\n const subtype = (error.metadata as any)?.subtype\n if (error.type === 'Internal' || subtype === 'UPSTREAM_PROVIDER_FAILED') {\n // The model is degraded, so we want to try another model\n return 'fallback'\n }\n\n return 'abort'\n}\n\nexport const isNotFoundError = (error: any): boolean => isBotpressError(error) && error.type === 'ResourceNotFound'\n\nexport const isBotpressError = (error: any): error is BotpressError =>\n typeof error === 'object' &&\n error !== null &&\n 'isApiError' in error &&\n 'code' in error &&\n 'type' in error &&\n 'id' in error\n", "export type Callback<T> = (error: any | null, value: T) => void\nexport type Interceptor<T> = (error: any | null, value: T, next: Callback<T>, done: Callback<T>) => Promise<void> | void\n\nexport class InterceptorManager<T> {\n private _interceptors: Interceptor<T>[] = []\n\n public use(interceptor: Interceptor<T>) {\n this._interceptors.push(interceptor)\n return () => this.remove(interceptor)\n }\n\n public remove(interceptor: Interceptor<T>) {\n this._interceptors = this._interceptors.filter((i) => i !== interceptor)\n }\n\n public async run(value: T, signal: AbortSignal): Promise<T> {\n let error: any | null = null\n let result: T = value\n let done = false\n\n for (const interceptor of this._interceptors) {\n if (done) {\n break\n }\n\n if (signal.aborted) {\n throw signal.reason\n }\n\n await new Promise<void>((resolve) => {\n void interceptor(\n error,\n result,\n (err, val) => {\n error = err\n result = val\n resolve()\n },\n (err, val) => {\n error = err\n result = val\n done = true\n resolve()\n }\n )\n })\n }\n\n if (error) {\n throw error\n }\n\n return result\n }\n}\n", "import { ExtendedClient, getExtendedClient } from './bp-client'\nimport { isNotFoundError } from './errors'\nimport { Model as RawModel } from './llm'\nimport { BotpressClientLike } from './types'\n\nexport const DOWNTIME_THRESHOLD_MINUTES = 5\nconst PREFERENCES_FILE_SUFFIX = 'models.config.json'\n\n// Biases for vendors and models\nconst VendorPreferences = ['google-ai', 'anthropic', 'openai']\nconst BestModelPreferences = ['4o', '3-5-sonnet', 'gemini-1.5-pro']\nconst FastModelPreferences = ['gemini-1.5-flash', '4o-mini', 'flash', 'haiku']\n\nconst InputPricePenalty = 3 // $3 per 1M tokens\nconst OutputPricePenalty = 10 // $10 per 1M tokens\nconst LowTokensPenalty = 128_000 // 128k tokens\n\nexport type Model = RawModel & {\n ref: ModelRef\n integration: string\n}\n\nexport type ModelRef = `${string}:${string}`\n\nexport type ModelPreferences = {\n best: ModelRef[]\n fast: ModelRef[]\n downtimes: Array<{ ref: ModelRef; startedAt: string; reason: string }>\n}\n\nconst isRecommended = (model: Model) => model.tags.includes('recommended')\nconst isDeprecated = (model: Model) => model.tags.includes('deprecated')\nconst isLowCost = (model: Model) => model.tags.includes('low-cost')\nconst hasVisionSupport = (model: Model) => model.tags.includes('vision')\nconst isGeneralPurpose = (model: Model) => model.tags.includes('general-purpose')\n\nconst scoreModel = (model: Model, type: 'best' | 'fast', boosts: Record<ModelRef, number> = {}) => {\n let score: number = 0\n\n const scores: Array<[string, boolean, number]> = [\n ['input price penalty', model.input.costPer1MTokens > InputPricePenalty, -1],\n ['output price penalty', model.output.costPer1MTokens > OutputPricePenalty, -1],\n ['low tokens penalty', (model.input.maxTokens ?? 0 + model.output.maxTokens ?? 0) < LowTokensPenalty, -1],\n ['recommended', isRecommended(model), 2],\n ['deprecated', isDeprecated(model), -2],\n ['vision support', hasVisionSupport(model), 1],\n ['general purpose', isGeneralPurpose(model), 1],\n ['vendor preference', VendorPreferences.includes(model.integration), 1],\n ['best model preference', type === 'best' && BestModelPreferences.some((x) => model.id.includes(x)), 1],\n ['fast model preference penalty', type === 'best' && FastModelPreferences.some((x) => model.id.includes(x)), -2],\n ['fast model preference', type === 'fast' && FastModelPreferences.some((x) => model.id.includes(x)), 2],\n ['low cost', type === 'fast' && isLowCost(model), 1],\n ]\n\n for (const rule in boosts) {\n if (model.ref.includes(rule)) {\n scores.push([`boost (${rule})`, true, Number(boosts[rule as ModelRef]) ?? 0] as const)\n }\n }\n\n for (const [, condition, value] of scores) {\n if (condition) {\n score += value\n }\n }\n\n return score\n}\n\nexport const getBestModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'best', boosts) - scoreModel(a, 'best', boosts))\n\nexport const getFastModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'fast', boosts) - scoreModel(a, 'fast', boosts))\n\nexport const pickModel = (models: ModelRef[], downtimes: ModelPreferences['downtimes'] = []) => {\n const copy = [...models]\n const elasped = (date: string) => new Date().getTime() - new Date(date).getTime()\n const DOWNTIME_THRESHOLD = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n if (!copy.length) {\n throw new Error('At least one model is required')\n }\n\n while (copy.length) {\n const ref = copy.shift() as ModelRef\n const downtime = downtimes.find((o) => o.ref === ref && elasped(o.startedAt) < DOWNTIME_THRESHOLD)\n if (downtime) {\n continue\n } else {\n return ref\n }\n }\n\n throw new Error(`All models are down: ${models.join(', ')}`)\n}\n\nexport abstract class ModelProvider {\n public abstract fetchInstalledModels(): Promise<Model[]>\n public abstract fetchModelPreferences(): Promise<ModelPreferences | null>\n public abstract saveModelPreferences(preferences: ModelPreferences): Promise<void>\n public abstract deleteModelPreferences(): Promise<void>\n}\n\nexport class RemoteModelProvider extends ModelProvider {\n private _client: ExtendedClient\n\n public constructor(client: BotpressClientLike) {\n super()\n this._client = getExtendedClient(client)\n }\n\n public async fetchInstalledModels() {\n const { bot } = await this._client.getBot({ id: this._client.botId })\n const models: Model[] = []\n\n const registered = Object.values(bot.integrations).filter((x) => x.status === 'registered')\n\n await Promise.allSettled(\n registered.map(async (integration) => {\n const { output } = await this._client.callAction({\n type: `${integration.name}:listLanguageModels`,\n input: {},\n })\n\n if (!output?.models?.length) {\n return\n }\n\n for (const model of output.models as RawModel[]) {\n if (model.name && model.id && model.input && model.tags) {\n models.push({\n ref: `${integration.name}:${model.id}`,\n integration: integration.name,\n id: model.id,\n name: model.name,\n description: model.description,\n input: model.input,\n output: model.output,\n tags: model.tags,\n })\n }\n }\n })\n )\n\n return models\n }\n\n public async fetchModelPreferences(): Promise<ModelPreferences | null> {\n try {\n const { file } = await this._client.getFile({ id: this._preferenceFileKey })\n\n if (globalThis.fetch !== undefined) {\n const response = await fetch(file.url)\n return (await response.json()) as ModelPreferences\n } else {\n const { data } = await this._client.axios.get(file.url, {\n // we piggy-back axios to avoid adding a new dependency\n // unset all headers to avoid S3 pre-signed signature mismatch\n headers: Object.keys(this._client.config.headers).reduce(\n (acc, key) => {\n acc[key] = undefined\n return acc\n },\n {} as Record<string, undefined>\n ),\n })\n return data as ModelPreferences\n }\n } catch (err) {\n if (isNotFoundError(err)) {\n return null\n }\n\n throw err\n }\n }\n\n public async saveModelPreferences(preferences: ModelPreferences) {\n await this._client.uploadFile({\n key: this._preferenceFileKey,\n content: JSON.stringify(preferences, null, 2),\n index: false,\n tags: {\n system: 'true',\n purpose: 'config',\n },\n })\n }\n\n public async deleteModelPreferences() {\n await this._client.deleteFile({ id: this._preferenceFileKey }).catch(() => {})\n }\n\n private get _preferenceFileKey() {\n return `bot->${this._client.botId}->${PREFERENCES_FILE_SUFFIX}`\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": [null, null, null, null, null, null, null, null, null, "export { Events, BotpressClientLike } from './types'\nexport * from './client'\nexport { ModelPreferences, ModelProvider, RemoteModelProvider, Model } from './models'\nexport { type GenerateContentInput, type GenerateContentOutput } from './schemas.gen'\n", "import { backOff } from 'exponential-backoff'\nimport { createNanoEvents, Unsubscribe } from 'nanoevents'\n\nimport { ExtendedClient, getExtendedClient } from './bp-client'\nimport { getActionFromError } from './errors'\nimport { InterceptorManager } from './interceptors'\nimport {\n DOWNTIME_THRESHOLD_MINUTES,\n getBestModels,\n getFastModels,\n Model,\n ModelPreferences,\n ModelProvider,\n ModelRef,\n pickModel,\n RemoteModelProvider,\n} from './models'\nimport { GenerateContentOutput } from './schemas.gen'\nimport { CognitiveProps, Events, InputProps, Request, Response } from './types'\n\nexport class Cognitive {\n public ['$$IS_COGNITIVE'] = true\n\n public static isCognitiveClient(obj: any): obj is Cognitive {\n return obj?.$$IS_COGNITIVE === true\n }\n\n public interceptors = {\n request: new InterceptorManager<Request>(),\n response: new InterceptorManager<Response>(),\n }\n\n private _client: ExtendedClient\n private _preferences: ModelPreferences | null = null\n private _provider: ModelProvider\n private _events = createNanoEvents<Events>()\n private _downtimes: ModelPreferences['downtimes'] = []\n private _models: Model[] = []\n\n public constructor(props: CognitiveProps) {\n this._client = getExtendedClient(props.client)\n this._provider = props.provider ?? new RemoteModelProvider(props.client)\n }\n\n public get client(): ExtendedClient {\n return this._client\n }\n\n public on<K extends keyof Events>(this: this, event: K, cb: Events[K]): Unsubscribe {\n return this._events.on(event, cb)\n }\n\n public async fetchInstalledModels(): Promise<Model[]> {\n if (!this._models.length) {\n this._models = await this._provider.fetchInstalledModels()\n }\n\n return this._models\n }\n\n public async fetchPreferences(): Promise<ModelPreferences> {\n if (this._preferences) {\n return this._preferences\n }\n\n this._preferences = await this._provider.fetchModelPreferences()\n\n if (this._preferences) {\n return this._preferences\n }\n\n const models = await this.fetchInstalledModels()\n\n this._preferences = {\n best: getBestModels(models).map((m) => m.ref),\n fast: getFastModels(models).map((m) => m.ref),\n downtimes: [],\n }\n\n await this._provider.saveModelPreferences(this._preferences)\n\n return this._preferences\n }\n\n public async setPreferences(preferences: ModelPreferences, save: boolean = false): Promise<void> {\n this._preferences = preferences\n\n if (save) {\n await this._provider.saveModelPreferences(preferences)\n }\n }\n\n private _cleanupOldDowntimes(): void {\n const now = Date.now()\n const thresholdMs = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n this._preferences!.downtimes = this._preferences!.downtimes.filter((downtime) => {\n const downtimeStart = new Date(downtime.startedAt).getTime()\n return now - downtimeStart <= thresholdMs\n })\n }\n\n private async _selectModel(ref: string): Promise<{ integration: string; model: string }> {\n const parseRef = (ref: string) => {\n const parts = ref.split(':')\n return { integration: parts[0]!, model: parts.slice(1).join(':') }\n }\n\n const preferences = await this.fetchPreferences()\n\n preferences.best ??= []\n preferences.fast ??= []\n preferences.downtimes ??= []\n\n const downtimes = [...preferences.downtimes, ...(this._downtimes ?? [])]\n\n if (ref === 'best') {\n return parseRef(pickModel(preferences.best, downtimes))\n }\n\n if (ref === 'fast') {\n return parseRef(pickModel(preferences.fast, downtimes))\n }\n\n return parseRef(pickModel([ref as ModelRef, ...preferences.best, ...preferences.fast], downtimes))\n }\n\n public async getModelDetails(model: string) {\n await this.fetchInstalledModels()\n const { integration, model: modelName } = await this._selectModel(model)\n const def = this._models.find((m) => m.integration === integration && (m.name === modelName || m.id === modelName))\n if (!def) {\n console.info('Models:', this._models)\n throw new Error(`Model ${modelName} not found`)\n }\n\n return def\n }\n\n public async generateContent(input: InputProps): Promise<Response> {\n const start = Date.now()\n\n const signal = input.signal ?? AbortSignal.timeout(30_000)\n\n const client = this._client.abortable(signal)\n\n let props: Request = { input }\n let integration: string\n let model: string\n\n const { output, meta } = await backOff<{\n output: GenerateContentOutput\n meta: any\n }>(\n async () => {\n const selection = await this._selectModel(input.model ?? 'best')\n\n integration = selection.integration\n model = selection.model\n\n props = await this.interceptors.request.run({ input }, signal)\n\n return client.callAction({\n type: `${integration}:generateContent`,\n input: {\n ...props.input,\n model: { id: model },\n },\n }) as Promise<{ output: GenerateContentOutput; meta: any }>\n },\n {\n retry: async (err, _attempt) => {\n if (signal?.aborted) {\n // We don't want to retry if the request was aborted\n this._events.emit('aborted', props, err)\n return false\n }\n\n if (_attempt > 3) {\n // We don't want to retry more than 3 times\n this._events.emit('error', props, err)\n return false\n }\n\n const action = getActionFromError(err)\n\n if (action === 'abort') {\n this._events.emit('error', props, err)\n return false\n }\n\n if (action === 'fallback') {\n // We don't want to retry if the request was already retried with a fallback model\n this._downtimes.push({\n ref: `${integration!}:${model!}`,\n startedAt: new Date().toISOString(),\n reason: 'Model is down',\n })\n\n this._cleanupOldDowntimes()\n\n await this._provider.saveModelPreferences({\n ...(this._preferences ?? { best: [], downtimes: [], fast: [] }),\n downtimes: [...(this._preferences!.downtimes ?? []), ...(this._downtimes ?? [])],\n })\n\n this._events.emit('fallback', props, err)\n return true\n }\n\n this._events.emit('retry', props, err)\n return true\n },\n }\n )\n\n const response = {\n output,\n meta: {\n cached: meta.cached ?? false,\n model: { integration: integration!, model: model! },\n latency: Date.now() - start,\n cost: { input: output.usage.inputCost, output: output.usage.outputCost },\n tokens: { input: output.usage.inputTokens, output: output.usage.outputTokens },\n },\n } satisfies Response\n\n this._events.emit('response', props, response)\n\n return this.interceptors.response.run(response, signal)\n }\n}\n", "export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n", "import { type Client } from '@botpress/client'\nimport { type AxiosInstance } from 'axios'\nimport { BotpressClientLike } from './types'\n\n/** @internal */\nexport type ExtendedClient = Client & {\n botId: string\n axios: AxiosInstance\n clone: () => ExtendedClient\n abortable: (signal: AbortSignal) => ExtendedClient\n}\n\nexport const getExtendedClient = (client: BotpressClientLike): ExtendedClient => {\n if (\n typeof client.constructor !== 'function' ||\n typeof client.callAction !== 'function' ||\n !client.config ||\n typeof client.config !== 'object' ||\n !client.config.headers\n ) {\n throw new Error('Client must be a valid instance of a Botpress client (@botpress/client)')\n }\n\n const botId = client.config.headers['x-bot-id'] as string\n\n if (!botId?.length) {\n throw new Error('Client must be instanciated with Bot ID')\n }\n\n const clone = () => {\n const c = client as any\n if (c.clone && typeof c.clone === 'function') {\n return getExtendedClient(c.clone())\n }\n return getExtendedClient(new c.constructor(c.config))\n }\n\n return {\n ...client,\n botId,\n axios: (client as any).axiosInstance as AxiosInstance,\n clone,\n abortable: (signal: AbortSignal) => {\n const abortable = clone()\n const instance = abortable.axios\n instance.defaults.signal = signal\n return abortable\n },\n } as ExtendedClient\n}\n", "import { type ErrorType } from '@botpress/client'\n\nexport type BotpressError = {\n isApiError: boolean\n code: number\n description: string\n type: ErrorType\n subtype?: string\n error?: unknown\n metadata?: unknown\n message?: string\n id: string\n}\n\ntype Action = 'fallback' | 'retry' | 'abort'\n\nexport const getActionFromError = (error: any): Action => {\n if (!isBotpressError(error)) {\n return 'retry'\n }\n\n if (error.type === 'InvalidDataFormat') {\n if (error.message?.includes('data/model/id')) {\n // Invalid Model ID, so we want to try another model\n return 'fallback'\n }\n\n // Usually means the request was malformed\n return 'abort'\n }\n\n const subtype = (error.metadata as any)?.subtype\n if (error.type === 'Internal' || subtype === 'UPSTREAM_PROVIDER_FAILED') {\n // The model is degraded, so we want to try another model\n return 'fallback'\n }\n\n return 'abort'\n}\n\nexport const isNotFoundError = (error: any): boolean => isBotpressError(error) && error.type === 'ResourceNotFound'\n\nexport const isForbiddenOrUnauthorizedError = (error: any): boolean =>\n isBotpressError(error) && (error.type === 'Forbidden' || error.type === 'Unauthorized')\n\nexport const isBotpressError = (error: any): error is BotpressError =>\n typeof error === 'object' &&\n error !== null &&\n 'isApiError' in error &&\n 'code' in error &&\n 'type' in error &&\n 'id' in error\n", "export type Callback<T> = (error: any | null, value: T) => void\nexport type Interceptor<T> = (error: any | null, value: T, next: Callback<T>, done: Callback<T>) => Promise<void> | void\n\nexport class InterceptorManager<T> {\n private _interceptors: Interceptor<T>[] = []\n\n public use(interceptor: Interceptor<T>) {\n this._interceptors.push(interceptor)\n return () => this.remove(interceptor)\n }\n\n public remove(interceptor: Interceptor<T>) {\n this._interceptors = this._interceptors.filter((i) => i !== interceptor)\n }\n\n public async run(value: T, signal: AbortSignal): Promise<T> {\n let error: any | null = null\n let result: T = value\n let done = false\n\n for (const interceptor of this._interceptors) {\n if (done) {\n break\n }\n\n if (signal.aborted) {\n throw signal.reason\n }\n\n await new Promise<void>((resolve) => {\n void interceptor(\n error,\n result,\n (err, val) => {\n error = err\n result = val\n resolve()\n },\n (err, val) => {\n error = err\n result = val\n done = true\n resolve()\n }\n )\n })\n }\n\n if (error) {\n throw error\n }\n\n return result\n }\n}\n", "import { ExtendedClient, getExtendedClient } from './bp-client'\nimport { isForbiddenOrUnauthorizedError, isNotFoundError } from './errors'\nimport { Model as RawModel } from './schemas.gen'\nimport { BotpressClientLike } from './types'\n\nexport const DOWNTIME_THRESHOLD_MINUTES = 5\nconst PREFERENCES_FILE_SUFFIX = 'models.config.json'\n\nexport const DEFAULT_INTEGRATIONS = ['google-ai', 'anthropic', 'openai', 'cerebras', 'fireworks-ai', 'groq']\n\n// Biases for vendors and models\nconst VendorPreferences = ['google-ai', 'anthropic', 'openai']\nconst BestModelPreferences = ['4o', '3-5-sonnet', 'gemini-1.5-pro']\nconst FastModelPreferences = ['gemini-1.5-flash', '4o-mini', 'flash', 'haiku']\n\nconst InputPricePenalty = 3 // $3 per 1M tokens\nconst OutputPricePenalty = 10 // $10 per 1M tokens\nconst LowTokensPenalty = 128_000 // 128k tokens\n\nexport type Model = RawModel & {\n ref: ModelRef\n integration: string\n}\n\nexport type ModelRef = `${string}:${string}`\n\nexport type ModelPreferences = {\n best: ModelRef[]\n fast: ModelRef[]\n downtimes: Array<{ ref: ModelRef; startedAt: string; reason: string }>\n}\n\nconst isRecommended = (model: Model) => model.tags.includes('recommended')\nconst isDeprecated = (model: Model) => model.tags.includes('deprecated')\nconst isLowCost = (model: Model) => model.tags.includes('low-cost')\nconst hasVisionSupport = (model: Model) => model.tags.includes('vision')\nconst isGeneralPurpose = (model: Model) => model.tags.includes('general-purpose')\n\nconst scoreModel = (model: Model, type: 'best' | 'fast', boosts: Record<ModelRef, number> = {}) => {\n let score: number = 0\n\n const scores: Array<[string, boolean, number]> = [\n ['input price penalty', model.input.costPer1MTokens > InputPricePenalty, -1],\n ['output price penalty', model.output.costPer1MTokens > OutputPricePenalty, -1],\n ['low tokens penalty', (model.input.maxTokens ?? 0 + model.output.maxTokens ?? 0) < LowTokensPenalty, -1],\n ['recommended', isRecommended(model), 2],\n ['deprecated', isDeprecated(model), -2],\n ['vision support', hasVisionSupport(model), 1],\n ['general purpose', isGeneralPurpose(model), 1],\n ['vendor preference', VendorPreferences.includes(model.integration), 1],\n ['best model preference', type === 'best' && BestModelPreferences.some((x) => model.id.includes(x)), 1],\n ['fast model preference penalty', type === 'best' && FastModelPreferences.some((x) => model.id.includes(x)), -2],\n ['fast model preference', type === 'fast' && FastModelPreferences.some((x) => model.id.includes(x)), 2],\n ['low cost', type === 'fast' && isLowCost(model), 1],\n ]\n\n for (const rule in boosts) {\n if (model.ref.includes(rule)) {\n scores.push([`boost (${rule})`, true, Number(boosts[rule as ModelRef]) ?? 0] as const)\n }\n }\n\n for (const [, condition, value] of scores) {\n if (condition) {\n score += value\n }\n }\n\n return score\n}\n\nexport const getBestModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'best', boosts) - scoreModel(a, 'best', boosts))\n\nexport const getFastModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'fast', boosts) - scoreModel(a, 'fast', boosts))\n\nexport const pickModel = (models: ModelRef[], downtimes: ModelPreferences['downtimes'] = []) => {\n const copy = [...models]\n const elasped = (date: string) => new Date().getTime() - new Date(date).getTime()\n const DOWNTIME_THRESHOLD = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n if (!copy.length) {\n throw new Error('At least one model is required')\n }\n\n while (copy.length) {\n const ref = copy.shift() as ModelRef\n const downtime = downtimes.find((o) => o.ref === ref && elasped(o.startedAt) < DOWNTIME_THRESHOLD)\n if (downtime) {\n continue\n } else {\n return ref\n }\n }\n\n throw new Error(`All models are down: ${models.join(', ')}`)\n}\n\nexport abstract class ModelProvider {\n public abstract fetchInstalledModels(): Promise<Model[]>\n public abstract fetchModelPreferences(): Promise<ModelPreferences | null>\n public abstract saveModelPreferences(preferences: ModelPreferences): Promise<void>\n public abstract deleteModelPreferences(): Promise<void>\n}\n\nexport class RemoteModelProvider extends ModelProvider {\n private _client: ExtendedClient\n\n public constructor(client: BotpressClientLike) {\n super()\n this._client = getExtendedClient(client)\n }\n\n private async _fetchInstalledIntegrationNames() {\n try {\n const { bot } = await this._client.getBot({ id: this._client.botId })\n const integrations = Object.values(bot.integrations).filter((x) => x.status === 'registered')\n return integrations.map((x) => x.name)\n } catch (err) {\n if (isForbiddenOrUnauthorizedError(err)) {\n // This happens when the bot (with a BAK token) tries to access the .getBot endpoint\n return DEFAULT_INTEGRATIONS\n }\n\n throw err\n }\n }\n\n public async fetchInstalledModels() {\n const integrationNames = await this._fetchInstalledIntegrationNames()\n const models: Model[] = []\n\n await Promise.allSettled(\n integrationNames.map(async (integration) => {\n const { output } = await this._client.callAction({\n type: `${integration}:listLanguageModels`,\n input: {},\n })\n\n if (!output?.models?.length) {\n return\n }\n\n for (const model of output.models as RawModel[]) {\n if (model.name && model.id && model.input && model.tags) {\n models.push({\n ref: `${integration}:${model.id}`,\n integration,\n id: model.id,\n name: model.name,\n description: model.description,\n input: model.input,\n output: model.output,\n tags: model.tags,\n })\n }\n }\n })\n )\n\n return models\n }\n\n public async fetchModelPreferences(): Promise<ModelPreferences | null> {\n try {\n const { file } = await this._client.getFile({ id: this._preferenceFileKey })\n\n if (globalThis.fetch !== undefined) {\n const response = await fetch(file.url)\n return (await response.json()) as ModelPreferences\n } else {\n const { data } = await this._client.axios.get(file.url, {\n // we piggy-back axios to avoid adding a new dependency\n // unset all headers to avoid S3 pre-signed signature mismatch\n headers: Object.keys(this._client.config.headers).reduce(\n (acc, key) => {\n acc[key] = undefined\n return acc\n },\n {} as Record<string, undefined>\n ),\n })\n return data as ModelPreferences\n }\n } catch (err) {\n if (isNotFoundError(err)) {\n return null\n }\n\n throw err\n }\n }\n\n public async saveModelPreferences(preferences: ModelPreferences) {\n await this._client.uploadFile({\n key: this._preferenceFileKey,\n content: JSON.stringify(preferences, null, 2),\n index: false,\n tags: {\n system: 'true',\n purpose: 'config',\n },\n })\n }\n\n public async deleteModelPreferences() {\n await this._client.deleteFile({ id: this._preferenceFileKey }).catch(() => {})\n }\n\n private get _preferenceFileKey() {\n return `bot->${this._client.botId}->${PREFERENCES_FILE_SUFFIX}`\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Delay", "SkipFirstDelay", "AlwaysDelay", "backOff", "BackOff", "ref"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -1,9 +1,145 @@
1
- import { llm } from '@botpress/common';
2
1
  import { Unsubscribe } from 'nanoevents';
3
2
 
4
- type GenerateContentInput = llm.GenerateContentInput;
5
- type GenerateContentOutput = llm.GenerateContentOutput;
6
- type Model$1 = llm.Model;
3
+ type GenerateContentInput = {
4
+ /** Model to use for content generation */
5
+ model?: any;
6
+ /** Reasoning effort level to use for models that support reasoning */
7
+ reasoningEffort?: 'low' | 'medium' | 'high';
8
+ /** Optional system prompt to guide the model */
9
+ systemPrompt?: string;
10
+ /** Array of messages for the model to process */
11
+ messages: Array<{
12
+ role: 'user' | 'assistant';
13
+ type?: 'text' | 'tool_calls' | 'tool_result' | 'multipart';
14
+ /** Required if `type` is "tool_calls" */
15
+ toolCalls?: Array<{
16
+ id: string;
17
+ type: 'function';
18
+ function: {
19
+ name: string;
20
+ /** Some LLMs may generate invalid JSON for a tool call, so this will be `null` when it happens. */
21
+ arguments: {
22
+ [key: string]: any;
23
+ } | null;
24
+ };
25
+ }>;
26
+ /** Required if `type` is "tool_result" */
27
+ toolResultCallId?: string;
28
+ /** Required unless `type` is "tool_call". If `type` is "multipart", this field must be an array of content objects. If `type` is "tool_result" then this field should be the result of the tool call (a plain string or a JSON-encoded array or object). If `type` is "tool_call" then the `toolCalls` field should be used instead. */
29
+ content: string | Array<{
30
+ type: 'text' | 'image';
31
+ /** Indicates the MIME type of the content. If not provided it will be detected from the content-type header of the provided URL. */
32
+ mimeType?: string;
33
+ /** Required if part type is "text" */
34
+ text?: string;
35
+ /** Required if part type is "image" */
36
+ url?: string;
37
+ }> | null;
38
+ }>;
39
+ /** Response format expected from the model. If "json_object" is chosen, you must instruct the model to generate JSON either via the system prompt or a user message. */
40
+ responseFormat?: 'text' | 'json_object';
41
+ /** Maximum number of tokens allowed in the generated response */
42
+ maxTokens?: number;
43
+ /** Sampling temperature for the model. Higher values result in more random outputs. */
44
+ temperature?: number;
45
+ /** Top-p sampling parameter. Limits sampling to the smallest set of tokens with a cumulative probability above the threshold. */
46
+ topP?: number;
47
+ /** Sequences where the model should stop generating further tokens. */
48
+ stopSequences?: string[];
49
+ tools?: Array<{
50
+ type: 'function';
51
+ function: {
52
+ /** Function name */
53
+ name: string;
54
+ description?: string;
55
+ /** JSON schema of the function arguments */
56
+ argumentsSchema?: {};
57
+ };
58
+ }>;
59
+ toolChoice?: {
60
+ type?: 'auto' | 'specific' | 'any' | 'none' | '';
61
+ /** Required if `type` is "specific" */
62
+ functionName?: string;
63
+ };
64
+ userId?: string;
65
+ /** Set to `true` to output debug information to the bot logs */
66
+ debug?: boolean;
67
+ meta?: {
68
+ /** Source of the prompt, e.g. agent/:id/:version cards/ai-generate, cards/ai-task, nodes/autonomous, etc. */
69
+ promptSource?: string;
70
+ promptCategory?: string;
71
+ /** Name of the integration that originally received the message that initiated this action */
72
+ integrationName?: string;
73
+ };
74
+ };
75
+ type GenerateContentOutput = {
76
+ /** Response ID from LLM provider */
77
+ id: string;
78
+ /** LLM provider name */
79
+ provider: string;
80
+ /** Model name */
81
+ model: string;
82
+ choices: Array<{
83
+ type?: 'text' | 'tool_calls' | 'tool_result' | 'multipart';
84
+ /** Required if `type` is "tool_calls" */
85
+ toolCalls?: Array<{
86
+ id: string;
87
+ type: 'function';
88
+ function: {
89
+ name: string;
90
+ /** Some LLMs may generate invalid JSON for a tool call, so this will be `null` when it happens. */
91
+ arguments: {
92
+ [key: string]: any;
93
+ } | null;
94
+ };
95
+ }>;
96
+ /** Required if `type` is "tool_result" */
97
+ toolResultCallId?: string;
98
+ /** Required unless `type` is "tool_call". If `type` is "multipart", this field must be an array of content objects. If `type` is "tool_result" then this field should be the result of the tool call (a plain string or a JSON-encoded array or object). If `type` is "tool_call" then the `toolCalls` field should be used instead. */
99
+ content: string | Array<{
100
+ type: 'text' | 'image';
101
+ /** Indicates the MIME type of the content. If not provided it will be detected from the content-type header of the provided URL. */
102
+ mimeType?: string;
103
+ /** Required if part type is "text" */
104
+ text?: string;
105
+ /** Required if part type is "image" */
106
+ url?: string;
107
+ }> | null;
108
+ role: 'assistant';
109
+ index: number;
110
+ stopReason: 'stop' | 'max_tokens' | 'tool_calls' | 'content_filter' | 'other';
111
+ }>;
112
+ usage: {
113
+ /** Number of input tokens used by the model */
114
+ inputTokens: number;
115
+ /** Cost of the input tokens received by the model, in U.S. dollars */
116
+ inputCost: number;
117
+ /** Number of output tokens used by the model */
118
+ outputTokens: number;
119
+ /** Cost of the output tokens generated by the model, in U.S. dollars */
120
+ outputCost: number;
121
+ };
122
+ botpress: {
123
+ /** Total cost of the content generation, in U.S. dollars */
124
+ cost: number;
125
+ };
126
+ };
127
+ type Model$1 = {
128
+ id: string;
129
+ name: string;
130
+ description: string;
131
+ tags: Array<'recommended' | 'deprecated' | 'general-purpose' | 'low-cost' | 'vision' | 'coding' | 'agents' | 'function-calling' | 'roleplay' | 'storytelling' | 'reasoning' | 'preview'>;
132
+ input: {
133
+ maxTokens: number;
134
+ /** Cost per 1 million tokens, in U.S. dollars */
135
+ costPer1MTokens: number;
136
+ };
137
+ output: {
138
+ maxTokens: number;
139
+ /** Cost per 1 million tokens, in U.S. dollars */
140
+ costPer1MTokens: number;
141
+ };
142
+ };
7
143
 
8
144
  type Model = Model$1 & {
9
145
  ref: ModelRef;
@@ -28,6 +164,7 @@ declare abstract class ModelProvider {
28
164
  declare class RemoteModelProvider extends ModelProvider {
29
165
  private _client;
30
166
  constructor(client: BotpressClientLike);
167
+ private _fetchInstalledIntegrationNames;
31
168
  fetchInstalledModels(): Promise<Model[]>;
32
169
  fetchModelPreferences(): Promise<ModelPreferences | null>;
33
170
  saveModelPreferences(preferences: ModelPreferences): Promise<void>;
@@ -1821,6 +1958,12 @@ interface UpdateMessageRequestBody {
1821
1958
  tags: {
1822
1959
  [k: string]: string;
1823
1960
  };
1961
+ /**
1962
+ * Payload is the content type of the message. Accepted payload options: Text, Image, Choice, Dropdown, Card, Carousel, File, Audio, Video, Location
1963
+ */
1964
+ payload?: {
1965
+ [k: string]: any;
1966
+ };
1824
1967
  }
1825
1968
  type UpdateMessageInput = UpdateMessageRequestBody & UpdateMessageRequestHeaders & UpdateMessageRequestQuery & UpdateMessageRequestParams;
1826
1969
  interface UpdateMessageResponse {
@@ -12646,7 +12789,7 @@ interface SearchFilesResponse {
12646
12789
  /**
12647
12790
  * The subtype of passage, if available.
12648
12791
  */
12649
- subtype?: "title" | "subtitle" | "paragraph" | "blockquote" | "list" | "table" | "code" | "page";
12792
+ subtype?: "title" | "subtitle" | "paragraph" | "blockquote" | "list" | "table" | "code" | "image" | "page";
12650
12793
  /**
12651
12794
  * Page number the passage is located on. Only applicable if the passage was extracted from a PDF file.
12652
12795
  */
@@ -12724,7 +12867,7 @@ interface ListFilePassagesResponse {
12724
12867
  /**
12725
12868
  * The subtype of passage, if available.
12726
12869
  */
12727
- subtype?: "title" | "subtitle" | "paragraph" | "blockquote" | "list" | "table" | "code" | "page";
12870
+ subtype?: "title" | "subtitle" | "paragraph" | "blockquote" | "list" | "table" | "code" | "image" | "page";
12728
12871
  /**
12729
12872
  * Page number the passage is located on. Only applicable if the passage was extracted from a PDF file.
12730
12873
  */
@@ -14954,7 +15097,7 @@ declare class Lister {
14954
15097
  content: string;
14955
15098
  meta: {
14956
15099
  type?: "chunk" | "summary" | "consolidated" | "image";
14957
- subtype?: "title" | "subtitle" | "paragraph" | "blockquote" | "list" | "table" | "code" | "page";
15100
+ subtype?: "title" | "subtitle" | "paragraph" | "blockquote" | "list" | "table" | "code" | "image" | "page";
14958
15101
  pageNumber?: number;
14959
15102
  position?: number;
14960
15103
  sourceUrl?: string;
package/dist/index.mjs CHANGED
@@ -658,6 +658,7 @@ var getActionFromError = (error) => {
658
658
  return "abort";
659
659
  };
660
660
  var isNotFoundError = (error) => isBotpressError(error) && error.type === "ResourceNotFound";
661
+ var isForbiddenOrUnauthorizedError = (error) => isBotpressError(error) && (error.type === "Forbidden" || error.type === "Unauthorized");
661
662
  var isBotpressError = (error) => typeof error === "object" && error !== null && "isApiError" in error && "code" in error && "type" in error && "id" in error;
662
663
 
663
664
  // src/interceptors.ts
@@ -709,6 +710,7 @@ var InterceptorManager = class {
709
710
  // src/models.ts
710
711
  var DOWNTIME_THRESHOLD_MINUTES = 5;
711
712
  var PREFERENCES_FILE_SUFFIX = "models.config.json";
713
+ var DEFAULT_INTEGRATIONS = ["google-ai", "anthropic", "openai", "cerebras", "fireworks-ai", "groq"];
712
714
  var VendorPreferences = ["google-ai", "anthropic", "openai"];
713
715
  var BestModelPreferences = ["4o", "3-5-sonnet", "gemini-1.5-pro"];
714
716
  var FastModelPreferences = ["gemini-1.5-flash", "4o-mini", "flash", "haiku"];
@@ -776,14 +778,25 @@ var RemoteModelProvider = class extends ModelProvider {
776
778
  super();
777
779
  this._client = getExtendedClient(client);
778
780
  }
781
+ async _fetchInstalledIntegrationNames() {
782
+ try {
783
+ const { bot } = await this._client.getBot({ id: this._client.botId });
784
+ const integrations = Object.values(bot.integrations).filter((x) => x.status === "registered");
785
+ return integrations.map((x) => x.name);
786
+ } catch (err) {
787
+ if (isForbiddenOrUnauthorizedError(err)) {
788
+ return DEFAULT_INTEGRATIONS;
789
+ }
790
+ throw err;
791
+ }
792
+ }
779
793
  async fetchInstalledModels() {
780
- const { bot } = await this._client.getBot({ id: this._client.botId });
794
+ const integrationNames = await this._fetchInstalledIntegrationNames();
781
795
  const models = [];
782
- const registered = Object.values(bot.integrations).filter((x) => x.status === "registered");
783
796
  await Promise.allSettled(
784
- registered.map(async (integration) => {
797
+ integrationNames.map(async (integration) => {
785
798
  const { output } = await this._client.callAction({
786
- type: `${integration.name}:listLanguageModels`,
799
+ type: `${integration}:listLanguageModels`,
787
800
  input: {}
788
801
  });
789
802
  if (!output?.models?.length) {
@@ -792,8 +805,8 @@ var RemoteModelProvider = class extends ModelProvider {
792
805
  for (const model of output.models) {
793
806
  if (model.name && model.id && model.input && model.tags) {
794
807
  models.push({
795
- ref: `${integration.name}:${model.id}`,
796
- integration: integration.name,
808
+ ref: `${integration}:${model.id}`,
809
+ integration,
797
810
  id: model.id,
798
811
  name: model.name,
799
812
  description: model.description,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/options.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/jitter/jitter.factory.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/delay.base.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/always/always.delay.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/delay/delay.factory.ts", "../../../node_modules/.pnpm/exponential-backoff@3.1.1/node_modules/exponential-backoff/src/backoff.ts", "../src/client.ts", "../../../node_modules/.pnpm/nanoevents@9.1.0/node_modules/nanoevents/index.js", "../src/bp-client.ts", "../src/errors.ts", "../src/interceptors.ts", "../src/models.ts"],
4
- "sourcesContent": [null, null, null, null, null, null, null, null, null, "import { backOff } from 'exponential-backoff'\nimport { createNanoEvents, Unsubscribe } from 'nanoevents'\n\nimport { ExtendedClient, getExtendedClient } from './bp-client'\nimport { getActionFromError } from './errors'\nimport { InterceptorManager } from './interceptors'\nimport { GenerateContentOutput } from './llm'\nimport {\n DOWNTIME_THRESHOLD_MINUTES,\n getBestModels,\n getFastModels,\n Model,\n ModelPreferences,\n ModelProvider,\n ModelRef,\n pickModel,\n RemoteModelProvider,\n} from './models'\nimport { CognitiveProps, Events, InputProps, Request, Response } from './types'\n\nexport class Cognitive {\n public ['$$IS_COGNITIVE'] = true\n\n public static isCognitiveClient(obj: any): obj is Cognitive {\n return obj?.$$IS_COGNITIVE === true\n }\n\n public interceptors = {\n request: new InterceptorManager<Request>(),\n response: new InterceptorManager<Response>(),\n }\n\n private _client: ExtendedClient\n private _preferences: ModelPreferences | null = null\n private _provider: ModelProvider\n private _events = createNanoEvents<Events>()\n private _downtimes: ModelPreferences['downtimes'] = []\n private _models: Model[] = []\n\n public constructor(props: CognitiveProps) {\n this._client = getExtendedClient(props.client)\n this._provider = props.provider ?? new RemoteModelProvider(props.client)\n }\n\n public get client(): ExtendedClient {\n return this._client\n }\n\n public on<K extends keyof Events>(this: this, event: K, cb: Events[K]): Unsubscribe {\n return this._events.on(event, cb)\n }\n\n public async fetchInstalledModels(): Promise<Model[]> {\n if (!this._models.length) {\n this._models = await this._provider.fetchInstalledModels()\n }\n\n return this._models\n }\n\n public async fetchPreferences(): Promise<ModelPreferences> {\n if (this._preferences) {\n return this._preferences\n }\n\n this._preferences = await this._provider.fetchModelPreferences()\n\n if (this._preferences) {\n return this._preferences\n }\n\n const models = await this.fetchInstalledModels()\n\n this._preferences = {\n best: getBestModels(models).map((m) => m.ref),\n fast: getFastModels(models).map((m) => m.ref),\n downtimes: [],\n }\n\n await this._provider.saveModelPreferences(this._preferences)\n\n return this._preferences\n }\n\n public async setPreferences(preferences: ModelPreferences, save: boolean = false): Promise<void> {\n this._preferences = preferences\n\n if (save) {\n await this._provider.saveModelPreferences(preferences)\n }\n }\n\n private _cleanupOldDowntimes(): void {\n const now = Date.now()\n const thresholdMs = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n this._preferences!.downtimes = this._preferences!.downtimes.filter((downtime) => {\n const downtimeStart = new Date(downtime.startedAt).getTime()\n return now - downtimeStart <= thresholdMs\n })\n }\n\n private async _selectModel(ref: string): Promise<{ integration: string; model: string }> {\n const parseRef = (ref: string) => {\n const parts = ref.split(':')\n return { integration: parts[0]!, model: parts.slice(1).join(':') }\n }\n\n const preferences = await this.fetchPreferences()\n\n preferences.best ??= []\n preferences.fast ??= []\n preferences.downtimes ??= []\n\n const downtimes = [...preferences.downtimes, ...(this._downtimes ?? [])]\n\n if (ref === 'best') {\n return parseRef(pickModel(preferences.best, downtimes))\n }\n\n if (ref === 'fast') {\n return parseRef(pickModel(preferences.fast, downtimes))\n }\n\n return parseRef(pickModel([ref as ModelRef, ...preferences.best, ...preferences.fast], downtimes))\n }\n\n public async getModelDetails(model: string) {\n await this.fetchInstalledModels()\n const { integration, model: modelName } = await this._selectModel(model)\n const def = this._models.find((m) => m.integration === integration && (m.name === modelName || m.id === modelName))\n if (!def) {\n console.info('Models:', this._models)\n throw new Error(`Model ${modelName} not found`)\n }\n\n return def\n }\n\n public async generateContent(input: InputProps): Promise<Response> {\n const start = Date.now()\n\n const signal = input.signal ?? AbortSignal.timeout(30_000)\n\n const client = this._client.abortable(signal)\n\n let props: Request = { input }\n let integration: string\n let model: string\n\n const { output, meta } = await backOff<{\n output: GenerateContentOutput\n meta: any\n }>(\n async () => {\n const selection = await this._selectModel(input.model ?? 'best')\n\n integration = selection.integration\n model = selection.model\n\n props = await this.interceptors.request.run({ input }, signal)\n\n return client.callAction({\n type: `${integration}:generateContent`,\n input: {\n ...props.input,\n model: { id: model },\n },\n }) as Promise<{ output: GenerateContentOutput; meta: any }>\n },\n {\n retry: async (err, _attempt) => {\n if (signal?.aborted) {\n // We don't want to retry if the request was aborted\n this._events.emit('aborted', props, err)\n return false\n }\n\n if (_attempt > 3) {\n // We don't want to retry more than 3 times\n this._events.emit('error', props, err)\n return false\n }\n\n const action = getActionFromError(err)\n\n if (action === 'abort') {\n this._events.emit('error', props, err)\n return false\n }\n\n if (action === 'fallback') {\n // We don't want to retry if the request was already retried with a fallback model\n this._downtimes.push({\n ref: `${integration!}:${model!}`,\n startedAt: new Date().toISOString(),\n reason: 'Model is down',\n })\n\n this._cleanupOldDowntimes()\n\n await this._provider.saveModelPreferences({\n ...(this._preferences ?? { best: [], downtimes: [], fast: [] }),\n downtimes: [...(this._preferences!.downtimes ?? []), ...(this._downtimes ?? [])],\n })\n\n this._events.emit('fallback', props, err)\n return true\n }\n\n this._events.emit('retry', props, err)\n return true\n },\n }\n )\n\n const response = {\n output,\n meta: {\n cached: meta.cached ?? false,\n model: { integration: integration!, model: model! },\n latency: Date.now() - start,\n cost: { input: output.usage.inputCost, output: output.usage.outputCost },\n tokens: { input: output.usage.inputTokens, output: output.usage.outputTokens },\n },\n } satisfies Response\n\n this._events.emit('response', props, response)\n\n return this.interceptors.response.run(response, signal)\n }\n}\n", "export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n", "import { type Client } from '@botpress/client'\nimport { type AxiosInstance } from 'axios'\nimport { BotpressClientLike } from './types'\n\n/** @internal */\nexport type ExtendedClient = Client & {\n botId: string\n axios: AxiosInstance\n clone: () => ExtendedClient\n abortable: (signal: AbortSignal) => ExtendedClient\n}\n\nexport const getExtendedClient = (client: BotpressClientLike): ExtendedClient => {\n if (\n typeof client.constructor !== 'function' ||\n typeof client.callAction !== 'function' ||\n !client.config ||\n typeof client.config !== 'object' ||\n !client.config.headers\n ) {\n throw new Error('Client must be a valid instance of a Botpress client (@botpress/client)')\n }\n\n const botId = client.config.headers['x-bot-id'] as string\n\n if (!botId?.length) {\n throw new Error('Client must be instanciated with Bot ID')\n }\n\n const clone = () => {\n const c = client as any\n if (c.clone && typeof c.clone === 'function') {\n return getExtendedClient(c.clone())\n }\n return getExtendedClient(new c.constructor(c.config))\n }\n\n return {\n ...client,\n botId,\n axios: (client as any).axiosInstance as AxiosInstance,\n clone,\n abortable: (signal: AbortSignal) => {\n const abortable = clone()\n const instance = abortable.axios\n instance.defaults.signal = signal\n return abortable\n },\n } as ExtendedClient\n}\n", "import { type ErrorType } from '@botpress/client'\n\nexport type BotpressError = {\n isApiError: boolean\n code: number\n description: string\n type: ErrorType\n subtype?: string\n error?: unknown\n metadata?: unknown\n message?: string\n id: string\n}\n\ntype Action = 'fallback' | 'retry' | 'abort'\n\nexport const getActionFromError = (error: any): Action => {\n if (!isBotpressError(error)) {\n return 'retry'\n }\n\n if (error.type === 'InvalidDataFormat') {\n if (error.message?.includes('data/model/id')) {\n // Invalid Model ID, so we want to try another model\n return 'fallback'\n }\n\n // Usually means the request was malformed\n return 'abort'\n }\n\n const subtype = (error.metadata as any)?.subtype\n if (error.type === 'Internal' || subtype === 'UPSTREAM_PROVIDER_FAILED') {\n // The model is degraded, so we want to try another model\n return 'fallback'\n }\n\n return 'abort'\n}\n\nexport const isNotFoundError = (error: any): boolean => isBotpressError(error) && error.type === 'ResourceNotFound'\n\nexport const isBotpressError = (error: any): error is BotpressError =>\n typeof error === 'object' &&\n error !== null &&\n 'isApiError' in error &&\n 'code' in error &&\n 'type' in error &&\n 'id' in error\n", "export type Callback<T> = (error: any | null, value: T) => void\nexport type Interceptor<T> = (error: any | null, value: T, next: Callback<T>, done: Callback<T>) => Promise<void> | void\n\nexport class InterceptorManager<T> {\n private _interceptors: Interceptor<T>[] = []\n\n public use(interceptor: Interceptor<T>) {\n this._interceptors.push(interceptor)\n return () => this.remove(interceptor)\n }\n\n public remove(interceptor: Interceptor<T>) {\n this._interceptors = this._interceptors.filter((i) => i !== interceptor)\n }\n\n public async run(value: T, signal: AbortSignal): Promise<T> {\n let error: any | null = null\n let result: T = value\n let done = false\n\n for (const interceptor of this._interceptors) {\n if (done) {\n break\n }\n\n if (signal.aborted) {\n throw signal.reason\n }\n\n await new Promise<void>((resolve) => {\n void interceptor(\n error,\n result,\n (err, val) => {\n error = err\n result = val\n resolve()\n },\n (err, val) => {\n error = err\n result = val\n done = true\n resolve()\n }\n )\n })\n }\n\n if (error) {\n throw error\n }\n\n return result\n }\n}\n", "import { ExtendedClient, getExtendedClient } from './bp-client'\nimport { isNotFoundError } from './errors'\nimport { Model as RawModel } from './llm'\nimport { BotpressClientLike } from './types'\n\nexport const DOWNTIME_THRESHOLD_MINUTES = 5\nconst PREFERENCES_FILE_SUFFIX = 'models.config.json'\n\n// Biases for vendors and models\nconst VendorPreferences = ['google-ai', 'anthropic', 'openai']\nconst BestModelPreferences = ['4o', '3-5-sonnet', 'gemini-1.5-pro']\nconst FastModelPreferences = ['gemini-1.5-flash', '4o-mini', 'flash', 'haiku']\n\nconst InputPricePenalty = 3 // $3 per 1M tokens\nconst OutputPricePenalty = 10 // $10 per 1M tokens\nconst LowTokensPenalty = 128_000 // 128k tokens\n\nexport type Model = RawModel & {\n ref: ModelRef\n integration: string\n}\n\nexport type ModelRef = `${string}:${string}`\n\nexport type ModelPreferences = {\n best: ModelRef[]\n fast: ModelRef[]\n downtimes: Array<{ ref: ModelRef; startedAt: string; reason: string }>\n}\n\nconst isRecommended = (model: Model) => model.tags.includes('recommended')\nconst isDeprecated = (model: Model) => model.tags.includes('deprecated')\nconst isLowCost = (model: Model) => model.tags.includes('low-cost')\nconst hasVisionSupport = (model: Model) => model.tags.includes('vision')\nconst isGeneralPurpose = (model: Model) => model.tags.includes('general-purpose')\n\nconst scoreModel = (model: Model, type: 'best' | 'fast', boosts: Record<ModelRef, number> = {}) => {\n let score: number = 0\n\n const scores: Array<[string, boolean, number]> = [\n ['input price penalty', model.input.costPer1MTokens > InputPricePenalty, -1],\n ['output price penalty', model.output.costPer1MTokens > OutputPricePenalty, -1],\n ['low tokens penalty', (model.input.maxTokens ?? 0 + model.output.maxTokens ?? 0) < LowTokensPenalty, -1],\n ['recommended', isRecommended(model), 2],\n ['deprecated', isDeprecated(model), -2],\n ['vision support', hasVisionSupport(model), 1],\n ['general purpose', isGeneralPurpose(model), 1],\n ['vendor preference', VendorPreferences.includes(model.integration), 1],\n ['best model preference', type === 'best' && BestModelPreferences.some((x) => model.id.includes(x)), 1],\n ['fast model preference penalty', type === 'best' && FastModelPreferences.some((x) => model.id.includes(x)), -2],\n ['fast model preference', type === 'fast' && FastModelPreferences.some((x) => model.id.includes(x)), 2],\n ['low cost', type === 'fast' && isLowCost(model), 1],\n ]\n\n for (const rule in boosts) {\n if (model.ref.includes(rule)) {\n scores.push([`boost (${rule})`, true, Number(boosts[rule as ModelRef]) ?? 0] as const)\n }\n }\n\n for (const [, condition, value] of scores) {\n if (condition) {\n score += value\n }\n }\n\n return score\n}\n\nexport const getBestModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'best', boosts) - scoreModel(a, 'best', boosts))\n\nexport const getFastModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'fast', boosts) - scoreModel(a, 'fast', boosts))\n\nexport const pickModel = (models: ModelRef[], downtimes: ModelPreferences['downtimes'] = []) => {\n const copy = [...models]\n const elasped = (date: string) => new Date().getTime() - new Date(date).getTime()\n const DOWNTIME_THRESHOLD = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n if (!copy.length) {\n throw new Error('At least one model is required')\n }\n\n while (copy.length) {\n const ref = copy.shift() as ModelRef\n const downtime = downtimes.find((o) => o.ref === ref && elasped(o.startedAt) < DOWNTIME_THRESHOLD)\n if (downtime) {\n continue\n } else {\n return ref\n }\n }\n\n throw new Error(`All models are down: ${models.join(', ')}`)\n}\n\nexport abstract class ModelProvider {\n public abstract fetchInstalledModels(): Promise<Model[]>\n public abstract fetchModelPreferences(): Promise<ModelPreferences | null>\n public abstract saveModelPreferences(preferences: ModelPreferences): Promise<void>\n public abstract deleteModelPreferences(): Promise<void>\n}\n\nexport class RemoteModelProvider extends ModelProvider {\n private _client: ExtendedClient\n\n public constructor(client: BotpressClientLike) {\n super()\n this._client = getExtendedClient(client)\n }\n\n public async fetchInstalledModels() {\n const { bot } = await this._client.getBot({ id: this._client.botId })\n const models: Model[] = []\n\n const registered = Object.values(bot.integrations).filter((x) => x.status === 'registered')\n\n await Promise.allSettled(\n registered.map(async (integration) => {\n const { output } = await this._client.callAction({\n type: `${integration.name}:listLanguageModels`,\n input: {},\n })\n\n if (!output?.models?.length) {\n return\n }\n\n for (const model of output.models as RawModel[]) {\n if (model.name && model.id && model.input && model.tags) {\n models.push({\n ref: `${integration.name}:${model.id}`,\n integration: integration.name,\n id: model.id,\n name: model.name,\n description: model.description,\n input: model.input,\n output: model.output,\n tags: model.tags,\n })\n }\n }\n })\n )\n\n return models\n }\n\n public async fetchModelPreferences(): Promise<ModelPreferences | null> {\n try {\n const { file } = await this._client.getFile({ id: this._preferenceFileKey })\n\n if (globalThis.fetch !== undefined) {\n const response = await fetch(file.url)\n return (await response.json()) as ModelPreferences\n } else {\n const { data } = await this._client.axios.get(file.url, {\n // we piggy-back axios to avoid adding a new dependency\n // unset all headers to avoid S3 pre-signed signature mismatch\n headers: Object.keys(this._client.config.headers).reduce(\n (acc, key) => {\n acc[key] = undefined\n return acc\n },\n {} as Record<string, undefined>\n ),\n })\n return data as ModelPreferences\n }\n } catch (err) {\n if (isNotFoundError(err)) {\n return null\n }\n\n throw err\n }\n }\n\n public async saveModelPreferences(preferences: ModelPreferences) {\n await this._client.uploadFile({\n key: this._preferenceFileKey,\n content: JSON.stringify(preferences, null, 2),\n index: false,\n tags: {\n system: 'true',\n purpose: 'config',\n },\n })\n }\n\n public async deleteModelPreferences() {\n await this._client.deleteFile({ id: this._preferenceFileKey }).catch(() => {})\n }\n\n private get _preferenceFileKey() {\n return `bot->${this._client.botId}->${PREFERENCES_FILE_SUFFIX}`\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,QAAM,iBAAkC;MACtC,mBAAmB;MACnB,QAAQ;MACR,UAAU;MACV,eAAe;MACf,OAAO,WAAA;AAAM,eAAA;MAAA;MACb,eAAe;MACf,cAAc;;AAGhB,aAAgB,oBAAoB,SAAuB;AACzD,UAAM,YAAS,SAAA,SAAA,CAAA,GAAyB,cAAc,GAAK,OAAO;AAElE,UAAI,UAAU,gBAAgB,GAAG;AAC/B,kBAAU,gBAAgB;;AAG5B,aAAO;IACT;AARA,YAAA,sBAAA;;;;;;;;;ACxBA,aAAgB,WAAW,OAAa;AACpC,UAAM,gBAAgB,KAAK,OAAM,IAAK;AACtC,aAAO,KAAK,MAAM,aAAa;IACnC;AAHA,YAAA,aAAA;;;;;;;;;ACAA,aAAgB,SAAS,OAAa;AAClC,aAAO;IACX;AAFA,YAAA,WAAA;;;;;;;;;ACCA,QAAA,gBAAA;AACA,QAAA,cAAA;AAIA,aAAgB,cAAc,SAAwB;AACpD,cAAQ,QAAQ,QAAQ;QACtB,KAAK;AACH,iBAAO,cAAA;QAET,KAAK;QACL;AACE,iBAAO,YAAA;;IAEb;AATA,YAAA,gBAAA;;;;;;;;;ACJA,QAAA,mBAAA;AAEA,QAAA;;MAAA,WAAA;AAEE,iBAAAA,OAAoB,SAAwB;AAAxB,eAAA,UAAA;AADV,eAAA,UAAU;QAC2B;AAExC,QAAAA,OAAA,UAAA,QAAP,WAAA;AAAA,cAAA,QAAA;AACE,iBAAO,IAAI,QAAQ,SAAA,SAAO;AAAI,mBAAA,WAAW,SAAS,MAAK,aAAa;UAAtC,CAAuC;QACvE;AAEO,QAAAA,OAAA,UAAA,mBAAP,SAAwB,SAAe;AACrC,eAAK,UAAU;QACjB;AAEA,eAAA,eAAYA,OAAA,WAAA,iBAAa;eAAzB,WAAA;AACE,gBAAM,SAAS,iBAAA,cAAc,KAAK,OAAO;AACzC,mBAAO,OAAO,KAAK,KAAK;UAC1B;;;;AAEA,eAAA,eAAYA,OAAA,WAAA,SAAK;eAAjB,WAAA;AACE,gBAAM,WAAW,KAAK,QAAQ;AAC9B,gBAAM,OAAO,KAAK,QAAQ;AAC1B,gBAAM,QAAQ,KAAK;AACnB,gBAAM,QAAQ,WAAW,KAAK,IAAI,MAAM,KAAK;AAE7C,mBAAO,KAAK,IAAI,OAAO,KAAK,QAAQ,QAAQ;UAC9C;;;;AAEA,eAAA,eAAcA,OAAA,WAAA,wBAAoB;eAAlC,WAAA;AACE,mBAAO,KAAK;UACd;;;;AACF,eAAAA;MAAA,EA7BA;;AAAsB,YAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJtB,QAAA,eAAA;AAEA,QAAA;;MAAA,SAAA,QAAA;AAAoC,kBAAAC,iBAAA,MAAA;AAApC,iBAAAA,kBAAA;;QAYA;AAXiB,QAAAA,gBAAA,UAAA,QAAb,WAAA;;;AACI,qBAAA,CAAA,GAAO,KAAK,iBAAiB,OAAO,OAAA,UAAM,MAAK,KAAA,IAAA,CAAE;;;;AAGrD,eAAA,eAAYA,gBAAA,WAAA,kBAAc;eAA1B,WAAA;AACI,mBAAO,KAAK,YAAY;UAC5B;;;;AAEA,eAAA,eAAcA,gBAAA,WAAA,wBAAoB;eAAlC,WAAA;AACI,mBAAO,KAAK,UAAU;UAC1B;;;;AACJ,eAAAA;MAAA,EAZoC,aAAA,KAAK;;AAA5B,YAAA,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFb,QAAA,eAAA;AAEA,QAAA;;MAAA,SAAA,QAAA;AAAiC,kBAAAC,cAAA,MAAA;AAAjC,iBAAAA,eAAA;;QAAwC;AAAA,eAAAA;MAAA,EAAP,aAAA,KAAK;;AAAzB,YAAA,cAAA;;;;;;;;;ACDb,QAAA,qBAAA;AACA,QAAA,iBAAA;AAGA,aAAgB,aAAa,SAA0B,SAAe;AAClE,UAAM,QAAQ,eAAe,OAAO;AACpC,YAAM,iBAAiB,OAAO;AAC9B,aAAO;IACX;AAJA,YAAA,eAAA;AAMA,aAAS,eAAe,SAAwB;AAC5C,UAAI,CAAC,QAAQ,mBAAmB;AAC5B,eAAO,IAAI,mBAAA,eAAe,OAAO;;AAGrC,aAAO,IAAI,eAAA,YAAY,OAAO;IAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA,QAAA,YAAA;AAKA,QAAA,kBAAA;AAIA,aAAsBC,SACpB,SACA,SAA4B;AAA5B,UAAA,YAAA,QAAA;AAAA,kBAAA,CAAA;MAA4B;;;;;;AAEtB,iCAAmB,UAAA,oBAAoB,OAAO;AAC9C,cAAAA,WAAU,IAAI,QAAQ,SAAS,gBAAgB;AAE9C,qBAAA,CAAA,GAAMA,SAAQ,QAAO,CAAE;;AAA9B,qBAAA,CAAA,GAAO,GAAA,KAAA,CAAuB;;;;;AAPhC,YAAA,UAAAA;AAUA,QAAA;;MAAA,WAAA;AAGE,iBAAAC,SACU,SACA,SAAwB;AADxB,eAAA,UAAA;AACA,eAAA,UAAA;AAJF,eAAA,gBAAgB;QAKrB;AAEU,QAAAA,SAAA,UAAA,UAAb,WAAA;;;;;;uBACS,CAAC,KAAK;AAAmB,2BAAA,CAAA,GAAA,CAAA;;;;AAE5B,yBAAA,CAAA,GAAM,KAAK,WAAU,CAAE;;AAAvB,qBAAA,KAAA;AACO,yBAAA,CAAA,GAAM,KAAK,QAAO,CAAE;;AAA3B,yBAAA,CAAA,GAAO,GAAA,KAAA,CAAoB;;;AAE3B,uBAAK;AACe,yBAAA,CAAA,GAAM,KAAK,QAAQ,MAAM,KAAG,KAAK,aAAa,CAAC;;AAA7D,gCAAc,GAAA,KAAA;AAEpB,sBAAI,CAAC,eAAe,KAAK,qBAAqB;AAC5C,0BAAM;;;;;;AAKZ,wBAAM,IAAI,MAAM,uBAAuB;;;;;AAGzC,eAAA,eAAYA,SAAA,WAAA,uBAAmB;eAA/B,WAAA;AACE,mBAAO,KAAK,iBAAiB,KAAK,QAAQ;UAC5C;;;;AAEc,QAAAA,SAAA,UAAA,aAAd,WAAA;;;;;;AACQ,0BAAQ,gBAAA,aAAa,KAAK,SAAS,KAAK,aAAa;AAC3D,yBAAA,CAAA,GAAM,MAAM,MAAK,CAAE;;AAAnB,qBAAA,KAAA;;;;;;;;;AAEJ,eAAAA;MAAA,EAlCA;;;;;;ACnBA,iCAAwB;;;ACAjB,IAAI,mBAAmB,OAAO;AAAA,EACnC,KAAK,UAAU,MAAM;AACnB,aACM,YAAY,KAAK,OAAO,KAAK,KAAK,CAAC,GACrC,IAAI,GACJ,SAAS,UAAU,QACrB,IAAI,QACJ,KACA;AACA,gBAAU,CAAC,EAAE,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAAA,EACA,QAAQ,CAAC;AAAA,EACT,GAAG,OAAO,IAAI;AACZ;AAAC,KAAC,KAAK,OAAO,KAAK,MAAM,CAAC,GAAG,KAAK,EAAE;AACpC,WAAO,MAAM;AACX,WAAK,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,GAAG,OAAO,OAAK,OAAO,CAAC;AAAA,IAC/D;AAAA,EACF;AACF;;;ACPO,IAAM,oBAAoB,CAAC,WAA+C;AAC/E,MACE,OAAO,OAAO,gBAAgB,cAC9B,OAAO,OAAO,eAAe,cAC7B,CAAC,OAAO,UACR,OAAO,OAAO,WAAW,YACzB,CAAC,OAAO,OAAO,SACf;AACA,UAAM,IAAI,MAAM,yEAAyE;AAAA,EAC3F;AAEA,QAAM,QAAQ,OAAO,OAAO,QAAQ,UAAU;AAE9C,MAAI,CAAC,OAAO,QAAQ;AAClB,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,QAAM,QAAQ,MAAM;AAClB,UAAM,IAAI;AACV,QAAI,EAAE,SAAS,OAAO,EAAE,UAAU,YAAY;AAC5C,aAAO,kBAAkB,EAAE,MAAM,CAAC;AAAA,IACpC;AACA,WAAO,kBAAkB,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,OAAQ,OAAe;AAAA,IACvB;AAAA,IACA,WAAW,CAAC,WAAwB;AAClC,YAAM,YAAY,MAAM;AACxB,YAAM,WAAW,UAAU;AAC3B,eAAS,SAAS,SAAS;AAC3B,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACjCO,IAAM,qBAAqB,CAAC,UAAuB;AACxD,MAAI,CAAC,gBAAgB,KAAK,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,qBAAqB;AACtC,QAAI,MAAM,SAAS,SAAS,eAAe,GAAG;AAE5C,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT;AAEA,QAAM,UAAW,MAAM,UAAkB;AACzC,MAAI,MAAM,SAAS,cAAc,YAAY,4BAA4B;AAEvE,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAC,UAAwB,gBAAgB,KAAK,KAAK,MAAM,SAAS;AAE1F,IAAM,kBAAkB,CAAC,UAC9B,OAAO,UAAU,YACjB,UAAU,QACV,gBAAgB,SAChB,UAAU,SACV,UAAU,SACV,QAAQ;;;AC7CH,IAAM,qBAAN,MAA4B;AAAA,EACzB,gBAAkC,CAAC;AAAA,EAEpC,IAAI,aAA6B;AACtC,SAAK,cAAc,KAAK,WAAW;AACnC,WAAO,MAAM,KAAK,OAAO,WAAW;AAAA,EACtC;AAAA,EAEO,OAAO,aAA6B;AACzC,SAAK,gBAAgB,KAAK,cAAc,OAAO,CAAC,MAAM,MAAM,WAAW;AAAA,EACzE;AAAA,EAEA,MAAa,IAAI,OAAU,QAAiC;AAC1D,QAAI,QAAoB;AACxB,QAAI,SAAY;AAChB,QAAI,OAAO;AAEX,eAAW,eAAe,KAAK,eAAe;AAC5C,UAAI,MAAM;AACR;AAAA,MACF;AAEA,UAAI,OAAO,SAAS;AAClB,cAAM,OAAO;AAAA,MACf;AAEA,YAAM,IAAI,QAAc,CAAC,YAAY;AACnC,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA,CAAC,KAAK,QAAQ;AACZ,oBAAQ;AACR,qBAAS;AACT,oBAAQ;AAAA,UACV;AAAA,UACA,CAAC,KAAK,QAAQ;AACZ,oBAAQ;AACR,qBAAS;AACT,mBAAO;AACP,oBAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,OAAO;AACT,YAAM;AAAA,IACR;AAEA,WAAO;AAAA,EACT;AACF;;;ACjDO,IAAM,6BAA6B;AAC1C,IAAM,0BAA0B;AAGhC,IAAM,oBAAoB,CAAC,aAAa,aAAa,QAAQ;AAC7D,IAAM,uBAAuB,CAAC,MAAM,cAAc,gBAAgB;AAClE,IAAM,uBAAuB,CAAC,oBAAoB,WAAW,SAAS,OAAO;AAE7E,IAAM,oBAAoB;AAC1B,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AAezB,IAAM,gBAAgB,CAAC,UAAiB,MAAM,KAAK,SAAS,aAAa;AACzE,IAAM,eAAe,CAAC,UAAiB,MAAM,KAAK,SAAS,YAAY;AACvE,IAAM,YAAY,CAAC,UAAiB,MAAM,KAAK,SAAS,UAAU;AAClE,IAAM,mBAAmB,CAAC,UAAiB,MAAM,KAAK,SAAS,QAAQ;AACvE,IAAM,mBAAmB,CAAC,UAAiB,MAAM,KAAK,SAAS,iBAAiB;AAEhF,IAAM,aAAa,CAAC,OAAc,MAAuB,SAAmC,CAAC,MAAM;AACjG,MAAI,QAAgB;AAEpB,QAAM,SAA2C;AAAA,IAC/C,CAAC,uBAAuB,MAAM,MAAM,kBAAkB,mBAAmB,EAAE;AAAA,IAC3E,CAAC,wBAAwB,MAAM,OAAO,kBAAkB,oBAAoB,EAAE;AAAA,IAC9E,CAAC,uBAAuB,MAAM,MAAM,aAAa,IAAI,MAAM,OAAO,aAAa,KAAK,kBAAkB,EAAE;AAAA,IACxG,CAAC,eAAe,cAAc,KAAK,GAAG,CAAC;AAAA,IACvC,CAAC,cAAc,aAAa,KAAK,GAAG,EAAE;AAAA,IACtC,CAAC,kBAAkB,iBAAiB,KAAK,GAAG,CAAC;AAAA,IAC7C,CAAC,mBAAmB,iBAAiB,KAAK,GAAG,CAAC;AAAA,IAC9C,CAAC,qBAAqB,kBAAkB,SAAS,MAAM,WAAW,GAAG,CAAC;AAAA,IACtE,CAAC,yBAAyB,SAAS,UAAU,qBAAqB,KAAK,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC;AAAA,IACtG,CAAC,iCAAiC,SAAS,UAAU,qBAAqB,KAAK,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE;AAAA,IAC/G,CAAC,yBAAyB,SAAS,UAAU,qBAAqB,KAAK,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC;AAAA,IACtG,CAAC,YAAY,SAAS,UAAU,UAAU,KAAK,GAAG,CAAC;AAAA,EACrD;AAEA,aAAW,QAAQ,QAAQ;AACzB,QAAI,MAAM,IAAI,SAAS,IAAI,GAAG;AAC5B,aAAO,KAAK,CAAC,UAAU,SAAS,MAAM,OAAO,OAAO,IAAgB,CAAC,KAAK,CAAC,CAAU;AAAA,IACvF;AAAA,EACF;AAEA,aAAW,CAAC,EAAE,WAAW,KAAK,KAAK,QAAQ;AACzC,QAAI,WAAW;AACb,eAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,gBAAgB,CAAC,QAAiB,SAAmC,CAAC,MACjF,OAAO,KAAK,CAAC,GAAG,MAAM,WAAW,GAAG,QAAQ,MAAM,IAAI,WAAW,GAAG,QAAQ,MAAM,CAAC;AAE9E,IAAM,gBAAgB,CAAC,QAAiB,SAAmC,CAAC,MACjF,OAAO,KAAK,CAAC,GAAG,MAAM,WAAW,GAAG,QAAQ,MAAM,IAAI,WAAW,GAAG,QAAQ,MAAM,CAAC;AAE9E,IAAM,YAAY,CAAC,QAAoB,YAA2C,CAAC,MAAM;AAC9F,QAAM,OAAO,CAAC,GAAG,MAAM;AACvB,QAAM,UAAU,CAAC,SAAiB,IAAI,KAAK,EAAE,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,QAAQ;AAChF,QAAM,qBAAqB,MAAO,KAAK;AAEvC,MAAI,CAAC,KAAK,QAAQ;AAChB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,SAAO,KAAK,QAAQ;AAClB,UAAM,MAAM,KAAK,MAAM;AACvB,UAAM,WAAW,UAAU,KAAK,CAAC,MAAM,EAAE,QAAQ,OAAO,QAAQ,EAAE,SAAS,IAAI,kBAAkB;AACjG,QAAI,UAAU;AACZ;AAAA,IACF,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,wBAAwB,OAAO,KAAK,IAAI,GAAG;AAC7D;AAEO,IAAe,gBAAf,MAA6B;AAKpC;AAEO,IAAM,sBAAN,cAAkC,cAAc;AAAA,EAC7C;AAAA,EAED,YAAY,QAA4B;AAC7C,UAAM;AACN,SAAK,UAAU,kBAAkB,MAAM;AAAA,EACzC;AAAA,EAEA,MAAa,uBAAuB;AAClC,UAAM,EAAE,IAAI,IAAI,MAAM,KAAK,QAAQ,OAAO,EAAE,IAAI,KAAK,QAAQ,MAAM,CAAC;AACpE,UAAM,SAAkB,CAAC;AAEzB,UAAM,aAAa,OAAO,OAAO,IAAI,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,YAAY;AAE1F,UAAM,QAAQ;AAAA,MACZ,WAAW,IAAI,OAAO,gBAAgB;AACpC,cAAM,EAAE,OAAO,IAAI,MAAM,KAAK,QAAQ,WAAW;AAAA,UAC/C,MAAM,GAAG,YAAY;AAAA,UACrB,OAAO,CAAC;AAAA,QACV,CAAC;AAED,YAAI,CAAC,QAAQ,QAAQ,QAAQ;AAC3B;AAAA,QACF;AAEA,mBAAW,SAAS,OAAO,QAAsB;AAC/C,cAAI,MAAM,QAAQ,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM;AACvD,mBAAO,KAAK;AAAA,cACV,KAAK,GAAG,YAAY,QAAQ,MAAM;AAAA,cAClC,aAAa,YAAY;AAAA,cACzB,IAAI,MAAM;AAAA,cACV,MAAM,MAAM;AAAA,cACZ,aAAa,MAAM;AAAA,cACnB,OAAO,MAAM;AAAA,cACb,QAAQ,MAAM;AAAA,cACd,MAAM,MAAM;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,wBAA0D;AACrE,QAAI;AACF,YAAM,EAAE,KAAK,IAAI,MAAM,KAAK,QAAQ,QAAQ,EAAE,IAAI,KAAK,mBAAmB,CAAC;AAE3E,UAAI,WAAW,UAAU,QAAW;AAClC,cAAM,WAAW,MAAM,MAAM,KAAK,GAAG;AACrC,eAAQ,MAAM,SAAS,KAAK;AAAA,MAC9B,OAAO;AACL,cAAM,EAAE,KAAK,IAAI,MAAM,KAAK,QAAQ,MAAM,IAAI,KAAK,KAAK;AAAA;AAAA;AAAA,UAGtD,SAAS,OAAO,KAAK,KAAK,QAAQ,OAAO,OAAO,EAAE;AAAA,YAChD,CAAC,KAAK,QAAQ;AACZ,kBAAI,GAAG,IAAI;AACX,qBAAO;AAAA,YACT;AAAA,YACA,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,IACF,SAAS,KAAP;AACA,UAAI,gBAAgB,GAAG,GAAG;AACxB,eAAO;AAAA,MACT;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,qBAAqB,aAA+B;AAC/D,UAAM,KAAK,QAAQ,WAAW;AAAA,MAC5B,KAAK,KAAK;AAAA,MACV,SAAS,KAAK,UAAU,aAAa,MAAM,CAAC;AAAA,MAC5C,OAAO;AAAA,MACP,MAAM;AAAA,QACJ,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,yBAAyB;AACpC,UAAM,KAAK,QAAQ,WAAW,EAAE,IAAI,KAAK,mBAAmB,CAAC,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EAC/E;AAAA,EAEA,IAAY,qBAAqB;AAC/B,WAAO,QAAQ,KAAK,QAAQ,UAAU;AAAA,EACxC;AACF;;;ALlLO,IAAM,YAAN,MAAgB;AAAA,EACrB,CAAQ,gBAAgB,IAAI;AAAA,EAE5B,OAAc,kBAAkB,KAA4B;AAC1D,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAAA,EAEO,eAAe;AAAA,IACpB,SAAS,IAAI,mBAA4B;AAAA,IACzC,UAAU,IAAI,mBAA6B;AAAA,EAC7C;AAAA,EAEQ;AAAA,EACA,eAAwC;AAAA,EACxC;AAAA,EACA,UAAU,iBAAyB;AAAA,EACnC,aAA4C,CAAC;AAAA,EAC7C,UAAmB,CAAC;AAAA,EAErB,YAAY,OAAuB;AACxC,SAAK,UAAU,kBAAkB,MAAM,MAAM;AAC7C,SAAK,YAAY,MAAM,YAAY,IAAI,oBAAoB,MAAM,MAAM;AAAA,EACzE;AAAA,EAEA,IAAW,SAAyB;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,GAAuC,OAAU,IAA4B;AAClF,WAAO,KAAK,QAAQ,GAAG,OAAO,EAAE;AAAA,EAClC;AAAA,EAEA,MAAa,uBAAyC;AACpD,QAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,WAAK,UAAU,MAAM,KAAK,UAAU,qBAAqB;AAAA,IAC3D;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAa,mBAA8C;AACzD,QAAI,KAAK,cAAc;AACrB,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,eAAe,MAAM,KAAK,UAAU,sBAAsB;AAE/D,QAAI,KAAK,cAAc;AACrB,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,SAAS,MAAM,KAAK,qBAAqB;AAE/C,SAAK,eAAe;AAAA,MAClB,MAAM,cAAc,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,MAC5C,MAAM,cAAc,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,MAC5C,WAAW,CAAC;AAAA,IACd;AAEA,UAAM,KAAK,UAAU,qBAAqB,KAAK,YAAY;AAE3D,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAa,eAAe,aAA+B,OAAgB,OAAsB;AAC/F,SAAK,eAAe;AAEpB,QAAI,MAAM;AACR,YAAM,KAAK,UAAU,qBAAqB,WAAW;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,uBAA6B;AACnC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,cAAc,MAAO,KAAK;AAEhC,SAAK,aAAc,YAAY,KAAK,aAAc,UAAU,OAAO,CAAC,aAAa;AAC/E,YAAM,gBAAgB,IAAI,KAAK,SAAS,SAAS,EAAE,QAAQ;AAC3D,aAAO,MAAM,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,aAAa,KAA8D;AACvF,UAAM,WAAW,CAACC,SAAgB;AAChC,YAAM,QAAQA,KAAI,MAAM,GAAG;AAC3B,aAAO,EAAE,aAAa,MAAM,CAAC,GAAI,OAAO,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE;AAAA,IACnE;AAEA,UAAM,cAAc,MAAM,KAAK,iBAAiB;AAEhD,gBAAY,SAAS,CAAC;AACtB,gBAAY,SAAS,CAAC;AACtB,gBAAY,cAAc,CAAC;AAE3B,UAAM,YAAY,CAAC,GAAG,YAAY,WAAW,GAAI,KAAK,cAAc,CAAC,CAAE;AAEvE,QAAI,QAAQ,QAAQ;AAClB,aAAO,SAAS,UAAU,YAAY,MAAM,SAAS,CAAC;AAAA,IACxD;AAEA,QAAI,QAAQ,QAAQ;AAClB,aAAO,SAAS,UAAU,YAAY,MAAM,SAAS,CAAC;AAAA,IACxD;AAEA,WAAO,SAAS,UAAU,CAAC,KAAiB,GAAG,YAAY,MAAM,GAAG,YAAY,IAAI,GAAG,SAAS,CAAC;AAAA,EACnG;AAAA,EAEA,MAAa,gBAAgB,OAAe;AAC1C,UAAM,KAAK,qBAAqB;AAChC,UAAM,EAAE,aAAa,OAAO,UAAU,IAAI,MAAM,KAAK,aAAa,KAAK;AACvE,UAAM,MAAM,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,gBAAgB,EAAE,SAAS,aAAa,EAAE,OAAO,UAAU;AAClH,QAAI,CAAC,KAAK;AACR,cAAQ,KAAK,WAAW,KAAK,OAAO;AACpC,YAAM,IAAI,MAAM,SAAS,qBAAqB;AAAA,IAChD;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,gBAAgB,OAAsC;AACjE,UAAM,QAAQ,KAAK,IAAI;AAEvB,UAAM,SAAS,MAAM,UAAU,YAAY,QAAQ,GAAM;AAEzD,UAAM,SAAS,KAAK,QAAQ,UAAU,MAAM;AAE5C,QAAI,QAAiB,EAAE,MAAM;AAC7B,QAAI;AACJ,QAAI;AAEJ,UAAM,EAAE,QAAQ,KAAK,IAAI,UAAM;AAAA,MAI7B,YAAY;AACV,cAAM,YAAY,MAAM,KAAK,aAAa,MAAM,SAAS,MAAM;AAE/D,sBAAc,UAAU;AACxB,gBAAQ,UAAU;AAElB,gBAAQ,MAAM,KAAK,aAAa,QAAQ,IAAI,EAAE,MAAM,GAAG,MAAM;AAE7D,eAAO,OAAO,WAAW;AAAA,UACvB,MAAM,GAAG;AAAA,UACT,OAAO;AAAA,YACL,GAAG,MAAM;AAAA,YACT,OAAO,EAAE,IAAI,MAAM;AAAA,UACrB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,OAAO,OAAO,KAAK,aAAa;AAC9B,cAAI,QAAQ,SAAS;AAEnB,iBAAK,QAAQ,KAAK,WAAW,OAAO,GAAG;AACvC,mBAAO;AAAA,UACT;AAEA,cAAI,WAAW,GAAG;AAEhB,iBAAK,QAAQ,KAAK,SAAS,OAAO,GAAG;AACrC,mBAAO;AAAA,UACT;AAEA,gBAAM,SAAS,mBAAmB,GAAG;AAErC,cAAI,WAAW,SAAS;AACtB,iBAAK,QAAQ,KAAK,SAAS,OAAO,GAAG;AACrC,mBAAO;AAAA,UACT;AAEA,cAAI,WAAW,YAAY;AAEzB,iBAAK,WAAW,KAAK;AAAA,cACnB,KAAK,GAAG,eAAgB;AAAA,cACxB,WAAW,IAAI,KAAK,EAAE,YAAY;AAAA,cAClC,QAAQ;AAAA,YACV,CAAC;AAED,iBAAK,qBAAqB;AAE1B,kBAAM,KAAK,UAAU,qBAAqB;AAAA,cACxC,GAAI,KAAK,gBAAgB,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC,EAAE;AAAA,cAC7D,WAAW,CAAC,GAAI,KAAK,aAAc,aAAa,CAAC,GAAI,GAAI,KAAK,cAAc,CAAC,CAAE;AAAA,YACjF,CAAC;AAED,iBAAK,QAAQ,KAAK,YAAY,OAAO,GAAG;AACxC,mBAAO;AAAA,UACT;AAEA,eAAK,QAAQ,KAAK,SAAS,OAAO,GAAG;AACrC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW;AAAA,MACf;AAAA,MACA,MAAM;AAAA,QACJ,QAAQ,KAAK,UAAU;AAAA,QACvB,OAAO,EAAE,aAA2B,MAAc;AAAA,QAClD,SAAS,KAAK,IAAI,IAAI;AAAA,QACtB,MAAM,EAAE,OAAO,OAAO,MAAM,WAAW,QAAQ,OAAO,MAAM,WAAW;AAAA,QACvE,QAAQ,EAAE,OAAO,OAAO,MAAM,aAAa,QAAQ,OAAO,MAAM,aAAa;AAAA,MAC/E;AAAA,IACF;AAEA,SAAK,QAAQ,KAAK,YAAY,OAAO,QAAQ;AAE7C,WAAO,KAAK,aAAa,SAAS,IAAI,UAAU,MAAM;AAAA,EACxD;AACF;",
4
+ "sourcesContent": [null, null, null, null, null, null, null, null, null, "import { backOff } from 'exponential-backoff'\nimport { createNanoEvents, Unsubscribe } from 'nanoevents'\n\nimport { ExtendedClient, getExtendedClient } from './bp-client'\nimport { getActionFromError } from './errors'\nimport { InterceptorManager } from './interceptors'\nimport {\n DOWNTIME_THRESHOLD_MINUTES,\n getBestModels,\n getFastModels,\n Model,\n ModelPreferences,\n ModelProvider,\n ModelRef,\n pickModel,\n RemoteModelProvider,\n} from './models'\nimport { GenerateContentOutput } from './schemas.gen'\nimport { CognitiveProps, Events, InputProps, Request, Response } from './types'\n\nexport class Cognitive {\n public ['$$IS_COGNITIVE'] = true\n\n public static isCognitiveClient(obj: any): obj is Cognitive {\n return obj?.$$IS_COGNITIVE === true\n }\n\n public interceptors = {\n request: new InterceptorManager<Request>(),\n response: new InterceptorManager<Response>(),\n }\n\n private _client: ExtendedClient\n private _preferences: ModelPreferences | null = null\n private _provider: ModelProvider\n private _events = createNanoEvents<Events>()\n private _downtimes: ModelPreferences['downtimes'] = []\n private _models: Model[] = []\n\n public constructor(props: CognitiveProps) {\n this._client = getExtendedClient(props.client)\n this._provider = props.provider ?? new RemoteModelProvider(props.client)\n }\n\n public get client(): ExtendedClient {\n return this._client\n }\n\n public on<K extends keyof Events>(this: this, event: K, cb: Events[K]): Unsubscribe {\n return this._events.on(event, cb)\n }\n\n public async fetchInstalledModels(): Promise<Model[]> {\n if (!this._models.length) {\n this._models = await this._provider.fetchInstalledModels()\n }\n\n return this._models\n }\n\n public async fetchPreferences(): Promise<ModelPreferences> {\n if (this._preferences) {\n return this._preferences\n }\n\n this._preferences = await this._provider.fetchModelPreferences()\n\n if (this._preferences) {\n return this._preferences\n }\n\n const models = await this.fetchInstalledModels()\n\n this._preferences = {\n best: getBestModels(models).map((m) => m.ref),\n fast: getFastModels(models).map((m) => m.ref),\n downtimes: [],\n }\n\n await this._provider.saveModelPreferences(this._preferences)\n\n return this._preferences\n }\n\n public async setPreferences(preferences: ModelPreferences, save: boolean = false): Promise<void> {\n this._preferences = preferences\n\n if (save) {\n await this._provider.saveModelPreferences(preferences)\n }\n }\n\n private _cleanupOldDowntimes(): void {\n const now = Date.now()\n const thresholdMs = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n this._preferences!.downtimes = this._preferences!.downtimes.filter((downtime) => {\n const downtimeStart = new Date(downtime.startedAt).getTime()\n return now - downtimeStart <= thresholdMs\n })\n }\n\n private async _selectModel(ref: string): Promise<{ integration: string; model: string }> {\n const parseRef = (ref: string) => {\n const parts = ref.split(':')\n return { integration: parts[0]!, model: parts.slice(1).join(':') }\n }\n\n const preferences = await this.fetchPreferences()\n\n preferences.best ??= []\n preferences.fast ??= []\n preferences.downtimes ??= []\n\n const downtimes = [...preferences.downtimes, ...(this._downtimes ?? [])]\n\n if (ref === 'best') {\n return parseRef(pickModel(preferences.best, downtimes))\n }\n\n if (ref === 'fast') {\n return parseRef(pickModel(preferences.fast, downtimes))\n }\n\n return parseRef(pickModel([ref as ModelRef, ...preferences.best, ...preferences.fast], downtimes))\n }\n\n public async getModelDetails(model: string) {\n await this.fetchInstalledModels()\n const { integration, model: modelName } = await this._selectModel(model)\n const def = this._models.find((m) => m.integration === integration && (m.name === modelName || m.id === modelName))\n if (!def) {\n console.info('Models:', this._models)\n throw new Error(`Model ${modelName} not found`)\n }\n\n return def\n }\n\n public async generateContent(input: InputProps): Promise<Response> {\n const start = Date.now()\n\n const signal = input.signal ?? AbortSignal.timeout(30_000)\n\n const client = this._client.abortable(signal)\n\n let props: Request = { input }\n let integration: string\n let model: string\n\n const { output, meta } = await backOff<{\n output: GenerateContentOutput\n meta: any\n }>(\n async () => {\n const selection = await this._selectModel(input.model ?? 'best')\n\n integration = selection.integration\n model = selection.model\n\n props = await this.interceptors.request.run({ input }, signal)\n\n return client.callAction({\n type: `${integration}:generateContent`,\n input: {\n ...props.input,\n model: { id: model },\n },\n }) as Promise<{ output: GenerateContentOutput; meta: any }>\n },\n {\n retry: async (err, _attempt) => {\n if (signal?.aborted) {\n // We don't want to retry if the request was aborted\n this._events.emit('aborted', props, err)\n return false\n }\n\n if (_attempt > 3) {\n // We don't want to retry more than 3 times\n this._events.emit('error', props, err)\n return false\n }\n\n const action = getActionFromError(err)\n\n if (action === 'abort') {\n this._events.emit('error', props, err)\n return false\n }\n\n if (action === 'fallback') {\n // We don't want to retry if the request was already retried with a fallback model\n this._downtimes.push({\n ref: `${integration!}:${model!}`,\n startedAt: new Date().toISOString(),\n reason: 'Model is down',\n })\n\n this._cleanupOldDowntimes()\n\n await this._provider.saveModelPreferences({\n ...(this._preferences ?? { best: [], downtimes: [], fast: [] }),\n downtimes: [...(this._preferences!.downtimes ?? []), ...(this._downtimes ?? [])],\n })\n\n this._events.emit('fallback', props, err)\n return true\n }\n\n this._events.emit('retry', props, err)\n return true\n },\n }\n )\n\n const response = {\n output,\n meta: {\n cached: meta.cached ?? false,\n model: { integration: integration!, model: model! },\n latency: Date.now() - start,\n cost: { input: output.usage.inputCost, output: output.usage.outputCost },\n tokens: { input: output.usage.inputTokens, output: output.usage.outputTokens },\n },\n } satisfies Response\n\n this._events.emit('response', props, response)\n\n return this.interceptors.response.run(response, signal)\n }\n}\n", "export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n", "import { type Client } from '@botpress/client'\nimport { type AxiosInstance } from 'axios'\nimport { BotpressClientLike } from './types'\n\n/** @internal */\nexport type ExtendedClient = Client & {\n botId: string\n axios: AxiosInstance\n clone: () => ExtendedClient\n abortable: (signal: AbortSignal) => ExtendedClient\n}\n\nexport const getExtendedClient = (client: BotpressClientLike): ExtendedClient => {\n if (\n typeof client.constructor !== 'function' ||\n typeof client.callAction !== 'function' ||\n !client.config ||\n typeof client.config !== 'object' ||\n !client.config.headers\n ) {\n throw new Error('Client must be a valid instance of a Botpress client (@botpress/client)')\n }\n\n const botId = client.config.headers['x-bot-id'] as string\n\n if (!botId?.length) {\n throw new Error('Client must be instanciated with Bot ID')\n }\n\n const clone = () => {\n const c = client as any\n if (c.clone && typeof c.clone === 'function') {\n return getExtendedClient(c.clone())\n }\n return getExtendedClient(new c.constructor(c.config))\n }\n\n return {\n ...client,\n botId,\n axios: (client as any).axiosInstance as AxiosInstance,\n clone,\n abortable: (signal: AbortSignal) => {\n const abortable = clone()\n const instance = abortable.axios\n instance.defaults.signal = signal\n return abortable\n },\n } as ExtendedClient\n}\n", "import { type ErrorType } from '@botpress/client'\n\nexport type BotpressError = {\n isApiError: boolean\n code: number\n description: string\n type: ErrorType\n subtype?: string\n error?: unknown\n metadata?: unknown\n message?: string\n id: string\n}\n\ntype Action = 'fallback' | 'retry' | 'abort'\n\nexport const getActionFromError = (error: any): Action => {\n if (!isBotpressError(error)) {\n return 'retry'\n }\n\n if (error.type === 'InvalidDataFormat') {\n if (error.message?.includes('data/model/id')) {\n // Invalid Model ID, so we want to try another model\n return 'fallback'\n }\n\n // Usually means the request was malformed\n return 'abort'\n }\n\n const subtype = (error.metadata as any)?.subtype\n if (error.type === 'Internal' || subtype === 'UPSTREAM_PROVIDER_FAILED') {\n // The model is degraded, so we want to try another model\n return 'fallback'\n }\n\n return 'abort'\n}\n\nexport const isNotFoundError = (error: any): boolean => isBotpressError(error) && error.type === 'ResourceNotFound'\n\nexport const isForbiddenOrUnauthorizedError = (error: any): boolean =>\n isBotpressError(error) && (error.type === 'Forbidden' || error.type === 'Unauthorized')\n\nexport const isBotpressError = (error: any): error is BotpressError =>\n typeof error === 'object' &&\n error !== null &&\n 'isApiError' in error &&\n 'code' in error &&\n 'type' in error &&\n 'id' in error\n", "export type Callback<T> = (error: any | null, value: T) => void\nexport type Interceptor<T> = (error: any | null, value: T, next: Callback<T>, done: Callback<T>) => Promise<void> | void\n\nexport class InterceptorManager<T> {\n private _interceptors: Interceptor<T>[] = []\n\n public use(interceptor: Interceptor<T>) {\n this._interceptors.push(interceptor)\n return () => this.remove(interceptor)\n }\n\n public remove(interceptor: Interceptor<T>) {\n this._interceptors = this._interceptors.filter((i) => i !== interceptor)\n }\n\n public async run(value: T, signal: AbortSignal): Promise<T> {\n let error: any | null = null\n let result: T = value\n let done = false\n\n for (const interceptor of this._interceptors) {\n if (done) {\n break\n }\n\n if (signal.aborted) {\n throw signal.reason\n }\n\n await new Promise<void>((resolve) => {\n void interceptor(\n error,\n result,\n (err, val) => {\n error = err\n result = val\n resolve()\n },\n (err, val) => {\n error = err\n result = val\n done = true\n resolve()\n }\n )\n })\n }\n\n if (error) {\n throw error\n }\n\n return result\n }\n}\n", "import { ExtendedClient, getExtendedClient } from './bp-client'\nimport { isForbiddenOrUnauthorizedError, isNotFoundError } from './errors'\nimport { Model as RawModel } from './schemas.gen'\nimport { BotpressClientLike } from './types'\n\nexport const DOWNTIME_THRESHOLD_MINUTES = 5\nconst PREFERENCES_FILE_SUFFIX = 'models.config.json'\n\nexport const DEFAULT_INTEGRATIONS = ['google-ai', 'anthropic', 'openai', 'cerebras', 'fireworks-ai', 'groq']\n\n// Biases for vendors and models\nconst VendorPreferences = ['google-ai', 'anthropic', 'openai']\nconst BestModelPreferences = ['4o', '3-5-sonnet', 'gemini-1.5-pro']\nconst FastModelPreferences = ['gemini-1.5-flash', '4o-mini', 'flash', 'haiku']\n\nconst InputPricePenalty = 3 // $3 per 1M tokens\nconst OutputPricePenalty = 10 // $10 per 1M tokens\nconst LowTokensPenalty = 128_000 // 128k tokens\n\nexport type Model = RawModel & {\n ref: ModelRef\n integration: string\n}\n\nexport type ModelRef = `${string}:${string}`\n\nexport type ModelPreferences = {\n best: ModelRef[]\n fast: ModelRef[]\n downtimes: Array<{ ref: ModelRef; startedAt: string; reason: string }>\n}\n\nconst isRecommended = (model: Model) => model.tags.includes('recommended')\nconst isDeprecated = (model: Model) => model.tags.includes('deprecated')\nconst isLowCost = (model: Model) => model.tags.includes('low-cost')\nconst hasVisionSupport = (model: Model) => model.tags.includes('vision')\nconst isGeneralPurpose = (model: Model) => model.tags.includes('general-purpose')\n\nconst scoreModel = (model: Model, type: 'best' | 'fast', boosts: Record<ModelRef, number> = {}) => {\n let score: number = 0\n\n const scores: Array<[string, boolean, number]> = [\n ['input price penalty', model.input.costPer1MTokens > InputPricePenalty, -1],\n ['output price penalty', model.output.costPer1MTokens > OutputPricePenalty, -1],\n ['low tokens penalty', (model.input.maxTokens ?? 0 + model.output.maxTokens ?? 0) < LowTokensPenalty, -1],\n ['recommended', isRecommended(model), 2],\n ['deprecated', isDeprecated(model), -2],\n ['vision support', hasVisionSupport(model), 1],\n ['general purpose', isGeneralPurpose(model), 1],\n ['vendor preference', VendorPreferences.includes(model.integration), 1],\n ['best model preference', type === 'best' && BestModelPreferences.some((x) => model.id.includes(x)), 1],\n ['fast model preference penalty', type === 'best' && FastModelPreferences.some((x) => model.id.includes(x)), -2],\n ['fast model preference', type === 'fast' && FastModelPreferences.some((x) => model.id.includes(x)), 2],\n ['low cost', type === 'fast' && isLowCost(model), 1],\n ]\n\n for (const rule in boosts) {\n if (model.ref.includes(rule)) {\n scores.push([`boost (${rule})`, true, Number(boosts[rule as ModelRef]) ?? 0] as const)\n }\n }\n\n for (const [, condition, value] of scores) {\n if (condition) {\n score += value\n }\n }\n\n return score\n}\n\nexport const getBestModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'best', boosts) - scoreModel(a, 'best', boosts))\n\nexport const getFastModels = (models: Model[], boosts: Record<ModelRef, number> = {}) =>\n models.sort((a, b) => scoreModel(b, 'fast', boosts) - scoreModel(a, 'fast', boosts))\n\nexport const pickModel = (models: ModelRef[], downtimes: ModelPreferences['downtimes'] = []) => {\n const copy = [...models]\n const elasped = (date: string) => new Date().getTime() - new Date(date).getTime()\n const DOWNTIME_THRESHOLD = 1000 * 60 * DOWNTIME_THRESHOLD_MINUTES\n\n if (!copy.length) {\n throw new Error('At least one model is required')\n }\n\n while (copy.length) {\n const ref = copy.shift() as ModelRef\n const downtime = downtimes.find((o) => o.ref === ref && elasped(o.startedAt) < DOWNTIME_THRESHOLD)\n if (downtime) {\n continue\n } else {\n return ref\n }\n }\n\n throw new Error(`All models are down: ${models.join(', ')}`)\n}\n\nexport abstract class ModelProvider {\n public abstract fetchInstalledModels(): Promise<Model[]>\n public abstract fetchModelPreferences(): Promise<ModelPreferences | null>\n public abstract saveModelPreferences(preferences: ModelPreferences): Promise<void>\n public abstract deleteModelPreferences(): Promise<void>\n}\n\nexport class RemoteModelProvider extends ModelProvider {\n private _client: ExtendedClient\n\n public constructor(client: BotpressClientLike) {\n super()\n this._client = getExtendedClient(client)\n }\n\n private async _fetchInstalledIntegrationNames() {\n try {\n const { bot } = await this._client.getBot({ id: this._client.botId })\n const integrations = Object.values(bot.integrations).filter((x) => x.status === 'registered')\n return integrations.map((x) => x.name)\n } catch (err) {\n if (isForbiddenOrUnauthorizedError(err)) {\n // This happens when the bot (with a BAK token) tries to access the .getBot endpoint\n return DEFAULT_INTEGRATIONS\n }\n\n throw err\n }\n }\n\n public async fetchInstalledModels() {\n const integrationNames = await this._fetchInstalledIntegrationNames()\n const models: Model[] = []\n\n await Promise.allSettled(\n integrationNames.map(async (integration) => {\n const { output } = await this._client.callAction({\n type: `${integration}:listLanguageModels`,\n input: {},\n })\n\n if (!output?.models?.length) {\n return\n }\n\n for (const model of output.models as RawModel[]) {\n if (model.name && model.id && model.input && model.tags) {\n models.push({\n ref: `${integration}:${model.id}`,\n integration,\n id: model.id,\n name: model.name,\n description: model.description,\n input: model.input,\n output: model.output,\n tags: model.tags,\n })\n }\n }\n })\n )\n\n return models\n }\n\n public async fetchModelPreferences(): Promise<ModelPreferences | null> {\n try {\n const { file } = await this._client.getFile({ id: this._preferenceFileKey })\n\n if (globalThis.fetch !== undefined) {\n const response = await fetch(file.url)\n return (await response.json()) as ModelPreferences\n } else {\n const { data } = await this._client.axios.get(file.url, {\n // we piggy-back axios to avoid adding a new dependency\n // unset all headers to avoid S3 pre-signed signature mismatch\n headers: Object.keys(this._client.config.headers).reduce(\n (acc, key) => {\n acc[key] = undefined\n return acc\n },\n {} as Record<string, undefined>\n ),\n })\n return data as ModelPreferences\n }\n } catch (err) {\n if (isNotFoundError(err)) {\n return null\n }\n\n throw err\n }\n }\n\n public async saveModelPreferences(preferences: ModelPreferences) {\n await this._client.uploadFile({\n key: this._preferenceFileKey,\n content: JSON.stringify(preferences, null, 2),\n index: false,\n tags: {\n system: 'true',\n purpose: 'config',\n },\n })\n }\n\n public async deleteModelPreferences() {\n await this._client.deleteFile({ id: this._preferenceFileKey }).catch(() => {})\n }\n\n private get _preferenceFileKey() {\n return `bot->${this._client.botId}->${PREFERENCES_FILE_SUFFIX}`\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Delay", "SkipFirstDelay", "AlwaysDelay", "backOff", "BackOff", "ref"]
7
7
  }
@@ -3,7 +3,7 @@ import { Cognitive } from '../src/client'
3
3
  import { getTestClient } from './client'
4
4
  import MODELS from './models.json'
5
5
  import { RemoteModelProvider } from '../src/models'
6
- import { GenerateContentOutput } from '../src/llm'
6
+ import { GenerateContentOutput } from '../src/schemas.gen'
7
7
 
8
8
  const RandomResponse = {
9
9
  output: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botpress/cognitive",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Wrapper around the Botpress Client to call LLMs",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",