@traceai/cohere 0.1.0 → 0.1.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/README.md +78 -369
- package/dist/esm/attributes.d.ts +11 -0
- package/dist/esm/attributes.d.ts.map +1 -0
- package/dist/esm/attributes.js +240 -0
- package/dist/esm/attributes.js.map +1 -0
- package/dist/esm/instrumentation.d.ts +11 -20
- package/dist/esm/instrumentation.d.ts.map +1 -1
- package/dist/esm/instrumentation.js +175 -344
- package/dist/esm/instrumentation.js.map +1 -1
- package/dist/esm/stream.d.ts +6 -0
- package/dist/esm/stream.d.ts.map +1 -0
- package/dist/esm/stream.js +215 -0
- package/dist/esm/stream.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esnext/attributes.d.ts +11 -0
- package/dist/esnext/attributes.d.ts.map +1 -0
- package/dist/esnext/attributes.js +248 -0
- package/dist/esnext/attributes.js.map +1 -0
- package/dist/esnext/instrumentation.d.ts +11 -20
- package/dist/esnext/instrumentation.d.ts.map +1 -1
- package/dist/esnext/instrumentation.js +178 -331
- package/dist/esnext/instrumentation.js.map +1 -1
- package/dist/esnext/stream.d.ts +6 -0
- package/dist/esnext/stream.d.ts.map +1 -0
- package/dist/esnext/stream.js +203 -0
- package/dist/esnext/stream.js.map +1 -0
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/esnext/version.js.map +1 -1
- package/dist/src/__tests__/attributes.test.d.ts +2 -0
- package/dist/src/__tests__/attributes.test.d.ts.map +1 -0
- package/dist/src/__tests__/attributes.test.js +50 -0
- package/dist/src/__tests__/attributes.test.js.map +1 -0
- package/dist/src/__tests__/auto.test.d.ts +2 -0
- package/dist/src/__tests__/auto.test.d.ts.map +1 -0
- package/dist/src/__tests__/auto.test.js +70 -0
- package/dist/src/__tests__/auto.test.js.map +1 -0
- package/dist/src/__tests__/instrumentation.test.js +1 -1
- package/dist/src/__tests__/instrumentation.test.js.map +1 -1
- package/dist/src/__tests__/lifecycle.test.d.ts +2 -0
- package/dist/src/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/src/__tests__/lifecycle.test.js +232 -0
- package/dist/src/__tests__/lifecycle.test.js.map +1 -0
- package/dist/src/__tests__/metadata.test.d.ts +2 -0
- package/dist/src/__tests__/metadata.test.d.ts.map +1 -0
- package/dist/src/__tests__/metadata.test.js +320 -0
- package/dist/src/__tests__/metadata.test.js.map +1 -0
- package/dist/src/__tests__/sdk.test.d.ts +2 -0
- package/dist/src/__tests__/sdk.test.d.ts.map +1 -0
- package/dist/src/__tests__/sdk.test.js +883 -0
- package/dist/src/__tests__/sdk.test.js.map +1 -0
- package/dist/src/__tests__/timing.test.d.ts +2 -0
- package/dist/src/__tests__/timing.test.d.ts.map +1 -0
- package/dist/src/__tests__/timing.test.js +158 -0
- package/dist/src/__tests__/timing.test.js.map +1 -0
- package/dist/src/attributes.d.ts +11 -0
- package/dist/src/attributes.d.ts.map +1 -0
- package/dist/src/attributes.js +257 -0
- package/dist/src/attributes.js.map +1 -0
- package/dist/src/instrumentation.d.ts +11 -20
- package/dist/src/instrumentation.d.ts.map +1 -1
- package/dist/src/instrumentation.js +176 -329
- package/dist/src/instrumentation.js.map +1 -1
- package/dist/src/stream.d.ts +6 -0
- package/dist/src/stream.d.ts.map +1 -0
- package/dist/src/stream.js +215 -0
- package/dist/src/stream.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -11
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { context } from "@opentelemetry/api";
|
|
2
|
+
import { performance } from "node:perf_hooks";
|
|
3
|
+
import { object, list } from "./attributes.js";
|
|
4
|
+
/** Ignore metadata/empty deltas. Inspect content even when capture is disabled,
|
|
5
|
+
* without retaining it, so privacy does not change timing semantics.
|
|
6
|
+
*/
|
|
7
|
+
function hasGeneratedContent(value) {
|
|
8
|
+
const event = object(value);
|
|
9
|
+
const type = event.type ?? event.eventType ?? event.event_type;
|
|
10
|
+
const message = object(object(event.delta).message);
|
|
11
|
+
const nonempty = (value) => typeof value === "string" && value.length > 0;
|
|
12
|
+
const toolContent = (value) => {
|
|
13
|
+
const tool = object(value);
|
|
14
|
+
const fn = object(tool.function);
|
|
15
|
+
return nonempty(tool.text) || nonempty(tool.name) || nonempty(tool.parameters) || nonempty(fn.name) || nonempty(fn.arguments);
|
|
16
|
+
};
|
|
17
|
+
switch (type) {
|
|
18
|
+
case "text-generation": return nonempty(event.text);
|
|
19
|
+
case "content-start":
|
|
20
|
+
case "content-delta": {
|
|
21
|
+
const content = object(message.content);
|
|
22
|
+
return nonempty(content.text) || nonempty(content.thinking);
|
|
23
|
+
}
|
|
24
|
+
case "tool-plan-delta": return nonempty(message.toolPlan ?? message.tool_plan);
|
|
25
|
+
case "tool-call-start":
|
|
26
|
+
case "tool-call-delta": return toolContent(message.toolCalls ?? message.tool_calls);
|
|
27
|
+
case "tool-calls-chunk": return toolContent(event.toolCallDelta ?? event.tool_call_delta);
|
|
28
|
+
case "tool-calls-generation": return nonempty(event.text) || list(event.toolCalls ?? event.tool_calls).some(toolContent);
|
|
29
|
+
default: return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Aggregate content, not the event log. Consumers still receive original events. */
|
|
33
|
+
class ChatAccumulator {
|
|
34
|
+
constructor(captureContent) {
|
|
35
|
+
this.captureContent = captureContent;
|
|
36
|
+
this.text = "";
|
|
37
|
+
this.toolPlan = "";
|
|
38
|
+
this.content = new Map();
|
|
39
|
+
this.tools = new Map();
|
|
40
|
+
this.citations = new Map();
|
|
41
|
+
this.response = {};
|
|
42
|
+
}
|
|
43
|
+
add(value) {
|
|
44
|
+
const event = object(value);
|
|
45
|
+
const type = event.type ?? event.eventType ?? event.event_type;
|
|
46
|
+
const delta = object(event.delta);
|
|
47
|
+
const message = object(delta.message);
|
|
48
|
+
if (type === "message-start" || type === "stream-start") {
|
|
49
|
+
const id = event.id ?? event.generationId ?? event.generation_id;
|
|
50
|
+
if (typeof id === "string")
|
|
51
|
+
this.response.id = id;
|
|
52
|
+
}
|
|
53
|
+
if (this.captureContent) {
|
|
54
|
+
if ((type === "citation-start" || type === "citation-end") && message.citations) {
|
|
55
|
+
const index = typeof event.index === "number" ? event.index : 0;
|
|
56
|
+
this.citations.set(index, { ...this.citations.get(index), ...object(message.citations) });
|
|
57
|
+
}
|
|
58
|
+
if (type === "text-generation" && typeof event.text === "string")
|
|
59
|
+
this.text += event.text;
|
|
60
|
+
if (type === "content-start" || type === "content-delta") {
|
|
61
|
+
const content = object(message.content);
|
|
62
|
+
const index = typeof event.index === "number" ? event.index : 0;
|
|
63
|
+
const previous = this.content.get(index) ?? {};
|
|
64
|
+
const block = { ...previous };
|
|
65
|
+
// Keep reasoning separate from visible text, preserving block order and
|
|
66
|
+
// partial content even when a stream ends before its terminal event.
|
|
67
|
+
for (const key of ["text", "thinking"]) {
|
|
68
|
+
if (typeof content[key] === "string") {
|
|
69
|
+
block.type = content.type ?? block.type ?? key;
|
|
70
|
+
block[key] = String(previous[key] ?? "") + content[key];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (block.type)
|
|
74
|
+
this.content.set(index, block);
|
|
75
|
+
if (typeof content.text === "string")
|
|
76
|
+
this.text += content.text;
|
|
77
|
+
}
|
|
78
|
+
if (type === "tool-plan-delta") {
|
|
79
|
+
const plan = message.toolPlan ?? message.tool_plan;
|
|
80
|
+
if (typeof plan === "string")
|
|
81
|
+
this.toolPlan += plan;
|
|
82
|
+
}
|
|
83
|
+
if (type === "tool-calls-chunk") {
|
|
84
|
+
const call = object(event.toolCallDelta ?? event.tool_call_delta);
|
|
85
|
+
if (typeof call.text === "string")
|
|
86
|
+
this.toolPlan += call.text;
|
|
87
|
+
const index = typeof call.index === "number" ? call.index : 0;
|
|
88
|
+
const previous = this.tools.get(index) ?? {};
|
|
89
|
+
this.tools.set(index, {
|
|
90
|
+
...previous,
|
|
91
|
+
...(typeof call.name === "string" ? { name: call.name } : {}),
|
|
92
|
+
// These are JSON fragments, not objects: retain unfinished arguments.
|
|
93
|
+
parameters: String(previous.parameters ?? "") + String(call.parameters ?? ""),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (type === "tool-calls-generation") {
|
|
97
|
+
if (typeof event.text === "string")
|
|
98
|
+
this.toolPlan = event.text;
|
|
99
|
+
this.tools.clear();
|
|
100
|
+
list(event.toolCalls ?? event.tool_calls).forEach((call, index) => this.tools.set(index, object(call)));
|
|
101
|
+
}
|
|
102
|
+
if (type === "tool-call-start" || type === "tool-call-delta") {
|
|
103
|
+
const call = object(message.toolCalls ?? message.tool_calls);
|
|
104
|
+
const index = typeof event.index === "number" ? event.index : 0;
|
|
105
|
+
const previous = this.tools.get(index) ?? {};
|
|
106
|
+
const fn = object(call.function);
|
|
107
|
+
const previousFn = object(previous.function);
|
|
108
|
+
this.tools.set(index, {
|
|
109
|
+
...previous, ...call,
|
|
110
|
+
function: { ...previousFn, ...fn, arguments: String(previousFn.arguments ?? "") + String(fn.arguments ?? "") },
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (type === "stream-end") {
|
|
115
|
+
const response = object(event.response);
|
|
116
|
+
// V1's terminal text is authoritative after provisional tool chunks.
|
|
117
|
+
if (this.toolPlan && typeof response.text === "string" && response.text)
|
|
118
|
+
this.toolPlan = response.text;
|
|
119
|
+
this.response = { ...this.response, ...response, finishReason: event.finishReason ?? event.finish_reason ?? response.finishReason ?? response.finish_reason };
|
|
120
|
+
}
|
|
121
|
+
if (type === "message-end")
|
|
122
|
+
this.response = { ...this.response, usage: delta.usage, finishReason: delta.finishReason ?? delta.finish_reason };
|
|
123
|
+
return type === "stream-end" || type === "message-end";
|
|
124
|
+
}
|
|
125
|
+
result() {
|
|
126
|
+
if (!this.captureContent)
|
|
127
|
+
return {
|
|
128
|
+
id: this.response.id, generationId: this.response.generationId ?? this.response.generation_id,
|
|
129
|
+
usage: this.response.usage, meta: this.response.meta, finishReason: this.response.finishReason,
|
|
130
|
+
};
|
|
131
|
+
// V1's terminal response has authoritative text/tool calls; v2 only sends usage.
|
|
132
|
+
return {
|
|
133
|
+
text: this.text,
|
|
134
|
+
toolCalls: [...this.tools].sort(([a], [b]) => a - b).map(([, call]) => call),
|
|
135
|
+
...(this.content.size || this.toolPlan || this.citations.size ? { message: {
|
|
136
|
+
role: "assistant",
|
|
137
|
+
...(this.content.size ? { content: [...this.content].sort(([a], [b]) => a - b).map(([, block]) => block) } : {}),
|
|
138
|
+
...(this.toolPlan ? { toolPlan: this.toolPlan } : {}),
|
|
139
|
+
...(this.citations.size ? { citations: [...this.citations].sort(([a], [b]) => a - b).map(([, citation]) => citation) } : {}),
|
|
140
|
+
} } : {}),
|
|
141
|
+
...this.response,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export function wrapStream(stream, execContext, captureContent, finish, requestStart) {
|
|
146
|
+
const accumulator = new ChatAccumulator(captureContent);
|
|
147
|
+
let timeToFirstTokenMs;
|
|
148
|
+
const signal = stream.controller?.signal;
|
|
149
|
+
let ended = false;
|
|
150
|
+
const end = (error, cancelled = false) => {
|
|
151
|
+
if (ended)
|
|
152
|
+
return;
|
|
153
|
+
ended = true;
|
|
154
|
+
signal?.removeEventListener("abort", onAbort);
|
|
155
|
+
finish(accumulator.result(), error, cancelled, timeToFirstTokenMs);
|
|
156
|
+
};
|
|
157
|
+
const onAbort = () => end(undefined, true);
|
|
158
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
159
|
+
if (signal?.aborted)
|
|
160
|
+
onAbort();
|
|
161
|
+
return new Proxy(stream, {
|
|
162
|
+
get(target, key) {
|
|
163
|
+
if (key === Symbol.asyncIterator)
|
|
164
|
+
return () => {
|
|
165
|
+
let iterator;
|
|
166
|
+
try {
|
|
167
|
+
iterator = context.with(execContext, () => target[Symbol.asyncIterator]());
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
end(error ?? new Error("Cohere stream failed"));
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
const invoke = async (method, value) => {
|
|
174
|
+
try {
|
|
175
|
+
const fn = iterator[method];
|
|
176
|
+
if (!fn) {
|
|
177
|
+
if (method === "throw")
|
|
178
|
+
throw value;
|
|
179
|
+
end(undefined, method === "return");
|
|
180
|
+
return { done: true, value };
|
|
181
|
+
}
|
|
182
|
+
const result = await context.with(execContext, () => fn.call(iterator, value));
|
|
183
|
+
if (!ended && !result.done) {
|
|
184
|
+
if (timeToFirstTokenMs === undefined && hasGeneratedContent(result.value)) {
|
|
185
|
+
timeToFirstTokenMs = performance.now() - requestStart;
|
|
186
|
+
}
|
|
187
|
+
const terminal = accumulator.add(result.value);
|
|
188
|
+
if (terminal)
|
|
189
|
+
end();
|
|
190
|
+
}
|
|
191
|
+
if (!ended && (result.done || method === "return")) {
|
|
192
|
+
// Terminal events finish the span above. A clean transport EOF
|
|
193
|
+
// without one is still an incomplete generation, not success.
|
|
194
|
+
end(method === "return" ? undefined : new Error("Cohere stream ended without a terminal event"), method === "return");
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
end(error ?? new Error("Cohere stream failed"));
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
return {
|
|
204
|
+
next: (value) => invoke("next", value),
|
|
205
|
+
return: (value) => invoke("return", value),
|
|
206
|
+
throw: (error) => invoke("throw", error),
|
|
207
|
+
[Symbol.asyncIterator]() { return this; },
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
const value = Reflect.get(target, key, target);
|
|
211
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
|