@aeye/ai 0.3.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +105 -1
  2. package/aeye-ai.md +219 -0
  3. package/dist/ai.d.ts +11 -5
  4. package/dist/ai.d.ts.map +1 -1
  5. package/dist/ai.js +57 -78
  6. package/dist/ai.js.map +1 -1
  7. package/dist/apis/base.d.ts +14 -0
  8. package/dist/apis/base.d.ts.map +1 -1
  9. package/dist/apis/base.js +34 -3
  10. package/dist/apis/base.js.map +1 -1
  11. package/dist/apis/batch.d.ts +74 -0
  12. package/dist/apis/batch.d.ts.map +1 -0
  13. package/dist/apis/batch.js +127 -0
  14. package/dist/apis/batch.js.map +1 -0
  15. package/dist/apis/chat.d.ts +15 -0
  16. package/dist/apis/chat.d.ts.map +1 -1
  17. package/dist/apis/chat.js +112 -33
  18. package/dist/apis/chat.js.map +1 -1
  19. package/dist/apis/decide.d.ts +33 -0
  20. package/dist/apis/decide.d.ts.map +1 -0
  21. package/dist/apis/decide.js +52 -0
  22. package/dist/apis/decide.js.map +1 -0
  23. package/dist/apis/embed.d.ts +4 -11
  24. package/dist/apis/embed.d.ts.map +1 -1
  25. package/dist/apis/embed.js +5 -32
  26. package/dist/apis/embed.js.map +1 -1
  27. package/dist/apis/get.d.ts +18 -0
  28. package/dist/apis/get.d.ts.map +1 -0
  29. package/dist/apis/get.js +30 -0
  30. package/dist/apis/get.js.map +1 -0
  31. package/dist/apis/image.d.ts +2 -2
  32. package/dist/apis/image.d.ts.map +1 -1
  33. package/dist/apis/image.js +45 -40
  34. package/dist/apis/image.js.map +1 -1
  35. package/dist/apis/rerank.d.ts +24 -0
  36. package/dist/apis/rerank.d.ts.map +1 -0
  37. package/dist/apis/rerank.js +40 -0
  38. package/dist/apis/rerank.js.map +1 -0
  39. package/dist/apis/schema-fallback.d.ts +31 -0
  40. package/dist/apis/schema-fallback.d.ts.map +1 -0
  41. package/dist/apis/schema-fallback.js +43 -0
  42. package/dist/apis/schema-fallback.js.map +1 -0
  43. package/dist/common.d.ts +20 -2
  44. package/dist/common.d.ts.map +1 -1
  45. package/dist/common.js +36 -0
  46. package/dist/common.js.map +1 -1
  47. package/dist/index.d.ts +6 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +6 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/registry.d.ts +67 -0
  52. package/dist/registry.d.ts.map +1 -1
  53. package/dist/registry.js +147 -2
  54. package/dist/registry.js.map +1 -1
  55. package/dist/types.d.ts +198 -40
  56. package/dist/types.d.ts.map +1 -1
  57. package/package.json +67 -66
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Batch API
3
+ *
4
+ * Runs many chat requests as one batch at the provider: typically half the
5
+ * price of running them one by one, with results within about a day.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const job = await ai.batch.submit(reviews.map(review => ({
10
+ * messages: [{ role: 'user', content: `Classify: ${review}` }],
11
+ * })), {});
12
+ *
13
+ * const done = await ai.batch.wait(job, {});
14
+ * for (const result of done.results ?? []) {
15
+ * console.log(result.response?.content ?? result.error);
16
+ * }
17
+ * ```
18
+ */
19
+ import { accumulateUsage } from '@aeye/core';
20
+ /**
21
+ * Statuses a batch never leaves.
22
+ */
23
+ const FINAL = new Set(['completed', 'failed', 'expired', 'cancelled']);
24
+ /**
25
+ * Batch price as a share of the regular price, for providers that don't
26
+ * report a batch's cost: OpenAI and OpenRouter bill batches at half price.
27
+ */
28
+ const BATCH_PRICE = 0.5;
29
+ /**
30
+ * BatchAPI submits chat requests as provider batches and collects their results.
31
+ *
32
+ * @template T - AIBaseTypes container with all type information
33
+ */
34
+ export class BatchAPI {
35
+ ai;
36
+ // Completed batches already reported to the afterBatch hook
37
+ reported = new Set();
38
+ constructor(ai) {
39
+ this.ai = ai;
40
+ }
41
+ /**
42
+ * Submit chat requests to run as one batch on one model. The model is
43
+ * selected for the first request, so pin one with `metadata.model` when
44
+ * the requests differ in what they need. The onModelSelected hook runs
45
+ * once, and beforeRequest runs for each request (so budget checks can
46
+ * stop the batch) with the batch price estimate.
47
+ *
48
+ * @param requests - The chat requests, whose results come back in this order.
49
+ * @param ctx - The context.
50
+ */
51
+ async submit(requests, ctx) {
52
+ const [first] = requests;
53
+ if (!first) {
54
+ throw new Error('A batch needs at least one request');
55
+ }
56
+ const { hooks } = this.ai;
57
+ const fullCtx = await this.ai.buildContext(ctx);
58
+ const found = await this.ai.chat.getModelFor(first, fullCtx, false);
59
+ const selected = found && ((await hooks.onModelSelected?.(fullCtx, first, found)) || found);
60
+ if (!selected?.provider.submitBatch) {
61
+ throw new Error(`No model found that can run a batch${selected ? `: ${selected.model.provider} does not offer batches` : ''}`);
62
+ }
63
+ for (const request of requests) {
64
+ const usage = this.ai.estimateRequestUsage(request);
65
+ await hooks.beforeRequest?.(fullCtx, request, selected, usage, this.ai.calculateCost(selected.model, usage) * BATCH_PRICE);
66
+ }
67
+ // The provider reads the selected model from the context, as for chat
68
+ const providerCtx = { ...fullCtx, metadata: { ...fullCtx.metadata, model: selected.model } };
69
+ return selected.provider.submitBatch(requests, providerCtx, selected.providerConfig);
70
+ }
71
+ /**
72
+ * The batch as it stands now, with results once it completes. The first
73
+ * time this sees a batch completed, it reports the batch's usage and cost
74
+ * to the afterBatch hook.
75
+ *
76
+ * @param job - A batch from `submit`.
77
+ * @param ctx - The context.
78
+ */
79
+ async get(job, ctx) {
80
+ const provider = this.ai.registry.getProvider(job.provider);
81
+ if (!provider?.getBatch) {
82
+ throw new Error(`Provider "${job.provider}" does not offer batches`);
83
+ }
84
+ const fullCtx = await this.ai.buildContext(ctx);
85
+ const current = await provider.getBatch(job, fullCtx);
86
+ const key = `${current.provider}:${current.id}`;
87
+ if (current.status === 'completed' && current.results && !this.reported.has(key)) {
88
+ this.reported.add(key);
89
+ await this.report(current, fullCtx);
90
+ }
91
+ return current;
92
+ }
93
+ /**
94
+ * Report a completed batch to the afterBatch hook: the usage of its
95
+ * results, and the cost the provider reported or else the batch price of
96
+ * that usage.
97
+ */
98
+ async report(job, ctx) {
99
+ const usage = {};
100
+ for (const result of job.results ?? []) {
101
+ accumulateUsage(usage, result.response?.usage);
102
+ }
103
+ const model = this.ai.registry.getModel(job.model);
104
+ const cost = job.cost ?? usage.cost ?? (model ? this.ai.calculateCost(model, usage) * BATCH_PRICE : 0);
105
+ await this.ai.hooks.afterBatch?.(ctx, job, usage, cost);
106
+ }
107
+ /**
108
+ * Check the batch until it finishes, then return it with its results.
109
+ * A running batch is first checked after one interval: a batch just
110
+ * submitted can take a moment to become visible at the provider.
111
+ *
112
+ * @param job - A batch from `submit`.
113
+ * @param ctx - The context.
114
+ * @param options - How often to check, and when to stop.
115
+ */
116
+ async wait(job, ctx, options = {}) {
117
+ const { interval = 30_000, signal } = options;
118
+ let current = FINAL.has(job.status) ? await this.get(job, ctx) : job;
119
+ while (!FINAL.has(current.status)) {
120
+ await new Promise((resolve) => setTimeout(resolve, interval));
121
+ signal?.throwIfAborted();
122
+ current = await this.get(current, ctx);
123
+ }
124
+ return current;
125
+ }
126
+ }
127
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/apis/batch.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,21 @@ export declare class ChatAPI<T extends AIBaseTypes> extends BaseAPI<T, Request,
48
48
  constructor(ai: AI<T>);
49
49
  protected getRequiredCapabilities(provided: ModelCapability[], request: Request, forStreaming: boolean): ModelCapability[];
50
50
  protected getRequiredParameters(provided: ModelParameter[], request: Request, forStreaming: boolean): ModelParameter[];
51
+ /**
52
+ * Optional (preferred) capabilities. Adds `'toolsStrict'` when any tool
53
+ * is requesting strict at numeric priority (or default-omitted, which is
54
+ * treated as priority `1`). Hard `strict: true` is handled in the
55
+ * required path; `strict: false` adds nothing.
56
+ *
57
+ * Optional preferences score strict-tool-capable models higher without
58
+ * filtering anyone out, matching the best-effort philosophy.
59
+ */
60
+ protected getOptionalCapabilities(provided: ModelCapability[], request: Request, forStreaming: boolean): ModelCapability[];
61
+ /**
62
+ * Optional (preferred) parameters. Same logic as
63
+ * `getOptionalCapabilities` but at the parameter level.
64
+ */
65
+ protected getOptionalParameters(provided: ModelParameter[], request: Request, forStreaming: boolean): ModelParameter[];
51
66
  protected getNoModelFoundError(): string;
52
67
  protected getErrorType(operation: 'request' | 'stream'): string;
53
68
  protected getErrorMessage(operation: 'request' | 'stream'): string;
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/apis/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAgD,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACpH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,OAAO,EACP,QAAQ,EACR,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC;;;;;GAKG;AACH,qBAAa,OAAO,CAAC,CAAC,SAAS,WAAW,CAAE,SAAQ,OAAO,CACzD,CAAC,EACD,OAAO,EACP,QAAQ,EACR,KAAK,CACN;gBACa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAQrB,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,eAAe,EAAE;IAkD1H,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,cAAc,EAAE;IA8CtH,SAAS,CAAC,oBAAoB,IAAI,MAAM;IAIxC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM;IAI/D,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM;IAIlE,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK;cAItE,cAAc,CAAC,eAAe,SAAS,SAAS,CAAC,CAAC,CAAC,EACjE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC;cASH,oBAAoB,CAAC,eAAe,SAAS,SAAS,CAAC,CAAC,CAAC,EACxE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,eAAe,GACnB,aAAa,CAAC,KAAK,CAAC;IASvB,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE;IAIpF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ;IAIlF,SAAS,CAAC,mBAAmB,CAC3B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,eAAe,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS;IAIpH,SAAS,CAAC,sBAAsB,CAC9B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,eAAe,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS;IAIvH,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;IAIrE,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;IAIrE;;;;;;;OAOG;IACH,cAAc,CACZ,eAAe,SAAS,iBAAiB,CAAC,CAAC,CAAC,EAC5C,gBAAgB,SAAS,kBAAkB,CAAC,CAAC,CAAC,KAC3C,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAWhD;;;;;;;OAOG;IACH,cAAc,CACZ,eAAe,SAAS,iBAAiB,CAAC,CAAC,CAAC,EAC5C,gBAAgB,SAAS,kBAAkB,CAAC,CAAC,CAAC,KAC3C,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;CAiBjD"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/apis/chat.ts"],"names":[],"mappings":"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"}
package/dist/apis/chat.js CHANGED
@@ -34,8 +34,54 @@
34
34
  * );
35
35
  * ```
