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