@pipeline-builder/ai-core 4.1.12 → 4.1.14
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.
- package/lib/ask-agent.d.ts +2 -0
- package/lib/ask-agent.js +4 -4
- package/lib/index.d.ts +2 -1
- package/lib/index.js +3 -3
- package/lib/provider-registry.d.ts +34 -0
- package/lib/provider-registry.js +64 -5
- package/lib/testing/exports.json +22 -0
- package/package.json +12 -3
package/lib/ask-agent.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export interface AnswerHowToOptions {
|
|
|
21
21
|
}>;
|
|
22
22
|
/** Aborts the provider call when the client disconnects (avoids wasted spend). */
|
|
23
23
|
abortSignal?: AbortSignal;
|
|
24
|
+
/** Caps the answer's length (and so its token cost). Unset ⇒ the provider default. */
|
|
25
|
+
maxOutputTokens?: number;
|
|
24
26
|
}
|
|
25
27
|
/** Assemble the retrieved chunks into a labelled context block for the model. */
|
|
26
28
|
export declare function buildGroundingContext(hits: GroundingHit[]): string;
|
package/lib/ask-agent.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
//
|
|
5
5
|
// `answerHowTo` / `streamHowTo` retrieve the most relevant documentation chunks from
|
|
6
6
|
// a GroundingIndex and ask the model to answer using ONLY that context, citing the
|
|
7
|
-
// sections it used. This is the
|
|
7
|
+
// sections it used. This is the read-only core — no write tools, nothing
|
|
8
8
|
// mutated. The HTTP service wires a model (via the provider registry) + a docs index
|
|
9
9
|
// to these functions and streams the result over SSE.
|
|
10
10
|
import { generateText, streamText } from 'ai';
|
|
@@ -53,7 +53,7 @@ function buildMessages(opts, context) {
|
|
|
53
53
|
*/
|
|
54
54
|
export async function answerHowTo(opts) {
|
|
55
55
|
const { messages, sources } = prepare(opts);
|
|
56
|
-
const result = await generateText({ model: opts.model, messages, abortSignal: opts.abortSignal });
|
|
56
|
+
const result = await generateText({ model: opts.model, messages, abortSignal: opts.abortSignal, maxOutputTokens: opts.maxOutputTokens });
|
|
57
57
|
return { text: result.text, sources };
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
@@ -67,7 +67,7 @@ export async function answerHowTo(opts) {
|
|
|
67
67
|
*/
|
|
68
68
|
export function streamHowTo(opts) {
|
|
69
69
|
const { messages, sources } = prepare(opts);
|
|
70
|
-
const result = streamText({ model: opts.model, messages, abortSignal: opts.abortSignal });
|
|
70
|
+
const result = streamText({ model: opts.model, messages, abortSignal: opts.abortSignal, maxOutputTokens: opts.maxOutputTokens });
|
|
71
71
|
return { sources, events: toAskEvents(result.fullStream) };
|
|
72
72
|
}
|
|
73
73
|
async function* toAskEvents(parts) {
|
|
@@ -87,4 +87,4 @@ async function* toAskEvents(parts) {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLWFnZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Fzay1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLG1GQUFtRjtBQUNuRixFQUFFO0FBQ0YscUZBQXFGO0FBQ3JGLG1GQUFtRjtBQUNuRixtRkFBbUY7QUFDbkYscUZBQXFGO0FBQ3JGLHNEQUFzRDtBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQztBQTBCOUMsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUZBQXFGO0lBQ3JGLG9GQUFvRjtJQUNwRixFQUFFO0lBQ0YsUUFBUTtJQUNSLDBGQUEwRjtJQUMxRix1RkFBdUY7SUFDdkYsMkVBQTJFO0lBQzNFLHlFQUF5RTtJQUN6RSx3RUFBd0U7Q0FDekUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFYixpRkFBaUY7QUFDakYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQW9CO0lBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxtQ0FBbUMsQ0FBQztJQUNsRSxPQUFPLElBQUk7U0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDWixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsTUFBTSxDQUFDLENB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LENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pGO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gVGhlIFwiQXNrXCIgYWdlbnQncyByZWFkLW9ubHkgXCJFeHBsYWluXCIgYnJhaW46IHJldHJpZXZhbC1hdWdtZW50ZWQgaG93LXRvIGFuc3dlcnMuXG4vL1xuLy8gYGFuc3dlckhvd1RvYCAvIGBzdHJlYW1Ib3dUb2AgcmV0cmlldmUgdGhlIG1vc3QgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBjaHVua3MgZnJvbVxuLy8gYSBHcm91bmRpbmdJbmRleCBhbmQgYXNrIHRoZSBtb2RlbCB0byBhbnN3ZXIgdXNpbmcgT05MWSB0aGF0IGNvbnRleHQsIGNpdGluZyB0aGVcbi8vIHNlY3Rpb25zIGl0IHVzZWQuIFRoaXMgaXMgdGhlIFBoYXNlIDEgKHJlYWQtb25seSkgY29yZSDigJQgbm8gd3JpdGUgdG9vbHMsIG5vdGhpbmdcbi8vIG11dGF0ZWQuIFRoZSBIVFRQIHNlcnZpY2Ugd2lyZXMgYSBtb2RlbCAodmlhIHRoZSBwcm92aWRlciByZWdpc3RyeSkgKyBhIGRvY3MgaW5kZXhcbi8vIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgc3RyZWFtcyB0aGUgcmVzdWx0IG92ZXIgU1NFLlxuXG5pbXBvcnQgeyBnZW5lcmF0ZVRleHQsIHN0cmVhbVRleHQgfSBmcm9tICdhaSc7XG5pbXBvcnQgdHlwZSB7IExhbmd1YWdlTW9kZWwgfSBmcm9tICdhaSc7XG5cbmltcG9ydCB0eXBlIHsgR3JvdW5kaW5nSW5kZXgsIEdyb3VuZGluZ0hpdCB9IGZyb20gJy4vZ3JvdW5kaW5nLmpzJztcblxuLyoqIEEgc291cmNlIHRoZSBhbnN3ZXIgd2FzIGdyb3VuZGVkIGluLCBmb3IgYXR0cmlidXRpb24gLyBkZWVwLWxpbmtpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIEFza1NvdXJjZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5zd2VySG93VG9PcHRpb25zIHtcbiAgbW9kZWw6IExhbmd1YWdlTW9kZWw7XG4gIC8qKiBUaGUgdXNlcidzIHF1ZXN0aW9uLiAqL1xuICBxdWVyeTogc3RyaW5nO1xuICAvKiogRG9jdW1lbnRhdGlvbiBpbmRleCB0byBncm91bmQgYWdhaW5zdC4gKi9cbiAgaW5kZXg6IEdyb3VuZGluZ0luZGV4O1xuICAvKiogSG93IG1hbnkgY2h1bmtzIHRvIHJldHJpZXZlIChkZWZhdWx0IDUpLiAqL1xuICB0b3BLPzogbnVtYmVyO1xuICAvKiogT3B0aW9uYWwgcHJpb3IgdHVybnMgZm9yIG11bHRpLXR1cm4gY29udGV4dCAoY2xpZW50LWhlbGQgaW4gdjEpLiAqL1xuICBoaXN0b3J5PzogQXJyYXk8eyByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JzsgY29udGVudDogc3RyaW5nIH0+O1xuICAvKiogQWJvcnRzIHRoZSBwcm92aWRlciBjYWxsIHdoZW4gdGhlIGNsaWVudCBkaXNjb25uZWN0cyAoYXZvaWRzIHdhc3RlZCBzcGVuZCkuICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmNvbnN0IFNZU1RFTV9QUk9NUFQgPSBbXG4gICdZb3UgYXJlIHRoZSBQaXBlbGluZSBCdWlsZGVyIFwiQXNrXCIgYXNzaXN0YW50LiBZb3UgaGVscCB1c2VycyB1bmRlcnN0YW5kIGFuZCB1c2UgdGhlJyxcbiAgJ3BsYXRmb3JtLiBBbnN3ZXIgdGhlIHF1ZXN0aW9uIHVzaW5nIE9OTFkgdGhlIGRvY3VtZW50YXRpb24gY29udGV4dCBwcm92aWRlZCBiZWxvdy4nLFxuICAnJyxcbiAgJ1J1bGVzOicsXG4gICctIElmIHRoZSBhbnN3ZXIgaXMgbm90IGluIHRoZSBjb250ZXh0LCBzYXkgeW91IGRvIG5vdCBoYXZlIGRvY3VtZW50YXRpb24gY292ZXJpbmcgaXQgYW5kJyxcbiAgJyAgc3VnZ2VzdCB0aGUgY2xvc2VzdCByZWxldmFudCBhcmVhIOKAlCBkbyBOT1QgaW52ZW50IGNvbW1hbmRzLCBlbnYgdmFycywgb3IgZW5kcG9pbnRzLicsXG4gICctIEJlIGNvbmNpc2UgYW5kIGNvbmNyZXRlLiBQcmVmZXIgc3RlcHMgYW5kIGV4YWN0IG5hbWVzIGZyb20gdGhlIGNvbnRleHQuJyxcbiAgJy0gV2hlbiB5b3UgdXNlIGEgc2VjdGlvbiwgY2l0ZSBpdCBieSBpdHMgdGl0bGUgc28gdGhlIHVzZXIgY2FuIGZpbmQgaXQuJyxcbiAgJy0gVGhpcyBpcyBhIHJlYWQtb25seSBhc3Npc3RhbnQ6IG5ldmVyIGNsYWltIHRvIGhhdmUgY2hhbmdlZCBhbnl0aGluZy4nLFxuXS5qb2luKCdcXG4nKTtcblxuLyoqIEFzc2VtYmxlIHRoZSByZXRyaWV2ZWQgY2h1bmtzIGludG8gYSBsYWJlbGxlZCBjb250ZXh0IGJsb2NrIGZvciB0aGUgbW9kZWwuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRHcm91bmRpbmdDb250ZXh0KGhpdHM6IEdyb3VuZGluZ0hpdFtdKTogc3RyaW5nIHtcbiAgaWYgKGhpdHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyhubyBtYXRjaGluZyBkb2N1bWVudGF0aW9uIGZvdW5kKSc7XG4gIHJldHVybiBoaXRzXG4gICAgLm1hcCgoaCwgaSkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBoLmRvYy50aXRsZSA/IGAke2guZG9jLnRpdGxlfSBbJHtoLmRvYy5pZH1dYCA6IGguZG9jLmlkO1xuICAgICAgcmV0dXJuIGAjIyMgU291cmNlICR7aSArIDF9OiAke2xhYmVsfVxcbiR7aC5kb2MudGV4dH1gO1xuICAgIH0pXG4gICAgLmpvaW4oJ1xcblxcbicpO1xufVxuXG5mdW5jdGlvbiB0b1NvdXJjZXMoaGl0czogR3JvdW5kaW5nSGl0W10pOiBBc2tTb3VyY2VbXSB7XG4gIHJldHVybiBoaXRzLm1hcCgoaCkgPT4gKHsgaWQ6IGguZG9jLmlkLCB0aXRsZTogaC5kb2MudGl0bGUsIHVybDogaC5kb2MudXJsIH0pKTtcbn1cblxuLyoqIFJldHJpZXZlLCBidWlsZCB0aGUgZ3JvdW5kZWQgbWVzc2FnZXMsIGFuZCBkZXJpdmUgdGhlIHNvdXJjZXMg4oCUIHNoYXJlZCBwcmVsdWRlLiAqL1xuZnVuY3Rpb24gcHJlcGFyZShvcHRzOiBBbnN3ZXJIb3dUb09wdGlvbnMpOiB7IG1lc3NhZ2VzOiBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZE1lc3NhZ2VzPjsgc291cmNlczogQXNrU291cmNlW10gfSB7XG4gIGNvbnN0IGhpdHMgPSBvcHRzLmluZGV4LnNlYXJjaChvcHRzLnF1ZXJ5LCBvcHRzLnRvcEsgPz8gNSk7XG4gIGNvbnN0IGNvbnRleHQgPSBidWlsZEdyb3VuZGluZ0NvbnRleHQoaGl0cyk7XG4gIHJldHVybiB7IG1lc3NhZ2VzOiBidWlsZE1lc3NhZ2VzKG9wdHMsIGNvbnRleHQpLCBzb3VyY2VzOiB0b1NvdXJjZXMoaGl0cykgfTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBtZXNzYWdlcyBhcnJheSAoc3lzdGVtIGdyb3VuZGluZyArIG9wdGlvbmFsIGhpc3RvcnkgKyBxdWVzdGlvbikuICovXG5mdW5jdGlvbiBidWlsZE1lc3NhZ2VzKG9wdHM6IEFuc3dlckhvd1RvT3B0aW9ucywgY29udGV4dDogc3RyaW5nKSB7XG4gIHJldHVybiBbXG4gICAgeyByb2xlOiAnc3lzdGVtJyBhcyBjb25zdCwgY29udGVudDogYCR7U1lTVEVNX1BST01QVH1cXG5cXG4jIyBEb2N1bWVudGF0aW9uIGNvbnRleHRcXG5cXG4ke2NvbnRleHR9YCB9LFxuICAgIC4uLihvcHRzLmhpc3RvcnkgPz8gW10pLFxuICAgIHsgcm9sZTogJ3VzZXInIGFzIGNvbnN0LCBjb250ZW50OiBvcHRzLnF1ZXJ5IH0sXG4gIF07XG59XG5cbi8qKlxuICogQW5zd2VyIGEgaG93LXRvIHF1ZXN0aW9uLCBncm91bmRlZCBpbiB0aGUgZG9jcyBpbmRleC4gUmV0dXJucyB0aGUgZnVsbCB0ZXh0IHBsdXNcbiAqIHRoZSBzb3VyY2VzIGl0IHdhcyBncm91bmRlZCBpbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFuc3dlckhvd1RvKG9wdHM6IEFuc3dlckhvd1RvT3B0aW9ucyk6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHNvdXJjZXM6IEFza1NvdXJjZVtdIH0+IHtcbiAgY29uc3QgeyBtZXNzYWdlcywgc291cmNlcyB9ID0gcHJlcGFyZShvcHRzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHsgbW9kZWw6IG9wdHMubW9kZWwsIG1lc3NhZ2VzLCBhYm9ydFNpZ25hbDogb3B0cy5hYm9ydFNpZ25hbCB9KTtcbiAgcmV0dXJuIHsgdGV4dDogcmVzdWx0LnRleHQsIHNvdXJjZXMgfTtcbn1cblxuLyoqXG4gKiBTdHJlYW1pbmcgdmFyaWFudCDigJQgcmV0dXJucyB0aGUgcmV0cmlldmVkIGBzb3VyY2VzYCBpbW1lZGlhdGVseSAoc28gdGhlIFVJIGNhbiBzaG93XG4gKiB0aGVtIHdoaWxlIHRva2VucyBhcnJpdmUpIGFuZCB0aGUgbGl2ZSBgdGV4dFN0cmVhbWAuXG4gKi9cbi8qKiBXaGF0IGEgaG93LXRvIHN0cmVhbSB5aWVsZHMuICovXG5leHBvcnQgdHlwZSBBc2tTdHJlYW1FdmVudCA9XG4gIC8qKiBUaGUgcHJvdmlkZXIgaGFzIHN0YXJ0ZWQgcmVzcG9uZGluZyDigJQgYSBwYWlkIGNhbGwgaGFzIGJlZW4gbWFkZS4gKi9cbiAgfCB7IHR5cGU6ICdwcm92aWRlci1yZXNwb25kZWQnIH1cbiAgLyoqIEEgY2h1bmsgb2YgYW5zd2VyIHRleHQuICovXG4gIHwgeyB0eXBlOiAndGV4dCc7IHRleHQ6IHN0cmluZyB9O1xuXG4vKipcbiAqIFN0cmVhbSBhIGdyb3VuZGVkIGFuc3dlci5cbiAqXG4gKiBCdWlsdCBvbiB0aGUgU0RLJ3MgZnVsbCBzdHJlYW0gcmF0aGVyIHRoYW4gYHRleHRTdHJlYW1gLCB3aGljaCBzaWxlbnRseSBkcm9wc1xuICogZXJyb3IgcGFydHMgKGEgZmFpbGVkIHByb3ZpZGVyIGNhbGwgd291bGQgbG9vayBsaWtlIGFuIGVtcHR5IFwiYW5zd2VyXCIpIGFuZFxuICogZ2l2ZXMgbm8gc2lnbmFsIHRoYXQgdGhlIHByb3ZpZGVyIHdhcyByZWFjaGVkLiBIZXJlIGEgcHJvdmlkZXIgZXJyb3IgVEhST1dTXG4gKiBmcm9tIHRoZSBpdGVyYXRvciwgYW5kIGBwcm92aWRlci1yZXNwb25kZWRgIG1hcmtzIHRoZSBtb21lbnQgYSBjYWxsIHdhcyBwYWlkXG4gKiBmb3Ig4oCUIHNvIGNhbGxlcnMgY2FuIHJlZnVuZCBleGFjdGx5IHdoZW4gdGhlIHByb3ZpZGVyIHdhcyBuZXZlciByZWFjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtSG93VG8ob3B0czogQW5zd2VySG93VG9PcHRpb25zKTogeyBzb3VyY2VzOiBBc2tTb3VyY2VbXTsgZXZlbnRzOiBBc3luY0l0ZXJhYmxlPEFza1N0cmVhbUV2ZW50PiB9IHtcbiAgY29uc3QgeyBtZXNzYWdlcywgc291cmNlcyB9ID0gcHJlcGFyZShvcHRzKTtcbiAgY29uc3QgcmVzdWx0ID0gc3RyZWFtVGV4dCh7IG1vZGVsOiBvcHRzLm1vZGVsLCBtZXNzYWdlcywgYWJvcnRTaWduYWw6IG9wdHMuYWJvcnRTaWduYWwgfSk7XG4gIHJldHVybiB7IHNvdXJjZXMsIGV2ZW50czogdG9Bc2tFdmVudHMocmVzdWx0LmZ1bGxTdHJlYW0pIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiB0b0Fza0V2ZW50cyhwYXJ0czogQXN5bmNJdGVyYWJsZTx7IHR5cGU6IHN0cmluZzsgZGVsdGE/OiBzdHJpbmc7IGVycm9yPzogdW5rbm93biB9Pik6IEFzeW5jSXRlcmFibGU8QXNrU3RyZWFtRXZlbnQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgc3dpdGNoIChwYXJ0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0LXN0ZXAnOlxuICAgICAgICB5aWVsZCB7IHR5cGU6ICdwcm92aWRlci1yZXNwb25kZWQnIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dC1kZWx0YSc6XG4gICAgICAgIGlmIChwYXJ0LmRlbHRhKSB5aWVsZCB7IHR5cGU6ICd0ZXh0JywgdGV4dDogcGFydC5kZWx0YSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdGhyb3cgcGFydC5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gcGFydC5lcnJvciA6IG5ldyBFcnJvcihTdHJpbmcocGFydC5lcnJvcikpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLWFnZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Fzay1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLG1GQUFtRjtBQUNuRixFQUFFO0FBQ0YscUZBQXFGO0FBQ3JGLG1GQUFtRjtBQUNuRix5RUFBeUU7QUFDekUscUZBQXFGO0FBQ3JGLHNEQUFzRDtBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQztBQTRCOUMsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUZBQXFGO0lBQ3JGLG9GQUFvRjtJQUNwRixFQUFFO0lBQ0YsUUFBUTtJQUNSLDBGQUEwRjtJQUMxRix1RkFBdUY7SUFDdkYsMkVBQTJFO0lBQzNFLHlFQUF5RTtJQUN6RSx3RUFBd0U7Q0FDekUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFYixpRkFBaUY7QUFDakYsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQW9CO0lBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxtQ0FBbUMsQ0FBQztJQUNsRSxPQUFPLElBQUk7U0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDWixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsTUFBTSxDQUFDLENB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QUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pELE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsTUFBTSxJQUFJLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pGO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gVGhlIFwiQXNrXCIgYWdlbnQncyByZWFkLW9ubHkgXCJFeHBsYWluXCIgYnJhaW46IHJldHJpZXZhbC1hdWdtZW50ZWQgaG93LXRvIGFuc3dlcnMuXG4vL1xuLy8gYGFuc3dlckhvd1RvYCAvIGBzdHJlYW1Ib3dUb2AgcmV0cmlldmUgdGhlIG1vc3QgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBjaHVua3MgZnJvbVxuLy8gYSBHcm91bmRpbmdJbmRleCBhbmQgYXNrIHRoZSBtb2RlbCB0byBhbnN3ZXIgdXNpbmcgT05MWSB0aGF0IGNvbnRleHQsIGNpdGluZyB0aGVcbi8vIHNlY3Rpb25zIGl0IHVzZWQuIFRoaXMgaXMgdGhlIHJlYWQtb25seSBjb3JlIOKAlCBubyB3cml0ZSB0b29scywgbm90aGluZ1xuLy8gbXV0YXRlZC4gVGhlIEhUVFAgc2VydmljZSB3aXJlcyBhIG1vZGVsICh2aWEgdGhlIHByb3ZpZGVyIHJlZ2lzdHJ5KSArIGEgZG9jcyBpbmRleFxuLy8gdG8gdGhlc2UgZnVuY3Rpb25zIGFuZCBzdHJlYW1zIHRoZSByZXN1bHQgb3ZlciBTU0UuXG5cbmltcG9ydCB7IGdlbmVyYXRlVGV4dCwgc3RyZWFtVGV4dCB9IGZyb20gJ2FpJztcbmltcG9ydCB0eXBlIHsgTGFuZ3VhZ2VNb2RlbCB9IGZyb20gJ2FpJztcblxuaW1wb3J0IHR5cGUgeyBHcm91bmRpbmdJbmRleCwgR3JvdW5kaW5nSGl0IH0gZnJvbSAnLi9ncm91bmRpbmcuanMnO1xuXG4vKiogQSBzb3VyY2UgdGhlIGFuc3dlciB3YXMgZ3JvdW5kZWQgaW4sIGZvciBhdHRyaWJ1dGlvbiAvIGRlZXAtbGlua2luZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNrU291cmNlIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbnN3ZXJIb3dUb09wdGlvbnMge1xuICBtb2RlbDogTGFuZ3VhZ2VNb2RlbDtcbiAgLyoqIFRoZSB1c2VyJ3MgcXVlc3Rpb24uICovXG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIC8qKiBEb2N1bWVudGF0aW9uIGluZGV4IHRvIGdyb3VuZCBhZ2FpbnN0LiAqL1xuICBpbmRleDogR3JvdW5kaW5nSW5kZXg7XG4gIC8qKiBIb3cgbWFueSBjaHVua3MgdG8gcmV0cmlldmUgKGRlZmF1bHQgNSkuICovXG4gIHRvcEs/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBwcmlvciB0dXJucyBmb3IgbXVsdGktdHVybiBjb250ZXh0IChjbGllbnQtaGVsZCBpbiB2MSkuICovXG4gIGhpc3Rvcnk/OiBBcnJheTx7IHJvbGU6ICd1c2VyJyB8ICdhc3Npc3RhbnQnOyBjb250ZW50OiBzdHJpbmcgfT47XG4gIC8qKiBBYm9ydHMgdGhlIHByb3ZpZGVyIGNhbGwgd2hlbiB0aGUgY2xpZW50IGRpc2Nvbm5lY3RzIChhdm9pZHMgd2FzdGVkIHNwZW5kKS4gKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIENhcHMgdGhlIGFuc3dlcidzIGxlbmd0aCAoYW5kIHNvIGl0cyB0b2tlbiBjb3N0KS4gVW5zZXQg4oeSIHRoZSBwcm92aWRlciBkZWZhdWx0LiAqL1xuICBtYXhPdXRwdXRUb2tlbnM/OiBudW1iZXI7XG59XG5cbmNvbnN0IFNZU1RFTV9QUk9NUFQgPSBbXG4gICdZb3UgYXJlIHRoZSBQaXBlbGluZSBCdWlsZGVyIFwiQXNrXCIgYXNzaXN0YW50LiBZb3UgaGVscCB1c2VycyB1bmRlcnN0YW5kIGFuZCB1c2UgdGhlJyxcbiAgJ3BsYXRmb3JtLiBBbnN3ZXIgdGhlIHF1ZXN0aW9uIHVzaW5nIE9OTFkgdGhlIGRvY3VtZW50YXRpb24gY29udGV4dCBwcm92aWRlZCBiZWxvdy4nLFxuICAnJyxcbiAgJ1J1bGVzOicsXG4gICctIElmIHRoZSBhbnN3ZXIgaXMgbm90IGluIHRoZSBjb250ZXh0LCBzYXkgeW91IGRvIG5vdCBoYXZlIGRvY3VtZW50YXRpb24gY292ZXJpbmcgaXQgYW5kJyxcbiAgJyAgc3VnZ2VzdCB0aGUgY2xvc2VzdCByZWxldmFudCBhcmVhIOKAlCBkbyBOT1QgaW52ZW50IGNvbW1hbmRzLCBlbnYgdmFycywgb3IgZW5kcG9pbnRzLicsXG4gICctIEJlIGNvbmNpc2UgYW5kIGNvbmNyZXRlLiBQcmVmZXIgc3RlcHMgYW5kIGV4YWN0IG5hbWVzIGZyb20gdGhlIGNvbnRleHQuJyxcbiAgJy0gV2hlbiB5b3UgdXNlIGEgc2VjdGlvbiwgY2l0ZSBpdCBieSBpdHMgdGl0bGUgc28gdGhlIHVzZXIgY2FuIGZpbmQgaXQuJyxcbiAgJy0gVGhpcyBpcyBhIHJlYWQtb25seSBhc3Npc3RhbnQ6IG5ldmVyIGNsYWltIHRvIGhhdmUgY2hhbmdlZCBhbnl0aGluZy4nLFxuXS5qb2luKCdcXG4nKTtcblxuLyoqIEFzc2VtYmxlIHRoZSByZXRyaWV2ZWQgY2h1bmtzIGludG8gYSBsYWJlbGxlZCBjb250ZXh0IGJsb2NrIGZvciB0aGUgbW9kZWwuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRHcm91bmRpbmdDb250ZXh0KGhpdHM6IEdyb3VuZGluZ0hpdFtdKTogc3RyaW5nIHtcbiAgaWYgKGhpdHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyhubyBtYXRjaGluZyBkb2N1bWVudGF0aW9uIGZvdW5kKSc7XG4gIHJldHVybiBoaXRzXG4gICAgLm1hcCgoaCwgaSkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBoLmRvYy50aXRsZSA/IGAke2guZG9jLnRpdGxlfSBbJHtoLmRvYy5pZH1dYCA6IGguZG9jLmlkO1xuICAgICAgcmV0dXJuIGAjIyMgU291cmNlICR7aSArIDF9OiAke2xhYmVsfVxcbiR7aC5kb2MudGV4dH1gO1xuICAgIH0pXG4gICAgLmpvaW4oJ1xcblxcbicpO1xufVxuXG5mdW5jdGlvbiB0b1NvdXJjZXMoaGl0czogR3JvdW5kaW5nSGl0W10pOiBBc2tTb3VyY2VbXSB7XG4gIHJldHVybiBoaXRzLm1hcCgoaCkgPT4gKHsgaWQ6IGguZG9jLmlkLCB0aXRsZTogaC5kb2MudGl0bGUsIHVybDogaC5kb2MudXJsIH0pKTtcbn1cblxuLyoqIFJldHJpZXZlLCBidWlsZCB0aGUgZ3JvdW5kZWQgbWVzc2FnZXMsIGFuZCBkZXJpdmUgdGhlIHNvdXJjZXMg4oCUIHNoYXJlZCBwcmVsdWRlLiAqL1xuZnVuY3Rpb24gcHJlcGFyZShvcHRzOiBBbnN3ZXJIb3dUb09wdGlvbnMpOiB7IG1lc3NhZ2VzOiBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZE1lc3NhZ2VzPjsgc291cmNlczogQXNrU291cmNlW10gfSB7XG4gIGNvbnN0IGhpdHMgPSBvcHRzLmluZGV4LnNlYXJjaChvcHRzLnF1ZXJ5LCBvcHRzLnRvcEsgPz8gNSk7XG4gIGNvbnN0IGNvbnRleHQgPSBidWlsZEdyb3VuZGluZ0NvbnRleHQoaGl0cyk7XG4gIHJldHVybiB7IG1lc3NhZ2VzOiBidWlsZE1lc3NhZ2VzKG9wdHMsIGNvbnRleHQpLCBzb3VyY2VzOiB0b1NvdXJjZXMoaGl0cykgfTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBtZXNzYWdlcyBhcnJheSAoc3lzdGVtIGdyb3VuZGluZyArIG9wdGlvbmFsIGhpc3RvcnkgKyBxdWVzdGlvbikuICovXG5mdW5jdGlvbiBidWlsZE1lc3NhZ2VzKG9wdHM6IEFuc3dlckhvd1RvT3B0aW9ucywgY29udGV4dDogc3RyaW5nKSB7XG4gIHJldHVybiBbXG4gICAgeyByb2xlOiAnc3lzdGVtJyBhcyBjb25zdCwgY29udGVudDogYCR7U1lTVEVNX1BST01QVH1cXG5cXG4jIyBEb2N1bWVudGF0aW9uIGNvbnRleHRcXG5cXG4ke2NvbnRleHR9YCB9LFxuICAgIC4uLihvcHRzLmhpc3RvcnkgPz8gW10pLFxuICAgIHsgcm9sZTogJ3VzZXInIGFzIGNvbnN0LCBjb250ZW50OiBvcHRzLnF1ZXJ5IH0sXG4gIF07XG59XG5cbi8qKlxuICogQW5zd2VyIGEgaG93LXRvIHF1ZXN0aW9uLCBncm91bmRlZCBpbiB0aGUgZG9jcyBpbmRleC4gUmV0dXJucyB0aGUgZnVsbCB0ZXh0IHBsdXNcbiAqIHRoZSBzb3VyY2VzIGl0IHdhcyBncm91bmRlZCBpbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFuc3dlckhvd1RvKG9wdHM6IEFuc3dlckhvd1RvT3B0aW9ucyk6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHNvdXJjZXM6IEFza1NvdXJjZVtdIH0+IHtcbiAgY29uc3QgeyBtZXNzYWdlcywgc291cmNlcyB9ID0gcHJlcGFyZShvcHRzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHsgbW9kZWw6IG9wdHMubW9kZWwsIG1lc3NhZ2VzLCBhYm9ydFNpZ25hbDogb3B0cy5hYm9ydFNpZ25hbCwgbWF4T3V0cHV0VG9rZW5zOiBvcHRzLm1heE91dHB1dFRva2VucyB9KTtcbiAgcmV0dXJuIHsgdGV4dDogcmVzdWx0LnRleHQsIHNvdXJjZXMgfTtcbn1cblxuLyoqXG4gKiBTdHJlYW1pbmcgdmFyaWFudCDigJQgcmV0dXJucyB0aGUgcmV0cmlldmVkIGBzb3VyY2VzYCBpbW1lZGlhdGVseSAoc28gdGhlIFVJIGNhbiBzaG93XG4gKiB0aGVtIHdoaWxlIHRva2VucyBhcnJpdmUpIGFuZCB0aGUgbGl2ZSBgdGV4dFN0cmVhbWAuXG4gKi9cbi8qKiBXaGF0IGEgaG93LXRvIHN0cmVhbSB5aWVsZHMuICovXG5leHBvcnQgdHlwZSBBc2tTdHJlYW1FdmVudCA9XG4gIC8qKiBUaGUgcHJvdmlkZXIgaGFzIHN0YXJ0ZWQgcmVzcG9uZGluZyDigJQgYSBwYWlkIGNhbGwgaGFzIGJlZW4gbWFkZS4gKi9cbiAgfCB7IHR5cGU6ICdwcm92aWRlci1yZXNwb25kZWQnIH1cbiAgLyoqIEEgY2h1bmsgb2YgYW5zd2VyIHRleHQuICovXG4gIHwgeyB0eXBlOiAndGV4dCc7IHRleHQ6IHN0cmluZyB9O1xuXG4vKipcbiAqIFN0cmVhbSBhIGdyb3VuZGVkIGFuc3dlci5cbiAqXG4gKiBCdWlsdCBvbiB0aGUgU0RLJ3MgZnVsbCBzdHJlYW0gcmF0aGVyIHRoYW4gYHRleHRTdHJlYW1gLCB3aGljaCBzaWxlbnRseSBkcm9wc1xuICogZXJyb3IgcGFydHMgKGEgZmFpbGVkIHByb3ZpZGVyIGNhbGwgd291bGQgbG9vayBsaWtlIGFuIGVtcHR5IFwiYW5zd2VyXCIpIGFuZFxuICogZ2l2ZXMgbm8gc2lnbmFsIHRoYXQgdGhlIHByb3ZpZGVyIHdhcyByZWFjaGVkLiBIZXJlIGEgcHJvdmlkZXIgZXJyb3IgVEhST1dTXG4gKiBmcm9tIHRoZSBpdGVyYXRvciwgYW5kIGBwcm92aWRlci1yZXNwb25kZWRgIG1hcmtzIHRoZSBtb21lbnQgYSBjYWxsIHdhcyBwYWlkXG4gKiBmb3Ig4oCUIHNvIGNhbGxlcnMgY2FuIHJlZnVuZCBleGFjdGx5IHdoZW4gdGhlIHByb3ZpZGVyIHdhcyBuZXZlciByZWFjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtSG93VG8ob3B0czogQW5zd2VySG93VG9PcHRpb25zKTogeyBzb3VyY2VzOiBBc2tTb3VyY2VbXTsgZXZlbnRzOiBBc3luY0l0ZXJhYmxlPEFza1N0cmVhbUV2ZW50PiB9IHtcbiAgY29uc3QgeyBtZXNzYWdlcywgc291cmNlcyB9ID0gcHJlcGFyZShvcHRzKTtcbiAgY29uc3QgcmVzdWx0ID0gc3RyZWFtVGV4dCh7IG1vZGVsOiBvcHRzLm1vZGVsLCBtZXNzYWdlcywgYWJvcnRTaWduYWw6IG9wdHMuYWJvcnRTaWduYWwsIG1heE91dHB1dFRva2Vuczogb3B0cy5tYXhPdXRwdXRUb2tlbnMgfSk7XG4gIHJldHVybiB7IHNvdXJjZXMsIGV2ZW50czogdG9Bc2tFdmVudHMocmVzdWx0LmZ1bGxTdHJlYW0pIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiB0b0Fza0V2ZW50cyhwYXJ0czogQXN5bmNJdGVyYWJsZTx7IHR5cGU6IHN0cmluZzsgZGVsdGE/OiBzdHJpbmc7IGVycm9yPzogdW5rbm93biB9Pik6IEFzeW5jSXRlcmFibGU8QXNrU3RyZWFtRXZlbnQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgc3dpdGNoIChwYXJ0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0LXN0ZXAnOlxuICAgICAgICB5aWVsZCB7IHR5cGU6ICdwcm92aWRlci1yZXNwb25kZWQnIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dC1kZWx0YSc6XG4gICAgICAgIGlmIChwYXJ0LmRlbHRhKSB5aWVsZCB7IHR5cGU6ICd0ZXh0JywgdGV4dDogcGFydC5kZWx0YSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdGhyb3cgcGFydC5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gcGFydC5lcnJvciA6IG5ldyBFcnJvcihTdHJpbmcocGFydC5lcnJvcikpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, } from './provider-registry.js';
|
|
1
|
+
export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, resolveModelSelection, } from './provider-registry.js';
|
|
2
|
+
export type { ModelSelection, ResolvedModelSelection } from './provider-registry.js';
|
|
2
3
|
export { buildDocsIndexFromFiles } from './grounding.js';
|
|
3
4
|
export type { GroundingIndex, DocFile } from './grounding.js';
|
|
4
5
|
export { answerHowTo, streamHowTo, buildGroundingContext, } from './ask-agent.js';
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, } from './provider-registry.js';
|
|
3
|
+
export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, resolveModelSelection, } from './provider-registry.js';
|
|
4
4
|
// Grounding / retrieval for the "Ask" agent. `tokenize`, `chunkMarkdown` and
|
|
5
5
|
// `buildGroundingIndex` are the index-building internals `buildDocsIndexFromFiles`
|
|
6
6
|
// composes — consumers hand it doc files and get an index back.
|
|
@@ -8,6 +8,6 @@ export { buildDocsIndexFromFiles } from './grounding.js';
|
|
|
8
8
|
// "Ask" agent — read-only how-to (RAG) core
|
|
9
9
|
export { answerHowTo, streamHowTo, buildGroundingContext, } from './ask-agent.js';
|
|
10
10
|
// generateText/streamText/Output for generation; tool/generateObject/stepCountIs
|
|
11
|
-
// for the agent tool-calling loop (
|
|
11
|
+
// for the agent tool-calling loop (write tools).
|
|
12
12
|
export { generateText, streamText, Output, tool, generateObject, stepCountIs } from 'ai';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBR2hDLDZFQUE2RTtBQUM3RSxtRkFBbUY7QUFDbkYsZ0VBQWdFO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELDRDQUE0QztBQUM1QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFdBQVcsRUFDWCxxQkFBcUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUt4QixpRkFBaUY7QUFDakYsaURBQWlEO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICBnZXRBdmFpbGFibGVQcm92aWRlcnMsXG4gIGdldFByb3ZpZGVyTW9kZWxzLFxuICByZXNvbHZlTW9kZWwsXG4gIGNyZWF0ZU1vZGVsV2l0aEtleSxcbiAgcmVzb2x2ZU1vZGVsU2VsZWN0aW9uLFxufSBmcm9tICcuL3Byb3ZpZGVyLXJlZ2lzdHJ5LmpzJztcbmV4cG9ydCB0eXBlIHsgTW9kZWxTZWxlY3Rpb24sIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24gfSBmcm9tICcuL3Byb3ZpZGVyLXJlZ2lzdHJ5LmpzJztcblxuLy8gR3JvdW5kaW5nIC8gcmV0cmlldmFsIGZvciB0aGUgXCJBc2tcIiBhZ2VudC4gYHRva2VuaXplYCwgYGNodW5rTWFya2Rvd25gIGFuZFxuLy8gYGJ1aWxkR3JvdW5kaW5nSW5kZXhgIGFyZSB0aGUgaW5kZXgtYnVpbGRpbmcgaW50ZXJuYWxzIGBidWlsZERvY3NJbmRleEZyb21GaWxlc2Bcbi8vIGNvbXBvc2VzIOKAlCBjb25zdW1lcnMgaGFuZCBpdCBkb2MgZmlsZXMgYW5kIGdldCBhbiBpbmRleCBiYWNrLlxuZXhwb3J0IHsgYnVpbGREb2NzSW5kZXhGcm9tRmlsZXMgfSBmcm9tICcuL2dyb3VuZGluZy5qcyc7XG5leHBvcnQgdHlwZSB7IEdyb3VuZGluZ0luZGV4LCBEb2NGaWxlIH0gZnJvbSAnLi9ncm91bmRpbmcuanMnO1xuXG4vLyBcIkFza1wiIGFnZW50IOKAlCByZWFkLW9ubHkgaG93LXRvIChSQUcpIGNvcmVcbmV4cG9ydCB7XG4gIGFuc3dlckhvd1RvLFxuICBzdHJlYW1Ib3dUbyxcbiAgYnVpbGRHcm91bmRpbmdDb250ZXh0LFxufSBmcm9tICcuL2Fzay1hZ2VudC5qcyc7XG5leHBvcnQgdHlwZSB7IEFza1NvdXJjZSB9IGZyb20gJy4vYXNrLWFnZW50LmpzJztcblxuLy8gUmUtZXhwb3J0IEFJIFNESyB0eXBlcyBjb25zdW1lcnMgY29tbW9ubHkgbmVlZFxuZXhwb3J0IHR5cGUgeyBMYW5ndWFnZU1vZGVsLCBUb29sU2V0IH0gZnJvbSAnYWknO1xuLy8gZ2VuZXJhdGVUZXh0L3N0cmVhbVRleHQvT3V0cHV0IGZvciBnZW5lcmF0aW9uOyB0b29sL2dlbmVyYXRlT2JqZWN0L3N0ZXBDb3VudElzXG4vLyBmb3IgdGhlIGFnZW50IHRvb2wtY2FsbGluZyBsb29wICh3cml0ZSB0b29scykuXG5leHBvcnQgeyBnZW5lcmF0ZVRleHQsIHN0cmVhbVRleHQsIE91dHB1dCwgdG9vbCwgZ2VuZXJhdGVPYmplY3QsIHN0ZXBDb3VudElzIH0gZnJvbSAnYWknO1xuIl19
|
|
@@ -37,3 +37,37 @@ export declare function resolveModel(providerId: string, modelId: string): Langu
|
|
|
37
37
|
* @throws Error if provider or model is unknown
|
|
38
38
|
*/
|
|
39
39
|
export declare function createModelWithKey(providerId: string, modelId: string, apiKey: string): LanguageModel;
|
|
40
|
+
/** What a caller asked for; every field optional (see {@link resolveModelSelection}). */
|
|
41
|
+
export interface ModelSelection {
|
|
42
|
+
provider?: string;
|
|
43
|
+
model?: string;
|
|
44
|
+
/** Ephemeral bring-your-own key — the request is billed to it, never to a platform key. */
|
|
45
|
+
apiKey?: string;
|
|
46
|
+
/** Platform providers to try, in order, with their first model if the requested one can't be resolved. */
|
|
47
|
+
fallbacks?: string[];
|
|
48
|
+
}
|
|
49
|
+
/** A resolved model plus who actually serves it. */
|
|
50
|
+
export interface ResolvedModelSelection {
|
|
51
|
+
model: LanguageModel;
|
|
52
|
+
provider: string;
|
|
53
|
+
modelId: string;
|
|
54
|
+
/** Set when a fallback provider serves the request: the provider originally asked for. */
|
|
55
|
+
fallbackFrom?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a LanguageModel for a request:
|
|
59
|
+
* - `provider` + `model` → use them (with an optional ephemeral BYO key);
|
|
60
|
+
* - `provider` only → the provider's first catalog model;
|
|
61
|
+
* - `model` only → error (ambiguous — the provider is unknown);
|
|
62
|
+
* - neither → the first env-configured provider (a cloud key or the local
|
|
63
|
+
* OpenAI-compatible endpoint) so AI features work out of the box.
|
|
64
|
+
*
|
|
65
|
+
* If the requested provider/model can't be resolved, `fallbacks` are tried in
|
|
66
|
+
* order with each provider's first model — EXCEPT for a BYO-key request: the
|
|
67
|
+
* fallbacks resolve through the platform's env-configured keys, which would
|
|
68
|
+
* silently spend the platform's AI budget on a request the caller meant to bill
|
|
69
|
+
* to their own key. A BYO failure is terminal.
|
|
70
|
+
*
|
|
71
|
+
* @throws Error when nothing resolves (the original error when fallbacks are exhausted)
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveModelSelection(selection: ModelSelection): ResolvedModelSelection;
|
package/lib/provider-registry.js
CHANGED
|
@@ -52,10 +52,10 @@ const KEYLESS_PROVIDERS = new Set(['amazon-bedrock']);
|
|
|
52
52
|
* A configured region is NOT such a signal: every deploy target sets
|
|
53
53
|
* `AWS_REGION` (it is needed for pipeline synthesis), including minikube and
|
|
54
54
|
* docker-compose, where nothing grants the pod AWS credentials. Gating Bedrock
|
|
55
|
-
* on the region alone
|
|
56
|
-
* provider, `
|
|
57
|
-
* with "Could not load credentials from any providers" — an
|
|
58
|
-
* that has nothing to do with what the user asked.
|
|
55
|
+
* on the region alone would advertise it on local installs as the ONLY
|
|
56
|
+
* provider, `resolveModelSelection` would pick it as the default, and every Ask
|
|
57
|
+
* turn would die with "Could not load credentials from any providers" — an
|
|
58
|
+
* error about AWS that has nothing to do with what the user asked.
|
|
59
59
|
*
|
|
60
60
|
* Each check below corresponds to a way `fromNodeProviderChain()` can succeed:
|
|
61
61
|
* - static keys in the environment;
|
|
@@ -191,4 +191,63 @@ export function createModelWithKey(providerId, modelId, apiKey) {
|
|
|
191
191
|
}
|
|
192
192
|
return factory(apiKey)(modelId);
|
|
193
193
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXItcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQiwyQkFBMkIsR0FHNUIsTUFBTSw0QkFBNEIsQ0FBQztBQVdwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztBQUNsRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsaUZBQWlGO0FBQ2pGLGtGQUFrRjtBQUNsRixpRUFBaUU7QUFDakUsTUFBTSxrQkFBa0IsR0FBeUU7SUFDL0YsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyx3QkFBd0Is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VSxPQUFPLG9DQUFvQyxVQUFVLGlCQUFpQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLE9BQU87UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRXpFLGlGQUFpRjtJQUNqRixnRkFBZ0Y7SUFDaEYsaUZBQWlGO0lBQ2pGLDZFQUE2RTtJQUM3RSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYixnQkFBZ0IsVUFBVSxpRUFBaUU7Z0JBQ3pGLG9GQUFvRixDQUN2RixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlQW1hem9uQmVkcm9jayB9IGZyb20gJ0BhaS1zZGsvYW1hem9uLWJlZHJvY2snO1xuaW1wb3J0IHsgY3JlYXRlQW50aHJvcGljIH0gZnJvbSAnQGFpLXNkay9hbnRocm9waWMnO1xuaW1wb3J0IHsgY3JlYXRlR29vZ2xlR2VuZXJhdGl2ZUFJIH0gZnJvbSAnQGFpLXNkay9nb29nbGUnO1xuaW1wb3J0IHsgY3JlYXRlT3BlbkFJIH0gZnJvbSAnQGFpLXNkay9vcGVuYWknO1xuaW1wb3J0IHsgY3JlYXRlT3BlbkFJQ29tcGF0aWJsZSB9IGZyb20gJ0BhaS1zZGsvb3BlbmFpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHsgY3JlYXRlWGFpIH0gZnJvbSAnQGFpLXNkay94YWknO1xuaW1wb3J0IHsgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHtcbiAgQUlfUFJPVklERVJfQ0FUQUxPRyxcbiAgQUlfUFJPVklERVJfRU5WX1ZBUlMsXG4gIE9QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lELFxuICBnZXRBSVByb3ZpZGVyTW9kZWxzLFxuICBnZXRPcGVuQUlDb21wYXRpYmxlUHJvdmlkZXIsXG4gIHR5cGUgQUlQcm92aWRlckluZm8sXG4gIHR5cGUgQUlNb2RlbEluZm8sXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgTGFuZ3VhZ2VNb2RlbCB9IGZyb20gJ2FpJztcblxuLy8gUHJvdmlkZXIgUmVnaXN0cnlcblxuLyoqIFJlZ2lzdGVyZWQgcHJvdmlkZXIgd2l0aCBtb2RlbCBmYWN0b3J5IGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckVudHJ5IHtcbiAgaW5mbzogQUlQcm92aWRlckluZm87XG4gIGNyZWF0ZU1vZGVsOiAobW9kZWxJZDogc3RyaW5nKSA9PiBMYW5ndWFnZU1vZGVsO1xufVxuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBQcm92aWRlckVudHJ5PigpO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vIFByb3ZpZGVyIOKGkiBtb2RlbC1mYWN0b3J5IG1hcC4gYGtleWAgaXMgb3B0aW9uYWwgc28ga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2ssXG4vLyB2aWEgdGhlIHJ1bnRpbWUgSUFNIHJvbGUpIGFuZCBrZXktYmFzZWQgcHJvdmlkZXJzIHNoYXJlIG9uZSBzaWduYXR1cmUuIERlY2xhcmVkXG4vLyBvbmNlIGFuZCBjb25zdW1lZCBieSBCT1RIIGluaXRSZWdpc3RyeSBhbmQgY3JlYXRlTW9kZWxXaXRoS2V5LlxuY29uc3QgUFJPVklERVJfRkFDVE9SSUVTOiBSZWNvcmQ8c3RyaW5nLCAoa2V5Pzogc3RyaW5nKSA9PiAobW9kZWxJZDogc3RyaW5nKSA9PiBMYW5ndWFnZU1vZGVsPiA9IHtcbiAgJ2FudGhyb3BpYyc6IChrZXkpID0+IGNyZWF0ZUFudGhyb3BpYyh7IGFwaUtleToga2V5IH0pLFxuICAnb3BlbmFpJzogKGtleSkgPT4gY3JlYXRlT3BlbkFJKHsgYXBpS2V5OiBrZXkgfSksXG4gICdnb29nbGUnOiAoa2V5KSA9PiBjcmVhdGVHb29nbGVHZW5lcmF0aXZlQUkoeyBhcGlLZXk6IGtleSB9KSxcbiAgJ3hhaSc6IChrZXkpID0+IGNyZWF0ZVhhaSh7IGFwaUtleToga2V5IH0pLFxuICAvLyBCZWRyb2NrIGF1dGhlbnRpY2F0ZXMgd2l0aCB0aGUgUlVOVElNRSdzIElBTSByb2xlLCBhbmQgdGhlIGFpLXNkayBwcm92aWRlclxuICAvLyBkb2VzIE5PVCB3YWxrIHRoZSBBV1MgY3JlZGVudGlhbCBjaGFpbiBvbiBpdHMgb3duIOKAlCBiYXJlIGBjcmVhdGVBbWF6b25CZWRyb2NrKClgXG4gIC8vIHJlYWRzIG9ubHkgYEFXU19BQ0NFU1NfS0VZX0lEYC9gQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZYCBhbmQgb3RoZXJ3aXNlIHRocm93c1xuICAvLyBcIkFXUyBTaWdWNCBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBBV1MgY3JlZGVudGlhbHNcIiBhdCBjYWxsIHRpbWUuIEhhbmRpbmcgaXRcbiAgLy8gdGhlIHN0YW5kYXJkIGNoYWluIHJlc29sdmVzIEVLUyBQb2QgSWRlbnRpdHksIElSU0EsIEVDUyB0YXNrIHJvbGVzLCB0aGUgRUMyXG4gIC8vIGluc3RhbmNlIHByb2ZpbGUsIFNTTyBhbmQgc3RhdGljIGVudiBrZXlzIOKAlCBpLmUuIGV2ZXJ5IHdheSB0aGlzIHBsYXRmb3JtIGlzXG4gIC8vIGFjdHVhbGx5IGRlcGxveWVkLiBCdWlsdCBvbmNlIHBlciBmYWN0b3J5IGNhbGw7IHRoZSBjaGFpbiBjYWNoZXMgaW50ZXJuYWxseVxuICAvLyBhbmQgcmVmcmVzaGVzIGV4cGlyaW5nIHJvbGUgY3JlZGVudGlhbHMgb24gaXRzIG93bi5cbiAgJ2FtYXpvbi1iZWRyb2NrJzogKCkgPT4gY3JlYXRlQW1hem9uQmVkcm9jayh7IGNyZWRlbnRpYWxQcm92aWRlcjogZnJvbU5vZGVQcm92aWRlckNoYWluKCkgfSksXG4gIC8vIFNlbGYtaG9zdGVkIE9wZW5BSS1jb21wYXRpYmxlIGVuZHBvaW50IChEb2NrZXIgbW9kZWwgaW1hZ2UgLyBPbGxhbWEgLyB2TExNKS5cbiAgLy8gVGhlIGVuZHBvaW50IGlzIGRlcGxveW1lbnQtZGVmaW5lZCB2aWEgT1BFTkFJX0NPTVBBVElCTEVfQkFTRV9VUkw7IGxvY2FsIHNlcnZlcnNcbiAgLy8gdXN1YWxseSBpZ25vcmUgdGhlIGtleSwgc28gYSBwbGFjZWhvbGRlciBpcyBzZW50IHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICBbT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSURdOiAoa2V5KSA9PiB7XG4gICAgY29uc3QgYmFzZVVSTCA9IHByb2Nlc3MuZW52Lk9QRU5BSV9DT01QQVRJQkxFX0JBU0VfVVJMO1xuICAgIGlmICghYmFzZVVSTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPUEVOQUlfQ09NUEFUSUJMRV9CQVNFX1VSTCBpcyBub3Qgc2V0OyBjYW5ub3QgYnVpbGQgdGhlIGxvY2FsIChPcGVuQUktY29tcGF0aWJsZSkgcHJvdmlkZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlT3BlbkFJQ29tcGF0aWJsZSh7XG4gICAgICBuYW1lOiBPUEVOQUlfQ09NUEFUSUJMRV9QUk9WSURFUl9JRCxcbiAgICAgIGJhc2VVUkwsXG4gICAgICBhcGlLZXk6IGtleSA/PyBwcm9jZXNzLmVudi5PUEVOQUlfQ09NUEFUSUJMRV9BUElfS0VZID8/ICdub3QtbmVlZGVkJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKG1vZGVsSWQ6IHN0cmluZykgPT4gcHJvdmlkZXIobW9kZWxJZCk7XG4gIH0sXG59O1xuXG4vKiogUHJvdmlkZXJzIHRoYXQgYXV0aGVudGljYXRlIFdJVEhPVVQgYW4gQVBJIGtleSAoQmVkcm9jayB1c2VzIHRoZSBJQU0gcm9sZSkuICovXG5jb25zdCBLRVlMRVNTX1BST1ZJREVSUyA9IG5ldyBTZXQoWydhbWF6b24tYmVkcm9jayddKTtcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBydW50aW1lIGhhcyBhbiBBV1MgY3JlZGVudGlhbCBTT1VSQ0UgdGhlIHByb3ZpZGVyIGNoYWluIGNhblxuICogYWN0dWFsbHkgcmVzb2x2ZS5cbiAqXG4gKiBBIGNvbmZpZ3VyZWQgcmVnaW9uIGlzIE5PVCBzdWNoIGEgc2lnbmFsOiBldmVyeSBkZXBsb3kgdGFyZ2V0IHNldHNcbiAqIGBBV1NfUkVHSU9OYCAoaXQgaXMgbmVlZGVkIGZvciBwaXBlbGluZSBzeW50aGVzaXMpLCBpbmNsdWRpbmcgbWluaWt1YmUgYW5kXG4gKiBkb2NrZXItY29tcG9zZSwgd2hlcmUgbm90aGluZyBncmFudHMgdGhlIHBvZCBBV1MgY3JlZGVudGlhbHMuIEdhdGluZyBCZWRyb2NrXG4gKiBvbiB0aGUgcmVnaW9uIGFsb25lIHRoZXJlZm9yZSBhZHZlcnRpc2VkIGl0IG9uIGxvY2FsIGluc3RhbGxzIGFzIHRoZSBPTkxZXG4gKiBwcm92aWRlciwgYHJlc29sdmVBc2tNb2RlbGAgcGlja2VkIGl0IGFzIHRoZSBkZWZhdWx0LCBhbmQgZXZlcnkgQXNrIHR1cm4gZGllZFxuICogd2l0aCBcIkNvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gYW55IHByb3ZpZGVyc1wiIOKAlCBhbiBlcnJvciBhYm91dCBBV1NcbiAqIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZSB1c2VyIGFza2VkLlxuICpcbiAqIEVhY2ggY2hlY2sgYmVsb3cgY29ycmVzcG9uZHMgdG8gYSB3YXkgYGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpYCBjYW4gc3VjY2VlZDpcbiAqICAgLSBzdGF0aWMga2V5cyBpbiB0aGUgZW52aXJvbm1lbnQ7XG4gKiAgIC0gRUtTIFBvZCBJZGVudGl0eSAvIEVDUyB0YXNrIHJvbGUgKHRoZSBhZ2VudCBpbmplY3RzIGEgY3JlZGVudGlhbHMgVVJJKTtcbiAqICAgLSBJUlNBIChhIHByb2plY3RlZCB3ZWItaWRlbnRpdHkgdG9rZW4gZmlsZSk7XG4gKiAgIC0gYSBzaGFyZWQtY29uZmlnIHByb2ZpbGUsIGZvciBhIGRldmVsb3BlciBydW5uaW5nIGFnYWluc3QgcmVhbCBBV1MuXG4gKlxuICogVGhlIEVDMiBpbnN0YW5jZSBwcm9maWxlIGlzIHRoZSBvbmUgY2FzZSB3aXRoIE5PIGVudmlyb25tZW50IG1hcmtlciDigJQgaXRzXG4gKiBjcmVkZW50aWFscyBjb21lIGZyb20gSU1EUyBhdCBjYWxsIHRpbWUg4oCUIHNvIGl0IHRha2VzIHRoZSBleHBsaWNpdFxuICogYEJFRFJPQ0tfRU5BQkxFRD10cnVlYCBvcHQtaW4gcmF0aGVyIHRoYW4gYmVpbmcgZ3Vlc3NlZCBhdC5cbiAqL1xuZnVuY3Rpb24gYXdzQ3JlZGVudGlhbFNvdXJjZUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRFxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19DT05UQUlORVJfQ1JFREVOVElBTFNfRlVMTF9VUklcbiAgICB8fCBwcm9jZXNzLmVudi5BV1NfQ09OVEFJTkVSX0NSRURFTlRJQUxTX1JFTEFUSVZFX1VSSVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19QUk9GSUxFXG4gICAgfHwgcHJvY2Vzcy5lbnYuQkVEUk9DS19FTkFCTEVEID09PSAndHJ1ZSdcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEga2V5bGVzcyBwcm92aWRlciAoQmVkcm9jaykgc2hvdWxkIGJlIGFkdmVydGlzZWQuIEl0IGF1dGhlbnRpY2F0ZXNcbiAqIHdpdGggdGhlIHJ1bnRpbWUncyBJQU0gcm9sZSByYXRoZXIgdGhhbiBhbiBBUEkga2V5LCBzbyBpdCBuZWVkcyBCT1RIIGEgcmVnaW9uXG4gKiB0byBjYWxsIGFuZCBhIHJlc29sdmFibGUgY3JlZGVudGlhbCBzb3VyY2Ug4oCUIHNlZVxuICoge0BsaW5rIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkfSBmb3Igd2h5IHRoZSByZWdpb24gYWxvbmUgaXMgbm90IGVub3VnaC5cbiAqL1xuZnVuY3Rpb24ga2V5bGVzc1Byb3ZpZGVyQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEocHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04pICYmIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkKCk7XG59XG5cbi8qKlxuICogTGF6aWx5IGluaXRpYWxpemUgdGhlIHByb3ZpZGVyIHJlZ2lzdHJ5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBLZXktYmFzZWRcbiAqIHByb3ZpZGVycyByZWdpc3RlciBvbmx5IHdoZW4gdGhlaXIga2V5IGlzIHNldDsga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spXG4gKiByZWdpc3RlciB3aGVuIGFuIEFXUyByZWdpb24gaXMgY29uZmlndXJlZC5cbiAqL1xuZnVuY3Rpb24gaW5pdFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyhBSV9QUk9WSURFUl9DQVRBTE9HKSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBQUk9WSURFUl9GQUNUT1JJRVNbaWRdO1xuICAgIGlmICghZmFjdG9yeSkgY29udGludWU7XG4gICAgY29uc3QgZW52VmFyID0gQUlfUFJPVklERVJfRU5WX1ZBUlNbaWRdO1xuICAgIGNvbnN0IGFwaUtleSA9IGVudlZhciA/IHByb2Nlc3MuZW52W2VudlZhcl0gOiB1bmRlZmluZWQ7XG4gICAgLy8gQSBrZXlsZXNzIHByb3ZpZGVyIGlzIGdhdGVkIFNPTEVMWSBieSBpdHMgb3duIGF2YWlsYWJpbGl0eSBjaGVjayDigJQgbmV2ZXJcbiAgICAvLyBieSB0aGUgcHJlc2VuY2Ugb2YgYGVudlZhcmAuIEJlZHJvY2sncyBtYXBwZWQgZW52IHZhciBpc1xuICAgIC8vIGBBV1NfQUNDRVNTX0tFWV9JRGAsIHNvIHRoZSBrZXkgcGF0aCB3b3VsZCBvdGhlcndpc2UgcmVnaXN0ZXIgaXQgd2hlbmV2ZXJcbiAgICAvLyBzdGF0aWMga2V5cyBleGlzdCwgc2tpcHBpbmcgdGhlIHJlZ2lvbiByZXF1aXJlbWVudCBhbmQgcHJvZHVjaW5nIGFcbiAgICAvLyBwcm92aWRlciB0aGF0IGZhaWxzIGF0IGNhbGwgdGltZSBmb3Igd2FudCBvZiBhIHJlZ2lvbi5cbiAgICBjb25zdCB1c2FibGUgPSBLRVlMRVNTX1BST1ZJREVSUy5oYXMoaWQpID8ga2V5bGVzc1Byb3ZpZGVyQXZhaWxhYmxlKCkgOiAhIWFwaUtleTtcbiAgICBpZiAodXNhYmxlKSB7XG4gICAgICByZWdpc3RyeS5zZXQoaWQsIHsgaW5mbywgY3JlYXRlTW9kZWw6IGZhY3RvcnkoYXBpS2V5KSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgT3BlbkFJLWNvbXBhdGlibGUgKGxvY2FsIC8gc2VsZi1ob3N0ZWQpIHByb3ZpZGVyIGlzIG5vdCBpbiB0aGUgc3RhdGljXG4gIC8vIGNhdGFsb2cg4oCUIGl0cyBlbmRwb2ludCBhbmQgbW9kZWxzIGFyZSBkZXBsb3ltZW50LWRlZmluZWQuIFJlZ2lzdGVyIGl0IHdoZW4gYVxuICAvLyBiYXNlIFVSTCBpcyBjb25maWd1cmVkOyBpdHMgXCJpcyBjb25maWd1cmVkXCIgc2lnbmFsIGlzIHRoZSBiYXNlIFVSTCwgbm90IGEga2V5LlxuICBjb25zdCBjb21wYXQgPSBnZXRPcGVuQUlDb21wYXRpYmxlUHJvdmlkZXIoKTtcbiAgaWYgKGNvbXBhdCkge1xuICAgIHJlZ2lzdHJ5LnNldChjb21wYXQuaWQsIHtcbiAgICAgIGluZm86IGNvbXBhdCxcbiAgICAgIGNyZWF0ZU1vZGVsOiBQUk9WSURFUl9GQUNUT1JJRVNbT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSURdKHByb2Nlc3MuZW52Lk9QRU5BSV9DT01QQVRJQkxFX0FQSV9LRVkpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGlzdCBvZiBwcm92aWRlcnMgdGhhdCBoYXZlIEFQSSBrZXlzIGNvbmZpZ3VyZWQgdmlhIGVudiB2YXJzLlxuICpcbiAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaW5mbyB3aXRoIG1vZGVsIGxpc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQcm92aWRlcnMoKTogQUlQcm92aWRlckluZm9bXSB7XG4gIGluaXRSZWdpc3RyeSgpO1xuICByZXR1cm4gQXJyYXkuZnJvbShyZWdpc3RyeS52YWx1ZXMoKSkubWFwKChlKSA9PiBlLmluZm8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1vZGVsIGxpc3QgZm9yIGEgZ2l2ZW4gcHJvdmlkZXIgSUQgKHJlZ2FyZGxlc3Mgb2YgZW52IHZhciBjb25maWcpLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllclxuICogQHJldHVybnMgQXJyYXkgb2YgbW9kZWxzLCBvciBlbXB0eSBhcnJheSBpZiBwcm92aWRlciBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlck1vZGVscyhwcm92aWRlcklkOiBzdHJpbmcpOiBBSU1vZGVsSW5mb1tdIHtcbiAgcmV0dXJuIGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbmd1YWdlTW9kZWwgZnJvbSB0aGUgcmVnaXN0cnkgZm9yIGEgY29uZmlndXJlZCBwcm92aWRlci5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBtb2RlbElkIC0gTW9kZWwgaWRlbnRpZmllclxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBpcyBub3QgY29uZmlndXJlZCBvciBtb2RlbCBpcyBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBMYW5ndWFnZU1vZGVsIHtcbiAgaW5pdFJlZ2lzdHJ5KCk7XG4gIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnkuZ2V0KHByb3ZpZGVySWQpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIiBpcyBub3QgY29uZmlndXJlZC4gU2V0IHRoZSBjb3JyZXNwb25kaW5nIEFQSSBrZXkgZW52aXJvbm1lbnQgdmFyaWFibGUuYCk7XG4gIH1cbiAgaWYgKCFlbnRyeS5pbmZvLm1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IGVudHJ5LmluZm8ubW9kZWxzLm1hcCgobSkgPT4gbS5pZCkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbElkfVwiIGlzIG5vdCBhdmFpbGFibGUgZm9yIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBBdmFpbGFibGUgbW9kZWxzOiAke2F2YWlsYWJsZX1gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuY3JlYXRlTW9kZWwobW9kZWxJZCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcG9yYXJ5IExhbmd1YWdlTW9kZWwgdXNpbmcgYSBjdXN0b20gQVBJIGtleSAobm90IGNhY2hlZCBpbiByZWdpc3RyeSkuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0gbW9kZWxJZCAtIE1vZGVsIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBhcGlLZXkgLSBDdXN0b20gQVBJIGtleVxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBvciBtb2RlbCBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFdpdGhLZXkocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcsIGFwaUtleTogc3RyaW5nKTogTGFuZ3VhZ2VNb2RlbCB7XG4gIGNvbnN0IG1vZGVscyA9IGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBTdXBwb3J0ZWQ6ICR7T2JqZWN0LmtleXMoQUlfUFJPVklERVJfQ0FUQUxPRykuam9pbignLCAnKX1gKTtcbiAgfVxuICBpZiAoIW1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsSWR9XCIgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIuIEF2YWlsYWJsZTogJHttb2RlbHMubWFwKChtKSA9PiBtLmlkKS5qb2luKCcsICcpfWApO1xuICB9XG5cbiAgY29uc3QgZmFjdG9yeSA9IFBST1ZJREVSX0ZBQ1RPUklFU1twcm92aWRlcklkXTtcbiAgaWYgKCFmYWN0b3J5KSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiYCk7XG5cbiAgLy8gS2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spIGF1dGhlbnRpY2F0ZSB2aWEgdGhlIHJ1bnRpbWUgSUFNIHJvbGUgYW5kIElHTk9SRSBhXG4gIC8vIHN1cHBsaWVkIGtleS4gU2lsZW50bHkgZHJvcHBpbmcgdGhlIGtleSBhbmQgcmV0dXJuaW5nIGEgbW9kZWwgd291bGQgZGVmZXIgdGhlXG4gIC8vIGZhaWx1cmUgdG8gbW9kZWwtY2FsbCB0aW1lIHdoZW4gdGhlIElBTSByb2xlL3JlZ2lvbiBpc24ndCBjb25maWd1cmVkOyBndWFyZCBpdFxuICAvLyBoZXJlIHNvIHRoZSBmYWlsdXJlIGlzIGNsZWFyIGF0IGNvbmZpZyB0aW1lIChtaXJyb3JzIHJlc29sdmVNb2RlbCdzIGdhdGUpLlxuICBpZiAoS0VZTEVTU19QUk9WSURFUlMuaGFzKHByb3ZpZGVySWQpKSB7XG4gICAgaWYgKCFrZXlsZXNzUHJvdmlkZXJBdmFpbGFibGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQUkgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIgYXV0aGVudGljYXRlcyB2aWEgdGhlIEFXUyBJQU0gcm9sZSAodGhlIEFQSSBrZXkgaXMgaWdub3JlZCk7IGAgK1xuICAgICAgICAgICdzZXQgQVdTX1JFR0lPTiAob3IgQVdTX0RFRkFVTFRfUkVHSU9OKSBzbyB0aGUgcnVudGltZSBjcmVkZW50aWFscyBjYW4gYmUgcmVzb2x2ZWQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5KCkobW9kZWxJZCk7XG4gIH1cbiAgcmV0dXJuIGZhY3RvcnkoYXBpS2V5KShtb2RlbElkKTtcbn1cbiJdfQ==
|
|
194
|
+
/**
|
|
195
|
+
* Resolve a LanguageModel for a request:
|
|
196
|
+
* - `provider` + `model` → use them (with an optional ephemeral BYO key);
|
|
197
|
+
* - `provider` only → the provider's first catalog model;
|
|
198
|
+
* - `model` only → error (ambiguous — the provider is unknown);
|
|
199
|
+
* - neither → the first env-configured provider (a cloud key or the local
|
|
200
|
+
* OpenAI-compatible endpoint) so AI features work out of the box.
|
|
201
|
+
*
|
|
202
|
+
* If the requested provider/model can't be resolved, `fallbacks` are tried in
|
|
203
|
+
* order with each provider's first model — EXCEPT for a BYO-key request: the
|
|
204
|
+
* fallbacks resolve through the platform's env-configured keys, which would
|
|
205
|
+
* silently spend the platform's AI budget on a request the caller meant to bill
|
|
206
|
+
* to their own key. A BYO failure is terminal.
|
|
207
|
+
*
|
|
208
|
+
* @throws Error when nothing resolves (the original error when fallbacks are exhausted)
|
|
209
|
+
*/
|
|
210
|
+
export function resolveModelSelection(selection) {
|
|
211
|
+
const { provider, model, apiKey, fallbacks } = selection;
|
|
212
|
+
if (!provider) {
|
|
213
|
+
if (model) {
|
|
214
|
+
throw new Error('A `model` was supplied without a `provider` — specify both, or neither.');
|
|
215
|
+
}
|
|
216
|
+
const first = getAvailableProviders()[0];
|
|
217
|
+
const firstModel = first?.models[0]?.id;
|
|
218
|
+
if (!first || !firstModel) {
|
|
219
|
+
throw new Error('AI is not configured: no provider API key is set and OPENAI_COMPATIBLE_BASE_URL is unset.');
|
|
220
|
+
}
|
|
221
|
+
return { model: resolveModel(first.id, firstModel), provider: first.id, modelId: firstModel };
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const modelId = model ?? getProviderModels(provider)[0]?.id;
|
|
225
|
+
if (!modelId) {
|
|
226
|
+
throw new Error(`AI provider "${provider}" has no configured models.`);
|
|
227
|
+
}
|
|
228
|
+
const resolved = apiKey ? createModelWithKey(provider, modelId, apiKey) : resolveModel(provider, modelId);
|
|
229
|
+
return { model: resolved, provider, modelId };
|
|
230
|
+
}
|
|
231
|
+
catch (primaryError) {
|
|
232
|
+
if (apiKey || !fallbacks?.length)
|
|
233
|
+
throw primaryError;
|
|
234
|
+
for (const fallbackProvider of fallbacks) {
|
|
235
|
+
const fallbackModel = getAvailableProviders().find((p) => p.id === fallbackProvider)?.models[0]?.id;
|
|
236
|
+
if (!fallbackModel)
|
|
237
|
+
continue;
|
|
238
|
+
try {
|
|
239
|
+
return {
|
|
240
|
+
model: resolveModel(fallbackProvider, fallbackModel),
|
|
241
|
+
provider: fallbackProvider,
|
|
242
|
+
modelId: fallbackModel,
|
|
243
|
+
fallbackFrom: provider,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
throw primaryError;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXItcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQiwyQkFBMkIsR0FHNUIsTUFBTSw0QkFBNEIsQ0FBQztBQVdwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztBQUNsRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsaUZBQWlGO0FBQ2pGLGtGQUFrRjtBQUNsRixpRUFBaUU7QUFDakUsTUFBTSxrQkFBa0IsR0FBeUU7SUFDL0YsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyx3QkFBd0Is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QUUsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEcsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsU0FBUztZQUM3QixJQUFJLENBQUM7Z0JBQ0gsT0FBTztvQkFDTCxLQUFLLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztvQkFDcEQsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLFlBQVksRUFBRSxRQUFRO2lCQUN2QixDQUFDO1lBQ0osQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxTQUFTO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFlBQVksQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVBbWF6b25CZWRyb2NrIH0gZnJvbSAnQGFpLXNkay9hbWF6b24tYmVkcm9jayc7XG5pbXBvcnQgeyBjcmVhdGVBbnRocm9waWMgfSBmcm9tICdAYWktc2RrL2FudGhyb3BpYyc7XG5pbXBvcnQgeyBjcmVhdGVHb29nbGVHZW5lcmF0aXZlQUkgfSBmcm9tICdAYWktc2RrL2dvb2dsZSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVuQUkgfSBmcm9tICdAYWktc2RrL29wZW5haSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVuQUlDb21wYXRpYmxlIH0gZnJvbSAnQGFpLXNkay9vcGVuYWktY29tcGF0aWJsZSc7XG5pbXBvcnQgeyBjcmVhdGVYYWkgfSBmcm9tICdAYWktc2RrL3hhaSc7XG5pbXBvcnQgeyBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4gfSBmcm9tICdAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycyc7XG5pbXBvcnQge1xuICBBSV9QUk9WSURFUl9DQVRBTE9HLFxuICBBSV9QUk9WSURFUl9FTlZfVkFSUyxcbiAgT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSUQsXG4gIGdldEFJUHJvdmlkZXJNb2RlbHMsXG4gIGdldE9wZW5BSUNvbXBhdGlibGVQcm92aWRlcixcbiAgdHlwZSBBSVByb3ZpZGVySW5mbyxcbiAgdHlwZSBBSU1vZGVsSW5mbyxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBMYW5ndWFnZU1vZGVsIH0gZnJvbSAnYWknO1xuXG4vLyBQcm92aWRlciBSZWdpc3RyeVxuXG4vKiogUmVnaXN0ZXJlZCBwcm92aWRlciB3aXRoIG1vZGVsIGZhY3RvcnkgZnVuY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRW50cnkge1xuICBpbmZvOiBBSVByb3ZpZGVySW5mbztcbiAgY3JlYXRlTW9kZWw6IChtb2RlbElkOiBzdHJpbmcpID0+IExhbmd1YWdlTW9kZWw7XG59XG5cbmNvbnN0IHJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFByb3ZpZGVyRW50cnk+KCk7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuLy8gUHJvdmlkZXIg4oaSIG1vZGVsLWZhY3RvcnkgbWFwLiBga2V5YCBpcyBvcHRpb25hbCBzbyBrZXlsZXNzIHByb3ZpZGVycyAoQmVkcm9jayxcbi8vIHZpYSB0aGUgcnVudGltZSBJQU0gcm9sZSkgYW5kIGtleS1iYXNlZCBwcm92aWRlcnMgc2hhcmUgb25lIHNpZ25hdHVyZS4gRGVjbGFyZWRcbi8vIG9uY2UgYW5kIGNvbnN1bWVkIGJ5IEJPVEggaW5pdFJlZ2lzdHJ5IGFuZCBjcmVhdGVNb2RlbFdpdGhLZXkuXG5jb25zdCBQUk9WSURFUl9GQUNUT1JJRVM6IFJlY29yZDxzdHJpbmcsIChrZXk/OiBzdHJpbmcpID0+IChtb2RlbElkOiBzdHJpbmcpID0+IExhbmd1YWdlTW9kZWw+ID0ge1xuICAnYW50aHJvcGljJzogKGtleSkgPT4gY3JlYXRlQW50aHJvcGljKHsgYXBpS2V5OiBrZXkgfSksXG4gICdvcGVuYWknOiAoa2V5KSA9PiBjcmVhdGVPcGVuQUkoeyBhcGlLZXk6IGtleSB9KSxcbiAgJ2dvb2dsZSc6IChrZXkpID0+IGNyZWF0ZUdvb2dsZUdlbmVyYXRpdmVBSSh7IGFwaUtleToga2V5IH0pLFxuICAneGFpJzogKGtleSkgPT4gY3JlYXRlWGFpKHsgYXBpS2V5OiBrZXkgfSksXG4gIC8vIEJlZHJvY2sgYXV0aGVudGljYXRlcyB3aXRoIHRoZSBSVU5USU1FJ3MgSUFNIHJvbGUsIGFuZCB0aGUgYWktc2RrIHByb3ZpZGVyXG4gIC8vIGRvZXMgTk9UIHdhbGsgdGhlIEFXUyBjcmVkZW50aWFsIGNoYWluIG9uIGl0cyBvd24g4oCUIGJhcmUgYGNyZWF0ZUFtYXpvbkJlZHJvY2soKWBcbiAgLy8gcmVhZHMgb25seSBgQVdTX0FDQ0VTU19LRVlfSURgL2BBV1NfU0VDUkVUX0FDQ0VTU19LRVlgIGFuZCBvdGhlcndpc2UgdGhyb3dzXG4gIC8vIFwiQVdTIFNpZ1Y0IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVzIEFXUyBjcmVkZW50aWFsc1wiIGF0IGNhbGwgdGltZS4gSGFuZGluZyBpdFxuICAvLyB0aGUgc3RhbmRhcmQgY2hhaW4gcmVzb2x2ZXMgRUtTIFBvZCBJZGVudGl0eSwgSVJTQSwgRUNTIHRhc2sgcm9sZXMsIHRoZSBFQzJcbiAgLy8gaW5zdGFuY2UgcHJvZmlsZSwgU1NPIGFuZCBzdGF0aWMgZW52IGtleXMg4oCUIGkuZS4gZXZlcnkgd2F5IHRoaXMgcGxhdGZvcm0gaXNcbiAgLy8gYWN0dWFsbHkgZGVwbG95ZWQuIEJ1aWx0IG9uY2UgcGVyIGZhY3RvcnkgY2FsbDsgdGhlIGNoYWluIGNhY2hlcyBpbnRlcm5hbGx5XG4gIC8vIGFuZCByZWZyZXNoZXMgZXhwaXJpbmcgcm9sZSBjcmVkZW50aWFscyBvbiBpdHMgb3duLlxuICAnYW1hem9uLWJlZHJvY2snOiAoKSA9PiBjcmVhdGVBbWF6b25CZWRyb2NrKHsgY3JlZGVudGlhbFByb3ZpZGVyOiBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4oKSB9KSxcbiAgLy8gU2VsZi1ob3N0ZWQgT3BlbkFJLWNvbXBhdGlibGUgZW5kcG9pbnQgKERvY2tlciBtb2RlbCBpbWFnZSAvIE9sbGFtYSAvIHZMTE0pLlxuICAvLyBUaGUgZW5kcG9pbnQgaXMgZGVwbG95bWVudC1kZWZpbmVkIHZpYSBPUEVOQUlfQ09NUEFUSUJMRV9CQVNFX1VSTDsgbG9jYWwgc2VydmVyc1xuICAvLyB1c3VhbGx5IGlnbm9yZSB0aGUga2V5LCBzbyBhIHBsYWNlaG9sZGVyIGlzIHNlbnQgd2hlbiBub25lIGlzIGNvbmZpZ3VyZWQuXG4gIFtPUEVOQUlfQ09NUEFUSUJMRV9QUk9WSURFUl9JRF06IChrZXkpID0+IHtcbiAgICBjb25zdCBiYXNlVVJMID0gcHJvY2Vzcy5lbnYuT1BFTkFJX0NPTVBBVElCTEVfQkFTRV9VUkw7XG4gICAgaWYgKCFiYXNlVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09QRU5BSV9DT01QQVRJQkxFX0JBU0VfVVJMIGlzIG5vdCBzZXQ7IGNhbm5vdCBidWlsZCB0aGUgbG9jYWwgKE9wZW5BSS1jb21wYXRpYmxlKSBwcm92aWRlci4nKTtcbiAgICB9XG4gICAgY29uc3QgcHJvdmlkZXIgPSBjcmVhdGVPcGVuQUlDb21wYXRpYmxlKHtcbiAgICAgIG5hbWU6IE9QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lELFxuICAgICAgYmFzZVVSTCxcbiAgICAgIGFwaUtleToga2V5ID8/IHByb2Nlc3MuZW52Lk9QRU5BSV9DT01QQVRJQkxFX0FQSV9LRVkgPz8gJ25vdC1uZWVkZWQnLFxuICAgIH0pO1xuICAgIHJldHVybiAobW9kZWxJZDogc3RyaW5nKSA9PiBwcm92aWRlcihtb2RlbElkKTtcbiAgfSxcbn07XG5cbi8qKiBQcm92aWRlcnMgdGhhdCBhdXRoZW50aWNhdGUgV0lUSE9VVCBhbiBBUEkga2V5IChCZWRyb2NrIHVzZXMgdGhlIElBTSByb2xlKS4gKi9cbmNvbnN0IEtFWUxFU1NfUFJPVklERVJTID0gbmV3IFNldChbJ2FtYXpvbi1iZWRyb2NrJ10pO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgaGFzIGFuIEFXUyBjcmVkZW50aWFsIFNPVVJDRSB0aGUgcHJvdmlkZXIgY2hhaW4gY2FuXG4gKiBhY3R1YWxseSByZXNvbHZlLlxuICpcbiAqIEEgY29uZmlndXJlZCByZWdpb24gaXMgTk9UIHN1Y2ggYSBzaWduYWw6IGV2ZXJ5IGRlcGxveSB0YXJnZXQgc2V0c1xuICogYEFXU19SRUdJT05gIChpdCBpcyBuZWVkZWQgZm9yIHBpcGVsaW5lIHN5bnRoZXNpcyksIGluY2x1ZGluZyBtaW5pa3ViZSBhbmRcbiAqIGRvY2tlci1jb21wb3NlLCB3aGVyZSBub3RoaW5nIGdyYW50cyB0aGUgcG9kIEFXUyBjcmVkZW50aWFscy4gR2F0aW5nIEJlZHJvY2tcbiAqIG9uIHRoZSByZWdpb24gYWxvbmUgd291bGQgYWR2ZXJ0aXNlIGl0IG9uIGxvY2FsIGluc3RhbGxzIGFzIHRoZSBPTkxZXG4gKiBwcm92aWRlciwgYHJlc29sdmVNb2RlbFNlbGVjdGlvbmAgd291bGQgcGljayBpdCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV2ZXJ5IEFza1xuICogdHVybiB3b3VsZCBkaWUgd2l0aCBcIkNvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gYW55IHByb3ZpZGVyc1wiIOKAlCBhblxuICogZXJyb3IgYWJvdXQgQVdTIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZSB1c2VyIGFza2VkLlxuICpcbiAqIEVhY2ggY2hlY2sgYmVsb3cgY29ycmVzcG9uZHMgdG8gYSB3YXkgYGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpYCBjYW4gc3VjY2VlZDpcbiAqICAgLSBzdGF0aWMga2V5cyBpbiB0aGUgZW52aXJvbm1lbnQ7XG4gKiAgIC0gRUtTIFBvZCBJZGVudGl0eSAvIEVDUyB0YXNrIHJvbGUgKHRoZSBhZ2VudCBpbmplY3RzIGEgY3JlZGVudGlhbHMgVVJJKTtcbiAqICAgLSBJUlNBIChhIHByb2plY3RlZCB3ZWItaWRlbnRpdHkgdG9rZW4gZmlsZSk7XG4gKiAgIC0gYSBzaGFyZWQtY29uZmlnIHByb2ZpbGUsIGZvciBhIGRldmVsb3BlciBydW5uaW5nIGFnYWluc3QgcmVhbCBBV1MuXG4gKlxuICogVGhlIEVDMiBpbnN0YW5jZSBwcm9maWxlIGlzIHRoZSBvbmUgY2FzZSB3aXRoIE5PIGVudmlyb25tZW50IG1hcmtlciDigJQgaXRzXG4gKiBjcmVkZW50aWFscyBjb21lIGZyb20gSU1EUyBhdCBjYWxsIHRpbWUg4oCUIHNvIGl0IHRha2VzIHRoZSBleHBsaWNpdFxuICogYEJFRFJPQ0tfRU5BQkxFRD10cnVlYCBvcHQtaW4gcmF0aGVyIHRoYW4gYmVpbmcgZ3Vlc3NlZCBhdC5cbiAqL1xuZnVuY3Rpb24gYXdzQ3JlZGVudGlhbFNvdXJjZUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRFxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19DT05UQUlORVJfQ1JFREVOVElBTFNfRlVMTF9VUklcbiAgICB8fCBwcm9jZXNzLmVudi5BV1NfQ09OVEFJTkVSX0NSRURFTlRJQUxTX1JFTEFUSVZFX1VSSVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19QUk9GSUxFXG4gICAgfHwgcHJvY2Vzcy5lbnYuQkVEUk9DS19FTkFCTEVEID09PSAndHJ1ZSdcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEga2V5bGVzcyBwcm92aWRlciAoQmVkcm9jaykgc2hvdWxkIGJlIGFkdmVydGlzZWQuIEl0IGF1dGhlbnRpY2F0ZXNcbiAqIHdpdGggdGhlIHJ1bnRpbWUncyBJQU0gcm9sZSByYXRoZXIgdGhhbiBhbiBBUEkga2V5LCBzbyBpdCBuZWVkcyBCT1RIIGEgcmVnaW9uXG4gKiB0byBjYWxsIGFuZCBhIHJlc29sdmFibGUgY3JlZGVudGlhbCBzb3VyY2Ug4oCUIHNlZVxuICoge0BsaW5rIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkfSBmb3Igd2h5IHRoZSByZWdpb24gYWxvbmUgaXMgbm90IGVub3VnaC5cbiAqL1xuZnVuY3Rpb24ga2V5bGVzc1Byb3ZpZGVyQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEocHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04pICYmIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkKCk7XG59XG5cbi8qKlxuICogTGF6aWx5IGluaXRpYWxpemUgdGhlIHByb3ZpZGVyIHJlZ2lzdHJ5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBLZXktYmFzZWRcbiAqIHByb3ZpZGVycyByZWdpc3RlciBvbmx5IHdoZW4gdGhlaXIga2V5IGlzIHNldDsga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spXG4gKiByZWdpc3RlciB3aGVuIGFuIEFXUyByZWdpb24gaXMgY29uZmlndXJlZC5cbiAqL1xuZnVuY3Rpb24gaW5pdFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyhBSV9QUk9WSURFUl9DQVRBTE9HKSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBQUk9WSURFUl9GQUNUT1JJRVNbaWRdO1xuICAgIGlmICghZmFjdG9yeSkgY29udGludWU7XG4gICAgY29uc3QgZW52VmFyID0gQUlfUFJPVklERVJfRU5WX1ZBUlNbaWRdO1xuICAgIGNvbnN0IGFwaUtleSA9IGVudlZhciA/IHByb2Nlc3MuZW52W2VudlZhcl0gOiB1bmRlZmluZWQ7XG4gICAgLy8gQSBrZXlsZXNzIHByb3ZpZGVyIGlzIGdhdGVkIFNPTEVMWSBieSBpdHMgb3duIGF2YWlsYWJpbGl0eSBjaGVjayDigJQgbmV2ZXJcbiAgICAvLyBieSB0aGUgcHJlc2VuY2Ugb2YgYGVudlZhcmAuIEJlZHJvY2sncyBtYXBwZWQgZW52IHZhciBpc1xuICAgIC8vIGBBV1NfQUNDRVNTX0tFWV9JRGAsIHNvIHRoZSBrZXkgcGF0aCB3b3VsZCBvdGhlcndpc2UgcmVnaXN0ZXIgaXQgd2hlbmV2ZXJcbiAgICAvLyBzdGF0aWMga2V5cyBleGlzdCwgc2tpcHBpbmcgdGhlIHJlZ2lvbiByZXF1aXJlbWVudCBhbmQgcHJvZHVjaW5nIGFcbiAgICAvLyBwcm92aWRlciB0aGF0IGZhaWxzIGF0IGNhbGwgdGltZSBmb3Igd2FudCBvZiBhIHJlZ2lvbi5cbiAgICBjb25zdCB1c2FibGUgPSBLRVlMRVNTX1BST1ZJREVSUy5oYXMoaWQpID8ga2V5bGVzc1Byb3ZpZGVyQXZhaWxhYmxlKCkgOiAhIWFwaUtleTtcbiAgICBpZiAodXNhYmxlKSB7XG4gICAgICByZWdpc3RyeS5zZXQoaWQsIHsgaW5mbywgY3JlYXRlTW9kZWw6IGZhY3RvcnkoYXBpS2V5KSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgT3BlbkFJLWNvbXBhdGlibGUgKGxvY2FsIC8gc2VsZi1ob3N0ZWQpIHByb3ZpZGVyIGlzIG5vdCBpbiB0aGUgc3RhdGljXG4gIC8vIGNhdGFsb2cg4oCUIGl0cyBlbmRwb2ludCBhbmQgbW9kZWxzIGFyZSBkZXBsb3ltZW50LWRlZmluZWQuIFJlZ2lzdGVyIGl0IHdoZW4gYVxuICAvLyBiYXNlIFVSTCBpcyBjb25maWd1cmVkOyBpdHMgXCJpcyBjb25maWd1cmVkXCIgc2lnbmFsIGlzIHRoZSBiYXNlIFVSTCwgbm90IGEga2V5LlxuICBjb25zdCBjb21wYXQgPSBnZXRPcGVuQUlDb21wYXRpYmxlUHJvdmlkZXIoKTtcbiAgaWYgKGNvbXBhdCkge1xuICAgIHJlZ2lzdHJ5LnNldChjb21wYXQuaWQsIHtcbiAgICAgIGluZm86IGNvbXBhdCxcbiAgICAgIGNyZWF0ZU1vZGVsOiBQUk9WSURFUl9GQUNUT1JJRVNbT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSURdKHByb2Nlc3MuZW52Lk9QRU5BSV9DT01QQVRJQkxFX0FQSV9LRVkpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGlzdCBvZiBwcm92aWRlcnMgdGhhdCBoYXZlIEFQSSBrZXlzIGNvbmZpZ3VyZWQgdmlhIGVudiB2YXJzLlxuICpcbiAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaW5mbyB3aXRoIG1vZGVsIGxpc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQcm92aWRlcnMoKTogQUlQcm92aWRlckluZm9bXSB7XG4gIGluaXRSZWdpc3RyeSgpO1xuICByZXR1cm4gQXJyYXkuZnJvbShyZWdpc3RyeS52YWx1ZXMoKSkubWFwKChlKSA9PiBlLmluZm8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1vZGVsIGxpc3QgZm9yIGEgZ2l2ZW4gcHJvdmlkZXIgSUQgKHJlZ2FyZGxlc3Mgb2YgZW52IHZhciBjb25maWcpLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllclxuICogQHJldHVybnMgQXJyYXkgb2YgbW9kZWxzLCBvciBlbXB0eSBhcnJheSBpZiBwcm92aWRlciBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlck1vZGVscyhwcm92aWRlcklkOiBzdHJpbmcpOiBBSU1vZGVsSW5mb1tdIHtcbiAgcmV0dXJuIGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbmd1YWdlTW9kZWwgZnJvbSB0aGUgcmVnaXN0cnkgZm9yIGEgY29uZmlndXJlZCBwcm92aWRlci5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBtb2RlbElkIC0gTW9kZWwgaWRlbnRpZmllclxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBpcyBub3QgY29uZmlndXJlZCBvciBtb2RlbCBpcyBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBMYW5ndWFnZU1vZGVsIHtcbiAgaW5pdFJlZ2lzdHJ5KCk7XG4gIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnkuZ2V0KHByb3ZpZGVySWQpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIiBpcyBub3QgY29uZmlndXJlZC4gU2V0IHRoZSBjb3JyZXNwb25kaW5nIEFQSSBrZXkgZW52aXJvbm1lbnQgdmFyaWFibGUuYCk7XG4gIH1cbiAgaWYgKCFlbnRyeS5pbmZvLm1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IGVudHJ5LmluZm8ubW9kZWxzLm1hcCgobSkgPT4gbS5pZCkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbElkfVwiIGlzIG5vdCBhdmFpbGFibGUgZm9yIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBBdmFpbGFibGUgbW9kZWxzOiAke2F2YWlsYWJsZX1gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuY3JlYXRlTW9kZWwobW9kZWxJZCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcG9yYXJ5IExhbmd1YWdlTW9kZWwgdXNpbmcgYSBjdXN0b20gQVBJIGtleSAobm90IGNhY2hlZCBpbiByZWdpc3RyeSkuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0gbW9kZWxJZCAtIE1vZGVsIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBhcGlLZXkgLSBDdXN0b20gQVBJIGtleVxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBvciBtb2RlbCBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFdpdGhLZXkocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcsIGFwaUtleTogc3RyaW5nKTogTGFuZ3VhZ2VNb2RlbCB7XG4gIGNvbnN0IG1vZGVscyA9IGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBTdXBwb3J0ZWQ6ICR7T2JqZWN0LmtleXMoQUlfUFJPVklERVJfQ0FUQUxPRykuam9pbignLCAnKX1gKTtcbiAgfVxuICBpZiAoIW1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsSWR9XCIgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIuIEF2YWlsYWJsZTogJHttb2RlbHMubWFwKChtKSA9PiBtLmlkKS5qb2luKCcsICcpfWApO1xuICB9XG5cbiAgY29uc3QgZmFjdG9yeSA9IFBST1ZJREVSX0ZBQ1RPUklFU1twcm92aWRlcklkXTtcbiAgaWYgKCFmYWN0b3J5KSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiYCk7XG5cbiAgLy8gS2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spIGF1dGhlbnRpY2F0ZSB2aWEgdGhlIHJ1bnRpbWUgSUFNIHJvbGUgYW5kIElHTk9SRSBhXG4gIC8vIHN1cHBsaWVkIGtleS4gU2lsZW50bHkgZHJvcHBpbmcgdGhlIGtleSBhbmQgcmV0dXJuaW5nIGEgbW9kZWwgd291bGQgZGVmZXIgdGhlXG4gIC8vIGZhaWx1cmUgdG8gbW9kZWwtY2FsbCB0aW1lIHdoZW4gdGhlIElBTSByb2xlL3JlZ2lvbiBpc24ndCBjb25maWd1cmVkOyBndWFyZCBpdFxuICAvLyBoZXJlIHNvIHRoZSBmYWlsdXJlIGlzIGNsZWFyIGF0IGNvbmZpZyB0aW1lIChtaXJyb3JzIHJlc29sdmVNb2RlbCdzIGdhdGUpLlxuICBpZiAoS0VZTEVTU19QUk9WSURFUlMuaGFzKHByb3ZpZGVySWQpKSB7XG4gICAgaWYgKCFrZXlsZXNzUHJvdmlkZXJBdmFpbGFibGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQUkgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIgYXV0aGVudGljYXRlcyB2aWEgdGhlIEFXUyBJQU0gcm9sZSAodGhlIEFQSSBrZXkgaXMgaWdub3JlZCk7IGAgK1xuICAgICAgICAgICdzZXQgQVdTX1JFR0lPTiAob3IgQVdTX0RFRkFVTFRfUkVHSU9OKSBzbyB0aGUgcnVudGltZSBjcmVkZW50aWFscyBjYW4gYmUgcmVzb2x2ZWQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5KCkobW9kZWxJZCk7XG4gIH1cbiAgcmV0dXJuIGZhY3RvcnkoYXBpS2V5KShtb2RlbElkKTtcbn1cblxuLyoqIFdoYXQgYSBjYWxsZXIgYXNrZWQgZm9yOyBldmVyeSBmaWVsZCBvcHRpb25hbCAoc2VlIHtAbGluayByZXNvbHZlTW9kZWxTZWxlY3Rpb259KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxTZWxlY3Rpb24ge1xuICBwcm92aWRlcj86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIC8qKiBFcGhlbWVyYWwgYnJpbmcteW91ci1vd24ga2V5IOKAlCB0aGUgcmVxdWVzdCBpcyBiaWxsZWQgdG8gaXQsIG5ldmVyIHRvIGEgcGxhdGZvcm0ga2V5LiAqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBwcm92aWRlcnMgdG8gdHJ5LCBpbiBvcmRlciwgd2l0aCB0aGVpciBmaXJzdCBtb2RlbCBpZiB0aGUgcmVxdWVzdGVkIG9uZSBjYW4ndCBiZSByZXNvbHZlZC4gKi9cbiAgZmFsbGJhY2tzPzogc3RyaW5nW107XG59XG5cbi8qKiBBIHJlc29sdmVkIG1vZGVsIHBsdXMgd2hvIGFjdHVhbGx5IHNlcnZlcyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB7XG4gIG1vZGVsOiBMYW5ndWFnZU1vZGVsO1xuICBwcm92aWRlcjogc3RyaW5nO1xuICBtb2RlbElkOiBzdHJpbmc7XG4gIC8qKiBTZXQgd2hlbiBhIGZhbGxiYWNrIHByb3ZpZGVyIHNlcnZlcyB0aGUgcmVxdWVzdDogdGhlIHByb3ZpZGVyIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAqL1xuICBmYWxsYmFja0Zyb20/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbmd1YWdlTW9kZWwgZm9yIGEgcmVxdWVzdDpcbiAqIC0gYHByb3ZpZGVyYCArIGBtb2RlbGAg4oaSIHVzZSB0aGVtICh3aXRoIGFuIG9wdGlvbmFsIGVwaGVtZXJhbCBCWU8ga2V5KTtcbiAqIC0gYHByb3ZpZGVyYCBvbmx5IOKGkiB0aGUgcHJvdmlkZXIncyBmaXJzdCBjYXRhbG9nIG1vZGVsO1xuICogLSBgbW9kZWxgIG9ubHkg4oaSIGVycm9yIChhbWJpZ3VvdXMg4oCUIHRoZSBwcm92aWRlciBpcyB1bmtub3duKTtcbiAqIC0gbmVpdGhlciDihpIgdGhlIGZpcnN0IGVudi1jb25maWd1cmVkIHByb3ZpZGVyIChhIGNsb3VkIGtleSBvciB0aGUgbG9jYWxcbiAqICAgT3BlbkFJLWNvbXBhdGlibGUgZW5kcG9pbnQpIHNvIEFJIGZlYXR1cmVzIHdvcmsgb3V0IG9mIHRoZSBib3guXG4gKlxuICogSWYgdGhlIHJlcXVlc3RlZCBwcm92aWRlci9tb2RlbCBjYW4ndCBiZSByZXNvbHZlZCwgYGZhbGxiYWNrc2AgYXJlIHRyaWVkIGluXG4gKiBvcmRlciB3aXRoIGVhY2ggcHJvdmlkZXIncyBmaXJzdCBtb2RlbCDigJQgRVhDRVBUIGZvciBhIEJZTy1rZXkgcmVxdWVzdDogdGhlXG4gKiBmYWxsYmFja3MgcmVzb2x2ZSB0aHJvdWdoIHRoZSBwbGF0Zm9ybSdzIGVudi1jb25maWd1cmVkIGtleXMsIHdoaWNoIHdvdWxkXG4gKiBzaWxlbnRseSBzcGVuZCB0aGUgcGxhdGZvcm0ncyBBSSBidWRnZXQgb24gYSByZXF1ZXN0IHRoZSBjYWxsZXIgbWVhbnQgdG8gYmlsbFxuICogdG8gdGhlaXIgb3duIGtleS4gQSBCWU8gZmFpbHVyZSBpcyB0ZXJtaW5hbC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIHdoZW4gbm90aGluZyByZXNvbHZlcyAodGhlIG9yaWdpbmFsIGVycm9yIHdoZW4gZmFsbGJhY2tzIGFyZSBleGhhdXN0ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWxTZWxlY3Rpb24oc2VsZWN0aW9uOiBNb2RlbFNlbGVjdGlvbik6IFJlc29sdmVkTW9kZWxTZWxlY3Rpb24ge1xuICBjb25zdCB7IHByb3ZpZGVyLCBtb2RlbCwgYXBpS2V5LCBmYWxsYmFja3MgfSA9IHNlbGVjdGlvbjtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgYG1vZGVsYCB3YXMgc3VwcGxpZWQgd2l0aG91dCBhIGBwcm92aWRlcmAg4oCUIHNwZWNpZnkgYm90aCwgb3IgbmVpdGhlci4nKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBnZXRBdmFpbGFibGVQcm92aWRlcnMoKVswXTtcbiAgICBjb25zdCBmaXJzdE1vZGVsID0gZmlyc3Q/Lm1vZGVsc1swXT8uaWQ7XG4gICAgaWYgKCFmaXJzdCB8fCAhZmlyc3RNb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBSSBpcyBub3QgY29uZmlndXJlZDogbm8gcHJvdmlkZXIgQVBJIGtleSBpcyBzZXQgYW5kIE9QRU5BSV9DT01QQVRJQkxFX0JBU0VfVVJMIGlzIHVuc2V0LicpO1xuICAgIH1cbiAgICByZXR1cm4geyBtb2RlbDogcmVzb2x2ZU1vZGVsKGZpcnN0LmlkLCBmaXJzdE1vZGVsKSwgcHJvdmlkZXI6IGZpcnN0LmlkLCBtb2RlbElkOiBmaXJzdE1vZGVsIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IG1vZGVsSWQgPSBtb2RlbCA/PyBnZXRQcm92aWRlck1vZGVscyhwcm92aWRlcilbMF0/LmlkO1xuICAgIGlmICghbW9kZWxJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJ9XCIgaGFzIG5vIGNvbmZpZ3VyZWQgbW9kZWxzLmApO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZCA9IGFwaUtleSA/IGNyZWF0ZU1vZGVsV2l0aEtleShwcm92aWRlciwgbW9kZWxJZCwgYXBpS2V5KSA6IHJlc29sdmVNb2RlbChwcm92aWRlciwgbW9kZWxJZCk7XG4gICAgcmV0dXJuIHsgbW9kZWw6IHJlc29sdmVkLCBwcm92aWRlciwgbW9kZWxJZCB9O1xuICB9IGNhdGNoIChwcmltYXJ5RXJyb3IpIHtcbiAgICBpZiAoYXBpS2V5IHx8ICFmYWxsYmFja3M/Lmxlbmd0aCkgdGhyb3cgcHJpbWFyeUVycm9yO1xuXG4gICAgZm9yIChjb25zdCBmYWxsYmFja1Byb3ZpZGVyIG9mIGZhbGxiYWNrcykge1xuICAgICAgY29uc3QgZmFsbGJhY2tNb2RlbCA9IGdldEF2YWlsYWJsZVByb3ZpZGVycygpLmZpbmQoKHApID0+IHAuaWQgPT09IGZhbGxiYWNrUHJvdmlkZXIpPy5tb2RlbHNbMF0/LmlkO1xuICAgICAgaWYgKCFmYWxsYmFja01vZGVsKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZWw6IHJlc29sdmVNb2RlbChmYWxsYmFja1Byb3ZpZGVyLCBmYWxsYmFja01vZGVsKSxcbiAgICAgICAgICBwcm92aWRlcjogZmFsbGJhY2tQcm92aWRlcixcbiAgICAgICAgICBtb2RlbElkOiBmYWxsYmFja01vZGVsLFxuICAgICAgICAgIGZhbGxiYWNrRnJvbTogcHJvdmlkZXIsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IHByaW1hcnlFcnJvcjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"package": "@pipeline-builder/ai-core",
|
|
3
|
+
"entries": {
|
|
4
|
+
".": {
|
|
5
|
+
"answerHowTo": "function",
|
|
6
|
+
"buildDocsIndexFromFiles": "function",
|
|
7
|
+
"buildGroundingContext": "function",
|
|
8
|
+
"createModelWithKey": "function",
|
|
9
|
+
"generateObject": "function",
|
|
10
|
+
"generateText": "function",
|
|
11
|
+
"getAvailableProviders": "function",
|
|
12
|
+
"getProviderModels": "function",
|
|
13
|
+
"Output": "value",
|
|
14
|
+
"resolveModel": "function",
|
|
15
|
+
"resolveModelSelection": "function",
|
|
16
|
+
"stepCountIs": "function",
|
|
17
|
+
"streamHowTo": "function",
|
|
18
|
+
"streamText": "function",
|
|
19
|
+
"tool": "function"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@jest/globals": "30.4.1",
|
|
10
10
|
"@stylistic/eslint-plugin": "^2",
|
|
11
|
-
"@types/node": "
|
|
11
|
+
"@types/node": "^24",
|
|
12
12
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
13
13
|
"@typescript-eslint/parser": "^8",
|
|
14
14
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@ai-sdk/xai": "4.0.44",
|
|
30
30
|
"@aws-sdk/credential-providers": "3.1101.0",
|
|
31
31
|
"ai": "7.0.79",
|
|
32
|
-
"@pipeline-builder/api-core": "4.1.
|
|
32
|
+
"@pipeline-builder/api-core": "4.1.14"
|
|
33
33
|
},
|
|
34
34
|
"keywords": [
|
|
35
35
|
"ci-cd",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"access": "public",
|
|
86
86
|
"registry": "https://registry.npmjs.org/"
|
|
87
87
|
},
|
|
88
|
-
"version": "4.1.
|
|
88
|
+
"version": "4.1.14",
|
|
89
89
|
"bugs": {
|
|
90
90
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
91
91
|
},
|
|
@@ -149,6 +149,12 @@
|
|
|
149
149
|
"setupFilesAfterEnv": [
|
|
150
150
|
"<rootDir>/../../jest-env-guard.js"
|
|
151
151
|
],
|
|
152
|
+
"collectCoverageFrom": [
|
|
153
|
+
"src/**/*.ts",
|
|
154
|
+
"!src/**/*.d.ts",
|
|
155
|
+
"!src/testing/**",
|
|
156
|
+
"!src/index.ts"
|
|
157
|
+
],
|
|
152
158
|
"coverageThreshold": {
|
|
153
159
|
"global": {
|
|
154
160
|
"statements": 95,
|
|
@@ -166,11 +172,14 @@
|
|
|
166
172
|
"compile": "pnpm dlx projen compile",
|
|
167
173
|
"default": "pnpm dlx projen default",
|
|
168
174
|
"eslint": "pnpm dlx projen eslint",
|
|
175
|
+
"lint:fix": "pnpm dlx projen lint:fix",
|
|
169
176
|
"package": "pnpm dlx projen package",
|
|
170
177
|
"post-compile": "pnpm dlx projen post-compile",
|
|
171
178
|
"pre-compile": "pnpm dlx projen pre-compile",
|
|
172
179
|
"test": "pnpm dlx projen test",
|
|
180
|
+
"test:update": "pnpm dlx projen test:update",
|
|
173
181
|
"test:watch": "pnpm dlx projen test:watch",
|
|
182
|
+
"typecheck:tests": "pnpm dlx projen typecheck:tests",
|
|
174
183
|
"watch": "pnpm dlx projen watch",
|
|
175
184
|
"projen": "pnpm dlx projen"
|
|
176
185
|
}
|