@deepagents/context 0.38.0 → 0.38.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/browser.js +7 -0
- package/dist/browser.js.map +2 -2
- package/dist/index.js +229 -109
- package/dist/index.js.map +3 -3
- package/dist/lib/chat.d.ts +19 -5
- package/dist/lib/chat.d.ts.map +1 -1
- package/dist/lib/engine.d.ts +44 -2
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/fragments.d.ts +2 -0
- package/dist/lib/fragments.d.ts.map +1 -1
- package/dist/lib/title.d.ts +16 -7
- package/dist/lib/title.d.ts.map +1 -1
- package/dist/lib/tracing/exporter.d.ts.map +1 -1
- package/dist/lib/tracing/index.js +16 -1
- package/dist/lib/tracing/index.js.map +2 -2
- package/package.json +8 -7
package/dist/lib/chat.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { type StreamTextResult, type StreamTextTransform, type ToolSet, type UIMessage } from 'ai';
|
|
2
2
|
import type { AgentModel } from './advisor.ts';
|
|
3
3
|
import type { ContextEngine } from './engine.ts';
|
|
4
|
-
import { type MessageFragment } from './fragments.ts';
|
|
5
4
|
import type { AgentSandbox } from './sandbox/types.ts';
|
|
6
|
-
export type ChatMessage = UIMessage | MessageFragment;
|
|
7
|
-
export declare function toMessageFragment(item: ChatMessage): MessageFragment;
|
|
8
|
-
export declare function chatMessageToUIMessage(item: ChatMessage): UIMessage;
|
|
9
5
|
export interface ChatAgentLike<CIn> {
|
|
10
6
|
context?: ContextEngine;
|
|
11
7
|
model?: AgentModel;
|
|
@@ -27,5 +23,23 @@ export interface ChatOptions<CIn> {
|
|
|
27
23
|
messageMetadata?: ChatMessageMetadata;
|
|
28
24
|
finalAssistantMetadata?: (message: UIMessage) => Record<string, unknown> | undefined | Promise<Record<string, unknown> | undefined>;
|
|
29
25
|
}
|
|
30
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Stream an assistant turn into the conversation context.
|
|
28
|
+
*
|
|
29
|
+
* **Precondition:** the chain head must be an assistant fragment. This is
|
|
30
|
+
* established by calling `context.continue(input)` first — that method
|
|
31
|
+
* appends the input and reserves an empty assistant placeholder whose id
|
|
32
|
+
* becomes the streaming target. `chat()` throws if the precondition is
|
|
33
|
+
* violated (caller forgot `continue()` or used manual `set + save`).
|
|
34
|
+
*
|
|
35
|
+
* The streamed content is written to that placeholder in place
|
|
36
|
+
* (`branch: false`), and on finish usage is tracked via `context.trackUsage`.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* await context.continue(user('hi'));
|
|
41
|
+
* const stream = await chat(agent);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function chat<CIn>(agent: ChatAgentLike<CIn>, options?: ChatOptions<CIn>): Promise<ReadableStream<import("ai").InferUIMessageChunk<UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>>>;
|
|
31
45
|
//# sourceMappingURL=chat.d.ts.map
|
package/dist/lib/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/lib/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,KAAK,OAAO,EACZ,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/lib/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,KAAK,OAAO,EACZ,KAAK,SAAS,EAGf,MAAM,IAAI,CAAC;AAEZ,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,aAAa,CAAC,GAAG;IAChC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CACJ,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,SAAS,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GACA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAC3C,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CACrE,CAAC,iBAAiB,CAAC,CAAC;AAErB,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,mBAAmB,CAUvE,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,GAAG;IAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,SAAS,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACrC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,sBAAsB,CAAC,EAAE,CACvB,OAAO,EAAE,SAAS,KAEhB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,GACT,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAC5B,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EACzB,OAAO,GAAE,WAAW,CAAC,GAAG,CAAM,iIAiG/B"}
|
package/dist/lib/engine.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type LanguageModelUsage, type UIMessage } from 'ai';
|
|
2
2
|
import { type EstimateResult } from './estimate.ts';
|
|
3
|
-
import type
|
|
3
|
+
import { type ChatMessage, type ContextFragment } from './fragments.ts';
|
|
4
4
|
import type { Models } from './models.generated.ts';
|
|
5
5
|
import { type ContextRenderer } from './renderers/abstract.renderer.ts';
|
|
6
6
|
import type { SkillPathMapping } from './skills/types.ts';
|
|
@@ -107,6 +107,48 @@ export declare class ContextEngine {
|
|
|
107
107
|
*/
|
|
108
108
|
get chat(): StoredChatData | null;
|
|
109
109
|
getTurnCount(): Promise<number>;
|
|
110
|
+
firstUserMessage(): Promise<UIMessage | undefined>;
|
|
111
|
+
/**
|
|
112
|
+
* Return the head of the conversation — pending tail or persisted branch head.
|
|
113
|
+
*
|
|
114
|
+
* Includes empty assistant placeholders (use this for id-lookup, not for
|
|
115
|
+
* building model prompts — see `getMessages()` for prompt-ready output).
|
|
116
|
+
*
|
|
117
|
+
* @throws if the pending tail is missing an id (programming error).
|
|
118
|
+
*/
|
|
119
|
+
headMessage(): Promise<{
|
|
120
|
+
id: string;
|
|
121
|
+
name: string;
|
|
122
|
+
} | undefined>;
|
|
123
|
+
/**
|
|
124
|
+
* Return the model-ready conversation: persisted chain plus pending fragments,
|
|
125
|
+
* with empty assistant placeholders filtered out.
|
|
126
|
+
*
|
|
127
|
+
* For id-lookup use `headMessage()` instead — that one keeps placeholders.
|
|
128
|
+
*/
|
|
129
|
+
getMessages(): Promise<UIMessage[]>;
|
|
130
|
+
/**
|
|
131
|
+
* Advance the conversation by one turn. Required setup before `chat()`.
|
|
132
|
+
*
|
|
133
|
+
* - User input → persists the message AND appends an empty assistant
|
|
134
|
+
* placeholder reserving the id of the next streamed response.
|
|
135
|
+
* - Assistant input (tool-resume / continuation) → persists in-place
|
|
136
|
+
* (`branch: false`), reusing the input's id.
|
|
137
|
+
*
|
|
138
|
+
* Always leaves the chain head as an assistant fragment, satisfying chat()'s
|
|
139
|
+
* precondition.
|
|
140
|
+
*
|
|
141
|
+
* @returns the assistant id that will receive the streamed response — useful
|
|
142
|
+
* for telemetry, optimistic UI, or correlating logs before the stream starts.
|
|
143
|
+
* @throws if assistant input is missing an id.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* const assistantId = await context.continue(user('hi'));
|
|
148
|
+
* const stream = await chat(agent); // streams into assistantId
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
continue(input: ChatMessage): Promise<string>;
|
|
110
152
|
/**
|
|
111
153
|
* Add fragments to the context.
|
|
112
154
|
*
|
package/dist/lib/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/lib/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/lib/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/fragments.d.ts
CHANGED
|
@@ -84,6 +84,8 @@ export declare function fragment(name: string, ...children: FragmentData[]): Con
|
|
|
84
84
|
* ```
|
|
85
85
|
*/
|
|
86
86
|
export declare function assistant(message: UIMessage): MessageFragment;
|
|
87
|
+
export type ChatMessage = UIMessage | MessageFragment;
|
|
88
|
+
export declare function toMessageFragment(item: ChatMessage): MessageFragment;
|
|
87
89
|
export declare function message(content: string | UIMessage): MessageFragment;
|
|
88
90
|
/**
|
|
89
91
|
* Create an assistant message fragment from text content.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../src/lib/fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,IAAI,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IACpE;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,CAAC,CAAC;IACT;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,GACP,eAAe,GACf,YAAY,EAAE,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAC;AAEpC;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAQjE;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE1D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAOtE;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,GACxB,QAAQ,IAAI,eAAe,CAE7B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,YAAY,CAUvE;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,GAAG,QAAQ,EAAE,YAAY,EAAE,GAC1B,eAAe,CAKjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,eAAe,CAe7D;
|
|
1
|
+
{"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../src/lib/fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,IAAI,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IACpE;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,CAAC,CAAC;IACT;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,GACP,eAAe,GACf,YAAY,EAAE,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAC;AAEpC;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAQjE;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE1D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAOtE;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,GACxB,QAAQ,IAAI,eAAe,CAE7B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,YAAY,CAUvE;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,GAAG,QAAQ,EAAE,YAAY,EAAE,GAC1B,eAAe,CAKjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,eAAe,CAe7D;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,CAKpE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAuBpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,eAAe,CAOjB"}
|
package/dist/lib/title.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import type { UIMessage } from 'ai';
|
|
2
1
|
import type { AgentModel } from './advisor.ts';
|
|
3
|
-
|
|
4
|
-
export interface
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { ContextEngine } from './engine.ts';
|
|
3
|
+
export interface TitleGeneratorOptions {
|
|
4
|
+
context: ContextEngine;
|
|
5
|
+
}
|
|
6
|
+
export interface EnsureResult {
|
|
7
|
+
title: string;
|
|
8
|
+
source: 'llm' | 'static';
|
|
9
|
+
}
|
|
10
|
+
export declare class TitleGenerator {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(options: TitleGeneratorOptions);
|
|
13
|
+
ensure(options: {
|
|
14
|
+
model: AgentModel;
|
|
15
|
+
abortSignal?: AbortSignal;
|
|
16
|
+
}): Promise<EnsureResult | null>;
|
|
17
|
+
ensureStatic(): Promise<EnsureResult | null>;
|
|
8
18
|
}
|
|
9
|
-
export declare function generateChatTitle(options: GenerateChatTitleOptions): Promise<string>;
|
|
10
19
|
//# sourceMappingURL=title.d.ts.map
|
package/dist/lib/title.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../src/lib/title.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../src/lib/title.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgB5C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC1B;AAED,qBAAa,cAAc;;gBAGb,OAAO,EAAE,qBAAqB;IAIpC,MAAM,CAAC,OAAO,EAAE;QACpB,KAAK,EAAE,UAAU,CAAC;QAClB,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAe1B,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CA8DnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/lib/tracing/exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAKV,SAAS,EAEV,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/lib/tracing/exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAKV,SAAS,EAEV,MAAM,YAAY,CAAC;AAkEpB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAKzC;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,oBAAqB,YAAW,eAAe;;gBAS9C,OAAO,GAAE,2BAAgC;IAY/C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAgEtE"}
|
|
@@ -92,8 +92,23 @@ function encodeField(value) {
|
|
|
92
92
|
if (value == null) return void 0;
|
|
93
93
|
return typeof value === "string" ? value : JSON.stringify(value);
|
|
94
94
|
}
|
|
95
|
+
function encodeMetadata(metadata) {
|
|
96
|
+
if (metadata == null) return void 0;
|
|
97
|
+
const encoded = {};
|
|
98
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
99
|
+
const result = encodeField(value);
|
|
100
|
+
if (result !== void 0) {
|
|
101
|
+
encoded[key] = result;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return Object.keys(encoded).length > 0 ? encoded : void 0;
|
|
105
|
+
}
|
|
95
106
|
function toWireItem(item) {
|
|
96
|
-
if (item.object
|
|
107
|
+
if (item.object === "trace") {
|
|
108
|
+
const encoded = encodeMetadata(item.metadata);
|
|
109
|
+
const { metadata: _ignored, ...rest } = item;
|
|
110
|
+
return encoded != null ? { ...rest, metadata: encoded } : rest;
|
|
111
|
+
}
|
|
97
112
|
const spanData = item.span_data;
|
|
98
113
|
if (!hasStringifiedIO(spanData)) {
|
|
99
114
|
return { ...item, span_data: spanData };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/tracing/batch-processor.ts", "../../../src/lib/tracing/exporter.ts", "../../../src/lib/tracing/ids.ts", "../../../src/lib/tracing/processor.ts", "../../../src/lib/tracing/serialization.ts", "../../../src/lib/tracing/openai-traces-integration.ts"],
|
|
4
|
-
"sourcesContent": ["import type { TracingExporter, TracingProcessor } from './processor.ts';\nimport type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface BatchTraceProcessorOptions {\n maxQueueSize?: number;\n maxBatchSize?: number;\n scheduleDelayMs?: number;\n exportTriggerRatio?: number;\n exportTimeoutMs?: number;\n}\n\nexport class BatchTraceProcessor implements TracingProcessor {\n readonly #exporter: TracingExporter;\n readonly #maxQueueSize: number;\n readonly #maxBatchSize: number;\n readonly #scheduleDelayMs: number;\n readonly #exportTimeoutMs: number;\n readonly #flushThreshold: number;\n\n #queue: TraceItem[] = [];\n #flushTimer?: NodeJS.Timeout;\n #flushPromise?: Promise<void>;\n #shutdown = false;\n\n constructor(\n exporter: TracingExporter,\n options: BatchTraceProcessorOptions = {},\n ) {\n this.#exporter = exporter;\n this.#maxQueueSize = options.maxQueueSize ?? 8192;\n this.#maxBatchSize = options.maxBatchSize ?? 128;\n this.#scheduleDelayMs = options.scheduleDelayMs ?? 5000;\n this.#exportTimeoutMs = options.exportTimeoutMs ?? 30000;\n this.#flushThreshold = Math.max(\n 1,\n Math.floor(this.#maxQueueSize * (options.exportTriggerRatio ?? 0.7)),\n );\n }\n\n start(): void {\n if (this.#shutdown || this.#flushTimer != null) {\n return;\n }\n\n this.#flushTimer = setInterval(() => {\n void this.forceFlush();\n }, this.#scheduleDelayMs);\n this.#flushTimer.unref?.();\n }\n\n onTraceEnd(trace: OpenAITrace): void {\n this.#enqueue(trace);\n }\n\n onSpanEnd(span: OpenAISpan): void {\n this.#enqueue(span);\n }\n\n async forceFlush(): Promise<void> {\n if (this.#flushPromise != null) {\n await this.#flushPromise;\n return;\n }\n\n if (this.#queue.length === 0) {\n return;\n }\n\n this.#flushPromise = this.#flush();\n\n try {\n await this.#flushPromise;\n } finally {\n this.#flushPromise = undefined;\n }\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n\n if (this.#flushTimer != null) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#queue.push(item);\n\n if (this.#queue.length >= this.#flushThreshold) {\n void this.forceFlush();\n }\n }\n\n async #flush(): Promise<void> {\n while (this.#queue.length > 0) {\n const batch = this.#queue.slice(0, this.#maxBatchSize);\n await this.#exporter.export(\n batch,\n AbortSignal.timeout(this.#exportTimeoutMs),\n );\n this.#queue.splice(0, batch.length);\n }\n }\n}\n", "import type { TracingExporter } from './processor.ts';\nimport type {\n FunctionSpanData,\n OpenAISpan,\n OpenAITrace,\n SpanData,\n TraceItem,\n TranscriptionSpanData,\n} from './types.ts';\n\ntype StringifiedIOSpan = FunctionSpanData | TranscriptionSpanData;\ntype StringifiedIOSpanType = StringifiedIOSpan['type'];\n\nconst STRINGIFIED_IO_TYPES = {\n function: true,\n transcription: true,\n} as const satisfies Record<StringifiedIOSpanType, true>;\n\ntype WireSpanData =\n | Exclude<SpanData, StringifiedIOSpan>\n | (Omit<StringifiedIOSpan, 'input' | 'output'> & {\n input?: string;\n output?: string;\n });\n\ntype WireSpan = Omit<OpenAISpan, 'span_data'> & { span_data: WireSpanData };\ntype WireTraceItem = OpenAITrace | WireSpan;\n\nfunction hasStringifiedIO(data: SpanData): data is StringifiedIOSpan {\n return data.type in STRINGIFIED_IO_TYPES;\n}\n\nfunction encodeField(value: unknown): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nfunction toWireItem(item: TraceItem): WireTraceItem {\n if (item.object !== 'trace.span') return item;\n const spanData = item.span_data;\n if (!hasStringifiedIO(spanData)) {\n return { ...item, span_data: spanData };\n }\n return {\n ...item,\n span_data: {\n ...spanData,\n input: encodeField(spanData.input),\n output: encodeField(spanData.output),\n },\n };\n}\n\nexport class OpenAIExportError extends Error {\n readonly status: number;\n\n constructor(status: number, body: string) {\n super(`OpenAI traces export failed (${status}): ${body}`);\n this.name = 'OpenAIExportError';\n this.status = status;\n }\n}\n\nexport interface OpenAITracesExporterOptions {\n apiKey?: string | (() => string | Promise<string>);\n endpoint?: string;\n baseURL?: string;\n organization?: string;\n project?: string;\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport class OpenAITracesExporter implements TracingExporter {\n #apiKey: string | (() => string | Promise<string>);\n #endpoint: string;\n #organization?: string;\n #project?: string;\n #maxRetries: number;\n #baseDelayMs: number;\n #maxDelayMs: number;\n\n constructor(options: OpenAITracesExporterOptions = {}) {\n this.#apiKey = options.apiKey ?? process.env.OPENAI_API_KEY ?? '';\n this.#endpoint =\n options.endpoint ??\n `${options.baseURL ?? 'https://api.openai.com'}/v1/traces/ingest`;\n this.#organization = options.organization;\n this.#project = options.project;\n this.#maxRetries = options.maxRetries ?? 3;\n this.#baseDelayMs = options.baseDelayMs ?? 1000;\n this.#maxDelayMs = options.maxDelayMs ?? 30000;\n }\n\n async export(items: TraceItem[], signal?: AbortSignal): Promise<void> {\n if (items.length === 0) return;\n const apiKey = await this.#resolveApiKey();\n if (!apiKey) {\n throw new Error(\n 'OpenAI API key is required. Set OPENAI_API_KEY or pass apiKey option.',\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'OpenAI-Beta': 'traces=v1',\n };\n if (this.#organization) {\n headers['OpenAI-Organization'] = this.#organization;\n }\n if (this.#project) {\n headers['OpenAI-Project'] = this.#project;\n }\n\n const body = JSON.stringify({ data: items.map(toWireItem) });\n await this.#fetchWithRetry(this.#endpoint, {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n async #resolveApiKey(): Promise<string> {\n return typeof this.#apiKey === 'function'\n ? await this.#apiKey()\n : this.#apiKey;\n }\n\n async #fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < this.#maxRetries; attempt++) {\n try {\n const response = await fetch(url, init);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const text = await response.text().catch(() => '');\n throw new OpenAIExportError(response.status, text);\n }\n lastError = new Error(`Server error ${response.status}`);\n } catch (error) {\n if (error instanceof OpenAIExportError) {\n throw error;\n }\n lastError = error;\n }\n if (attempt < this.#maxRetries - 1) {\n const delay = Math.min(\n this.#baseDelayMs * 2 ** attempt,\n this.#maxDelayMs,\n );\n const jitter = delay * (0.9 + Math.random() * 0.2);\n await new Promise((r) => setTimeout(r, jitter));\n }\n }\n throw lastError;\n }\n}\n", "import { randomUUID } from 'node:crypto';\n\nexport function traceId(): string {\n return `trace_${randomUUID().replace(/-/g, '')}`;\n}\n\nexport function spanId(): string {\n return `span_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n\nexport function groupId(): string {\n return `group_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n", "import type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface TracingExporter {\n export(items: TraceItem[], signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TracingProcessor {\n start?(): Promise<void> | void;\n onTraceStart?(trace: OpenAITrace): Promise<void> | void;\n onTraceEnd?(trace: OpenAITrace): Promise<void> | void;\n onSpanStart?(span: OpenAISpan): Promise<void> | void;\n onSpanEnd?(span: OpenAISpan): Promise<void> | void;\n forceFlush?(): Promise<void> | void;\n shutdown?(): Promise<void> | void;\n}\n\nexport class CompositeTraceProcessor implements TracingProcessor {\n readonly #processors: TracingProcessor[];\n\n constructor(processors: TracingProcessor[]) {\n this.#processors = processors.filter(Boolean);\n }\n\n async start(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.start?.();\n }\n }\n\n async onTraceStart(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceStart?.(trace);\n }\n }\n\n async onTraceEnd(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceEnd?.(trace);\n }\n }\n\n async onSpanStart(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanStart?.(span);\n }\n }\n\n async onSpanEnd(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanEnd?.(span);\n }\n }\n\n async forceFlush(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.forceFlush?.();\n }\n }\n\n async shutdown(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.shutdown?.();\n }\n }\n}\n\nexport function createTracingProcessor(\n processors: TracingProcessor | TracingProcessor[] | undefined,\n): TracingProcessor | undefined {\n if (processors == null) {\n return undefined;\n }\n\n const list = Array.isArray(processors) ? processors : [processors];\n if (list.length === 0) {\n return undefined;\n }\n\n return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);\n}\n", "import type { LanguageModelUsage } from 'ai';\n\nimport type { GenerationUsageData, OpenAISpanError } from './types.ts';\n\nexport function normalizeForJson(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return errorToSpanError(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeForJson(item))\n .filter((item) => item !== undefined);\n }\n\n if (typeof value === 'object') {\n const normalized: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const result = normalizeForJson(entry);\n if (result !== undefined) {\n normalized[key] = result;\n }\n }\n return normalized;\n }\n\n return String(value);\n}\n\nexport function normalizeRecordArray(\n value: unknown,\n): Record<string, unknown>[] | undefined {\n const normalized = normalizeForJson(value);\n if (!Array.isArray(normalized)) {\n return undefined;\n }\n\n return normalized.map((item) =>\n typeof item === 'object' && item != null\n ? (item as Record<string, unknown>)\n : { value: item },\n );\n}\n\nexport function normalizeUsage(\n usage: LanguageModelUsage | undefined,\n): GenerationUsageData | undefined {\n if (usage == null) {\n return undefined;\n }\n\n const details: Record<string, unknown> = {};\n\n if (hasDefinedValue(usage.inputTokenDetails)) {\n details.input_token_details = normalizeForJson({\n no_cache_tokens: usage.inputTokenDetails.noCacheTokens,\n cache_read_tokens: usage.inputTokenDetails.cacheReadTokens,\n cache_write_tokens: usage.inputTokenDetails.cacheWriteTokens,\n });\n }\n\n if (hasDefinedValue(usage.outputTokenDetails)) {\n details.output_token_details = normalizeForJson({\n text_tokens: usage.outputTokenDetails.textTokens,\n reasoning_tokens: usage.outputTokenDetails.reasoningTokens,\n });\n }\n\n if (usage.raw != null) {\n details.raw = normalizeForJson(usage.raw);\n }\n\n if (usage.reasoningTokens !== undefined) {\n details.reasoning_tokens = usage.reasoningTokens;\n }\n\n if (usage.cachedInputTokens !== undefined) {\n details.cached_input_tokens = usage.cachedInputTokens;\n }\n\n return {\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n ...(Object.keys(details).length > 0 ? { details } : {}),\n };\n}\n\nexport function errorToSpanError(error: unknown): OpenAISpanError {\n if (error instanceof Error) {\n const data = normalizeForJson({\n name: error.name,\n stack: error.stack,\n cause: error.cause,\n }) as Record<string, unknown>;\n\n return {\n message: error.message,\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n }\n\n return {\n message: String(error),\n };\n}\n\nfunction hasDefinedValue(value: Record<string, unknown> | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n return Object.values(value).some((entry) => entry !== undefined);\n}\n", "import type {\n OnFinishEvent,\n OnStartEvent,\n OnStepFinishEvent,\n OnStepStartEvent,\n OnToolCallFinishEvent,\n OnToolCallStartEvent,\n TelemetryIntegration,\n} from 'ai';\n\nimport {\n BatchTraceProcessor,\n type BatchTraceProcessorOptions,\n} from './batch-processor.ts';\nimport { OpenAITracesExporter } from './exporter.ts';\nimport { spanId, traceId } from './ids.ts';\nimport { type TracingProcessor, createTracingProcessor } from './processor.ts';\nimport {\n errorToSpanError,\n normalizeForJson,\n normalizeRecordArray,\n normalizeUsage,\n} from './serialization.ts';\nimport type {\n AgentSpanData,\n FunctionSpanData,\n GenerationSpanData,\n OpenAISpan,\n OpenAITrace,\n} from './types.ts';\n\ninterface TraceRunState {\n trace: OpenAITrace;\n rootSpan: OpenAISpan;\n functionId?: string;\n modelKey?: string;\n inputFingerprint?: string;\n metadataRef?: object;\n contextRef?: object;\n abortSignal?: AbortSignal;\n responseIds: Set<string>;\n stepSpans: string[];\n spansById: Map<string, OpenAISpan>;\n toolCallSpans: Map<string, string>;\n}\n\ninterface ResolvableEvent {\n functionId?: string;\n metadata?: unknown;\n experimental_context?: unknown;\n abortSignal?: AbortSignal;\n model?: { provider: string; modelId: string };\n system?: unknown;\n prompt?: unknown;\n messages?: unknown;\n response?: { id: string };\n toolCall?: { toolCallId: string };\n}\n\nexport interface OpenAITracesIntegrationOptions {\n apiKey?: string | (() => string | Promise<string>);\n baseURL?: string;\n endpoint?: string;\n organization?: string;\n project?: string;\n workflowName?: string;\n groupId?: string;\n metadata?: Record<string, unknown>;\n exporter?: OpenAITracesExporter;\n processor?: TracingProcessor | TracingProcessor[];\n batch?: BatchTraceProcessorOptions;\n includeSensitiveData?: boolean;\n}\n\nexport function createOpenAITracesIntegration(\n options: OpenAITracesIntegrationOptions = {},\n): TelemetryIntegration {\n if (process.env.OPENAI_AGENTS_DISABLE_TRACING === '1') {\n return {};\n }\n\n const exporter =\n options.exporter ??\n new OpenAITracesExporter({\n apiKey: options.apiKey,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n organization: options.organization,\n project: options.project,\n });\n\n const processor: TracingProcessor =\n createTracingProcessor(options.processor) ??\n new BatchTraceProcessor(exporter, options.batch);\n\n const includeSensitive =\n options.includeSensitiveData ??\n process.env.OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA !== '0';\n const openRuns: TraceRunState[] = [];\n const responseIdToRun = new Map<string, TraceRunState>();\n const toolCallIdToRun = new Map<string, TraceRunState>();\n\n void processor.start?.();\n\n return {\n onStart: async (event: OnStartEvent) => {\n const trace: OpenAITrace = {\n object: 'trace',\n id: traceId(),\n workflow_name:\n options.workflowName ?? event.functionId ?? 'ai-sdk-workflow',\n group_id: options.groupId ?? null,\n metadata: normalizeMetadata({\n ...options.metadata,\n ...(event.metadata as Record<string, unknown> | undefined),\n }),\n };\n\n const rootSpan: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: trace.id,\n parent_id: null,\n started_at: now(),\n span_data: {\n type: 'agent',\n name: trace.workflow_name,\n tools: event.tools ? Object.keys(event.tools) : undefined,\n output_type: getOutputType(event.output),\n } satisfies AgentSpanData,\n };\n\n const state: TraceRunState = {\n trace,\n rootSpan,\n functionId: event.functionId,\n modelKey: toModelKey(event.model),\n inputFingerprint: fingerprintInput({\n system: event.system,\n prompt: event.prompt,\n messages: event.messages,\n }),\n metadataRef: asObjectRef(event.metadata),\n contextRef: asObjectRef(event.experimental_context),\n abortSignal: event.abortSignal,\n responseIds: new Set(),\n stepSpans: [],\n spansById: new Map([[rootSpan.id, rootSpan]]),\n toolCallSpans: new Map(),\n };\n\n openRuns.push(state);\n\n await processor.onTraceStart?.(trace);\n await processor.onSpanStart?.(rootSpan);\n },\n\n onStepStart: async (event: OnStepStartEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'generation',\n model: event.model.modelId,\n model_config: normalizeMetadata({\n provider: event.model.provider,\n tool_choice: event.toolChoice,\n active_tools: event.activeTools,\n provider_options: event.providerOptions,\n }),\n ...(includeSensitive\n ? { input: normalizeRecordArray(event.messages) }\n : {}),\n } satisfies GenerationSpanData,\n };\n\n state.stepSpans.push(span.id);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolCallStart: async (event: OnToolCallStartEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'function',\n name: event.toolCall.toolName,\n ...(includeSensitive\n ? {\n input: normalizeForJson(event.toolCall.input),\n }\n : {}),\n } satisfies FunctionSpanData,\n };\n\n state.toolCallSpans.set(event.toolCall.toolCallId, span.id);\n toolCallIdToRun.set(event.toolCall.toolCallId, state);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolCallFinish: async (event: OnToolCallFinishEvent) => {\n const state =\n toolCallIdToRun.get(event.toolCall.toolCallId) ??\n resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.toolCallSpans.get(event.toolCall.toolCallId);\n if (id == null) {\n return;\n }\n\n state.toolCallSpans.delete(event.toolCall.toolCallId);\n toolCallIdToRun.delete(event.toolCall.toolCallId);\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as FunctionSpanData;\n if (includeSensitive && event.success) {\n data.output = normalizeForJson(event.output);\n }\n\n if (!event.success) {\n span.error = errorToSpanError(event.error);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onStepFinish: async (event: OnStepFinishEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.stepSpans.pop();\n if (id == null) {\n return;\n }\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as GenerationSpanData;\n if (includeSensitive) {\n data.output = normalizeRecordArray(event.response.messages);\n }\n data.usage = normalizeUsage(event.usage);\n state.responseIds.add(event.response.id);\n responseIdToRun.set(event.response.id, state);\n\n await processor.onSpanEnd?.(span);\n },\n\n onFinish: async (event: OnFinishEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n try {\n while (state.stepSpans.length > 0) {\n const openStepId = state.stepSpans.pop();\n if (openStepId == null) {\n continue;\n }\n\n const openStep = state.spansById.get(openStepId);\n if (openStep == null || openStep.ended_at != null) {\n continue;\n }\n\n openStep.ended_at = now();\n await processor.onSpanEnd?.(openStep);\n }\n\n state.rootSpan.ended_at = now();\n state.trace.metadata = normalizeMetadata({\n ...state.trace.metadata,\n total_usage: normalizeUsage(event.totalUsage),\n steps: event.steps.length,\n finish_reason: event.finishReason,\n });\n\n await processor.onSpanEnd?.(state.rootSpan);\n await processor.onTraceEnd?.(state.trace);\n await processor.forceFlush?.();\n } finally {\n closeRunState(state);\n }\n },\n };\n\n function resolveRunState(event: ResolvableEvent): TraceRunState | undefined {\n if (event.response?.id != null) {\n const state = responseIdToRun.get(event.response.id);\n if (state != null) {\n return state;\n }\n }\n\n if (event.toolCall?.toolCallId != null) {\n const state = toolCallIdToRun.get(event.toolCall.toolCallId);\n if (state != null) {\n return state;\n }\n }\n\n if (openRuns.length === 0) {\n return undefined;\n }\n if (openRuns.length === 1) {\n return openRuns[0];\n }\n\n let bestScore = 0;\n let bestStates: TraceRunState[] = [];\n const eventMetadataRef = asObjectRef(event.metadata);\n const eventContextRef = asObjectRef(event.experimental_context);\n const eventModelKey =\n event.model != null ? toModelKey(event.model) : undefined;\n const eventFingerprint = fingerprintInput({\n system: event.system,\n prompt: event.prompt,\n messages: event.messages,\n });\n\n for (const state of openRuns) {\n let score = 0;\n\n if (eventContextRef != null && state.contextRef === eventContextRef) {\n score += 1000;\n }\n\n if (eventMetadataRef != null && state.metadataRef === eventMetadataRef) {\n score += 800;\n }\n\n if (\n event.abortSignal != null &&\n state.abortSignal != null &&\n state.abortSignal === event.abortSignal\n ) {\n score += 600;\n }\n\n if (event.functionId != null && state.functionId === event.functionId) {\n score += 300;\n }\n\n if (eventModelKey != null && state.modelKey === eventModelKey) {\n score += 100;\n }\n\n if (\n eventFingerprint != null &&\n state.inputFingerprint != null &&\n state.inputFingerprint === eventFingerprint\n ) {\n score += 200;\n }\n\n if (score > bestScore) {\n bestScore = score;\n bestStates = [state];\n } else if (score === bestScore && bestScore > 0) {\n bestStates.push(state);\n }\n }\n\n if (bestStates.length === 0) return undefined;\n if (bestStates.length === 1) return bestStates[0];\n\n if (event.response?.id != null) {\n const withOpenStep = bestStates.filter((s) => s.stepSpans.length > 0);\n if (withOpenStep.length >= 1) return withOpenStep[0];\n }\n\n if (event.toolCall?.toolCallId != null) {\n const withOpenTool = bestStates.filter((s) => s.toolCallSpans.size > 0);\n if (withOpenTool.length >= 1) return withOpenTool[0];\n }\n\n return bestStates[0];\n }\n\n function closeRunState(state: TraceRunState): void {\n const index = openRuns.indexOf(state);\n if (index >= 0) {\n openRuns.splice(index, 1);\n }\n\n for (const responseId of state.responseIds) {\n responseIdToRun.delete(responseId);\n }\n\n for (const toolCallId of state.toolCallSpans.keys()) {\n toolCallIdToRun.delete(toolCallId);\n }\n }\n}\n\nfunction currentParentId(state: TraceRunState): string {\n return state.stepSpans[state.stepSpans.length - 1] ?? state.rootSpan.id;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata == null) {\n return undefined;\n }\n\n const normalized = normalizeForJson(metadata);\n if (\n normalized == null ||\n typeof normalized !== 'object' ||\n Array.isArray(normalized)\n ) {\n return undefined;\n }\n\n return Object.keys(normalized).length > 0\n ? (normalized as Record<string, unknown>)\n : undefined;\n}\n\nfunction getOutputType(output: unknown): string | undefined {\n if (output == null) {\n return undefined;\n }\n\n if (\n typeof output === 'object' &&\n 'type' in (output as Record<string, unknown>) &&\n typeof (output as Record<string, unknown>).type === 'string'\n ) {\n return (output as Record<string, unknown>).type as string;\n }\n\n if (typeof output === 'object' && output.constructor?.name != null) {\n return output.constructor.name;\n }\n\n return typeof output;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction toModelKey(model: { provider: string; modelId: string }): string {\n return `${model.provider}:${model.modelId}`;\n}\n\nfunction canonicalizeMessageContent(content: unknown): unknown {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }];\n }\n return content;\n}\n\nfunction canonicalizeMessages(messages: unknown): unknown {\n if (!Array.isArray(messages)) return messages;\n return messages.map((message) => {\n if (message == null || typeof message !== 'object') return message;\n const record = message as Record<string, unknown>;\n if (!('content' in record)) return record;\n return { ...record, content: canonicalizeMessageContent(record.content) };\n });\n}\n\nfunction fingerprintInput(input: {\n system?: unknown;\n prompt?: unknown;\n messages?: unknown;\n}): string | undefined {\n const source =\n input.messages ??\n (typeof input.prompt === 'string'\n ? [{ role: 'user', content: input.prompt }]\n : input.prompt);\n const normalized = normalizeForJson({\n system: input.system,\n messages: canonicalizeMessages(source),\n });\n\n if (normalized == null) {\n return undefined;\n }\n\n return JSON.stringify(normalized);\n}\n\nfunction asObjectRef(value: unknown): object | undefined {\n return value != null && typeof value === 'object'\n ? (value as object)\n : undefined;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { TracingExporter, TracingProcessor } from './processor.ts';\nimport type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface BatchTraceProcessorOptions {\n maxQueueSize?: number;\n maxBatchSize?: number;\n scheduleDelayMs?: number;\n exportTriggerRatio?: number;\n exportTimeoutMs?: number;\n}\n\nexport class BatchTraceProcessor implements TracingProcessor {\n readonly #exporter: TracingExporter;\n readonly #maxQueueSize: number;\n readonly #maxBatchSize: number;\n readonly #scheduleDelayMs: number;\n readonly #exportTimeoutMs: number;\n readonly #flushThreshold: number;\n\n #queue: TraceItem[] = [];\n #flushTimer?: NodeJS.Timeout;\n #flushPromise?: Promise<void>;\n #shutdown = false;\n\n constructor(\n exporter: TracingExporter,\n options: BatchTraceProcessorOptions = {},\n ) {\n this.#exporter = exporter;\n this.#maxQueueSize = options.maxQueueSize ?? 8192;\n this.#maxBatchSize = options.maxBatchSize ?? 128;\n this.#scheduleDelayMs = options.scheduleDelayMs ?? 5000;\n this.#exportTimeoutMs = options.exportTimeoutMs ?? 30000;\n this.#flushThreshold = Math.max(\n 1,\n Math.floor(this.#maxQueueSize * (options.exportTriggerRatio ?? 0.7)),\n );\n }\n\n start(): void {\n if (this.#shutdown || this.#flushTimer != null) {\n return;\n }\n\n this.#flushTimer = setInterval(() => {\n void this.forceFlush();\n }, this.#scheduleDelayMs);\n this.#flushTimer.unref?.();\n }\n\n onTraceEnd(trace: OpenAITrace): void {\n this.#enqueue(trace);\n }\n\n onSpanEnd(span: OpenAISpan): void {\n this.#enqueue(span);\n }\n\n async forceFlush(): Promise<void> {\n if (this.#flushPromise != null) {\n await this.#flushPromise;\n return;\n }\n\n if (this.#queue.length === 0) {\n return;\n }\n\n this.#flushPromise = this.#flush();\n\n try {\n await this.#flushPromise;\n } finally {\n this.#flushPromise = undefined;\n }\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n\n if (this.#flushTimer != null) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#queue.push(item);\n\n if (this.#queue.length >= this.#flushThreshold) {\n void this.forceFlush();\n }\n }\n\n async #flush(): Promise<void> {\n while (this.#queue.length > 0) {\n const batch = this.#queue.slice(0, this.#maxBatchSize);\n await this.#exporter.export(\n batch,\n AbortSignal.timeout(this.#exportTimeoutMs),\n );\n this.#queue.splice(0, batch.length);\n }\n }\n}\n", "import type { TracingExporter } from './processor.ts';\nimport type {\n FunctionSpanData,\n OpenAISpan,\n OpenAITrace,\n SpanData,\n TraceItem,\n TranscriptionSpanData,\n} from './types.ts';\n\ntype StringifiedIOSpan = FunctionSpanData | TranscriptionSpanData;\ntype StringifiedIOSpanType = StringifiedIOSpan['type'];\n\nconst STRINGIFIED_IO_TYPES = {\n function: true,\n transcription: true,\n} as const satisfies Record<StringifiedIOSpanType, true>;\n\ntype WireSpanData =\n | Exclude<SpanData, StringifiedIOSpan>\n | (Omit<StringifiedIOSpan, 'input' | 'output'> & {\n input?: string;\n output?: string;\n });\n\ntype WireSpan = Omit<OpenAISpan, 'span_data'> & { span_data: WireSpanData };\ntype WireTrace = Omit<OpenAITrace, 'metadata'> & {\n metadata?: Record<string, string>;\n};\ntype WireTraceItem = WireTrace | WireSpan;\n\nfunction hasStringifiedIO(data: SpanData): data is StringifiedIOSpan {\n return data.type in STRINGIFIED_IO_TYPES;\n}\n\nfunction encodeField(value: unknown): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nfunction encodeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata == null) return undefined;\n const encoded: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n const result = encodeField(value);\n if (result !== undefined) {\n encoded[key] = result;\n }\n }\n return Object.keys(encoded).length > 0 ? encoded : undefined;\n}\n\nfunction toWireItem(item: TraceItem): WireTraceItem {\n if (item.object === 'trace') {\n const encoded = encodeMetadata(item.metadata);\n const { metadata: _ignored, ...rest } = item;\n return encoded != null ? { ...rest, metadata: encoded } : rest;\n }\n const spanData = item.span_data;\n if (!hasStringifiedIO(spanData)) {\n return { ...item, span_data: spanData };\n }\n return {\n ...item,\n span_data: {\n ...spanData,\n input: encodeField(spanData.input),\n output: encodeField(spanData.output),\n },\n };\n}\n\nexport class OpenAIExportError extends Error {\n readonly status: number;\n\n constructor(status: number, body: string) {\n super(`OpenAI traces export failed (${status}): ${body}`);\n this.name = 'OpenAIExportError';\n this.status = status;\n }\n}\n\nexport interface OpenAITracesExporterOptions {\n apiKey?: string | (() => string | Promise<string>);\n endpoint?: string;\n baseURL?: string;\n organization?: string;\n project?: string;\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport class OpenAITracesExporter implements TracingExporter {\n #apiKey: string | (() => string | Promise<string>);\n #endpoint: string;\n #organization?: string;\n #project?: string;\n #maxRetries: number;\n #baseDelayMs: number;\n #maxDelayMs: number;\n\n constructor(options: OpenAITracesExporterOptions = {}) {\n this.#apiKey = options.apiKey ?? process.env.OPENAI_API_KEY ?? '';\n this.#endpoint =\n options.endpoint ??\n `${options.baseURL ?? 'https://api.openai.com'}/v1/traces/ingest`;\n this.#organization = options.organization;\n this.#project = options.project;\n this.#maxRetries = options.maxRetries ?? 3;\n this.#baseDelayMs = options.baseDelayMs ?? 1000;\n this.#maxDelayMs = options.maxDelayMs ?? 30000;\n }\n\n async export(items: TraceItem[], signal?: AbortSignal): Promise<void> {\n if (items.length === 0) return;\n const apiKey = await this.#resolveApiKey();\n if (!apiKey) {\n throw new Error(\n 'OpenAI API key is required. Set OPENAI_API_KEY or pass apiKey option.',\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'OpenAI-Beta': 'traces=v1',\n };\n if (this.#organization) {\n headers['OpenAI-Organization'] = this.#organization;\n }\n if (this.#project) {\n headers['OpenAI-Project'] = this.#project;\n }\n\n const body = JSON.stringify({ data: items.map(toWireItem) });\n await this.#fetchWithRetry(this.#endpoint, {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n async #resolveApiKey(): Promise<string> {\n return typeof this.#apiKey === 'function'\n ? await this.#apiKey()\n : this.#apiKey;\n }\n\n async #fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < this.#maxRetries; attempt++) {\n try {\n const response = await fetch(url, init);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const text = await response.text().catch(() => '');\n throw new OpenAIExportError(response.status, text);\n }\n lastError = new Error(`Server error ${response.status}`);\n } catch (error) {\n if (error instanceof OpenAIExportError) {\n throw error;\n }\n lastError = error;\n }\n if (attempt < this.#maxRetries - 1) {\n const delay = Math.min(\n this.#baseDelayMs * 2 ** attempt,\n this.#maxDelayMs,\n );\n const jitter = delay * (0.9 + Math.random() * 0.2);\n await new Promise((r) => setTimeout(r, jitter));\n }\n }\n throw lastError;\n }\n}\n", "import { randomUUID } from 'node:crypto';\n\nexport function traceId(): string {\n return `trace_${randomUUID().replace(/-/g, '')}`;\n}\n\nexport function spanId(): string {\n return `span_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n\nexport function groupId(): string {\n return `group_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n", "import type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface TracingExporter {\n export(items: TraceItem[], signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TracingProcessor {\n start?(): Promise<void> | void;\n onTraceStart?(trace: OpenAITrace): Promise<void> | void;\n onTraceEnd?(trace: OpenAITrace): Promise<void> | void;\n onSpanStart?(span: OpenAISpan): Promise<void> | void;\n onSpanEnd?(span: OpenAISpan): Promise<void> | void;\n forceFlush?(): Promise<void> | void;\n shutdown?(): Promise<void> | void;\n}\n\nexport class CompositeTraceProcessor implements TracingProcessor {\n readonly #processors: TracingProcessor[];\n\n constructor(processors: TracingProcessor[]) {\n this.#processors = processors.filter(Boolean);\n }\n\n async start(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.start?.();\n }\n }\n\n async onTraceStart(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceStart?.(trace);\n }\n }\n\n async onTraceEnd(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceEnd?.(trace);\n }\n }\n\n async onSpanStart(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanStart?.(span);\n }\n }\n\n async onSpanEnd(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanEnd?.(span);\n }\n }\n\n async forceFlush(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.forceFlush?.();\n }\n }\n\n async shutdown(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.shutdown?.();\n }\n }\n}\n\nexport function createTracingProcessor(\n processors: TracingProcessor | TracingProcessor[] | undefined,\n): TracingProcessor | undefined {\n if (processors == null) {\n return undefined;\n }\n\n const list = Array.isArray(processors) ? processors : [processors];\n if (list.length === 0) {\n return undefined;\n }\n\n return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);\n}\n", "import type { LanguageModelUsage } from 'ai';\n\nimport type { GenerationUsageData, OpenAISpanError } from './types.ts';\n\nexport function normalizeForJson(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return errorToSpanError(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeForJson(item))\n .filter((item) => item !== undefined);\n }\n\n if (typeof value === 'object') {\n const normalized: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const result = normalizeForJson(entry);\n if (result !== undefined) {\n normalized[key] = result;\n }\n }\n return normalized;\n }\n\n return String(value);\n}\n\nexport function normalizeRecordArray(\n value: unknown,\n): Record<string, unknown>[] | undefined {\n const normalized = normalizeForJson(value);\n if (!Array.isArray(normalized)) {\n return undefined;\n }\n\n return normalized.map((item) =>\n typeof item === 'object' && item != null\n ? (item as Record<string, unknown>)\n : { value: item },\n );\n}\n\nexport function normalizeUsage(\n usage: LanguageModelUsage | undefined,\n): GenerationUsageData | undefined {\n if (usage == null) {\n return undefined;\n }\n\n const details: Record<string, unknown> = {};\n\n if (hasDefinedValue(usage.inputTokenDetails)) {\n details.input_token_details = normalizeForJson({\n no_cache_tokens: usage.inputTokenDetails.noCacheTokens,\n cache_read_tokens: usage.inputTokenDetails.cacheReadTokens,\n cache_write_tokens: usage.inputTokenDetails.cacheWriteTokens,\n });\n }\n\n if (hasDefinedValue(usage.outputTokenDetails)) {\n details.output_token_details = normalizeForJson({\n text_tokens: usage.outputTokenDetails.textTokens,\n reasoning_tokens: usage.outputTokenDetails.reasoningTokens,\n });\n }\n\n if (usage.raw != null) {\n details.raw = normalizeForJson(usage.raw);\n }\n\n if (usage.reasoningTokens !== undefined) {\n details.reasoning_tokens = usage.reasoningTokens;\n }\n\n if (usage.cachedInputTokens !== undefined) {\n details.cached_input_tokens = usage.cachedInputTokens;\n }\n\n return {\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n ...(Object.keys(details).length > 0 ? { details } : {}),\n };\n}\n\nexport function errorToSpanError(error: unknown): OpenAISpanError {\n if (error instanceof Error) {\n const data = normalizeForJson({\n name: error.name,\n stack: error.stack,\n cause: error.cause,\n }) as Record<string, unknown>;\n\n return {\n message: error.message,\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n }\n\n return {\n message: String(error),\n };\n}\n\nfunction hasDefinedValue(value: Record<string, unknown> | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n return Object.values(value).some((entry) => entry !== undefined);\n}\n", "import type {\n OnFinishEvent,\n OnStartEvent,\n OnStepFinishEvent,\n OnStepStartEvent,\n OnToolCallFinishEvent,\n OnToolCallStartEvent,\n TelemetryIntegration,\n} from 'ai';\n\nimport {\n BatchTraceProcessor,\n type BatchTraceProcessorOptions,\n} from './batch-processor.ts';\nimport { OpenAITracesExporter } from './exporter.ts';\nimport { spanId, traceId } from './ids.ts';\nimport { type TracingProcessor, createTracingProcessor } from './processor.ts';\nimport {\n errorToSpanError,\n normalizeForJson,\n normalizeRecordArray,\n normalizeUsage,\n} from './serialization.ts';\nimport type {\n AgentSpanData,\n FunctionSpanData,\n GenerationSpanData,\n OpenAISpan,\n OpenAITrace,\n} from './types.ts';\n\ninterface TraceRunState {\n trace: OpenAITrace;\n rootSpan: OpenAISpan;\n functionId?: string;\n modelKey?: string;\n inputFingerprint?: string;\n metadataRef?: object;\n contextRef?: object;\n abortSignal?: AbortSignal;\n responseIds: Set<string>;\n stepSpans: string[];\n spansById: Map<string, OpenAISpan>;\n toolCallSpans: Map<string, string>;\n}\n\ninterface ResolvableEvent {\n functionId?: string;\n metadata?: unknown;\n experimental_context?: unknown;\n abortSignal?: AbortSignal;\n model?: { provider: string; modelId: string };\n system?: unknown;\n prompt?: unknown;\n messages?: unknown;\n response?: { id: string };\n toolCall?: { toolCallId: string };\n}\n\nexport interface OpenAITracesIntegrationOptions {\n apiKey?: string | (() => string | Promise<string>);\n baseURL?: string;\n endpoint?: string;\n organization?: string;\n project?: string;\n workflowName?: string;\n groupId?: string;\n metadata?: Record<string, unknown>;\n exporter?: OpenAITracesExporter;\n processor?: TracingProcessor | TracingProcessor[];\n batch?: BatchTraceProcessorOptions;\n includeSensitiveData?: boolean;\n}\n\nexport function createOpenAITracesIntegration(\n options: OpenAITracesIntegrationOptions = {},\n): TelemetryIntegration {\n if (process.env.OPENAI_AGENTS_DISABLE_TRACING === '1') {\n return {};\n }\n\n const exporter =\n options.exporter ??\n new OpenAITracesExporter({\n apiKey: options.apiKey,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n organization: options.organization,\n project: options.project,\n });\n\n const processor: TracingProcessor =\n createTracingProcessor(options.processor) ??\n new BatchTraceProcessor(exporter, options.batch);\n\n const includeSensitive =\n options.includeSensitiveData ??\n process.env.OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA !== '0';\n const openRuns: TraceRunState[] = [];\n const responseIdToRun = new Map<string, TraceRunState>();\n const toolCallIdToRun = new Map<string, TraceRunState>();\n\n void processor.start?.();\n\n return {\n onStart: async (event: OnStartEvent) => {\n const trace: OpenAITrace = {\n object: 'trace',\n id: traceId(),\n workflow_name:\n options.workflowName ?? event.functionId ?? 'ai-sdk-workflow',\n group_id: options.groupId ?? null,\n metadata: normalizeMetadata({\n ...options.metadata,\n ...(event.metadata as Record<string, unknown> | undefined),\n }),\n };\n\n const rootSpan: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: trace.id,\n parent_id: null,\n started_at: now(),\n span_data: {\n type: 'agent',\n name: trace.workflow_name,\n tools: event.tools ? Object.keys(event.tools) : undefined,\n output_type: getOutputType(event.output),\n } satisfies AgentSpanData,\n };\n\n const state: TraceRunState = {\n trace,\n rootSpan,\n functionId: event.functionId,\n modelKey: toModelKey(event.model),\n inputFingerprint: fingerprintInput({\n system: event.system,\n prompt: event.prompt,\n messages: event.messages,\n }),\n metadataRef: asObjectRef(event.metadata),\n contextRef: asObjectRef(event.experimental_context),\n abortSignal: event.abortSignal,\n responseIds: new Set(),\n stepSpans: [],\n spansById: new Map([[rootSpan.id, rootSpan]]),\n toolCallSpans: new Map(),\n };\n\n openRuns.push(state);\n\n await processor.onTraceStart?.(trace);\n await processor.onSpanStart?.(rootSpan);\n },\n\n onStepStart: async (event: OnStepStartEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'generation',\n model: event.model.modelId,\n model_config: normalizeMetadata({\n provider: event.model.provider,\n tool_choice: event.toolChoice,\n active_tools: event.activeTools,\n provider_options: event.providerOptions,\n }),\n ...(includeSensitive\n ? { input: normalizeRecordArray(event.messages) }\n : {}),\n } satisfies GenerationSpanData,\n };\n\n state.stepSpans.push(span.id);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolCallStart: async (event: OnToolCallStartEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'function',\n name: event.toolCall.toolName,\n ...(includeSensitive\n ? {\n input: normalizeForJson(event.toolCall.input),\n }\n : {}),\n } satisfies FunctionSpanData,\n };\n\n state.toolCallSpans.set(event.toolCall.toolCallId, span.id);\n toolCallIdToRun.set(event.toolCall.toolCallId, state);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolCallFinish: async (event: OnToolCallFinishEvent) => {\n const state =\n toolCallIdToRun.get(event.toolCall.toolCallId) ??\n resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.toolCallSpans.get(event.toolCall.toolCallId);\n if (id == null) {\n return;\n }\n\n state.toolCallSpans.delete(event.toolCall.toolCallId);\n toolCallIdToRun.delete(event.toolCall.toolCallId);\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as FunctionSpanData;\n if (includeSensitive && event.success) {\n data.output = normalizeForJson(event.output);\n }\n\n if (!event.success) {\n span.error = errorToSpanError(event.error);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onStepFinish: async (event: OnStepFinishEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.stepSpans.pop();\n if (id == null) {\n return;\n }\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as GenerationSpanData;\n if (includeSensitive) {\n data.output = normalizeRecordArray(event.response.messages);\n }\n data.usage = normalizeUsage(event.usage);\n state.responseIds.add(event.response.id);\n responseIdToRun.set(event.response.id, state);\n\n await processor.onSpanEnd?.(span);\n },\n\n onFinish: async (event: OnFinishEvent) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n try {\n while (state.stepSpans.length > 0) {\n const openStepId = state.stepSpans.pop();\n if (openStepId == null) {\n continue;\n }\n\n const openStep = state.spansById.get(openStepId);\n if (openStep == null || openStep.ended_at != null) {\n continue;\n }\n\n openStep.ended_at = now();\n await processor.onSpanEnd?.(openStep);\n }\n\n state.rootSpan.ended_at = now();\n state.trace.metadata = normalizeMetadata({\n ...state.trace.metadata,\n total_usage: normalizeUsage(event.totalUsage),\n steps: event.steps.length,\n finish_reason: event.finishReason,\n });\n\n await processor.onSpanEnd?.(state.rootSpan);\n await processor.onTraceEnd?.(state.trace);\n await processor.forceFlush?.();\n } finally {\n closeRunState(state);\n }\n },\n };\n\n function resolveRunState(event: ResolvableEvent): TraceRunState | undefined {\n if (event.response?.id != null) {\n const state = responseIdToRun.get(event.response.id);\n if (state != null) {\n return state;\n }\n }\n\n if (event.toolCall?.toolCallId != null) {\n const state = toolCallIdToRun.get(event.toolCall.toolCallId);\n if (state != null) {\n return state;\n }\n }\n\n if (openRuns.length === 0) {\n return undefined;\n }\n if (openRuns.length === 1) {\n return openRuns[0];\n }\n\n let bestScore = 0;\n let bestStates: TraceRunState[] = [];\n const eventMetadataRef = asObjectRef(event.metadata);\n const eventContextRef = asObjectRef(event.experimental_context);\n const eventModelKey =\n event.model != null ? toModelKey(event.model) : undefined;\n const eventFingerprint = fingerprintInput({\n system: event.system,\n prompt: event.prompt,\n messages: event.messages,\n });\n\n for (const state of openRuns) {\n let score = 0;\n\n if (eventContextRef != null && state.contextRef === eventContextRef) {\n score += 1000;\n }\n\n if (eventMetadataRef != null && state.metadataRef === eventMetadataRef) {\n score += 800;\n }\n\n if (\n event.abortSignal != null &&\n state.abortSignal != null &&\n state.abortSignal === event.abortSignal\n ) {\n score += 600;\n }\n\n if (event.functionId != null && state.functionId === event.functionId) {\n score += 300;\n }\n\n if (eventModelKey != null && state.modelKey === eventModelKey) {\n score += 100;\n }\n\n if (\n eventFingerprint != null &&\n state.inputFingerprint != null &&\n state.inputFingerprint === eventFingerprint\n ) {\n score += 200;\n }\n\n if (score > bestScore) {\n bestScore = score;\n bestStates = [state];\n } else if (score === bestScore && bestScore > 0) {\n bestStates.push(state);\n }\n }\n\n if (bestStates.length === 0) return undefined;\n if (bestStates.length === 1) return bestStates[0];\n\n if (event.response?.id != null) {\n const withOpenStep = bestStates.filter((s) => s.stepSpans.length > 0);\n if (withOpenStep.length >= 1) return withOpenStep[0];\n }\n\n if (event.toolCall?.toolCallId != null) {\n const withOpenTool = bestStates.filter((s) => s.toolCallSpans.size > 0);\n if (withOpenTool.length >= 1) return withOpenTool[0];\n }\n\n return bestStates[0];\n }\n\n function closeRunState(state: TraceRunState): void {\n const index = openRuns.indexOf(state);\n if (index >= 0) {\n openRuns.splice(index, 1);\n }\n\n for (const responseId of state.responseIds) {\n responseIdToRun.delete(responseId);\n }\n\n for (const toolCallId of state.toolCallSpans.keys()) {\n toolCallIdToRun.delete(toolCallId);\n }\n }\n}\n\nfunction currentParentId(state: TraceRunState): string {\n return state.stepSpans[state.stepSpans.length - 1] ?? state.rootSpan.id;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata == null) {\n return undefined;\n }\n\n const normalized = normalizeForJson(metadata);\n if (\n normalized == null ||\n typeof normalized !== 'object' ||\n Array.isArray(normalized)\n ) {\n return undefined;\n }\n\n return Object.keys(normalized).length > 0\n ? (normalized as Record<string, unknown>)\n : undefined;\n}\n\nfunction getOutputType(output: unknown): string | undefined {\n if (output == null) {\n return undefined;\n }\n\n if (\n typeof output === 'object' &&\n 'type' in (output as Record<string, unknown>) &&\n typeof (output as Record<string, unknown>).type === 'string'\n ) {\n return (output as Record<string, unknown>).type as string;\n }\n\n if (typeof output === 'object' && output.constructor?.name != null) {\n return output.constructor.name;\n }\n\n return typeof output;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction toModelKey(model: { provider: string; modelId: string }): string {\n return `${model.provider}:${model.modelId}`;\n}\n\nfunction canonicalizeMessageContent(content: unknown): unknown {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }];\n }\n return content;\n}\n\nfunction canonicalizeMessages(messages: unknown): unknown {\n if (!Array.isArray(messages)) return messages;\n return messages.map((message) => {\n if (message == null || typeof message !== 'object') return message;\n const record = message as Record<string, unknown>;\n if (!('content' in record)) return record;\n return { ...record, content: canonicalizeMessageContent(record.content) };\n });\n}\n\nfunction fingerprintInput(input: {\n system?: unknown;\n prompt?: unknown;\n messages?: unknown;\n}): string | undefined {\n const source =\n input.messages ??\n (typeof input.prompt === 'string'\n ? [{ role: 'user', content: input.prompt }]\n : input.prompt);\n const normalized = normalizeForJson({\n system: input.system,\n messages: canonicalizeMessages(source),\n });\n\n if (normalized == null) {\n return undefined;\n }\n\n return JSON.stringify(normalized);\n}\n\nfunction asObjectRef(value: unknown): object | undefined {\n return value != null && typeof value === 'object'\n ? (value as object)\n : undefined;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepagents/context",
|
|
3
|
-
"version": "0.38.
|
|
3
|
+
"version": "0.38.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -50,8 +50,12 @@
|
|
|
50
50
|
"@ai-sdk/groq": "^3.0.36",
|
|
51
51
|
"@ai-sdk/openai": "^3.0.54",
|
|
52
52
|
"@ai-sdk/openai-compatible": "^2.0.42",
|
|
53
|
-
"@ai-sdk/provider": "^3.0.
|
|
54
|
-
"
|
|
53
|
+
"@ai-sdk/provider": "^3.0.10",
|
|
54
|
+
"@clack/prompts": "^1.3.0",
|
|
55
|
+
"@deepagents/agent": "0.38.1",
|
|
56
|
+
"@sdk-it/rpc": "^0.40.0",
|
|
57
|
+
"@sdk-it/spec": "^0.40.0",
|
|
58
|
+
"ai": "^6.0.174",
|
|
55
59
|
"bash-tool": "^1.3.16",
|
|
56
60
|
"chalk": "^5.6.0",
|
|
57
61
|
"dedent": "^1.7.0",
|
|
@@ -65,10 +69,7 @@
|
|
|
65
69
|
"tiny-tfidf": "^1.0.0",
|
|
66
70
|
"yaml": "^2.8.0",
|
|
67
71
|
"zod": "^3.25.76 || ^4.0.0",
|
|
68
|
-
"zod-to-json-schema": "^3.25.1"
|
|
69
|
-
"@deepagents/agent": "0.38.0",
|
|
70
|
-
"@sdk-it/rpc": "^0.40.0",
|
|
71
|
-
"@sdk-it/spec": "^0.40.0"
|
|
72
|
+
"zod-to-json-schema": "^3.25.1"
|
|
72
73
|
},
|
|
73
74
|
"devDependencies": {
|
|
74
75
|
"@types/debug": "^4.1.12",
|