@sentrial/sdk 0.3.1 → 0.3.2
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/dist/index.cjs +86 -73
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +86 -73
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1178,17 +1178,6 @@ function wrapStreamText(originalFn, client, config) {
|
|
|
1178
1178
|
const completionTokens = usage?.completionTokens || 0;
|
|
1179
1179
|
const totalTokens = usage?.totalTokens || promptTokens + completionTokens;
|
|
1180
1180
|
const cost = calculateCostForCall(provider, modelId, promptTokens, completionTokens);
|
|
1181
|
-
await client.trackEvent({
|
|
1182
|
-
sessionId: sid,
|
|
1183
|
-
eventType: "llm_call",
|
|
1184
|
-
eventData: {
|
|
1185
|
-
model: modelId,
|
|
1186
|
-
provider,
|
|
1187
|
-
prompt_tokens: promptTokens,
|
|
1188
|
-
completion_tokens: completionTokens,
|
|
1189
|
-
total_tokens: totalTokens
|
|
1190
|
-
}
|
|
1191
|
-
});
|
|
1192
1181
|
await client.completeSession({
|
|
1193
1182
|
sessionId: sid,
|
|
1194
1183
|
success: true,
|
|
@@ -1200,6 +1189,34 @@ function wrapStreamText(originalFn, client, config) {
|
|
|
1200
1189
|
totalTokens
|
|
1201
1190
|
});
|
|
1202
1191
|
}
|
|
1192
|
+
const originalTextStream = result.textStream;
|
|
1193
|
+
let wrappedTextStream = null;
|
|
1194
|
+
const proxied = new Proxy(result, {
|
|
1195
|
+
get(target, prop, receiver) {
|
|
1196
|
+
if (prop === "textStream") {
|
|
1197
|
+
if (!wrappedTextStream) {
|
|
1198
|
+
let fullText = "";
|
|
1199
|
+
wrappedTextStream = (async function* () {
|
|
1200
|
+
try {
|
|
1201
|
+
for await (const chunk of originalTextStream) {
|
|
1202
|
+
fullText += chunk;
|
|
1203
|
+
yield chunk;
|
|
1204
|
+
}
|
|
1205
|
+
await trackCompletion(fullText);
|
|
1206
|
+
} catch (error) {
|
|
1207
|
+
await trackCompletion(
|
|
1208
|
+
fullText,
|
|
1209
|
+
error instanceof Error ? error : new Error(String(error))
|
|
1210
|
+
);
|
|
1211
|
+
throw error;
|
|
1212
|
+
}
|
|
1213
|
+
})();
|
|
1214
|
+
}
|
|
1215
|
+
return wrappedTextStream;
|
|
1216
|
+
}
|
|
1217
|
+
return Reflect.get(target, prop, receiver);
|
|
1218
|
+
}
|
|
1219
|
+
});
|
|
1203
1220
|
const textProp = result.text;
|
|
1204
1221
|
if (typeof textProp === "string") {
|
|
1205
1222
|
trackCompletion(textProp).catch(() => {
|
|
@@ -1212,30 +1229,8 @@ function wrapStreamText(originalFn, client, config) {
|
|
|
1212
1229
|
trackCompletion("", err instanceof Error ? err : new Error(String(err))).catch(() => {
|
|
1213
1230
|
});
|
|
1214
1231
|
});
|
|
1215
|
-
} else {
|
|
1216
|
-
const desc = Object.getOwnPropertyDescriptor(result, "textStream") ?? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(result), "textStream");
|
|
1217
|
-
const isWritable = !desc || desc.writable || desc.set;
|
|
1218
|
-
if (isWritable) {
|
|
1219
|
-
const originalTextStream = result.textStream;
|
|
1220
|
-
let fullText = "";
|
|
1221
|
-
result.textStream = (async function* () {
|
|
1222
|
-
try {
|
|
1223
|
-
for await (const chunk of originalTextStream) {
|
|
1224
|
-
fullText += chunk;
|
|
1225
|
-
yield chunk;
|
|
1226
|
-
}
|
|
1227
|
-
await trackCompletion(fullText);
|
|
1228
|
-
} catch (error) {
|
|
1229
|
-
await trackCompletion(
|
|
1230
|
-
"",
|
|
1231
|
-
error instanceof Error ? error : new Error(String(error))
|
|
1232
|
-
);
|
|
1233
|
-
throw error;
|
|
1234
|
-
}
|
|
1235
|
-
})();
|
|
1236
|
-
}
|
|
1237
1232
|
}
|
|
1238
|
-
return
|
|
1233
|
+
return proxied;
|
|
1239
1234
|
};
|
|
1240
1235
|
}
|
|
1241
1236
|
function wrapGenerateObject(originalFn, client, config) {
|
|
@@ -1322,46 +1317,64 @@ function wrapStreamObject(originalFn, client, config) {
|
|
|
1322
1317
|
}
|
|
1323
1318
|
})();
|
|
1324
1319
|
const result = originalFn(params);
|
|
1325
|
-
const
|
|
1326
|
-
if (
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1320
|
+
const originalObjectPromise = result.object;
|
|
1321
|
+
if (originalObjectPromise && typeof originalObjectPromise.then === "function") {
|
|
1322
|
+
let tracked = false;
|
|
1323
|
+
let wrappedObjectPromise = null;
|
|
1324
|
+
return new Proxy(result, {
|
|
1325
|
+
get(target, prop, receiver) {
|
|
1326
|
+
if (prop === "object") {
|
|
1327
|
+
if (!wrappedObjectPromise) {
|
|
1328
|
+
wrappedObjectPromise = originalObjectPromise.then(async (obj) => {
|
|
1329
|
+
if (tracked) return obj;
|
|
1330
|
+
tracked = true;
|
|
1331
|
+
const durationMs = Date.now() - startTime;
|
|
1332
|
+
const sid = await sessionPromise;
|
|
1333
|
+
if (!sid) return obj;
|
|
1334
|
+
let usage;
|
|
1335
|
+
try {
|
|
1336
|
+
usage = result.usage ? await result.usage : void 0;
|
|
1337
|
+
} catch {
|
|
1338
|
+
}
|
|
1339
|
+
const promptTokens = usage?.promptTokens || 0;
|
|
1340
|
+
const completionTokens = usage?.completionTokens || 0;
|
|
1341
|
+
const totalTokens = usage?.totalTokens || promptTokens + completionTokens;
|
|
1342
|
+
const cost = calculateCostForCall(provider, modelId, promptTokens, completionTokens);
|
|
1343
|
+
await client.completeSession({
|
|
1344
|
+
sessionId: sid,
|
|
1345
|
+
success: true,
|
|
1346
|
+
output: JSON.stringify(obj),
|
|
1347
|
+
durationMs,
|
|
1348
|
+
estimatedCost: cost,
|
|
1349
|
+
promptTokens,
|
|
1350
|
+
completionTokens,
|
|
1351
|
+
totalTokens
|
|
1352
|
+
});
|
|
1353
|
+
return obj;
|
|
1354
|
+
}).catch(async (error) => {
|
|
1355
|
+
if (tracked) throw error;
|
|
1356
|
+
tracked = true;
|
|
1357
|
+
const durationMs = Date.now() - startTime;
|
|
1358
|
+
const sid = await sessionPromise;
|
|
1359
|
+
if (!sid) throw error;
|
|
1360
|
+
await client.trackError({
|
|
1361
|
+
sessionId: sid,
|
|
1362
|
+
errorType: error instanceof Error ? error.name : "Error",
|
|
1363
|
+
errorMessage: error instanceof Error ? error.message : "Unknown error"
|
|
1364
|
+
});
|
|
1365
|
+
await client.completeSession({
|
|
1366
|
+
sessionId: sid,
|
|
1367
|
+
success: false,
|
|
1368
|
+
failureReason: error instanceof Error ? error.message : "Unknown error",
|
|
1369
|
+
durationMs
|
|
1370
|
+
});
|
|
1371
|
+
throw error;
|
|
1372
|
+
});
|
|
1373
|
+
}
|
|
1374
|
+
return wrappedObjectPromise;
|
|
1375
|
+
}
|
|
1376
|
+
return Reflect.get(target, prop, receiver);
|
|
1335
1377
|
}
|
|
1336
|
-
const promptTokens = usage?.promptTokens || 0;
|
|
1337
|
-
const completionTokens = usage?.completionTokens || 0;
|
|
1338
|
-
const totalTokens = usage?.totalTokens || promptTokens + completionTokens;
|
|
1339
|
-
const cost = calculateCostForCall(provider, modelId, promptTokens, completionTokens);
|
|
1340
|
-
await client.completeSession({
|
|
1341
|
-
sessionId: sid,
|
|
1342
|
-
success: true,
|
|
1343
|
-
output: JSON.stringify(obj),
|
|
1344
|
-
durationMs,
|
|
1345
|
-
estimatedCost: cost,
|
|
1346
|
-
promptTokens,
|
|
1347
|
-
completionTokens,
|
|
1348
|
-
totalTokens
|
|
1349
|
-
});
|
|
1350
|
-
}).catch(async (error) => {
|
|
1351
|
-
const durationMs = Date.now() - startTime;
|
|
1352
|
-
const sid = await sessionPromise;
|
|
1353
|
-
if (!sid) return;
|
|
1354
|
-
await client.trackError({
|
|
1355
|
-
sessionId: sid,
|
|
1356
|
-
errorType: error instanceof Error ? error.name : "Error",
|
|
1357
|
-
errorMessage: error instanceof Error ? error.message : "Unknown error"
|
|
1358
|
-
});
|
|
1359
|
-
await client.completeSession({
|
|
1360
|
-
sessionId: sid,
|
|
1361
|
-
success: false,
|
|
1362
|
-
failureReason: error instanceof Error ? error.message : "Unknown error",
|
|
1363
|
-
durationMs
|
|
1364
|
-
});
|
|
1365
1378
|
});
|
|
1366
1379
|
}
|
|
1367
1380
|
return result;
|