36
36
  */
37
- import { getChunksFromResponse, getResponseFromChunks } from '@aeye/core';
37
+ import { getChunksFromResponse, getResponseFromChunks, structuredOutput } from '@aeye/core';
38
+ import { INPUT_CAPABILITIES, OUTPUT_CAPABILITIES } from '../common';
38
39
  import { BaseAPI } from './base';
40
+ import { applySchemaDeliveryFallback } from './schema-fallback';
41
+ /**
42
+ * Content whose capability is only preferred: most registries don't record
43
+ * document support.
44
+ */
45
+ const PREFERRED_CONTENT = ['file'];
46
+ /**
47
+ * Adds the capability mapped to each key present in the request.
48
+ */
49
+ function addMapped(target, map, keys) {
50
+ for (const key of keys) {
51
+ const capability = map[key];
52
+ if (capability) {
53
+ target.add(capability);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Every content part type used across the request messages.
59
+ */
60
+ function contentTypes(request) {
61
+ return request.messages.flatMap(message => Array.isArray(message.content) ? message.content.map(part => part.type) : []);
62
+ }
63
+ /**
64
+ * How the request's output reaches the model: as structured output, JSON
65
+ * mode, or neither (text, or a schema delivered as prompt text).
66
+ */
67
+ function outputMode(format) {
68
+ return structuredOutput(format) ? 'structured'
69
+ : format === 'json' || (typeof format === 'object' && format.schemaDelivery === 'json') ? 'json'
70
+ : undefined;
71
+ }
72
+ /**
73
+ * Returns true when a `strict` field expresses a numeric (best-effort)
74
+ * preference rather than a hard `true` / `false`. Default-omitted (undefined)
75
+ * is treated as `1` per the v2 default policy in tool/prompt JSDoc, so it
76
+ * also counts as numeric preference here.
77
+ */
78
+ function isNumericStrictPreference(strict) {
79
+ if (strict === undefined)
80
+ return true; // default 1
81
+ if (typeof strict === 'number')
82
+ return strict > 0;
83
+ return false; // true and false are non-preferences for this purpose
84
+ }
39
85
  /**
40
86
  * ChatAPI provides methods for chat completions with automatic model selection.
41
87
  * Inherits get() and stream() methods from BaseAPI.
@@ -51,42 +97,30 @@ export class ChatAPI extends BaseAPI {
51
97
  // ============================================================================
52
98
  getRequiredCapabilities(provided, request, forStreaming) {
53
99
  const capabilities = new Set(['chat', ...provided]);
54
- // Check if request contains images - requires vision capability
55
100
  if (request) {
56
- const hasImages = request.messages.some(message => {
57
- if (Array.isArray(message.content)) {
58
- return message.content.some(part => part.type === 'image');
59
- }
60
- return false;
61
- });
62
- if (hasImages) {
63
- capabilities.add('vision');
64
- }
65
- const hasAudio = request.messages.some(message => {
66
- if (Array.isArray(message.content)) {
67
- return message.content.some(part => part.type === 'audio');
68
- }
69
- return false;
70
- });
71
- if (hasAudio) {
72
- capabilities.add('hearing');
73
- }
101
+ addMapped(capabilities, INPUT_CAPABILITIES, contentTypes(request).filter(type => !PREFERRED_CONTENT.includes(type)));
102
+ addMapped(capabilities, OUTPUT_CAPABILITIES, request.modalities ?? []);
74
103
  // Check if request uses reasoning
75
104
  if (request.reason !== undefined) {
76
105
  capabilities.add('reasoning');
77
106
  }
78
107
  // Check if request expects JSON output
79
- if (request.responseFormat) {
80
- if (request.responseFormat === 'json') {
81
- capabilities.add('json');
82
- }
83
- else if (typeof request.responseFormat === 'object') {
84
- capabilities.add('structured');
85
- }
108
+ const output = outputMode(request.responseFormat);
109
+ if (output) {
110
+ capabilities.add(output);
86
111
  }
87
112
  // Check if request uses tools
88
113
  if (request.tools && request.tools.length > 0) {
89
114
  capabilities.add('tools');
115
+ // Tri-state strict: any tool with `strict === true` is a HARD
116
+ // requirement that the chosen model support strict tools. Numeric
117
+ // priority is handled in `getOptionalCapabilities` (preference, not
118
+ // filter). Default-omitted strict (treated as `1` downstream) is
119
+ // *not* a hard requirement — selection still succeeds against
120
+ // models without strict-family declarations.
121
+ if (request.tools.some(t => t.strict === true)) {
122
+ capabilities.add('toolsStrict');
123
+ }
90
124
  }
91
125
  }
92
126
  return Array.from(capabilities);
@@ -117,11 +151,12 @@ export class ChatAPI extends BaseAPI {
117
151
  if (request.logitBias !== undefined) {
118
152
  params.add('logitBias');
119
153
  }
120
- if (request.responseFormat !== undefined) {
154
+ const output = outputMode(request.responseFormat);
155
+ if (request.responseFormat === 'text' || output) {
121
156
  params.add('responseFormat');
122
- if (typeof request.responseFormat === 'object') {
123
- params.add('structuredOutput');
124
- }
157
+ }
158
+ if (output === 'structured') {
159
+ params.add('structuredOutput');
125
160
  }
126
161
  if (request.reason !== undefined) {
127
162
  params.add('reason');
@@ -134,6 +169,46 @@ export class ChatAPI extends BaseAPI {
134
169
  }
135
170
  return Array.from(params);
136
171
  }
172
+ /**
173
+ * Optional (preferred) capabilities. Adds `'toolsStrict'` when any tool
174
+ * is requesting strict at numeric priority (or default-omitted, which is
175
+ * treated as priority `1`). Hard `strict: true` is handled in the
176
+ * required path; `strict: false` adds nothing.
177
+ *
178
+ * Optional preferences score strict-tool-capable models higher without
179
+ * filtering anyone out, matching the best-effort philosophy.
180
+ */
181
+ getOptionalCapabilities(provided, request, forStreaming) {
182
+ const optional = new Set(provided);
183
+ addMapped(optional, INPUT_CAPABILITIES, contentTypes(request).filter(type => PREFERRED_CONTENT.includes(type)));
184
+ if ((request.tools?.length ?? 0) > 0) {
185
+ const wantsStrictPreference = request.tools.some(t => isNumericStrictPreference(t.strict));
186
+ if (wantsStrictPreference) {
187
+ optional.add('toolsStrict');
188
+ }
189
+ }
190
+ return Array.from(optional);
191
+ }
192
+ /**
193
+ * Optional (preferred) parameters. Same logic as
194
+ * `getOptionalCapabilities` but at the parameter level.
195
+ */
196
+ getOptionalParameters(provided, request, forStreaming) {
197
+ const params = new Set(provided);
198
+ if (request.tools?.some(t => isNumericStrictPreference(t.strict))) {
199
+ params.add('toolsStrict');
200
+ }
201
+ if (request.seed !== undefined) {
202
+ params.add('seed');
203
+ }
204
+ if (request.verbosity !== undefined) {
205
+ params.add('verbosity');
206
+ }
207
+ if (request.serviceTier !== undefined) {
208
+ params.add('serviceTier');
209
+ }
210
+ return Array.from(params);
211
+ }
137
212
  getNoModelFoundError() {
138
213
  return 'No compatible model found for criteria';
139
214
  }
@@ -150,15 +225,19 @@ export class ChatAPI extends BaseAPI {
150
225
  if (!selected.provider.createExecutor) {
151
226
  throw new Error(`Provider ${selected.provider.name} does not support chat requests`);
152
227
  }
228
+ // Provider-agnostic schema-delivery fallback: if the selected model's
229
+ // dialect can't express the structured schema (or delivery is forced to
230
+ // prompt), drop `response_format` and deliver the schema as prompt text.
153
231
  const executor = selected.provider.createExecutor(selected.providerConfig);
154
- return await executor(request, ctx, ctx.metadata);
232
+ return await executor(applySchemaDeliveryFallback(request, selected.model), ctx, ctx.metadata);
155
233
  }
156
234
  async *executeStreamRequest(request, selected, ctx) {
157
235
  if (!selected.provider.createStreamer) {
158
236
  throw new Error(`Provider ${selected.provider.name} does not support chat streaming`);
159
237
  }
238
+ // Provider-agnostic schema-delivery fallback (see executeRequest).
160
239
  const streamer = selected.provider.createStreamer(selected.providerConfig);
161
- return yield* streamer(request, ctx, ctx.metadata);
240
+ return yield* streamer(applySchemaDeliveryFallback(request, selected.model), ctx, ctx.metadata);
162
241
  }
163
242
  responseToChunks(response, model) {
164
243
  return getChunksFromResponse(response);
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/apis/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/apis/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Decide API
3
+ *
4
+ * Typed answers about an input from a decision model: the probability a
5
+ * condition holds, one choice from a set, or a score on ordered levels.
6
+ * Far faster and cheaper than asking a chat model for structured output.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const { answers } = await ai.decide.get({
11
+ * input: 'I was charged twice for my order.',
12
+ * questions: {
13
+ * billing: { type: 'predicate', instructions: 'Is this a billing problem?' },
14
+ * team: { type: 'choice', instructions: 'Which team handles it?', choices: { payments: 'Charges and refunds', web: 'Website bugs' } },
15
+ * urgency: { type: 'score', instructions: 'How urgent is it?', levels: ['Can wait', 'This week', 'Now'] },
16
+ * },
17
+ * });
18
+ * ```
19
+ */
20
+ import type { Usage } from '@aeye/core';
21
+ import type { AIBaseTypes, AIContext, DecisionRequest, DecisionResponse, ModelCapability, ModelHandlerFor, SelectedModelFor } from '../types';
22
+ import { GetAPI } from './get';
23
+ export declare class DecideAPI<T extends AIBaseTypes> extends GetAPI<T, DecisionRequest, DecisionResponse> {
24
+ protected getRequiredCapabilities(provided: ModelCapability[]): ModelCapability[];
25
+ protected getNoModelFoundError(): string;
26
+ protected getErrorType(): string;
27
+ protected getErrorMessage(): string;
28
+ protected executeRequest(request: DecisionRequest, selected: SelectedModelFor<T>, ctx: AIContext<T>): Promise<DecisionResponse>;
29
+ protected estimateRequestUsage(request: DecisionRequest): Usage;
30
+ protected getHandlerGetMethod(handler?: ModelHandlerFor<T>): ((request: DecisionRequest, ctx: AIContext<T>) => Promise<DecisionResponse>) | undefined;
31
+ protected hasProviderExecutor(selected: SelectedModelFor<T>): boolean;
32
+ }
33
+ //# sourceMappingURL=decide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide.d.ts","sourceRoot":"","sources":["../../src/apis/decide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,qBAAa,SAAS,CAAC,CAAC,SAAS,WAAW,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAChG,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE;IAIjF,SAAS,CAAC,oBAAoB,IAAI,MAAM;IAIxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAO/H,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,KAAK;IAM/D,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,SAAS;IAIrJ,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;CAGtE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Decide API
3
+ *
4
+ * Typed answers about an input from a decision model: the probability a
5
+ * condition holds, one choice from a set, or a score on ordered levels.
6
+ * Far faster and cheaper than asking a chat model for structured output.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const { answers } = await ai.decide.get({
11
+ * input: 'I was charged twice for my order.',
12
+ * questions: {
13
+ * billing: { type: 'predicate', instructions: 'Is this a billing problem?' },
14
+ * team: { type: 'choice', instructions: 'Which team handles it?', choices: { payments: 'Charges and refunds', web: 'Website bugs' } },
15
+ * urgency: { type: 'score', instructions: 'How urgent is it?', levels: ['Can wait', 'This week', 'Now'] },
16
+ * },
17
+ * });
18
+ * ```
19
+ */
20
+ import { GetAPI } from './get';
21
+ export class DecideAPI extends GetAPI {
22
+ getRequiredCapabilities(provided) {
23
+ return ['decision', ...provided];
24
+ }
25
+ getNoModelFoundError() {
26
+ return 'No compatible model found for decisions';
27
+ }
28
+ getErrorType() {
29
+ return 'decision-failed';
30
+ }
31
+ getErrorMessage() {
32
+ return 'Decision failed';
33
+ }
34
+ executeRequest(request, selected, ctx) {
35
+ if (!selected.provider.decide) {
36
+ throw new Error(`Provider ${selected.provider.name} does not support decisions`);
37
+ }
38
+ return selected.provider.decide(request, ctx, selected.providerConfig);
39
+ }
40
+ estimateRequestUsage(request) {
41
+ const questions = { role: 'user', content: JSON.stringify(request.questions) };
42
+ const input = typeof request.input === 'string' ? [{ role: 'user', content: request.input }] : request.input;
43
+ return this.ai.estimateRequestUsage({ messages: [...input, questions] });
44
+ }
45
+ getHandlerGetMethod(handler) {
46
+ return handler?.decide?.get;
47
+ }
48
+ hasProviderExecutor(selected) {
49
+ return !!selected.provider.decide;
50
+ }
51
+ }
52
+ //# sourceMappingURL=decide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/apis/decide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,MAAM,OAAO,SAAiC,SAAQ,MAA4C;IACtF,uBAAuB,CAAC,QAA2B;QAC3D,OAAO,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC;IACnC,CAAC;IAES,oBAAoB;QAC5B,OAAO,yCAAyC,CAAC;IACnD,CAAC;IAES,YAAY;QACpB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAES,eAAe;QACvB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAES,cAAc,CAAC,OAAwB,EAAE,QAA6B,EAAE,GAAiB;QACjG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,QAAQ,CAAC,IAAI,6BAA6B,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACzE,CAAC;IAES,oBAAoB,CAAC,OAAwB;QACrD,MAAM,SAAS,GAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxF,MAAM,KAAK,GAAc,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACxH,OAAO,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAES,mBAAmB,CAAC,OAA4B;QACxD,OAAO,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;IAC9B,CAAC;IAES,mBAAmB,CAAC,QAA6B;QACzD,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,CAAC;CACF"}
@@ -4,24 +4,17 @@
4
4
  * Provides text embedding functionality.
5
5
  */
6
6
  import type { Usage } from '@aeye/core';
7
- import type { AI } from '../ai';
8
7
  import type { AIBaseTypes, AIContext, EmbeddingRequest, EmbeddingResponse, ModelCapability, ModelParameter, ModelHandlerFor, SelectedModelFor } from '../types';
9
- import { BaseAPI } from './base';
10
- export declare class EmbedAPI<T extends AIBaseTypes> extends BaseAPI<T, EmbeddingRequest, EmbeddingResponse, never> {
11
- constructor(ai: AI<T>);
12
- protected getRequiredCapabilities(provided: ModelCapability[], request: EmbeddingRequest, forStreaming: boolean): ModelCapability[];
13
- protected getRequiredParameters(provided: ModelParameter[], request: EmbeddingRequest, forStreaming: boolean): ModelParameter[];
8
+ import { GetAPI } from './get';
9
+ export declare class EmbedAPI<T extends AIBaseTypes> extends GetAPI<T, EmbeddingRequest, EmbeddingResponse> {
10
+ protected getRequiredCapabilities(provided: ModelCapability[]): ModelCapability[];
11
+ protected getRequiredParameters(provided: ModelParameter[], request: EmbeddingRequest): ModelParameter[];
14
12
  protected getNoModelFoundError(): string;
15
13
  protected getErrorType(): string;
16
14
  protected getErrorMessage(): string;
17
15
  protected executeRequest(request: EmbeddingRequest, selected: SelectedModelFor<T>, ctx: AIContext<T>): Promise<EmbeddingResponse>;
18
- protected executeStreamRequest(request: EmbeddingRequest, selected: SelectedModelFor<T>, ctx: AIContext<T>): AsyncIterable<never>;
19
16
  protected estimateRequestUsage(request: EmbeddingRequest): Usage;
20
- protected responseToChunks(response: EmbeddingResponse): never;
21
- protected chunksToResponse(chunks: never[]): EmbeddingResponse;
22
17
  protected getHandlerGetMethod(handler?: ModelHandlerFor<T>): ((request: EmbeddingRequest, ctx: AIContext<T>) => Promise<EmbeddingResponse>) | undefined;
23
- protected getHandlerStreamMethod(handler?: ModelHandlerFor<T>): ((request: EmbeddingRequest, ctx: AIContext<T>) => AsyncIterable<never>) | undefined;
24
18
  protected hasProviderExecutor(selected: SelectedModelFor<T>): boolean;
25
- protected hasProviderStreamer(selected: SelectedModelFor<T>): boolean;
26
19
  }
27
20
  //# sourceMappingURL=embed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/apis/embed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,qBAAa,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAE,SAAQ,OAAO,CAC1D,CAAC,EACD,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,CACN;gBACa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAQrB,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,GAAG,eAAe,EAAE;IAInI,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,GAAG,cAAc,EAAE;IAQ/H,SAAS,CAAC,oBAAoB,IAAI,MAAM;IAIxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC,SAAS,CAAC,eAAe,IAAI,MAAM;cAInB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,iBAAiB,CAAC;cAQZ,oBAAoB,CACnC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAChB,aAAa,CAAC,KAAK,CAAC;IAQvB,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,KAAK;IAWhE,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,KAAK;IAI9D,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB;IAI9D,SAAS,CAAC,mBAAmB,CAC3B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,SAAS;IAI7F,SAAS,CAAC,sBAAsB,CAC9B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS;IAIvF,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;IAIrE,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;CAGtE"}
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/apis/embed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,qBAAa,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;IACjG,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE;IAIjF,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAIxG,SAAS,CAAC,oBAAoB,IAAI,MAAM;IAIxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC,SAAS,CAAC,eAAe,IAAI,MAAM;cAInB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAQ7B,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,KAAK;IAWhE,SAAS,CAAC,mBAAmB,CAC3B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,SAAS;IAI7F,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;CAGtE"}
@@ -3,22 +3,13 @@
3
3
  *
4
4
  * Provides text embedding functionality.
5
5
  */
6
- import { BaseAPI } from './base';
7
- export class EmbedAPI extends BaseAPI {
8
- constructor(ai) {
9
- super(ai);
10
- }
11
- // ============================================================================
12
- // REQUIRED ABSTRACT METHOD IMPLEMENTATIONS
13
- // ============================================================================
14
- getRequiredCapabilities(provided, request, forStreaming) {
6
+ import { GetAPI } from './get';
7
+ export class EmbedAPI extends GetAPI {
8
+ getRequiredCapabilities(provided) {
15
9
  return ['embedding', ...provided];
16
10
  }
17
- getRequiredParameters(provided, request, forStreaming) {
18
- const params = new Set([...provided]);
19
- if (request.dimensions !== undefined)
20
- params.add('embeddingDimensions');
21
- return Array.from(params);
11
+ getRequiredParameters(provided, request) {
12
+ return request.dimensions !== undefined ? [...new Set([...provided, 'embeddingDimensions'])] : provided;
22
13
  }
23
14
  getNoModelFoundError() {
24
15
  return 'No compatible model found for embeddings';
@@ -32,12 +23,6 @@ export class EmbedAPI extends BaseAPI {
32
23
  async executeRequest(request, selected, ctx) {
33
24
  return await selected.provider.embed(request, ctx, selected.providerConfig);
34
25
  }
35
- async *executeStreamRequest(request, selected, ctx) {
36
- throw new Error('Streaming not supported for embeddings');
37
- }
38
- // ============================================================================
39
- // OPTIONAL OVERRIDES
40
- // ============================================================================
41
26
  estimateRequestUsage(request) {
42
27
  const totalTextLength = request.texts.reduce((sum, text) => sum + text.length, 0);
43
28
  const tokens = Math.ceil(totalTextLength / 4);
@@ -48,23 +33,11 @@ export class EmbedAPI extends BaseAPI {
48
33
  }
49
34
  };
50
35
  }
51
- responseToChunks(response) {
52
- throw new Error('Embeddings do not support chunking');
53
- }
54
- chunksToResponse(chunks) {
55
- throw new Error('Embeddings do not support chunking');
56
- }
57
36
  getHandlerGetMethod(handler) {
58
37
  return handler?.embed?.get;
59
38
  }
60
- getHandlerStreamMethod(handler) {
61
- return undefined;
62
- }
63
39
  hasProviderExecutor(selected) {
64
40
  return !!selected.provider.embed;
65
41
  }
66
- hasProviderStreamer(selected) {
67
- return false; // Embed API doesn't support streaming
68
- }
69
42
  }
70
43
  //# sourceMappingURL=embed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/apis/embed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,MAAM,OAAO,QAAgC,SAAQ,OAKpD;IACC,YAAY,EAAS;QACnB,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,+EAA+E;IAC/E,2CAA2C;IAC3C,+EAA+E;IAErE,uBAAuB,CAAC,QAA2B,EAAE,OAAyB,EAAE,YAAqB;QAC7G,OAAO,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC;IACpC,CAAC;IAES,qBAAqB,CAAC,QAA0B,EAAE,OAAyB,EAAE,YAAqB;QAC1G,MAAM,MAAM,GAAG,IAAI,GAAG,CAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAEtD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAExE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAES,oBAAoB;QAC5B,OAAO,0CAA0C,CAAC;IACpD,CAAC;IAES,YAAY;QACpB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAES,eAAe;QACvB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,OAAyB,EACzB,QAA6B,EAC7B,GAAiB;QAEjB,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAM,CACnC,OAAO,EACP,GAAG,EACH,QAAQ,CAAC,cAAc,CACxB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,CAAC,oBAAoB,CACnC,OAAyB,EACzB,QAA6B,EAC7B,GAAiB;QAEjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,+EAA+E;IAC/E,qBAAqB;IACrB,+EAA+E;IAErE,oBAAoB,CAAC,OAAyB;QACtD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAC9C,OAAO;YACL,UAAU,EAAE;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;gBAC3B,MAAM;aACP;SACF,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,QAA2B;QACpD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAES,gBAAgB,CAAC,MAAe;QACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAES,mBAAmB,CAC3B,OAA4B;QAE5B,OAAO,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC;IAC7B,CAAC;IAES,sBAAsB,CAC9B,OAA4B;QAE5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,mBAAmB,CAAC,QAA6B;QACzD,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IACnC,CAAC;IAES,mBAAmB,CAAC,QAA6B;QACzD,OAAO,KAAK,CAAC,CAAC,sCAAsC;IACtD,CAAC;CACF"}
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/apis/embed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,MAAM,OAAO,QAAgC,SAAQ,MAA8C;IACvF,uBAAuB,CAAC,QAA2B;QAC3D,OAAO,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC;IACpC,CAAC;IAES,qBAAqB,CAAC,QAA0B,EAAE,OAAyB;QACnF,OAAO,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAiB,CAAC,GAAG,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1H,CAAC;IAES,oBAAoB;QAC5B,OAAO,0CAA0C,CAAC;IACpD,CAAC;IAES,YAAY;QACpB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAES,eAAe;QACvB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,OAAyB,EACzB,QAA6B,EAC7B,GAAiB;QAEjB,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAM,CACnC,OAAO,EACP,GAAG,EACH,QAAQ,CAAC,cAAc,CACxB,CAAC;IACJ,CAAC;IAES,oBAAoB,CAAC,OAAyB;QACtD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAC9C,OAAO;YACL,UAAU,EAAE;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;gBAC3B,MAAM;aACP;SACF,CAAC;IACJ,CAAC;IAES,mBAAmB,CAC3B,OAA4B;QAE5B,OAAO,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC;IAC7B,CAAC;IAES,mBAAmB,CAAC,QAA6B;QACzD,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Get API
3
+ *
4
+ * Base for APIs that answer with one response and never stream.
5
+ */
6
+ import type { BaseRequest, BaseResponse } from '@aeye/core';
7
+ import type { AIBaseTypes, ModelParameter } from '../types';
8
+ import { BaseAPI } from './base';
9
+ export declare abstract class GetAPI<T extends AIBaseTypes, TRequest extends BaseRequest, TResponse extends BaseResponse> extends BaseAPI<T, TRequest, TResponse, never> {
10
+ protected getRequiredParameters(provided: ModelParameter[], request: TRequest): ModelParameter[];
11
+ protected executeStreamRequest(): AsyncIterable<never>;
12
+ protected responseToChunks(): never;
13
+ protected chunksToResponse(): never;
14
+ protected getHandlerStreamMethod(): undefined;
15
+ protected hasProviderStreamer(): boolean;
16
+ private noStreaming;
17
+ }
18
+ //# sourceMappingURL=get.d.ts.map