@voltro/ai 0.86.0 → 0.88.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.
- package/CHANGELOG.md +5484 -0
- package/THIRD-PARTY-NOTICES.md +5352 -524
- package/dist/agent.js +1 -2
- package/dist/agentConstants.js +1 -2
- package/dist/agentExecutor.js +43 -40
- package/dist/aiSettings.js +10 -0
- package/dist/api.js +1 -2
- package/dist/appTools.js +1 -2
- package/dist/budget.js +1 -2
- package/dist/callEvidence.js +1 -2
- package/dist/copilot.js +1 -2
- package/dist/cost.js +1 -2
- package/dist/embed.js +1 -2
- package/dist/embeddingProvider.js +40 -23
- package/dist/eval.js +1 -2
- package/dist/events.js +1 -2
- package/dist/executableModalities.js +1 -2
- package/dist/gateway.js +1 -2
- package/dist/gatewayCatalog.js +1 -2
- package/dist/gatewayMedia.js +1 -2
- package/dist/index.d.ts +49 -2
- package/dist/index.js +41 -41
- package/dist/inferenceDispatch.js +1 -2
- package/dist/inferenceQueue.js +1 -2
- package/dist/jsonOutputValidation.js +1 -2
- package/dist/mcpClient.js +1 -2
- package/dist/mcpTools.js +1 -2
- package/dist/media.js +1 -2
- package/dist/mediaBytes.js +1 -2
- package/dist/mediaCall.js +1 -2
- package/dist/mediaTaskProvider.js +1 -2
- package/dist/middleware.js +1 -2
- package/dist/observe.js +1 -2
- package/dist/prompts.js +1 -2
- package/dist/provider.js +85 -70
- package/dist/realtimeEvent.js +1 -2
- package/dist/realtimeSession.js +1 -2
- package/dist/rerank.js +1 -2
- package/dist/resumableStream.js +2 -3
- package/dist/retrieveReranked.js +1 -2
- package/dist/runAndPersist.js +47 -49
- package/dist/semanticCache.js +1 -2
- package/dist/speechProvider.js +1 -2
- package/dist/streamRegistry.js +1 -2
- package/dist/streamText.js +1 -2
- package/dist/streamTranscribe.js +1 -2
- package/dist/streamWakeups.js +1 -2
- package/dist/structuredEvidence.js +1 -2
- package/dist/test.js +1 -2
- package/dist/threads.js +1 -2
- package/dist/tools.js +1 -2
- package/dist/transcribe.js +1 -2
- package/dist/transcriptionEvent.js +1 -2
- package/dist/workflow.js +1 -2
- package/package.json +13 -12
package/dist/index.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
import { applyMiddleware as e, clearAiMiddleware as t, defaultSettingsMiddleware as n, extractReasoningMiddleware as r, getAiMiddleware as i, loggingMiddleware as a, setAiMiddleware as o, simulateStreamingMiddleware as s } from "./middleware.js";
|
|
2
|
-
import { MockScript as c, getProviderOverride as l,
|
|
3
|
-
import { buildSdkTools as
|
|
4
|
-
import { AI_BUDGET_RESERVATIONS_TABLE as
|
|
5
|
-
import { AI_USAGE_TABLE as
|
|
6
|
-
import { aiCallAttributes as
|
|
7
|
-
import { AiCallEvidenceSchema as
|
|
8
|
-
import { AiError as
|
|
9
|
-
import { BUILTIN_SPEECH_PROVIDERS as
|
|
10
|
-
import { generateImage as
|
|
11
|
-
import { transcribe as
|
|
12
|
-
import { TranscriptionStreamError as
|
|
13
|
-
import { streamTranscribe as
|
|
14
|
-
import { RealtimeClientEvent as
|
|
15
|
-
import { defineRealtimeSession as
|
|
16
|
-
import { BUILTIN_MEDIA_PROVIDERS as
|
|
17
|
-
import { AgentErrorCode as
|
|
18
|
-
import { agentActor as
|
|
19
|
-
import { activeStreamCount as
|
|
20
|
-
import { streamText as
|
|
21
|
-
import { DEFAULT_STREAM_LOG_RETENTION_HOURS as
|
|
22
|
-
import { AGENT_MESSAGES_TABLE as
|
|
23
|
-
import { AgentThreadAccessDenied as
|
|
24
|
-
import { agentMessagesTable as
|
|
25
|
-
import { appendStreamingMessage as
|
|
26
|
-
import { defineAgentExecutor as
|
|
27
|
-
import { embeddingProviderFromEnv as
|
|
28
|
-
import { cosineSimilarity as
|
|
29
|
-
import { recordReads as
|
|
30
|
-
import { rerank as
|
|
31
|
-
import { retrieveReranked as
|
|
32
|
-
import { DEFAULT_PROMPT_RETENTION_HOURS as
|
|
33
|
-
import { MCP_BOUNDS_DEFAULTS as
|
|
34
|
-
import { describeExternalTool as
|
|
35
|
-
import { DEFAULT_JUDGE_THRESHOLD as
|
|
36
|
-
import { capabilitiesOf as
|
|
37
|
-
import { fromRaw as
|
|
38
|
-
import { MODALITY_PRIMITIVE as
|
|
39
|
-
import { COPILOT_MAX_LIMIT as
|
|
40
|
-
import { AI_INFERENCES_TABLE as
|
|
41
|
-
import { DEFAULT_INFERENCE_CONCURRENCY as
|
|
42
|
-
export {
|
|
2
|
+
import { MockScript as c, getProviderOverride as l, providerChoice as u, providerFromEnv as d, providerKeyEnvVar as f, resolveImageModel as p, resolveModel as m, resolveSpeechModel as h, resolveTranscriptionModel as g, resolveVideoModel as _, setProviderOverride as v } from "./provider.js";
|
|
3
|
+
import { buildSdkTools as y, defineTool as b, isTool as x, resolveToolModuleHandlers as S } from "./tools.js";
|
|
4
|
+
import { AI_BUDGET_RESERVATIONS_TABLE as C, AI_BUDGET_TABLE as w, AiBudgetExceeded as T, AiBudgetInvalidInput as E, AiBudgetReservationConflict as D, aiBudgetReservationsTable as O, aiBudgetTable as k, releaseAiBudget as A, requireAiBudget as j } from "./budget.js";
|
|
5
|
+
import { AI_USAGE_TABLE as M, AiUsageLedgerError as N, AiUsageReceiptConflict as P, MODEL_PRICING_DEFAULTS as F, aiSpendUsd as I, aiUsageTable as L, estimateCostUsd as R, gatewayCostUsd as z, isMeteredUsage as B, modelPricing as V, normaliseUsage as H, priceForModel as U, recordAiUsage as W, recordAiUsageBestEffort as G, setModelPricing as K } from "./cost.js";
|
|
6
|
+
import { aiCallAttributes as q, observeStream as J, withAiCallSpan as Y } from "./observe.js";
|
|
7
|
+
import { AiCallEvidenceSchema as X } from "./callEvidence.js";
|
|
8
|
+
import { AiError as Z, AiService as Q, aiGenerationError as $, defaultAiService as ee, generateObject as te, generateObjectJson as ne, generateObjectWithTools as re, generateText as ie, outputJsonSchema as ae } from "./api.js";
|
|
9
|
+
import { BUILTIN_SPEECH_PROVIDERS as oe, clearSpeechProviders as se, registerSpeechProvider as ce, registeredSpeechProviders as le, replacesBuiltinSpeechProvider as ue, speechProvider as de } from "./speechProvider.js";
|
|
10
|
+
import { generateImage as fe, generateSpeech as pe, generateVideo as me } from "./media.js";
|
|
11
|
+
import { transcribe as he } from "./transcribe.js";
|
|
12
|
+
import { TranscriptionStreamError as ge, TranscriptionStreamEvent as _e } from "./transcriptionEvent.js";
|
|
13
|
+
import { streamTranscribe as ve } from "./streamTranscribe.js";
|
|
14
|
+
import { RealtimeClientEvent as ye, RealtimeServerEvent as be } from "./realtimeEvent.js";
|
|
15
|
+
import { defineRealtimeSession as xe, resolveRealtimeModel as Se } from "./realtimeSession.js";
|
|
16
|
+
import { BUILTIN_MEDIA_PROVIDERS as Ce, clearMediaTaskProviders as we, mediaTaskProvider as Te, registerMediaTaskProvider as Ee, registeredMediaTaskProviders as De } from "./mediaTaskProvider.js";
|
|
17
|
+
import { AgentErrorCode as Oe, AgentEvent as ke, SeqEvent as Ae } from "./events.js";
|
|
18
|
+
import { agentActor as je, appToolDecision as Me, appTools as Ne, passesPolicy as Pe, synthesizeToolSpecs as Fe } from "./appTools.js";
|
|
19
|
+
import { activeStreamCount as Ie, cancelStream as Le, isStreamActive as Re, registerStream as ze, unregisterStream as Be } from "./streamRegistry.js";
|
|
20
|
+
import { streamText as Ve, streamTextWithFallback as He, streamTextWithRetry as Ue } from "./streamText.js";
|
|
21
|
+
import { DEFAULT_STREAM_LOG_RETENTION_HOURS as We, STREAM_EVENTS_TABLE as Ge, STREAM_STATE_TABLE as Ke, consumeResumableStream as qe, dataStoreResumableStreamStore as Je, gcResumableStreams as Ye, memoryResumableStreamStore as Xe, redisResumableStreamStore as Ze, resumableStream as Qe, resumableStreamText as $e, startResumableProducer as et, streamEventsTable as tt, streamStateTable as nt } from "./resumableStream.js";
|
|
22
|
+
import { AGENT_MESSAGES_TABLE as rt, AGENT_THREADS_TABLE as it } from "./agentConstants.js";
|
|
23
|
+
import { AgentThreadAccessDenied as at, agentInputSchema as ot, agentMessageSchema as st, agentRouteDescriptors as ct, defineAgent as lt, isAgentDescriptor as ut } from "./agent.js";
|
|
24
|
+
import { agentMessagesTable as dt, agentThreadsTable as ft, appendMessage as pt, createThread as mt, ensureThreadOwned as ht, getMessages as gt, getThread as _t } from "./threads.js";
|
|
25
|
+
import { appendStreamingMessage as vt, historyToModelMessages as yt, patchStreamingMessage as bt, runAssistant as xt } from "./runAndPersist.js";
|
|
26
|
+
import { defineAgentExecutor as St, isAgentExecutor as Ct, loadAgentMessages as wt, resolveAgentModel as Tt, resolveSystem as Et, runAgentTurn as Dt } from "./agentExecutor.js";
|
|
27
|
+
import { embeddingProviderChoice as Ot, embeddingProviderFromEnv as kt, embeddingProviderKeyEnvVar as At, hashToVector as jt, resolveEmbeddingModel as Mt } from "./embeddingProvider.js";
|
|
28
|
+
import { cosineSimilarity as Nt, embed as Pt, embedMany as Ft } from "./embed.js";
|
|
29
|
+
import { recordReads as It, semanticGenerateObject as Lt, semanticGenerateText as Rt } from "./semanticCache.js";
|
|
30
|
+
import { rerank as zt } from "./rerank.js";
|
|
31
|
+
import { retrieveReranked as Bt } from "./retrieveReranked.js";
|
|
32
|
+
import { DEFAULT_PROMPT_RETENTION_HOURS as Vt, PROMPTS_TABLE as Ht, PromptRenderError as Ut, definePrompt as Wt, isRenderedPrompt as Gt, promptDigest as Kt, promptVersionByDigest as qt, promptVersionDigest as Jt, promptVersionsFor as Yt, promptsTable as Xt, recordPromptVersion as Zt } from "./prompts.js";
|
|
33
|
+
import { MCP_BOUNDS_DEFAULTS as Qt, MCP_CLIENT_INFO as $t, MCP_CLIENT_PROTOCOL_VERSION as en, McpError as tn, flattenMcpContent as nn, httpMcpTransport as rn, isUsableMcpToolName as an, mcpCallTool as on, mcpInitialize as sn, mcpListTools as cn, parseHttpMcpBody as ln, resolveMcpBounds as un, sanitizeExternalText as dn, sanitizeInputSchema as fn, stdioMcpTransport as pn } from "./mcpClient.js";
|
|
34
|
+
import { describeExternalTool as mn, isExternalWrite as hn, makeMcpTool as gn, mcpToolDecision as _n, mcpToolTag as vn, mcpTools as yn, mcpToolset as bn, refreshMcpToolset as xn } from "./mcpTools.js";
|
|
35
|
+
import { DEFAULT_JUDGE_THRESHOLD as Sn, defineEval as Cn, evaluateAssertions as wn, isEvalDefinition as Tn, llmJudge as En, runEval as Dn, scoreCase as On } from "./eval.js";
|
|
36
|
+
import { capabilitiesOf as kn, contextWindowOf as An, dataPolicyOf as jn, knowledgeCutoffOf as Mn, maxOutputTokensOf as Nn, modalitiesOf as Pn, modalityOf as Fn, releasedAtOf as In } from "./gatewayCatalog.js";
|
|
37
|
+
import { fromRaw as Ln, getAvailableModels as Rn, readGatewayCatalog as zn, toModelInfo as Bn } from "./gateway.js";
|
|
38
|
+
import { MODALITY_PRIMITIVE as Vn, canExecute as Hn, executableModalities as Un } from "./executableModalities.js";
|
|
39
|
+
import { COPILOT_MAX_LIMIT as Wn, CopilotProposalSchema as Gn, CopilotRejected as Kn, buildCopilotSystemPrompt as qn, runDataCopilot as Jn, validateCopilotProposal as Yn } from "./copilot.js";
|
|
40
|
+
import { AI_INFERENCES_TABLE as Xn, DEFAULT_INFERENCE_ATTEMPTS as Zn, DEFAULT_INFERENCE_LEASE_MS as Qn, aiInferencesTable as $n, decideInferenceFailure as er, inferenceSignalName as tr, offloadedInferenceId as nr, toQueuedInference as rr } from "./inferenceQueue.js";
|
|
41
|
+
import { DEFAULT_INFERENCE_CONCURRENCY as ir, DEFAULT_INFERENCE_POLL_MS as ar, DEFAULT_INFERENCE_RETENTION_HOURS as or, dispatchInferences as sr } from "./inferenceDispatch.js";
|
|
42
|
+
export { rt as AGENT_MESSAGES_TABLE, it as AGENT_THREADS_TABLE, C as AI_BUDGET_RESERVATIONS_TABLE, w as AI_BUDGET_TABLE, Xn as AI_INFERENCES_TABLE, M as AI_USAGE_TABLE, Oe as AgentErrorCode, ke as AgentEvent, at as AgentThreadAccessDenied, T as AiBudgetExceeded, E as AiBudgetInvalidInput, D as AiBudgetReservationConflict, X as AiCallEvidenceSchema, Z as AiError, Q as AiService, N as AiUsageLedgerError, P as AiUsageReceiptConflict, Ce as BUILTIN_MEDIA_PROVIDERS, oe as BUILTIN_SPEECH_PROVIDERS, Wn as COPILOT_MAX_LIMIT, Gn as CopilotProposalSchema, Kn as CopilotRejected, Zn as DEFAULT_INFERENCE_ATTEMPTS, ir as DEFAULT_INFERENCE_CONCURRENCY, Qn as DEFAULT_INFERENCE_LEASE_MS, ar as DEFAULT_INFERENCE_POLL_MS, or as DEFAULT_INFERENCE_RETENTION_HOURS, Sn as DEFAULT_JUDGE_THRESHOLD, Vt as DEFAULT_PROMPT_RETENTION_HOURS, We as DEFAULT_STREAM_LOG_RETENTION_HOURS, Qt as MCP_BOUNDS_DEFAULTS, $t as MCP_CLIENT_INFO, en as MCP_CLIENT_PROTOCOL_VERSION, Vn as MODALITY_PRIMITIVE, F as MODEL_PRICING_DEFAULTS, tn as McpError, c as MockScript, Ht as PROMPTS_TABLE, Ut as PromptRenderError, ye as RealtimeClientEvent, be as RealtimeServerEvent, Ge as STREAM_EVENTS_TABLE, Ke as STREAM_STATE_TABLE, Ae as SeqEvent, ge as TranscriptionStreamError, _e as TranscriptionStreamEvent, Ie as activeStreamCount, je as agentActor, ot as agentInputSchema, st as agentMessageSchema, dt as agentMessagesTable, ct as agentRouteDescriptors, ft as agentThreadsTable, O as aiBudgetReservationsTable, k as aiBudgetTable, q as aiCallAttributes, $ as aiGenerationError, $n as aiInferencesTable, I as aiSpendUsd, L as aiUsageTable, Me as appToolDecision, Ne as appTools, pt as appendMessage, vt as appendStreamingMessage, e as applyMiddleware, qn as buildCopilotSystemPrompt, y as buildSdkTools, Hn as canExecute, Le as cancelStream, kn as capabilitiesOf, t as clearAiMiddleware, we as clearMediaTaskProviders, se as clearSpeechProviders, qe as consumeResumableStream, An as contextWindowOf, Nt as cosineSimilarity, mt as createThread, jn as dataPolicyOf, Je as dataStoreResumableStreamStore, er as decideInferenceFailure, ee as defaultAiService, n as defaultSettingsMiddleware, lt as defineAgent, St as defineAgentExecutor, Cn as defineEval, Wt as definePrompt, xe as defineRealtimeSession, b as defineTool, mn as describeExternalTool, sr as dispatchInferences, Pt as embed, Ft as embedMany, Ot as embeddingProviderChoice, kt as embeddingProviderFromEnv, At as embeddingProviderKeyEnvVar, ht as ensureThreadOwned, R as estimateCostUsd, wn as evaluateAssertions, Un as executableModalities, r as extractReasoningMiddleware, nn as flattenMcpContent, Ln as fromRaw, z as gatewayCostUsd, Ye as gcResumableStreams, fe as generateImage, te as generateObject, ne as generateObjectJson, re as generateObjectWithTools, pe as generateSpeech, ie as generateText, me as generateVideo, i as getAiMiddleware, Rn as getAvailableModels, gt as getMessages, l as getProviderOverride, _t as getThread, jt as hashToVector, yt as historyToModelMessages, rn as httpMcpTransport, tr as inferenceSignalName, ut as isAgentDescriptor, Ct as isAgentExecutor, Tn as isEvalDefinition, hn as isExternalWrite, B as isMeteredUsage, Gt as isRenderedPrompt, Re as isStreamActive, x as isTool, an as isUsableMcpToolName, Mn as knowledgeCutoffOf, En as llmJudge, wt as loadAgentMessages, a as loggingMiddleware, gn as makeMcpTool, Nn as maxOutputTokensOf, on as mcpCallTool, sn as mcpInitialize, cn as mcpListTools, _n as mcpToolDecision, vn as mcpToolTag, yn as mcpTools, bn as mcpToolset, Te as mediaTaskProvider, Xe as memoryResumableStreamStore, Pn as modalitiesOf, Fn as modalityOf, V as modelPricing, H as normaliseUsage, J as observeStream, nr as offloadedInferenceId, ae as outputJsonSchema, ln as parseHttpMcpBody, Pe as passesPolicy, bt as patchStreamingMessage, U as priceForModel, Kt as promptDigest, qt as promptVersionByDigest, Jt as promptVersionDigest, Yt as promptVersionsFor, Xt as promptsTable, u as providerChoice, d as providerFromEnv, f as providerKeyEnvVar, zn as readGatewayCatalog, W as recordAiUsage, G as recordAiUsageBestEffort, Zt as recordPromptVersion, It as recordReads, Ze as redisResumableStreamStore, xn as refreshMcpToolset, Ee as registerMediaTaskProvider, ce as registerSpeechProvider, ze as registerStream, De as registeredMediaTaskProviders, le as registeredSpeechProviders, A as releaseAiBudget, In as releasedAtOf, ue as replacesBuiltinSpeechProvider, j as requireAiBudget, zt as rerank, Tt as resolveAgentModel, Mt as resolveEmbeddingModel, p as resolveImageModel, un as resolveMcpBounds, m as resolveModel, Se as resolveRealtimeModel, h as resolveSpeechModel, Et as resolveSystem, S as resolveToolModuleHandlers, g as resolveTranscriptionModel, _ as resolveVideoModel, Qe as resumableStream, $e as resumableStreamText, Bt as retrieveReranked, Dt as runAgentTurn, xt as runAssistant, Jn as runDataCopilot, Dn as runEval, dn as sanitizeExternalText, fn as sanitizeInputSchema, On as scoreCase, Lt as semanticGenerateObject, Rt as semanticGenerateText, o as setAiMiddleware, K as setModelPricing, v as setProviderOverride, s as simulateStreamingMiddleware, de as speechProvider, et as startResumableProducer, pn as stdioMcpTransport, tt as streamEventsTable, nt as streamStateTable, Ve as streamText, He as streamTextWithFallback, Ue as streamTextWithRetry, ve as streamTranscribe, Fe as synthesizeToolSpecs, Bn as toModelInfo, rr as toQueuedInference, he as transcribe, Be as unregisterStream, Yn as validateCopilotProposal, Y as withAiCallSpan };
|
|
@@ -6,7 +6,7 @@ import { transcribe as c } from "./transcribe.js";
|
|
|
6
6
|
import { mediaTaskProvider as l } from "./mediaTaskProvider.js";
|
|
7
7
|
import { AI_INFERENCES_TABLE as u, decideInferenceFailure as d, toQueuedInference as f } from "./inferenceQueue.js";
|
|
8
8
|
import { and as p, eq as m, gt as h, gte as g, lt as _, lte as v, or as y, registerRetention as b, retentionTtlMsFromEnv as x } from "@voltro/database";
|
|
9
|
-
|
|
9
|
+
// src/inferenceDispatch.ts
|
|
10
10
|
var S = 4, C = 250, w = 5e3, T = 36e5, E = {
|
|
11
11
|
examined: !1,
|
|
12
12
|
claimed: 0,
|
|
@@ -489,5 +489,4 @@ var S = 4, C = 250, w = 5e3, T = 36e5, E = {
|
|
|
489
489
|
} } : {}
|
|
490
490
|
}));
|
|
491
491
|
};
|
|
492
|
-
//#endregion
|
|
493
492
|
export { S as DEFAULT_INFERENCE_CONCURRENCY, C as DEFAULT_INFERENCE_POLL_MS, j as DEFAULT_INFERENCE_RETENTION_HOURS, w as DEFAULT_MEDIA_TASK_POLL_MS, T as DEFAULT_MEDIA_TASK_TIMEOUT_MS, N as dispatchInferences };
|
package/dist/inferenceQueue.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { id as e, integer as t, json as n, table as r, text as i, timestamp as a } from "@voltro/database";
|
|
2
2
|
import { createHash as o } from "node:crypto";
|
|
3
|
-
|
|
3
|
+
// src/inferenceQueue.ts
|
|
4
4
|
var s = "_voltro_ai_inferences", c = r(s, {
|
|
5
5
|
id: e({ prefix: "aiinf" }),
|
|
6
6
|
tenantId: i().nullable(),
|
|
@@ -92,5 +92,4 @@ var s = "_voltro_ai_inferences", c = r(s, {
|
|
|
92
92
|
delayMs: e.retryAfterMs !== void 0 && e.retryAfterMs > 0 ? e.retryAfterMs : Math.min(e.baseDelayMs * 2 ** (t - 1), e.maxDelayMs)
|
|
93
93
|
};
|
|
94
94
|
}, g = (e) => `voltro.ai.infer:${e}`, _ = (e, t) => `aiinf_${o("sha256").update(`${e}\u0000${t}`).digest("hex").slice(0, 40)}`;
|
|
95
|
-
//#endregion
|
|
96
95
|
export { s as AI_INFERENCES_TABLE, u as DEFAULT_INFERENCE_ATTEMPTS, l as DEFAULT_INFERENCE_LEASE_MS, c as aiInferencesTable, h as decideInferenceFailure, g as inferenceSignalName, _ as offloadedInferenceId, m as toQueuedInference };
|
|
@@ -3,7 +3,7 @@ import { Ajv as t } from "ajv";
|
|
|
3
3
|
import { Ajv2019 as n } from "ajv/dist/2019.js";
|
|
4
4
|
import { Ajv2020 as r } from "ajv/dist/2020.js";
|
|
5
5
|
import i from "ajv-formats";
|
|
6
|
-
|
|
6
|
+
// src/jsonOutputValidation.ts
|
|
7
7
|
var a = (a) => {
|
|
8
8
|
let o = structuredClone(a), s = {
|
|
9
9
|
strict: !0,
|
|
@@ -23,5 +23,4 @@ var a = (a) => {
|
|
|
23
23
|
error: /* @__PURE__ */ Error("model output does not satisfy the declared JSON Schema")
|
|
24
24
|
} });
|
|
25
25
|
};
|
|
26
|
-
//#endregion
|
|
27
26
|
export { a as validatedOutputSchema };
|
package/dist/mcpClient.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect as e, Schema as t } from "effect";
|
|
2
|
-
|
|
2
|
+
// src/mcpClient.ts
|
|
3
3
|
var n = "2025-06-18", r = {
|
|
4
4
|
name: "voltro-ai",
|
|
5
5
|
version: "0.0.0"
|
|
@@ -328,5 +328,4 @@ var n = "2025-06-18", r = {
|
|
|
328
328
|
}), n), o = x(e, a.maxResultBytes);
|
|
329
329
|
return e.isError === !0 ? `Error: ${o}` : o;
|
|
330
330
|
});
|
|
331
|
-
//#endregion
|
|
332
331
|
export { a as MCP_BOUNDS_DEFAULTS, r as MCP_CLIENT_INFO, n as MCP_CLIENT_PROTOCOL_VERSION, i as McpError, x as flattenMcpContent, g as httpMcpTransport, d as isUsableMcpToolName, S as mcpCallTool, y as mcpInitialize, b as mcpListTools, h as parseHttpMcpBody, s as resolveMcpBounds, l as sanitizeExternalText, f as sanitizeInputSchema, _ as stdioMcpTransport };
|
package/dist/mcpTools.js
CHANGED
|
@@ -2,7 +2,7 @@ import { defineTool as e } from "./tools.js";
|
|
|
2
2
|
import { passesPolicy as t } from "./appTools.js";
|
|
3
3
|
import { McpError as n, mcpCallTool as r, mcpInitialize as i, mcpListTools as a, resolveMcpBounds as o } from "./mcpClient.js";
|
|
4
4
|
import { Effect as s, Schema as c } from "effect";
|
|
5
|
-
|
|
5
|
+
// src/mcpTools.ts
|
|
6
6
|
var l = (e) => RegExp("^" + e.split("*").map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join(".*") + "$"), u = (e, t) => t instanceof RegExp ? t.test(e) : t.some((t) => l(t).test(e)), d = (e, t) => `${e}.${t}`, f = (e, t, n) => {
|
|
7
7
|
let r = d(t, e.name);
|
|
8
8
|
return !(n.readOnly !== void 0 && u(r, n.readOnly) || n.trustToolHints === !0 && e.annotations?.readOnlyHint === !0);
|
|
@@ -76,5 +76,4 @@ var l = (e) => RegExp("^" + e.split("*").map((e) => e.replace(/[.*+?^${}()|[\]\\
|
|
|
76
76
|
close: () => e.transport.close()
|
|
77
77
|
};
|
|
78
78
|
}), v = (e, t) => _(e, t).pipe(s.map((e) => e.tools)), y = (e, t) => _(e, t);
|
|
79
|
-
//#endregion
|
|
80
79
|
export { m as describeExternalTool, f as isExternalWrite, g as makeMcpTool, p as mcpToolDecision, d as mcpToolTag, v as mcpTools, _ as mcpToolset, y as refreshMcpToolset };
|
package/dist/media.js
CHANGED
|
@@ -6,7 +6,7 @@ import { decodeInlineVideo as d, inlineVideoByteLimit as f } from "./mediaBytes.
|
|
|
6
6
|
import { mediaCall as p } from "./mediaCall.js";
|
|
7
7
|
import { generateImage as m, generateSpeech as h } from "ai";
|
|
8
8
|
import { Effect as g } from "effect";
|
|
9
|
-
|
|
9
|
+
// src/media.ts
|
|
10
10
|
var _ = (e) => e === void 0 ? {} : { providerOptions: e }, v = (e) => s(e), y = (e) => {
|
|
11
11
|
let t = async (t) => {
|
|
12
12
|
let n = await e.doGenerate(t);
|
|
@@ -178,5 +178,4 @@ var _ = (e) => e === void 0 ? {} : { providerOptions: e }, v = (e) => s(e), y =
|
|
|
178
178
|
catch: v
|
|
179
179
|
}), t.abortSignal));
|
|
180
180
|
};
|
|
181
|
-
//#endregion
|
|
182
181
|
export { x as generateImage, C as generateSpeech, T as generateVideo };
|
package/dist/mediaBytes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/mediaBytes.ts
|
|
2
2
|
var e = 67108864, t = (t = e) => {
|
|
3
3
|
if (!Number.isSafeInteger(t) || t < 0) throw RangeError("generateVideo: maxInlineBytes must be a non-negative safe integer.");
|
|
4
4
|
return t;
|
|
@@ -15,5 +15,4 @@ var e = 67108864, t = (t = e) => {
|
|
|
15
15
|
if (r > 0 && (i.length === 0 || a & (r === 2 ? 15 : 3))) throw Error("generateVideo: provider returned invalid canonical base64.");
|
|
16
16
|
return Buffer.from(e, "base64");
|
|
17
17
|
};
|
|
18
|
-
//#endregion
|
|
19
18
|
export { e as DEFAULT_INLINE_VIDEO_BYTES, n as decodeInlineVideo, t as inlineVideoByteLimit };
|
package/dist/mediaCall.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect as e } from "effect";
|
|
2
|
-
|
|
2
|
+
// src/mediaCall.ts
|
|
3
3
|
var t = (t, n) => e.suspend(() => n?.aborted ? e.interrupt : e.acquireUseRelease(e.sync(() => new AbortController()), (r) => {
|
|
4
4
|
let i = e.suspend(() => t(r.signal));
|
|
5
5
|
if (n === void 0) return i;
|
|
@@ -9,5 +9,4 @@ var t = (t, n) => e.suspend(() => n?.aborted ? e.interrupt : e.acquireUseRelease
|
|
|
9
9
|
});
|
|
10
10
|
return e.raceFirst(i, a);
|
|
11
11
|
}, (t) => e.sync(() => t.abort())));
|
|
12
|
-
//#endregion
|
|
13
12
|
export { t as mediaCall };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/mediaTaskProvider.ts
|
|
2
2
|
var e = Symbol.for("@voltro/ai/mediaTaskProviders"), t = globalThis, n = () => t[e] ?? (t[e] = /* @__PURE__ */ new Map()), r = [
|
|
3
3
|
"mock",
|
|
4
4
|
"openai",
|
|
@@ -12,5 +12,4 @@ var e = Symbol.for("@voltro/ai/mediaTaskProviders"), t = globalThis, n = () => t
|
|
|
12
12
|
}, a = (e) => n().get(e), o = () => [...n().keys()].sort(), s = () => {
|
|
13
13
|
n().clear();
|
|
14
14
|
};
|
|
15
|
-
//#endregion
|
|
16
15
|
export { r as BUILTIN_MEDIA_PROVIDERS, s as clearMediaTaskProviders, a as mediaTaskProvider, i as registerMediaTaskProvider, o as registeredMediaTaskProviders };
|
package/dist/middleware.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defaultSettingsMiddleware as e, extractReasoningMiddleware as t, simulateStreamingMiddleware as n, wrapLanguageModel as r } from "ai";
|
|
2
|
-
|
|
2
|
+
// src/middleware.ts
|
|
3
3
|
var i = [], a = (...e) => {
|
|
4
4
|
let t = i;
|
|
5
5
|
return i = e, t;
|
|
@@ -28,5 +28,4 @@ var i = [], a = (...e) => {
|
|
|
28
28
|
}), e())
|
|
29
29
|
};
|
|
30
30
|
};
|
|
31
|
-
//#endregion
|
|
32
31
|
export { c as applyMiddleware, s as clearAiMiddleware, e as defaultSettingsMiddleware, t as extractReasoningMiddleware, o as getAiMiddleware, l as loggingMiddleware, a as setAiMiddleware, n as simulateStreamingMiddleware };
|
package/dist/observe.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { estimateCostUsd as e } from "./cost.js";
|
|
2
2
|
import { Effect as t, Metric as n, Stream as r } from "effect";
|
|
3
|
-
|
|
3
|
+
// src/observe.ts
|
|
4
4
|
var i = Array.from({ length: 16 }, (e, t) => .001 * 2 ** t), a = n.counter("voltro_ai_calls_total", { description: "Total AI provider calls (generate + stream)." }), o = n.counter("voltro_ai_call_errors_total", { description: "AI provider calls that errored." }), s = n.histogram("voltro_ai_call_duration_seconds", {
|
|
5
5
|
boundaries: i,
|
|
6
6
|
description: "AI provider call duration in seconds."
|
|
@@ -48,5 +48,4 @@ var i = Array.from({ length: 16 }, (e, t) => .001 * 2 ** t), a = n.counter("volt
|
|
|
48
48
|
"ai.operation": e.operation
|
|
49
49
|
} }));
|
|
50
50
|
};
|
|
51
|
-
//#endregion
|
|
52
51
|
export { d as aiCallAttributes, h as observeStream, m as withAiCallSpan };
|
package/dist/prompts.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect as e, Schema as t } from "effect";
|
|
2
2
|
import { and as n, eq as r, generateId as i, id as a, integer as o, queryFor as s, registerRetention as c, retentionTtlMsFromEnv as l, table as u, text as d, timestamp as f } from "@voltro/database";
|
|
3
3
|
import { createHash as p } from "node:crypto";
|
|
4
|
-
|
|
4
|
+
// src/prompts.ts
|
|
5
5
|
var m = (e) => `sha256:${p("sha256").update(e).digest("hex").slice(0, 16)}`, h = class extends t.TaggedError()("PromptRenderError", {
|
|
6
6
|
promptId: t.String,
|
|
7
7
|
missing: t.Array(t.String),
|
|
@@ -99,5 +99,4 @@ var m = (e) => `sha256:${p("sha256").update(e).digest("hex").slice(0, 16)}`, h =
|
|
|
99
99
|
let e = (await t.query(s(S).where(r("digest", n)).descriptor))[0];
|
|
100
100
|
return e === void 0 ? null : T(e);
|
|
101
101
|
}), O = (t, n) => e.promise(async () => [...await t.query(s(S).where(r("promptId", n)).orderBy("revision", "desc").descriptor)].sort((e, t) => (Number(t.revision) || 0) - (Number(e.revision) || 0)).map(T));
|
|
102
|
-
//#endregion
|
|
103
102
|
export { C as DEFAULT_PROMPT_RETENTION_HOURS, x as PROMPTS_TABLE, h as PromptRenderError, y as definePrompt, b as isRenderedPrompt, m as promptDigest, D as promptVersionByDigest, v as promptVersionDigest, O as promptVersionsFor, S as promptsTable, E as recordPromptVersion };
|
package/dist/provider.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { aiSetting as e, isProductionEnv as t } from "./aiSettings.js";
|
|
2
|
+
import { applyMiddleware as n } from "./middleware.js";
|
|
3
|
+
import { boundedGatewaySettings as r, gatewayImageModel as i, gatewayVideoModel as a, mediaResponseBudget as o } from "./gatewayMedia.js";
|
|
4
|
+
import { anthropic as s, createAnthropic as c } from "@ai-sdk/anthropic";
|
|
5
|
+
import { createOpenAI as l, openai as u } from "@ai-sdk/openai";
|
|
6
|
+
import { createGateway as d, gateway as f } from "@ai-sdk/gateway";
|
|
7
|
+
// src/provider.ts
|
|
8
|
+
var p = {
|
|
8
9
|
inputTokens: {
|
|
9
10
|
total: 0,
|
|
10
11
|
noCache: 0,
|
|
@@ -16,10 +17,10 @@ var d = {
|
|
|
16
17
|
text: 0,
|
|
17
18
|
reasoning: 0
|
|
18
19
|
}
|
|
19
|
-
},
|
|
20
|
+
}, m = (e) => ({
|
|
20
21
|
unified: e,
|
|
21
22
|
raw: void 0
|
|
22
|
-
}),
|
|
23
|
+
}), h = class {
|
|
23
24
|
turns;
|
|
24
25
|
cursor = 0;
|
|
25
26
|
calls = [];
|
|
@@ -39,12 +40,12 @@ var d = {
|
|
|
39
40
|
reset() {
|
|
40
41
|
this.cursor = 0, this.calls.length = 0;
|
|
41
42
|
}
|
|
42
|
-
},
|
|
43
|
+
}, g = (e) => (e.toolCalls ?? []).map((e, t) => ({
|
|
43
44
|
type: "tool-call",
|
|
44
45
|
toolCallId: `mock_tool_${t}`,
|
|
45
46
|
toolName: e.name,
|
|
46
47
|
input: JSON.stringify(e.input ?? {})
|
|
47
|
-
})),
|
|
48
|
+
})), _ = (e) => (e.sources ?? []).map((e, t) => e.sourceType === "document" ? {
|
|
48
49
|
type: "source",
|
|
49
50
|
sourceType: "document",
|
|
50
51
|
id: e.id ?? `mock_src_${t}`,
|
|
@@ -57,14 +58,14 @@ var d = {
|
|
|
57
58
|
id: e.id ?? `mock_src_${t}`,
|
|
58
59
|
url: e.url ?? "https://example.com",
|
|
59
60
|
...e.title === void 0 ? {} : { title: e.title }
|
|
60
|
-
}),
|
|
61
|
+
}), v = (e) => (e.files ?? []).map((e) => ({
|
|
61
62
|
type: "file",
|
|
62
63
|
mediaType: e.mediaType,
|
|
63
64
|
data: {
|
|
64
65
|
type: "data",
|
|
65
66
|
data: e.data
|
|
66
67
|
}
|
|
67
|
-
})),
|
|
68
|
+
})), y = (e) => [
|
|
68
69
|
{
|
|
69
70
|
type: "text-start",
|
|
70
71
|
id: "0"
|
|
@@ -78,7 +79,7 @@ var d = {
|
|
|
78
79
|
type: "text-end",
|
|
79
80
|
id: "0"
|
|
80
81
|
}
|
|
81
|
-
],
|
|
82
|
+
], b = (e) => e.length === 0 ? [] : [
|
|
82
83
|
{
|
|
83
84
|
type: "reasoning-start",
|
|
84
85
|
id: "r0"
|
|
@@ -92,7 +93,7 @@ var d = {
|
|
|
92
93
|
type: "reasoning-end",
|
|
93
94
|
id: "r0"
|
|
94
95
|
}
|
|
95
|
-
],
|
|
96
|
+
], x = (e, t, n, r) => ({
|
|
96
97
|
specificationVersion: "v4",
|
|
97
98
|
provider: "mock",
|
|
98
99
|
modelId: e,
|
|
@@ -109,16 +110,16 @@ var d = {
|
|
|
109
110
|
toolName: e.name,
|
|
110
111
|
input: JSON.stringify(e.input ?? {})
|
|
111
112
|
})),
|
|
112
|
-
finishReason:
|
|
113
|
-
usage:
|
|
113
|
+
finishReason: m("tool-calls"),
|
|
114
|
+
usage: p,
|
|
114
115
|
warnings: []
|
|
115
116
|
} : {
|
|
116
117
|
content: [{
|
|
117
118
|
type: "text",
|
|
118
119
|
text: o?.text ?? t ?? `[mock(${e})] ${s}`
|
|
119
120
|
}],
|
|
120
|
-
finishReason:
|
|
121
|
-
usage:
|
|
121
|
+
finishReason: m("stop"),
|
|
122
|
+
usage: p,
|
|
122
123
|
warnings: [],
|
|
123
124
|
...r === void 0 ? {} : { providerMetadata: r }
|
|
124
125
|
};
|
|
@@ -134,18 +135,18 @@ var d = {
|
|
|
134
135
|
error: Error(i.error.message)
|
|
135
136
|
}), s.push({
|
|
136
137
|
type: "finish",
|
|
137
|
-
finishReason:
|
|
138
|
-
usage:
|
|
139
|
-
})) : (s.push(...
|
|
138
|
+
finishReason: m("error"),
|
|
139
|
+
usage: p
|
|
140
|
+
})) : (s.push(...b(i?.reasoning ?? "")), o.length > 0 && s.push(...y(o)), s.push(..._(i ?? {})), s.push(...v(i ?? {})), s.push(...g(i ?? {})), s.push({
|
|
140
141
|
type: "finish",
|
|
141
|
-
finishReason:
|
|
142
|
-
usage:
|
|
142
|
+
finishReason: m(a ? "tool-calls" : "stop"),
|
|
143
|
+
usage: p
|
|
143
144
|
})), { stream: new ReadableStream({ start(e) {
|
|
144
145
|
for (let t of s) e.enqueue(t);
|
|
145
146
|
e.close();
|
|
146
147
|
} }) };
|
|
147
148
|
}
|
|
148
|
-
}),
|
|
149
|
+
}), S = "iVBORw0KGgo=", C = "SUQzBAAAAAAAAA==", w = "video/mp4", T = "mock transcript", E = (e, t) => ({
|
|
149
150
|
specificationVersion: "v4",
|
|
150
151
|
provider: "mock",
|
|
151
152
|
modelId: e,
|
|
@@ -164,7 +165,7 @@ var d = {
|
|
|
164
165
|
totalTokens: 0
|
|
165
166
|
}
|
|
166
167
|
})
|
|
167
|
-
}),
|
|
168
|
+
}), D = (e, t, n) => ({
|
|
168
169
|
specificationVersion: "v4",
|
|
169
170
|
provider: "mock",
|
|
170
171
|
modelId: e,
|
|
@@ -177,7 +178,7 @@ var d = {
|
|
|
177
178
|
},
|
|
178
179
|
...n === void 0 ? {} : { providerMetadata: n }
|
|
179
180
|
})
|
|
180
|
-
}),
|
|
181
|
+
}), O = (e, t, n) => ({
|
|
181
182
|
specificationVersion: "v4",
|
|
182
183
|
provider: "mock",
|
|
183
184
|
modelId: e,
|
|
@@ -195,7 +196,7 @@ var d = {
|
|
|
195
196
|
},
|
|
196
197
|
...n === void 0 ? {} : { providerMetadata: n }
|
|
197
198
|
})
|
|
198
|
-
}),
|
|
199
|
+
}), k = (e, t, n) => ({
|
|
199
200
|
specificationVersion: "v4",
|
|
200
201
|
provider: "mock",
|
|
201
202
|
modelId: e,
|
|
@@ -210,94 +211,108 @@ var d = {
|
|
|
210
211
|
},
|
|
211
212
|
...n === void 0 ? {} : { providerMetadata: n }
|
|
212
213
|
})
|
|
213
|
-
}),
|
|
214
|
+
}), A = (e) => e.apiKey !== void 0 || e.baseURL !== void 0, j = (e) => ({
|
|
214
215
|
...e.apiKey === void 0 ? {} : { apiKey: e.apiKey },
|
|
215
216
|
...e.baseURL === void 0 ? {} : { baseURL: e.baseURL }
|
|
216
|
-
}),
|
|
217
|
+
}), M = (e, t) => {
|
|
217
218
|
let r = (() => {
|
|
218
|
-
switch (
|
|
219
|
-
case "mock": return
|
|
220
|
-
case "anthropic": return
|
|
221
|
-
case "openai": return
|
|
222
|
-
case "gateway": return
|
|
219
|
+
switch (e.name) {
|
|
220
|
+
case "mock": return x(e.model ?? "mock", e.mockText, e.script, e.providerMetadata);
|
|
221
|
+
case "anthropic": return A(e) ? c(j(e))(e.model) : s(e.model);
|
|
222
|
+
case "openai": return A(e) ? l(j(e))(e.model) : u(e.model);
|
|
223
|
+
case "gateway": return A(e) ? d(j(e))(e.model) : f(e.model);
|
|
223
224
|
}
|
|
224
225
|
})();
|
|
225
|
-
return
|
|
226
|
-
},
|
|
226
|
+
return n(r, t);
|
|
227
|
+
}, N = (e) => {
|
|
227
228
|
switch (e.name) {
|
|
228
|
-
case "mock": return
|
|
229
|
-
case "openai": return
|
|
230
|
-
case "gateway": return
|
|
229
|
+
case "mock": return E(e.model ?? "mock", e.mockMedia?.imageBase64 ?? S);
|
|
230
|
+
case "openai": return A(e) ? l(j(e)).image(e.model) : u.image(e.model);
|
|
231
|
+
case "gateway": return i(r(j(e), o(e.maxResponseBytes)), e.model);
|
|
231
232
|
case "anthropic": throw Error("Provider 'anthropic' does not support image generation. Use 'openai' or 'gateway'.");
|
|
232
233
|
}
|
|
233
|
-
},
|
|
234
|
+
}, P = (e) => {
|
|
234
235
|
switch (e.name) {
|
|
235
|
-
case "mock": return
|
|
236
|
-
case "openai": return
|
|
237
|
-
case "gateway": return
|
|
236
|
+
case "mock": return D(e.model ?? "mock", e.mockMedia?.audioBase64 ?? C, e.providerMetadata);
|
|
237
|
+
case "openai": return A(e) ? l(j(e)).speech(e.model) : u.speech(e.model);
|
|
238
|
+
case "gateway": return d(r(j(e), o(e.maxResponseBytes))).speech(e.model);
|
|
238
239
|
case "anthropic": throw Error("Provider 'anthropic' does not support speech generation. Use 'openai' or 'gateway'.");
|
|
239
240
|
}
|
|
240
|
-
},
|
|
241
|
+
}, F = (e) => {
|
|
241
242
|
switch (e.name) {
|
|
242
|
-
case "mock": return
|
|
243
|
-
case "openai": return
|
|
244
|
-
case "gateway": return
|
|
243
|
+
case "mock": return O(e.model ?? "mock", e.mockMedia?.transcript ?? T, e.providerMetadata);
|
|
244
|
+
case "openai": return A(e) ? l(j(e)).transcription(e.model) : u.transcription(e.model);
|
|
245
|
+
case "gateway": return d(r(j(e), o(e.maxResponseBytes))).transcription(e.model);
|
|
245
246
|
case "anthropic": throw Error("Provider 'anthropic' does not support transcription. Use 'openai' or 'gateway'.");
|
|
246
247
|
}
|
|
247
|
-
},
|
|
248
|
+
}, I = (e) => {
|
|
248
249
|
switch (e.name) {
|
|
249
250
|
case "mock": {
|
|
250
251
|
let t = e.mockMedia, n = t?.videoBase64 === void 0 ? {
|
|
251
252
|
type: "url",
|
|
252
253
|
url: t?.videoUrl ?? `https://mock.local/${e.model ?? "mock"}.mp4`,
|
|
253
|
-
mediaType:
|
|
254
|
+
mediaType: w
|
|
254
255
|
} : {
|
|
255
256
|
type: "base64",
|
|
256
257
|
data: t.videoBase64,
|
|
257
|
-
mediaType:
|
|
258
|
+
mediaType: w
|
|
258
259
|
};
|
|
259
|
-
return
|
|
260
|
+
return k(e.model ?? "mock", n, e.providerMetadata);
|
|
260
261
|
}
|
|
261
|
-
case "gateway": return r(
|
|
262
|
+
case "gateway": return a(r(j(e), o(e.maxResponseBytes)), e.model);
|
|
262
263
|
case "openai": throw Error("Provider 'openai' does not support video generation. Use 'gateway'.");
|
|
263
264
|
case "anthropic": throw Error("Provider 'anthropic' does not support video generation. Use 'gateway'.");
|
|
264
265
|
}
|
|
265
|
-
},
|
|
266
|
-
let t =
|
|
267
|
-
return
|
|
268
|
-
},
|
|
266
|
+
}, L = null, R = (e) => {
|
|
267
|
+
let t = L;
|
|
268
|
+
return L = e, t;
|
|
269
|
+
}, z = () => L, B = (e) => {
|
|
269
270
|
switch (e.toLowerCase()) {
|
|
270
271
|
case "anthropic": return "ANTHROPIC_API_KEY";
|
|
271
272
|
case "openai": return "OPENAI_API_KEY";
|
|
272
273
|
case "gateway": return "AI_GATEWAY_API_KEY";
|
|
273
274
|
default: return;
|
|
274
275
|
}
|
|
275
|
-
},
|
|
276
|
-
if (
|
|
277
|
-
|
|
278
|
-
|
|
276
|
+
}, V = (t = process.env) => {
|
|
277
|
+
if (L) return {
|
|
278
|
+
name: L.name,
|
|
279
|
+
chosen: !0
|
|
280
|
+
};
|
|
281
|
+
let n = e("AI_PROVIDER", t);
|
|
282
|
+
return n === void 0 ? {
|
|
283
|
+
name: "mock",
|
|
284
|
+
chosen: !1
|
|
285
|
+
} : {
|
|
286
|
+
name: n.toLowerCase(),
|
|
287
|
+
chosen: !0
|
|
288
|
+
};
|
|
289
|
+
}, H = (n = process.env) => {
|
|
290
|
+
if (L) return L;
|
|
291
|
+
let r = V(n);
|
|
292
|
+
if (!r.chosen && t(n)) throw Error("No AI provider is chosen in this production process: AI_PROVIDER is unset and this call passes no `provider` (or its agent declares no `model`), so it would answer from the mock provider. Set AI_PROVIDER (anthropic | openai | gateway) for every process that makes model calls, or declare it in `defineEnv` with a `default`, or pass `provider` to the call. Set AI_PROVIDER=mock to serve mock answers deliberately.");
|
|
293
|
+
let i = r.name, a = e("AI_MODEL", n);
|
|
294
|
+
switch (i) {
|
|
279
295
|
case "mock": return {
|
|
280
296
|
name: "mock",
|
|
281
|
-
model:
|
|
297
|
+
model: a ?? "mock"
|
|
282
298
|
};
|
|
283
299
|
case "anthropic": return {
|
|
284
300
|
name: "anthropic",
|
|
285
|
-
model:
|
|
301
|
+
model: a ?? "claude-opus-4-8"
|
|
286
302
|
};
|
|
287
303
|
case "openai": return {
|
|
288
304
|
name: "openai",
|
|
289
|
-
model:
|
|
305
|
+
model: a ?? "gpt-5.5"
|
|
290
306
|
};
|
|
291
307
|
case "gateway": {
|
|
292
|
-
let e =
|
|
293
|
-
if (
|
|
308
|
+
let e = a === void 0 ? -1 : a.indexOf("/");
|
|
309
|
+
if (a === void 0 || e <= 0 || e === a.length - 1) throw Error("AI_PROVIDER=gateway requires AI_MODEL set to a 'creator/model' id, e.g. 'openai/gpt-5.5'");
|
|
294
310
|
return {
|
|
295
311
|
name: "gateway",
|
|
296
|
-
model:
|
|
312
|
+
model: a
|
|
297
313
|
};
|
|
298
314
|
}
|
|
299
|
-
default: throw Error(`Unknown AI_PROVIDER '${
|
|
315
|
+
default: throw Error(`Unknown AI_PROVIDER '${i}'. Expected one of: mock, anthropic, openai, gateway.`);
|
|
300
316
|
}
|
|
301
317
|
};
|
|
302
|
-
|
|
303
|
-
export { p as MockScript, L as getProviderOverride, z as providerFromEnv, R as providerKeyEnvVar, j as resolveImageModel, A as resolveModel, M as resolveSpeechModel, N as resolveTranscriptionModel, P as resolveVideoModel, I as setProviderOverride };
|
|
318
|
+
export { h as MockScript, z as getProviderOverride, V as providerChoice, H as providerFromEnv, B as providerKeyEnvVar, N as resolveImageModel, M as resolveModel, P as resolveSpeechModel, F as resolveTranscriptionModel, I as resolveVideoModel, R as setProviderOverride };
|