@tangle-network/agent-provider-cli-bridge 0.6.0 → 0.6.1
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/retained-execution.js +11 -0
- package/dist/retained-stream.js +28 -3
- package/dist/wire.d.ts +5 -0
- package/dist/wire.js +17 -0
- package/package.json +3 -3
|
@@ -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
|
};
|
package/dist/retained-stream.js
CHANGED
|
@@ -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:
|
|
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.
|
|
3
|
+
"version": "0.6.1",
|
|
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.
|
|
51
|
-
"undici": "7.
|
|
50
|
+
"@tangle-network/agent-interface": "0.48.0",
|
|
51
|
+
"undici": "7.29.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/node": "25.6.0",
|