@tangle-network/agent-provider-cli-bridge 0.6.0 → 0.6.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.
@@ -191,6 +191,8 @@ export async function collectCliBridgeTurnResult(source, run, options, transport
191
191
  let observedModelRequests = 0;
192
192
  let modelRequestsKnown = false;
193
193
  let terminalModelRequests;
194
+ let servedModel;
195
+ let systemFingerprint;
194
196
  let streamError;
195
197
  try {
196
198
  for await (const event of source) {
@@ -203,6 +205,13 @@ export async function collectCliBridgeTurnResult(source, run, options, transport
203
205
  text += event.data.delta;
204
206
  }
205
207
  usage = addTokenUsage(usage, event.usage);
208
+ const eventModel = event.data.model;
209
+ const eventFingerprint = event.data.system_fingerprint;
210
+ if (typeof eventModel === "string" && eventModel.length > 0)
211
+ servedModel = eventModel;
212
+ if (typeof eventFingerprint === "string" && eventFingerprint.length > 0) {
213
+ systemFingerprint = eventFingerprint;
214
+ }
206
215
  const modelRequests = modelRequestCount(event.data.modelRequests);
207
216
  if (modelRequests !== undefined) {
208
217
  if (event.type === "result") {
@@ -252,6 +261,8 @@ export async function collectCliBridgeTurnResult(source, run, options, transport
252
261
  : modelRequestsKnown
253
262
  ? { modelRequests: observedModelRequests }
254
263
  : {}),
264
+ ...(servedModel === undefined ? {} : { model: servedModel }),
265
+ ...(systemFingerprint === undefined ? {} : { system_fingerprint: systemFingerprint }),
255
266
  },
256
267
  events,
257
268
  };
@@ -1,6 +1,6 @@
1
1
  import { retainedEventsWithIdentity, retainedReplayRequest, } from "./retained-event-cursor.js";
2
2
  import { requestHeaders, trimSlash } from "./transport.js";
3
- import { modelRequestsFromOpenAi, parseSse, safeJson, toolCallsFromDelta, usageFromOpenAi, } from "./wire.js";
3
+ import { modelRequestsFromOpenAi, parseSse, responseIdentityFromOpenAi, safeJson, toolCallsFromDelta, usageFromOpenAi, } from "./wire.js";
4
4
  export class CliBridgeRequestRejectedError extends Error {
5
5
  status;
6
6
  constructor(status, detail) {
@@ -48,6 +48,8 @@ export async function* streamCliBridgeTurn(options, turn, requestBody, transport
48
48
  let sawUsage = false;
49
49
  let observedModelRequests = 0;
50
50
  let modelRequestsKnown = false;
51
+ let servedModel;
52
+ let systemFingerprint;
51
53
  let textBoundaryPending = false;
52
54
  let terminalCursor;
53
55
  let sawProtocolEnd = false;
@@ -71,6 +73,16 @@ export async function* streamCliBridgeTurn(options, turn, requestBody, transport
71
73
  }
72
74
  const choice = Array.isArray(parsed.choices) ? parsed.choices[0] : undefined;
73
75
  const delta = choice?.delta;
76
+ const responseIdentity = responseIdentityFromOpenAi(parsed);
77
+ if (responseIdentity?.model !== undefined)
78
+ servedModel = responseIdentity.model;
79
+ if (responseIdentity?.system_fingerprint !== undefined) {
80
+ systemFingerprint = responseIdentity.system_fingerprint;
81
+ }
82
+ const identityData = {
83
+ ...(servedModel === undefined ? {} : { model: servedModel }),
84
+ ...(systemFingerprint === undefined ? {} : { system_fingerprint: systemFingerprint }),
85
+ };
74
86
  const toolCallDeltas = toolCallsFromDelta(delta);
75
87
  const rawChunk = delta && typeof delta.content === "string" ? delta.content : "";
76
88
  const chunk = rawChunk &&
@@ -95,7 +107,10 @@ export async function* streamCliBridgeTurn(options, turn, requestBody, transport
95
107
  }
96
108
  frameEvents.push({
97
109
  type: "usage",
98
- data: nextModelRequests === undefined ? {} : { modelRequests: nextModelRequests },
110
+ data: {
111
+ ...identityData,
112
+ ...(nextModelRequests === undefined ? {} : { modelRequests: nextModelRequests }),
113
+ },
99
114
  ...(nextUsage ? { usage: nextUsage } : {}),
100
115
  });
101
116
  }
@@ -115,7 +130,7 @@ export async function* streamCliBridgeTurn(options, turn, requestBody, transport
115
130
  };
116
131
  frameEvents.push({
117
132
  type: "message.part.updated",
118
- data: { part, delta: chunk },
133
+ data: { ...identityData, part, delta: chunk },
119
134
  normalized,
120
135
  });
121
136
  }
@@ -172,6 +187,7 @@ export async function* streamCliBridgeTurn(options, turn, requestBody, transport
172
187
  finalText: text,
173
188
  finishReason: choice.finish_reason,
174
189
  status: "completed",
190
+ ...identityData,
175
191
  ...(modelRequestsKnown ? { modelRequests: observedModelRequests } : {}),
176
192
  },
177
193
  });
@@ -196,6 +212,10 @@ export async function* streamCliBridgeTurn(options, turn, requestBody, transport
196
212
  finalText: result.text,
197
213
  finishReason: result.finishReason,
198
214
  status: "completed",
215
+ ...(result.model === undefined ? {} : { model: result.model }),
216
+ ...(result.system_fingerprint === undefined
217
+ ? {}
218
+ : { system_fingerprint: result.system_fingerprint }),
199
219
  runId,
200
220
  sessionId,
201
221
  ...(turn.executionId === undefined ? {} : { executionId: turn.executionId }),
@@ -242,10 +262,15 @@ async function readFullCliBridgeResult(options, requestBody, transport, signal,
242
262
  }
243
263
  const usage = usageFromOpenAi(parsed?.usage);
244
264
  const modelRequests = modelRequestsFromOpenAi(parsed?.usage);
265
+ const responseIdentity = responseIdentityFromOpenAi(parsed);
245
266
  return {
246
267
  text: message.content,
247
268
  finishReason: choice.finish_reason,
248
269
  ...(usage ? { usage } : {}),
249
270
  ...(modelRequests === undefined ? {} : { modelRequests }),
271
+ ...(responseIdentity?.model === undefined ? {} : { model: responseIdentity.model }),
272
+ ...(responseIdentity?.system_fingerprint === undefined
273
+ ? {}
274
+ : { system_fingerprint: responseIdentity.system_fingerprint }),
250
275
  };
251
276
  }
package/dist/wire.d.ts CHANGED
@@ -16,6 +16,11 @@ export declare function toolCallsFromDelta(value: unknown): Array<{
16
16
  export declare function safeJson(value: string): Record<string, unknown> | null;
17
17
  export declare function usageFromOpenAi(value: unknown): TokenUsage | undefined;
18
18
  export declare function modelRequestsFromOpenAi(value: unknown): number | undefined;
19
+ /** Preserve the provider identity that cli-bridge returns on each completion frame. */
20
+ export declare function responseIdentityFromOpenAi(value: unknown): {
21
+ model?: string;
22
+ system_fingerprint?: string;
23
+ } | undefined;
19
24
  export declare function modelRequestCount(value: unknown): number | undefined;
20
25
  export declare function cliBridgeRunId(environmentId: string, turn: AgentTurnInput, turnId: string): string;
21
26
  export declare function runSnapshot(value: string): CliBridgeRunSnapshot;
package/dist/wire.js CHANGED
@@ -166,6 +166,20 @@ export function modelRequestsFromOpenAi(value) {
166
166
  return undefined;
167
167
  return modelRequestCount(value.model_requests);
168
168
  }
169
+ /** Preserve the provider identity that cli-bridge returns on each completion frame. */
170
+ export function responseIdentityFromOpenAi(value) {
171
+ if (!value || typeof value !== "object")
172
+ return undefined;
173
+ const record = value;
174
+ const model = nonEmptyString(record.model);
175
+ const systemFingerprint = nonEmptyString(record.system_fingerprint);
176
+ if (model === undefined && systemFingerprint === undefined)
177
+ return undefined;
178
+ return {
179
+ ...(model === undefined ? {} : { model }),
180
+ ...(systemFingerprint === undefined ? {} : { system_fingerprint: systemFingerprint }),
181
+ };
182
+ }
169
183
  export function modelRequestCount(value) {
170
184
  return nonNegativeSafeInteger(value);
171
185
  }
@@ -179,6 +193,9 @@ function finiteNonNegativeNumber(value) {
179
193
  ? value
180
194
  : undefined;
181
195
  }
196
+ function nonEmptyString(value) {
197
+ return typeof value === "string" && value.length > 0 ? value : undefined;
198
+ }
182
199
  export function cliBridgeRunId(environmentId, turn, turnId) {
183
200
  if (turn.executionId &&
184
201
  turn.executionId.length <= 128 &&
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-provider-cli-bridge",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "AgentEnvironmentProvider adapter for cli-bridge /v1/chat/completions",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -47,8 +47,8 @@
47
47
  "LICENSE"
48
48
  ],
49
49
  "dependencies": {
50
- "@tangle-network/agent-interface": "0.47.0",
51
- "undici": "7.28.0"
50
+ "@tangle-network/agent-interface": "0.49.0",
51
+ "undici": "7.29.0"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/node": "25.6.0",