@sentrial/sdk 0.3.0 → 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 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,41 +1189,48 @@ 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(() => {
1206
1223
  });
1207
1224
  } else if (textProp != null && typeof textProp.then === "function") {
1208
- const originalTextPromise = textProp;
1209
- result.text = originalTextPromise.then((text) => {
1225
+ textProp.then((text) => {
1210
1226
  trackCompletion(text).catch(() => {
1211
1227
  });
1212
- return text;
1213
1228
  }).catch((err) => {
1214
1229
  trackCompletion("", err instanceof Error ? err : new Error(String(err))).catch(() => {
1215
1230
  });
1216
- throw err;
1217
1231
  });
1218
- } else {
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
1232
  }
1237
- return result;
1233
+ return proxied;
1238
1234
  };
1239
1235
  }
1240
1236
  function wrapGenerateObject(originalFn, client, config) {
@@ -1321,50 +1317,64 @@ function wrapStreamObject(originalFn, client, config) {
1321
1317
  }
1322
1318
  })();
1323
1319
  const result = originalFn(params);
1324
- if (result.object) {
1325
- const originalObjectPromise = result.object;
1326
- result.object = originalObjectPromise.then(async (obj) => {
1327
- const durationMs = Date.now() - startTime;
1328
- const sid = await sessionPromise;
1329
- if (sid) {
1330
- let usage;
1331
- try {
1332
- usage = result.usage ? await result.usage : void 0;
1333
- } catch {
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;
1334
1375
  }
1335
- const promptTokens = usage?.promptTokens || 0;
1336
- const completionTokens = usage?.completionTokens || 0;
1337
- const totalTokens = usage?.totalTokens || promptTokens + completionTokens;
1338
- const cost = calculateCostForCall(provider, modelId, promptTokens, completionTokens);
1339
- await client.completeSession({
1340
- sessionId: sid,
1341
- success: true,
1342
- output: JSON.stringify(obj),
1343
- durationMs,
1344
- estimatedCost: cost,
1345
- promptTokens,
1346
- completionTokens,
1347
- totalTokens
1348
- });
1349
- }
1350
- return obj;
1351
- }).catch(async (error) => {
1352
- const durationMs = Date.now() - startTime;
1353
- const sid = await sessionPromise;
1354
- if (sid) {
1355
- await client.trackError({
1356
- sessionId: sid,
1357
- errorType: error instanceof Error ? error.name : "Error",
1358
- errorMessage: error instanceof Error ? error.message : "Unknown error"
1359
- });
1360
- await client.completeSession({
1361
- sessionId: sid,
1362
- success: false,
1363
- failureReason: error instanceof Error ? error.message : "Unknown error",
1364
- durationMs
1365
- });
1376
+ return Reflect.get(target, prop, receiver);
1366
1377
  }
1367
- throw error;
1368
1378
  });
1369
1379
  }
1370
1380
  return result;