veryfront 0.1.263 → 0.1.264
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/esm/deno.js +1 -1
- package/esm/src/agent/index.d.ts +1 -0
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +1 -0
- package/esm/src/chat/hosted-ui-chunk-mapping.d.ts +111 -0
- package/esm/src/chat/hosted-ui-chunk-mapping.d.ts.map +1 -0
- package/esm/src/chat/hosted-ui-chunk-mapping.js +123 -0
- package/esm/src/chat/index.d.ts +1 -0
- package/esm/src/chat/index.d.ts.map +1 -1
- package/esm/src/chat/index.js +1 -0
- package/esm/src/provider/runtime-loader/provider-embedding-responses.d.ts +5 -0
- package/esm/src/provider/runtime-loader/provider-embedding-responses.d.ts.map +1 -0
- package/esm/src/provider/runtime-loader/provider-embedding-responses.js +50 -0
- package/esm/src/provider/runtime-loader/provider-finish-reasons.d.ts +9 -0
- package/esm/src/provider/runtime-loader/provider-finish-reasons.d.ts.map +1 -0
- package/esm/src/provider/runtime-loader/provider-finish-reasons.js +60 -0
- package/esm/src/provider/runtime-loader/provider-sse.d.ts +5 -0
- package/esm/src/provider/runtime-loader/provider-sse.d.ts.map +1 -0
- package/esm/src/provider/runtime-loader/provider-sse.js +23 -0
- package/esm/src/provider/runtime-loader/provider-usage.d.ts +19 -0
- package/esm/src/provider/runtime-loader/provider-usage.d.ts.map +1 -0
- package/esm/src/provider/runtime-loader/provider-usage.js +109 -0
- package/esm/src/provider/runtime-loader.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader.js +4 -240
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/agent/index.ts +5 -0
- package/src/src/chat/hosted-ui-chunk-mapping.ts +303 -0
- package/src/src/chat/index.ts +5 -0
- package/src/src/provider/runtime-loader/provider-embedding-responses.ts +61 -0
- package/src/src/provider/runtime-loader/provider-finish-reasons.ts +69 -0
- package/src/src/provider/runtime-loader/provider-sse.ts +29 -0
- package/src/src/provider/runtime-loader/provider-usage.ts +135 -0
- package/src/src/provider/runtime-loader.ts +21 -300
- package/src/src/utils/version-constant.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-loader.d.ts","sourceRoot":"","sources":["../../../src/src/provider/runtime-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-loader.d.ts","sourceRoot":"","sources":["../../../src/src/provider/runtime-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoCjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,CAAC;AAE3E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAqWD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAm5DF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAsEd;AA0gBD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAsEd;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,MAAM,GACd,YAAY,CAyEd;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAkEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAuClB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CA6ClB"}
|
|
@@ -1,59 +1,14 @@
|
|
|
1
1
|
import { getAnthropicMessagesUrl, getGoogleEmbeddingUrl, getGoogleGenerateContentUrl, getGoogleStreamGenerateContentUrl, getOpenAIChatCompletionsUrl, getOpenAIEmbeddingUrl, getOpenAIResponsesUrl, } from "./runtime-loader/provider-endpoints.js";
|
|
2
|
+
import { extractGoogleEmbedding, extractGoogleUsageTokens, extractOpenAIEmbeddings, extractOpenAIUsageTokens, } from "./runtime-loader/provider-embedding-responses.js";
|
|
3
|
+
import { normalizeAnthropicFinishReason, normalizeGoogleFinishReason, normalizeOpenAIFinishReason, normalizeOpenAIResponsesFinishReason, } from "./runtime-loader/provider-finish-reasons.js";
|
|
2
4
|
import { createAnthropicRequestInit, createGoogleRequestInit, createOpenAIRequestInit, } from "./runtime-loader/provider-request-init.js";
|
|
5
|
+
import { parseSseChunk } from "./runtime-loader/provider-sse.js";
|
|
6
|
+
import { extractAnthropicUsage, extractGoogleUsage, extractOpenAIResponsesUsage, extractOpenAIUsage, mergeUsage, } from "./runtime-loader/provider-usage.js";
|
|
3
7
|
import { requestJson, requestStream } from "./runtime-loader/provider-http.js";
|
|
4
8
|
import { readRecord } from "./runtime-loader/provider-records.js";
|
|
5
9
|
import { TOOL_INPUT_PENDING_THRESHOLD_MS, withToolInputStatusTransitions, } from "./runtime-loader/tool-input-status.js";
|
|
6
10
|
export { ProviderError, ProviderOverloadedError, ProviderQuotaError, ProviderRateLimitError, ProviderRequestError, } from "./runtime-loader/provider-http.js";
|
|
7
11
|
export { TOOL_INPUT_PENDING_THRESHOLD_MS, withToolInputStatusTransitions };
|
|
8
|
-
function isNumberArray(value) {
|
|
9
|
-
return Array.isArray(value) && value.every((entry) => typeof entry === "number");
|
|
10
|
-
}
|
|
11
|
-
function extractOpenAIEmbeddings(payload) {
|
|
12
|
-
const record = readRecord(payload);
|
|
13
|
-
const data = record?.data;
|
|
14
|
-
if (!Array.isArray(data)) {
|
|
15
|
-
throw new Error("Invalid OpenAI embedding response: data array missing");
|
|
16
|
-
}
|
|
17
|
-
const embeddings = [];
|
|
18
|
-
for (const item of data) {
|
|
19
|
-
const itemRecord = readRecord(item);
|
|
20
|
-
const embedding = itemRecord?.embedding;
|
|
21
|
-
if (!isNumberArray(embedding)) {
|
|
22
|
-
throw new Error("Invalid OpenAI embedding response: embedding vector missing");
|
|
23
|
-
}
|
|
24
|
-
embeddings.push(embedding);
|
|
25
|
-
}
|
|
26
|
-
return embeddings;
|
|
27
|
-
}
|
|
28
|
-
function extractOpenAIUsageTokens(payload) {
|
|
29
|
-
const record = readRecord(payload);
|
|
30
|
-
const usage = readRecord(record?.usage);
|
|
31
|
-
const totalTokens = usage?.total_tokens;
|
|
32
|
-
return typeof totalTokens === "number" ? totalTokens : undefined;
|
|
33
|
-
}
|
|
34
|
-
function extractGoogleEmbedding(payload) {
|
|
35
|
-
const record = readRecord(payload);
|
|
36
|
-
const embeddings = record?.embeddings;
|
|
37
|
-
if (Array.isArray(embeddings) && embeddings.length > 0) {
|
|
38
|
-
const firstEmbedding = readRecord(embeddings[0]);
|
|
39
|
-
const values = firstEmbedding?.values;
|
|
40
|
-
if (isNumberArray(values)) {
|
|
41
|
-
return values;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const embedding = readRecord(record?.embedding);
|
|
45
|
-
const values = embedding?.values;
|
|
46
|
-
if (isNumberArray(values)) {
|
|
47
|
-
return values;
|
|
48
|
-
}
|
|
49
|
-
throw new Error("Invalid Google embedding response: embedding vector missing");
|
|
50
|
-
}
|
|
51
|
-
function extractGoogleUsageTokens(payload) {
|
|
52
|
-
const record = readRecord(payload);
|
|
53
|
-
const usageMetadata = readRecord(record?.usageMetadata);
|
|
54
|
-
const promptTokenCount = usageMetadata?.promptTokenCount;
|
|
55
|
-
return typeof promptTokenCount === "number" ? promptTokenCount : undefined;
|
|
56
|
-
}
|
|
57
12
|
function createWarningCollector() {
|
|
58
13
|
const list = [];
|
|
59
14
|
return {
|
|
@@ -162,63 +117,6 @@ function readProviderOptions(providerOptions, ...providerNames) {
|
|
|
162
117
|
}
|
|
163
118
|
return merged;
|
|
164
119
|
}
|
|
165
|
-
function normalizeAnthropicFinishReason(raw) {
|
|
166
|
-
if (typeof raw !== "string") {
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
switch (raw) {
|
|
170
|
-
case "tool_use":
|
|
171
|
-
return { unified: "tool-calls", raw };
|
|
172
|
-
case "end_turn":
|
|
173
|
-
case "stop_sequence":
|
|
174
|
-
return { unified: "stop", raw };
|
|
175
|
-
case "max_tokens":
|
|
176
|
-
return { unified: "length", raw };
|
|
177
|
-
default:
|
|
178
|
-
return raw;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
function extractAnthropicUsage(payload) {
|
|
182
|
-
const record = readRecord(payload);
|
|
183
|
-
const usage = readRecord(record?.usage);
|
|
184
|
-
if (!usage) {
|
|
185
|
-
return undefined;
|
|
186
|
-
}
|
|
187
|
-
const inputTokens = usage.input_tokens;
|
|
188
|
-
const outputTokens = usage.output_tokens;
|
|
189
|
-
const cacheCreationInputTokens = usage.cache_creation_input_tokens;
|
|
190
|
-
const cacheReadInputTokens = usage.cache_read_input_tokens;
|
|
191
|
-
return {
|
|
192
|
-
inputTokens: typeof inputTokens === "number" ? inputTokens : undefined,
|
|
193
|
-
outputTokens: typeof outputTokens === "number" ? outputTokens : undefined,
|
|
194
|
-
totalTokens: typeof inputTokens === "number" || typeof outputTokens === "number"
|
|
195
|
-
? (typeof inputTokens === "number" ? inputTokens : 0) +
|
|
196
|
-
(typeof outputTokens === "number" ? outputTokens : 0)
|
|
197
|
-
: undefined,
|
|
198
|
-
...(typeof cacheCreationInputTokens === "number" ? { cacheCreationInputTokens } : {}),
|
|
199
|
-
...(typeof cacheReadInputTokens === "number" ? { cacheReadInputTokens } : {}),
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
function mergeUsage(current, next) {
|
|
203
|
-
if (!current) {
|
|
204
|
-
return next;
|
|
205
|
-
}
|
|
206
|
-
if (!next) {
|
|
207
|
-
return current;
|
|
208
|
-
}
|
|
209
|
-
const inputTokens = next.inputTokens ?? current.inputTokens;
|
|
210
|
-
const outputTokens = next.outputTokens ?? current.outputTokens;
|
|
211
|
-
const cacheCreationInputTokens = next.cacheCreationInputTokens ??
|
|
212
|
-
current.cacheCreationInputTokens;
|
|
213
|
-
const cacheReadInputTokens = next.cacheReadInputTokens ?? current.cacheReadInputTokens;
|
|
214
|
-
return {
|
|
215
|
-
inputTokens,
|
|
216
|
-
outputTokens,
|
|
217
|
-
totalTokens: (inputTokens ?? 0) + (outputTokens ?? 0),
|
|
218
|
-
...(cacheCreationInputTokens !== undefined ? { cacheCreationInputTokens } : {}),
|
|
219
|
-
...(cacheReadInputTokens !== undefined ? { cacheReadInputTokens } : {}),
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
120
|
function normalizeAnthropicToolChoice(toolChoice) {
|
|
223
121
|
if (typeof toolChoice === "string") {
|
|
224
122
|
return { type: toolChoice };
|
|
@@ -730,29 +628,6 @@ function buildAnthropicGenerateResult(payload) {
|
|
|
730
628
|
usage: extractAnthropicUsage(payload),
|
|
731
629
|
};
|
|
732
630
|
}
|
|
733
|
-
function parseSseChunk(chunk) {
|
|
734
|
-
const blocks = chunk.split(/\r?\n\r?\n/);
|
|
735
|
-
const remainder = blocks.pop() ?? "";
|
|
736
|
-
const events = blocks.flatMap((block) => {
|
|
737
|
-
const dataLines = block.split(/\r?\n/)
|
|
738
|
-
.filter((line) => line.startsWith("data:"))
|
|
739
|
-
.map((line) => line.slice(5).trimStart());
|
|
740
|
-
if (!dataLines.length) {
|
|
741
|
-
return [];
|
|
742
|
-
}
|
|
743
|
-
const payload = dataLines.join("\n").trim();
|
|
744
|
-
if (payload === "[DONE]") {
|
|
745
|
-
return ["[DONE]"];
|
|
746
|
-
}
|
|
747
|
-
try {
|
|
748
|
-
return [JSON.parse(payload)];
|
|
749
|
-
}
|
|
750
|
-
catch {
|
|
751
|
-
return [];
|
|
752
|
-
}
|
|
753
|
-
});
|
|
754
|
-
return { events, remainder };
|
|
755
|
-
}
|
|
756
631
|
async function* streamAnthropicCompatibleParts(stream) {
|
|
757
632
|
const decoder = new TextDecoder();
|
|
758
633
|
let buffer = "";
|
|
@@ -951,36 +826,6 @@ async function* streamAnthropicCompatibleParts(stream) {
|
|
|
951
826
|
...(usage ? { usage } : {}),
|
|
952
827
|
};
|
|
953
828
|
}
|
|
954
|
-
function normalizeOpenAIFinishReason(raw) {
|
|
955
|
-
if (typeof raw !== "string") {
|
|
956
|
-
return null;
|
|
957
|
-
}
|
|
958
|
-
if (raw === "tool_calls") {
|
|
959
|
-
return { unified: "tool-calls", raw };
|
|
960
|
-
}
|
|
961
|
-
if (raw === "content_filter") {
|
|
962
|
-
return { unified: "content-filter", raw };
|
|
963
|
-
}
|
|
964
|
-
return raw;
|
|
965
|
-
}
|
|
966
|
-
function extractOpenAIUsage(payload) {
|
|
967
|
-
const record = readRecord(payload);
|
|
968
|
-
const usage = readRecord(record?.usage);
|
|
969
|
-
if (!usage) {
|
|
970
|
-
return undefined;
|
|
971
|
-
}
|
|
972
|
-
const inputTokens = usage.prompt_tokens;
|
|
973
|
-
const outputTokens = usage.completion_tokens;
|
|
974
|
-
const totalTokens = usage.total_tokens;
|
|
975
|
-
const promptTokensDetails = readRecord(usage.prompt_tokens_details);
|
|
976
|
-
const cachedTokens = promptTokensDetails?.cached_tokens;
|
|
977
|
-
return {
|
|
978
|
-
inputTokens: typeof inputTokens === "number" ? inputTokens : undefined,
|
|
979
|
-
outputTokens: typeof outputTokens === "number" ? outputTokens : undefined,
|
|
980
|
-
totalTokens: typeof totalTokens === "number" ? totalTokens : undefined,
|
|
981
|
-
...(typeof cachedTokens === "number" ? { cacheReadInputTokens: cachedTokens } : {}),
|
|
982
|
-
};
|
|
983
|
-
}
|
|
984
829
|
function extractOpenAIContentText(content) {
|
|
985
830
|
if (typeof content === "string") {
|
|
986
831
|
return content;
|
|
@@ -1173,41 +1018,6 @@ function buildOpenAIChatRequest(modelId, providerName, options, stream, warnings
|
|
|
1173
1018
|
Object.assign(body, providerOpts);
|
|
1174
1019
|
return body;
|
|
1175
1020
|
}
|
|
1176
|
-
function normalizeGoogleFinishReason(raw) {
|
|
1177
|
-
if (typeof raw !== "string") {
|
|
1178
|
-
return null;
|
|
1179
|
-
}
|
|
1180
|
-
switch (raw) {
|
|
1181
|
-
case "STOP":
|
|
1182
|
-
return { unified: "stop", raw };
|
|
1183
|
-
case "MAX_TOKENS":
|
|
1184
|
-
return { unified: "length", raw };
|
|
1185
|
-
case "SAFETY":
|
|
1186
|
-
case "RECITATION":
|
|
1187
|
-
return { unified: "content-filter", raw };
|
|
1188
|
-
default:
|
|
1189
|
-
return raw.toLowerCase();
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
function extractGoogleUsage(payload) {
|
|
1193
|
-
const record = readRecord(payload);
|
|
1194
|
-
const usage = readRecord(record?.usageMetadata);
|
|
1195
|
-
if (!usage) {
|
|
1196
|
-
return undefined;
|
|
1197
|
-
}
|
|
1198
|
-
const inputTokens = usage.promptTokenCount;
|
|
1199
|
-
const outputTokens = usage.candidatesTokenCount;
|
|
1200
|
-
const totalTokens = usage.totalTokenCount;
|
|
1201
|
-
const cachedContentTokenCount = usage.cachedContentTokenCount;
|
|
1202
|
-
return {
|
|
1203
|
-
inputTokens: typeof inputTokens === "number" ? inputTokens : undefined,
|
|
1204
|
-
outputTokens: typeof outputTokens === "number" ? outputTokens : undefined,
|
|
1205
|
-
totalTokens: typeof totalTokens === "number" ? totalTokens : undefined,
|
|
1206
|
-
...(typeof cachedContentTokenCount === "number"
|
|
1207
|
-
? { cacheReadInputTokens: cachedContentTokenCount }
|
|
1208
|
-
: {}),
|
|
1209
|
-
};
|
|
1210
|
-
}
|
|
1211
1021
|
function toGoogleContents(prompt) {
|
|
1212
1022
|
const systemParts = [];
|
|
1213
1023
|
const contents = [];
|
|
@@ -2047,52 +1857,6 @@ function buildOpenAIResponsesRequest(modelId, providerName, options, stream, war
|
|
|
2047
1857
|
Object.assign(body, readProviderOptions(options.providerOptions, "openai", providerName));
|
|
2048
1858
|
return body;
|
|
2049
1859
|
}
|
|
2050
|
-
/**
|
|
2051
|
-
* The Responses API uses `input_tokens` / `output_tokens` field names
|
|
2052
|
-
* instead of Chat Completions' `prompt_tokens` / `completion_tokens`.
|
|
2053
|
-
* It also nests cached input tokens under `input_tokens_details` and
|
|
2054
|
-
* exposes reasoning tokens via `output_tokens_details.reasoning_tokens`.
|
|
2055
|
-
*/
|
|
2056
|
-
function extractOpenAIResponsesUsage(payload) {
|
|
2057
|
-
const record = readRecord(payload);
|
|
2058
|
-
// Streaming usage lives on response.completed inside `response.usage`;
|
|
2059
|
-
// non-streaming has it at the top level.
|
|
2060
|
-
const responseRecord = readRecord(record?.response);
|
|
2061
|
-
const usage = readRecord(responseRecord?.usage) ?? readRecord(record?.usage);
|
|
2062
|
-
if (!usage)
|
|
2063
|
-
return undefined;
|
|
2064
|
-
const inputTokens = typeof usage.input_tokens === "number" ? usage.input_tokens : undefined;
|
|
2065
|
-
const outputTokens = typeof usage.output_tokens === "number" ? usage.output_tokens : undefined;
|
|
2066
|
-
const totalTokens = typeof usage.total_tokens === "number"
|
|
2067
|
-
? usage.total_tokens
|
|
2068
|
-
: (inputTokens !== undefined || outputTokens !== undefined
|
|
2069
|
-
? (inputTokens ?? 0) + (outputTokens ?? 0)
|
|
2070
|
-
: undefined);
|
|
2071
|
-
const inputDetails = readRecord(usage.input_tokens_details);
|
|
2072
|
-
const cachedTokens = inputDetails?.cached_tokens;
|
|
2073
|
-
return {
|
|
2074
|
-
inputTokens,
|
|
2075
|
-
outputTokens,
|
|
2076
|
-
totalTokens,
|
|
2077
|
-
...(typeof cachedTokens === "number" ? { cacheReadInputTokens: cachedTokens } : {}),
|
|
2078
|
-
};
|
|
2079
|
-
}
|
|
2080
|
-
function normalizeOpenAIResponsesFinishReason(raw) {
|
|
2081
|
-
if (typeof raw !== "string")
|
|
2082
|
-
return null;
|
|
2083
|
-
switch (raw) {
|
|
2084
|
-
case "completed":
|
|
2085
|
-
return { unified: "stop", raw };
|
|
2086
|
-
case "incomplete":
|
|
2087
|
-
return { unified: "length", raw };
|
|
2088
|
-
case "failed":
|
|
2089
|
-
return { unified: "error", raw };
|
|
2090
|
-
case "in_progress":
|
|
2091
|
-
return null;
|
|
2092
|
-
default:
|
|
2093
|
-
return raw;
|
|
2094
|
-
}
|
|
2095
|
-
}
|
|
2096
1860
|
function buildOpenAIResponsesGenerateResult(payload) {
|
|
2097
1861
|
const record = readRecord(payload);
|
|
2098
1862
|
const output = Array.isArray(record?.output) ? record.output : [];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.264";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
package/src/src/agent/index.ts
CHANGED
|
@@ -398,6 +398,11 @@ export {
|
|
|
398
398
|
normalizeChatUiMessageChunk,
|
|
399
399
|
normalizeChatUiMessageStream,
|
|
400
400
|
} from "../chat/chat-ui-message-helpers.js";
|
|
401
|
+
export {
|
|
402
|
+
type HostedStreamPartForUiChunkMapping,
|
|
403
|
+
type HostedUiChunkMappingOptions,
|
|
404
|
+
mapHostedStreamPartToChatUiChunks,
|
|
405
|
+
} from "../chat/hosted-ui-chunk-mapping.js";
|
|
401
406
|
export {
|
|
402
407
|
expandAllowedRemoteToolNames,
|
|
403
408
|
getProviderNativeToolNames,
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import type { ChatMessageMetadata, ChatUiMessageChunk } from "./protocol.js";
|
|
2
|
+
|
|
3
|
+
export type HostedUiChunkMappingOptions = {
|
|
4
|
+
messageId?: string | null;
|
|
5
|
+
reasoningMessageId?: string | null;
|
|
6
|
+
sendReasoning?: boolean;
|
|
7
|
+
sendSources?: boolean;
|
|
8
|
+
onError?: (error: unknown) => string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type HostedStreamSourcePart =
|
|
12
|
+
| {
|
|
13
|
+
type: "source";
|
|
14
|
+
id: string;
|
|
15
|
+
sourceType: "url";
|
|
16
|
+
url: string;
|
|
17
|
+
title?: string;
|
|
18
|
+
}
|
|
19
|
+
| {
|
|
20
|
+
type: "source";
|
|
21
|
+
id: string;
|
|
22
|
+
sourceType: "document";
|
|
23
|
+
mediaType: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
filename?: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type HostedStreamPartForUiChunkMapping =
|
|
29
|
+
| {
|
|
30
|
+
type: "start";
|
|
31
|
+
}
|
|
32
|
+
| {
|
|
33
|
+
type: "start-step";
|
|
34
|
+
}
|
|
35
|
+
| {
|
|
36
|
+
type: "finish-step";
|
|
37
|
+
}
|
|
38
|
+
| {
|
|
39
|
+
type: "finish";
|
|
40
|
+
finishReason?: string;
|
|
41
|
+
}
|
|
42
|
+
| {
|
|
43
|
+
type: "abort";
|
|
44
|
+
}
|
|
45
|
+
| {
|
|
46
|
+
type: "reasoning-start";
|
|
47
|
+
id: string;
|
|
48
|
+
}
|
|
49
|
+
| {
|
|
50
|
+
type: "reasoning-delta";
|
|
51
|
+
id: string;
|
|
52
|
+
text: string;
|
|
53
|
+
}
|
|
54
|
+
| {
|
|
55
|
+
type: "reasoning-end";
|
|
56
|
+
id: string;
|
|
57
|
+
}
|
|
58
|
+
| {
|
|
59
|
+
type: "text-start";
|
|
60
|
+
id: string;
|
|
61
|
+
}
|
|
62
|
+
| {
|
|
63
|
+
type: "text-delta";
|
|
64
|
+
id: string;
|
|
65
|
+
text: string;
|
|
66
|
+
}
|
|
67
|
+
| {
|
|
68
|
+
type: "text-end";
|
|
69
|
+
id: string;
|
|
70
|
+
}
|
|
71
|
+
| HostedStreamSourcePart
|
|
72
|
+
| {
|
|
73
|
+
type: "file";
|
|
74
|
+
file: {
|
|
75
|
+
mediaType: string;
|
|
76
|
+
base64: string;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
| {
|
|
80
|
+
type: "tool-input-start";
|
|
81
|
+
id: string;
|
|
82
|
+
toolName: string;
|
|
83
|
+
}
|
|
84
|
+
| {
|
|
85
|
+
type: "tool-input-delta";
|
|
86
|
+
id: string;
|
|
87
|
+
delta: string;
|
|
88
|
+
}
|
|
89
|
+
| {
|
|
90
|
+
type: "tool-call";
|
|
91
|
+
toolCallId: string;
|
|
92
|
+
toolName: string;
|
|
93
|
+
input: unknown;
|
|
94
|
+
invalid: true;
|
|
95
|
+
error: unknown;
|
|
96
|
+
}
|
|
97
|
+
| {
|
|
98
|
+
type: "tool-call";
|
|
99
|
+
toolCallId: string;
|
|
100
|
+
toolName: string;
|
|
101
|
+
input: unknown;
|
|
102
|
+
invalid?: false;
|
|
103
|
+
}
|
|
104
|
+
| {
|
|
105
|
+
type: "tool-approval-request";
|
|
106
|
+
approvalId: string;
|
|
107
|
+
toolCall: {
|
|
108
|
+
toolCallId: string;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
| {
|
|
112
|
+
type: "tool-result";
|
|
113
|
+
toolCallId: string;
|
|
114
|
+
toolName: string;
|
|
115
|
+
input: unknown;
|
|
116
|
+
output: unknown;
|
|
117
|
+
}
|
|
118
|
+
| {
|
|
119
|
+
type: "tool-error";
|
|
120
|
+
toolCallId: string;
|
|
121
|
+
toolName: string;
|
|
122
|
+
input: unknown;
|
|
123
|
+
error: unknown;
|
|
124
|
+
}
|
|
125
|
+
| {
|
|
126
|
+
type: "tool-output-denied";
|
|
127
|
+
toolCallId: string;
|
|
128
|
+
}
|
|
129
|
+
| {
|
|
130
|
+
type: "error";
|
|
131
|
+
error: unknown;
|
|
132
|
+
}
|
|
133
|
+
| {
|
|
134
|
+
type: "tool-input-end";
|
|
135
|
+
}
|
|
136
|
+
| {
|
|
137
|
+
type: "raw";
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
function defaultOnError(error: unknown): string {
|
|
141
|
+
return error instanceof Error ? error.message : String(error);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function mapHostedStreamSourceToUiChunks(
|
|
145
|
+
part: HostedStreamSourcePart,
|
|
146
|
+
sendSources: boolean,
|
|
147
|
+
): ChatUiMessageChunk<ChatMessageMetadata>[] {
|
|
148
|
+
if (!sendSources) {
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (part.sourceType === "url") {
|
|
153
|
+
return [{
|
|
154
|
+
type: "source-url",
|
|
155
|
+
sourceId: part.id,
|
|
156
|
+
url: part.url,
|
|
157
|
+
...(part.title ? { title: part.title } : {}),
|
|
158
|
+
}];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return [
|
|
162
|
+
{
|
|
163
|
+
type: "source-document",
|
|
164
|
+
sourceId: part.id,
|
|
165
|
+
mediaType: part.mediaType,
|
|
166
|
+
title: part.title ?? part.filename ?? part.id,
|
|
167
|
+
...(part.filename ? { filename: part.filename } : {}),
|
|
168
|
+
},
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function mapToolCallPartToUiChunks(
|
|
173
|
+
part: Extract<HostedStreamPartForUiChunkMapping, { type: "tool-call" }>,
|
|
174
|
+
onError: (error: unknown) => string,
|
|
175
|
+
): ChatUiMessageChunk<ChatMessageMetadata>[] {
|
|
176
|
+
if (part.invalid) {
|
|
177
|
+
return [{
|
|
178
|
+
type: "tool-input-error",
|
|
179
|
+
toolCallId: part.toolCallId,
|
|
180
|
+
toolName: part.toolName,
|
|
181
|
+
input: part.input,
|
|
182
|
+
errorText: onError(part.error),
|
|
183
|
+
}];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return [{
|
|
187
|
+
type: "tool-input-available",
|
|
188
|
+
toolCallId: part.toolCallId,
|
|
189
|
+
toolName: part.toolName,
|
|
190
|
+
input: part.input,
|
|
191
|
+
}];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function mapToolErrorPartToUiChunks(
|
|
195
|
+
part: Extract<HostedStreamPartForUiChunkMapping, { type: "tool-error" }>,
|
|
196
|
+
onError: (error: unknown) => string,
|
|
197
|
+
): ChatUiMessageChunk<ChatMessageMetadata>[] {
|
|
198
|
+
return [
|
|
199
|
+
{
|
|
200
|
+
type: "tool-input-start",
|
|
201
|
+
toolCallId: part.toolCallId,
|
|
202
|
+
toolName: part.toolName,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
type: "tool-input-error",
|
|
206
|
+
toolCallId: part.toolCallId,
|
|
207
|
+
toolName: part.toolName,
|
|
208
|
+
input: part.input,
|
|
209
|
+
errorText: onError(part.error),
|
|
210
|
+
},
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function mapHostedStreamPartToChatUiChunks(
|
|
215
|
+
part: HostedStreamPartForUiChunkMapping,
|
|
216
|
+
options: HostedUiChunkMappingOptions = {},
|
|
217
|
+
): ChatUiMessageChunk<ChatMessageMetadata>[] {
|
|
218
|
+
const onError = options.onError ?? defaultOnError;
|
|
219
|
+
const sendReasoning = options.sendReasoning ?? true;
|
|
220
|
+
const sendSources = options.sendSources ?? true;
|
|
221
|
+
|
|
222
|
+
switch (part.type) {
|
|
223
|
+
case "start":
|
|
224
|
+
return [{ type: "start", ...(options.messageId ? { messageId: options.messageId } : {}) }];
|
|
225
|
+
|
|
226
|
+
case "start-step":
|
|
227
|
+
return [{ type: "start-step" }];
|
|
228
|
+
|
|
229
|
+
case "finish-step":
|
|
230
|
+
return [{ type: "finish-step" }];
|
|
231
|
+
|
|
232
|
+
case "finish":
|
|
233
|
+
return [{
|
|
234
|
+
type: "finish",
|
|
235
|
+
...(part.finishReason ? { finishReason: part.finishReason } : {}),
|
|
236
|
+
}];
|
|
237
|
+
|
|
238
|
+
case "abort":
|
|
239
|
+
return [{ type: "abort" }];
|
|
240
|
+
|
|
241
|
+
case "reasoning-start":
|
|
242
|
+
return [{ type: "reasoning-start", id: options.reasoningMessageId ?? part.id }];
|
|
243
|
+
|
|
244
|
+
case "reasoning-delta":
|
|
245
|
+
return sendReasoning
|
|
246
|
+
? [{ type: "reasoning-delta", id: options.reasoningMessageId ?? part.id, delta: part.text }]
|
|
247
|
+
: [];
|
|
248
|
+
|
|
249
|
+
case "reasoning-end":
|
|
250
|
+
return [{ type: "reasoning-end", id: options.reasoningMessageId ?? part.id }];
|
|
251
|
+
|
|
252
|
+
case "text-start":
|
|
253
|
+
return [{ type: "text-start", id: options.messageId ?? part.id }];
|
|
254
|
+
|
|
255
|
+
case "text-delta":
|
|
256
|
+
return [{ type: "text-delta", id: options.messageId ?? part.id, delta: part.text }];
|
|
257
|
+
|
|
258
|
+
case "text-end":
|
|
259
|
+
return [{ type: "text-end", id: options.messageId ?? part.id }];
|
|
260
|
+
|
|
261
|
+
case "source":
|
|
262
|
+
return mapHostedStreamSourceToUiChunks(part, sendSources);
|
|
263
|
+
|
|
264
|
+
case "file":
|
|
265
|
+
return [{
|
|
266
|
+
type: "file",
|
|
267
|
+
mediaType: part.file.mediaType,
|
|
268
|
+
url: `data:${part.file.mediaType};base64,${part.file.base64}`,
|
|
269
|
+
}];
|
|
270
|
+
|
|
271
|
+
case "tool-input-start":
|
|
272
|
+
return [{ type: "tool-input-start", toolCallId: part.id, toolName: part.toolName }];
|
|
273
|
+
|
|
274
|
+
case "tool-input-delta":
|
|
275
|
+
return [{ type: "tool-input-delta", toolCallId: part.id, inputTextDelta: part.delta }];
|
|
276
|
+
|
|
277
|
+
case "tool-call":
|
|
278
|
+
return mapToolCallPartToUiChunks(part, onError);
|
|
279
|
+
|
|
280
|
+
case "tool-approval-request":
|
|
281
|
+
return [{
|
|
282
|
+
type: "tool-approval-request",
|
|
283
|
+
approvalId: part.approvalId,
|
|
284
|
+
toolCallId: part.toolCall.toolCallId,
|
|
285
|
+
}];
|
|
286
|
+
|
|
287
|
+
case "tool-result":
|
|
288
|
+
return [{ type: "tool-output-available", toolCallId: part.toolCallId, output: part.output }];
|
|
289
|
+
|
|
290
|
+
case "tool-error":
|
|
291
|
+
return mapToolErrorPartToUiChunks(part, onError);
|
|
292
|
+
|
|
293
|
+
case "tool-output-denied":
|
|
294
|
+
return [{ type: "tool-output-denied", toolCallId: part.toolCallId }];
|
|
295
|
+
|
|
296
|
+
case "error":
|
|
297
|
+
return [{ type: "error", errorText: onError(part.error) }];
|
|
298
|
+
|
|
299
|
+
case "tool-input-end":
|
|
300
|
+
case "raw":
|
|
301
|
+
return [];
|
|
302
|
+
}
|
|
303
|
+
}
|
package/src/src/chat/index.ts
CHANGED
|
@@ -236,6 +236,11 @@ export {
|
|
|
236
236
|
normalizeChatUiMessageChunk,
|
|
237
237
|
normalizeChatUiMessageStream,
|
|
238
238
|
} from "./chat-ui-message-helpers.js";
|
|
239
|
+
export {
|
|
240
|
+
type HostedStreamPartForUiChunkMapping,
|
|
241
|
+
type HostedUiChunkMappingOptions,
|
|
242
|
+
mapHostedStreamPartToChatUiChunks,
|
|
243
|
+
} from "./hosted-ui-chunk-mapping.js";
|
|
239
244
|
|
|
240
245
|
export {
|
|
241
246
|
useCompletion,
|