@empiricalrun/test-gen 0.79.0 → 0.79.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/agent/base/index.d.ts +2 -0
- package/dist/agent/base/index.d.ts.map +1 -1
- package/dist/agent/base/index.js +4 -0
- package/dist/agent/chat/agent-loop.d.ts.map +1 -1
- package/dist/agent/chat/agent-loop.js +0 -1
- package/dist/agent/chat/exports.d.ts +1 -1
- package/dist/agent/chat/exports.d.ts.map +1 -1
- package/dist/agent/code-review/index.d.ts +1 -0
- package/dist/agent/code-review/index.d.ts.map +1 -1
- package/dist/agent/code-review/index.js +3 -1
- package/dist/agent/cua/index.d.ts.map +1 -1
- package/dist/agent/cua/index.js +24 -7
- package/dist/agent/cua/model.d.ts +11 -3
- package/dist/agent/cua/model.d.ts.map +1 -1
- package/dist/agent/cua/model.js +10 -9
- package/dist/artifacts/index.d.ts +0 -39
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/artifacts/index.js +8 -68
- package/dist/telemetry/index.d.ts +18 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +83 -0
- package/dist/tools/analyse-video/index.d.ts.map +1 -1
- package/dist/tools/analyse-video/index.js +14 -2
- package/dist/tools/executor/index.d.ts.map +1 -1
- package/dist/tools/executor/index.js +0 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -2
- package/dist/tools/run-test.js +1 -1
- package/dist/tools/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/test-gen-browser.js +12 -1
- package/dist/tools/test-run-fetcher/types.d.ts +0 -5
- package/dist/tools/test-run-fetcher/types.d.ts.map +1 -1
- package/dist/video-core/index.d.ts +9 -12
- package/dist/video-core/index.d.ts.map +1 -1
- package/dist/video-core/index.js +93 -111
- package/dist/video-core/utils.d.ts +2 -1
- package/dist/video-core/utils.d.ts.map +1 -1
- package/dist/video-core/utils.js +15 -0
- package/package.json +14 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/tools/definitions/review-pull-request.d.ts +0 -3
- package/dist/tools/definitions/review-pull-request.d.ts.map +0 -1
- package/dist/tools/definitions/review-pull-request.js +0 -16
- package/dist/tools/review-pull-request/index.d.ts +0 -3
- package/dist/tools/review-pull-request/index.d.ts.map +0 -1
- package/dist/tools/review-pull-request/index.js +0 -83
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @empiricalrun/test-gen
|
|
2
2
|
|
|
3
|
+
## 0.79.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- @empiricalrun/test-run@0.14.1
|
|
8
|
+
|
|
9
|
+
## 0.79.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 48126ea: feat: cost tracking for overlay dismissals
|
|
14
|
+
- Updated dependencies [48126ea]
|
|
15
|
+
- @empiricalrun/llm@0.25.2
|
|
16
|
+
- videostil@0.3.4
|
|
17
|
+
|
|
3
18
|
## 0.79.0
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
|
@@ -25,6 +25,7 @@ export type AgentParams<T> = AgentParamsWithoutPrompt<T> & ({
|
|
|
25
25
|
repoInfoBuilder: () => Promise<FileInfo>;
|
|
26
26
|
});
|
|
27
27
|
export type OnToolResultsProcessedCallback = (newChatState: ChatState) => Promise<void>;
|
|
28
|
+
export type OnToolCallCallback = (toolCalls: PendingToolCall[]) => Promise<void>;
|
|
28
29
|
export type OnLLMResponseCallback<T> = (response: T, selectedModel: SupportedChatModels) => Promise<void>;
|
|
29
30
|
export declare abstract class BaseAgent<T> {
|
|
30
31
|
featureFlags: string[];
|
|
@@ -37,6 +38,7 @@ export declare abstract class BaseAgent<T> {
|
|
|
37
38
|
systemPrompt: string | undefined;
|
|
38
39
|
repoInfoBuilder: (() => Promise<FileInfo>) | undefined;
|
|
39
40
|
onToolResultsProcessed?: OnToolResultsProcessedCallback;
|
|
41
|
+
onToolCall?: OnToolCallCallback;
|
|
40
42
|
onLLMResponse?: OnLLMResponseCallback<T>;
|
|
41
43
|
constructor({ featureFlags, selectedModel, workerEnv, chatState, toolExecutor, trace, systemPrompt, repoInfoBuilder, }: AgentParams<T>);
|
|
42
44
|
protected abstract getTools(): ToolsForLLM;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/base/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/base/index.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/base/index.js
CHANGED
|
@@ -16,6 +16,7 @@ class BaseAgent {
|
|
|
16
16
|
systemPrompt;
|
|
17
17
|
repoInfoBuilder;
|
|
18
18
|
onToolResultsProcessed;
|
|
19
|
+
onToolCall;
|
|
19
20
|
onLLMResponse;
|
|
20
21
|
constructor({ featureFlags, selectedModel, workerEnv, chatState, toolExecutor, trace, systemPrompt, repoInfoBuilder, }) {
|
|
21
22
|
this.featureFlags = featureFlags || [];
|
|
@@ -107,6 +108,9 @@ class BaseAgent {
|
|
|
107
108
|
if (!this.toolExecutor) {
|
|
108
109
|
throw new Error("No toolExecutor configured");
|
|
109
110
|
}
|
|
111
|
+
if (this.onToolCall) {
|
|
112
|
+
await this.onToolCall(toolCalls);
|
|
113
|
+
}
|
|
110
114
|
const result = await this.toolExecutor.execute(toolCalls);
|
|
111
115
|
if (result.status === "completed") {
|
|
112
116
|
const newChatState = this.processToolResults(toolCalls, result.toolResults, result.checkpoint);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAK/C,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,iBAAiB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,aAAa,CAAC,CAAC,GAAG,gBAAgB,EAAE,EACxD,SAAS,EACT,QAAQ,EACR,wBAAwB,EACxB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAK/C,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,iBAAiB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,mBAAmB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,aAAa,CAAC,CAAC,GAAG,gBAAgB,EAAE,EACxD,SAAS,EACT,QAAQ,EACR,wBAAwB,EACxB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpC"}
|
|
@@ -16,7 +16,6 @@ async function chatAgentLoop({ chatModel, reporter, streamingMessageReporter, tr
|
|
|
16
16
|
await onPendingToolCall(toolCalls);
|
|
17
17
|
break;
|
|
18
18
|
}
|
|
19
|
-
(0, utils_1.log)(`${(0, utils_1.getModelName)(chatModel.selectedModel)} is working...`);
|
|
20
19
|
const response = await chatModel.getLLMResponse({
|
|
21
20
|
systemPrompt,
|
|
22
21
|
tools,
|
|
@@ -2,7 +2,7 @@ export type { IChatModel } from "@empiricalrun/llm/chat";
|
|
|
2
2
|
export { createChatModel } from "@empiricalrun/llm/chat";
|
|
3
3
|
export { SUPPORTED_CHAT_MODELS } from "@empiricalrun/llm/chat/constants";
|
|
4
4
|
export { getFileInfoFromGitHub, viewFileUsingGitHub, } from "../../file-info/adapters/github";
|
|
5
|
-
export type { AgentParams } from "../base";
|
|
5
|
+
export type { AgentParams, OnToolCallCallback } from "../base";
|
|
6
6
|
export { BaseAgent } from "../base";
|
|
7
7
|
export type { CodeReviewResultV0, CodeReviewResultV1, CodeReviewResultV2, CodeReviewVersionedResult, } from "../code-review";
|
|
8
8
|
export { CodeReviewAgent } from "../code-review";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/exports.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { BaseAgent } from "../base";
|
|
|
4
4
|
import { type CodeReviewResultV0, type CodeReviewResultV1, type CodeReviewResultV2, CodeReviewSeverity, CodeReviewVerdict } from "./types";
|
|
5
5
|
export type { CodeReviewResultV1, CodeReviewResultV0, CodeReviewResultV2 };
|
|
6
6
|
export { CodeReviewVerdict, CodeReviewSeverity };
|
|
7
|
+
export { convertXmlToV2Format } from "./parser";
|
|
7
8
|
export type CodeReviewVersionedResult = CodeReviewResultV0 | CodeReviewResultV1 | CodeReviewResultV2;
|
|
8
9
|
export declare class CodeReviewAgent<T> extends BaseAgent<T> {
|
|
9
10
|
protected getTools(): ToolsForLLM;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/code-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,QAAQ,IAAI,WAAW;IAWjC,SAAS,IAAI,yBAAyB,GAAG,SAAS;cAmBlC,iBAAiB,CAC/B,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC;CAiInB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CodeReviewAgent = exports.CodeReviewSeverity = exports.CodeReviewVerdict = void 0;
|
|
3
|
+
exports.CodeReviewAgent = exports.convertXmlToV2Format = exports.CodeReviewSeverity = exports.CodeReviewVerdict = void 0;
|
|
4
4
|
const tools_1 = require("../../tools");
|
|
5
5
|
const fetch_session_diff_1 = require("../../tools/fetch-session-diff");
|
|
6
6
|
const base_1 = require("../base");
|
|
@@ -9,6 +9,8 @@ const parser_1 = require("./parser");
|
|
|
9
9
|
const types_1 = require("./types");
|
|
10
10
|
Object.defineProperty(exports, "CodeReviewSeverity", { enumerable: true, get: function () { return types_1.CodeReviewSeverity; } });
|
|
11
11
|
Object.defineProperty(exports, "CodeReviewVerdict", { enumerable: true, get: function () { return types_1.CodeReviewVerdict; } });
|
|
12
|
+
var parser_2 = require("./parser");
|
|
13
|
+
Object.defineProperty(exports, "convertXmlToV2Format", { enumerable: true, get: function () { return parser_2.convertXmlToV2Format; } });
|
|
12
14
|
class CodeReviewAgent extends base_1.BaseAgent {
|
|
13
15
|
getTools() {
|
|
14
16
|
const custom = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,KAAK,EACN,MAAM,uCAAuC,CAAC;AAS/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmElC,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAClC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CACJ,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,EACpD,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,8BAAsC,GACvC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,KAAK,EACN,MAAM,uCAAuC,CAAC;AAS/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmElC,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAClC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CACJ,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,EACpD,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,8BAAsC,GACvC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC,CAuOD"}
|
package/dist/agent/cua/index.js
CHANGED
|
@@ -63,7 +63,12 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
|
|
|
63
63
|
let result = [
|
|
64
64
|
{ type: "screenshot", screenshot: initialArtifact },
|
|
65
65
|
];
|
|
66
|
-
let tokensUsed = {
|
|
66
|
+
let tokensUsed = {
|
|
67
|
+
input_tokens: 0,
|
|
68
|
+
output_tokens: 0,
|
|
69
|
+
input_tokens_details: { cached_tokens: 0 },
|
|
70
|
+
output_tokens_details: { reasoning_tokens: 0 },
|
|
71
|
+
};
|
|
67
72
|
const viewport = page.viewportSize();
|
|
68
73
|
let screenWidth = viewport?.width || 1280;
|
|
69
74
|
let screenHeight = viewport?.height || 720;
|
|
@@ -94,8 +99,12 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
|
|
|
94
99
|
screenHeight,
|
|
95
100
|
openAIClient,
|
|
96
101
|
});
|
|
97
|
-
tokensUsed.
|
|
98
|
-
tokensUsed.
|
|
102
|
+
tokensUsed.input_tokens += response.usage?.input_tokens || 0;
|
|
103
|
+
tokensUsed.output_tokens += response.usage?.output_tokens || 0;
|
|
104
|
+
tokensUsed.input_tokens_details.cached_tokens +=
|
|
105
|
+
response.usage?.input_tokens_details?.cached_tokens || 0;
|
|
106
|
+
tokensUsed.output_tokens_details.reasoning_tokens +=
|
|
107
|
+
response.usage?.output_tokens_details?.reasoning_tokens || 0;
|
|
99
108
|
let isTaskDone = false;
|
|
100
109
|
let generatedCode = "";
|
|
101
110
|
let iterationIndex = 0;
|
|
@@ -213,8 +222,12 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
|
|
|
213
222
|
screenHeight,
|
|
214
223
|
openAIClient,
|
|
215
224
|
});
|
|
216
|
-
tokensUsed.
|
|
217
|
-
tokensUsed.
|
|
225
|
+
tokensUsed.input_tokens += response.usage?.input_tokens || 0;
|
|
226
|
+
tokensUsed.output_tokens += response.usage?.output_tokens || 0;
|
|
227
|
+
tokensUsed.input_tokens_details.cached_tokens +=
|
|
228
|
+
response.usage?.input_tokens_details?.cached_tokens || 0;
|
|
229
|
+
tokensUsed.output_tokens_details.reasoning_tokens +=
|
|
230
|
+
response.usage?.output_tokens_details?.reasoning_tokens || 0;
|
|
218
231
|
}
|
|
219
232
|
if (!isTaskDone) {
|
|
220
233
|
const logMessage = `Max iteration limit hit: Task not done after ${MAX_ITERATIONS} iterations`;
|
|
@@ -225,13 +238,17 @@ async function createTestUsingComputerUseAgent({ page, task, trace, prefersEleme
|
|
|
225
238
|
});
|
|
226
239
|
}
|
|
227
240
|
trace?.update({ output: { result } });
|
|
241
|
+
const cost = (0, model_1.tokensToCost)(tokensUsed);
|
|
228
242
|
return {
|
|
229
243
|
result,
|
|
230
244
|
code: generatedCode,
|
|
231
245
|
importPaths: [],
|
|
232
246
|
usage: {
|
|
233
|
-
tokens:
|
|
234
|
-
|
|
247
|
+
tokens: {
|
|
248
|
+
input: tokensUsed.input_tokens,
|
|
249
|
+
output: tokensUsed.output_tokens,
|
|
250
|
+
},
|
|
251
|
+
cost,
|
|
235
252
|
},
|
|
236
253
|
};
|
|
237
254
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import OpenAI from "openai";
|
|
2
2
|
import { Response, ResponseInputItem } from "openai/resources/responses/responses.mjs";
|
|
3
|
+
export declare const CUA_MODEL = "computer-use-preview-2025-03-11";
|
|
3
4
|
export declare function callComputerUseModel({ input, previousResponseId, screenWidth, screenHeight, openAIClient, }: {
|
|
4
5
|
input: ResponseInputItem[];
|
|
5
6
|
previousResponseId?: string;
|
|
@@ -7,11 +8,18 @@ export declare function callComputerUseModel({ input, previousResponseId, screen
|
|
|
7
8
|
screenHeight: number;
|
|
8
9
|
openAIClient: OpenAI;
|
|
9
10
|
}): Promise<Response>;
|
|
10
|
-
export declare function tokensToCost(
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
export declare function tokensToCost(usage: {
|
|
12
|
+
input_tokens: number;
|
|
13
|
+
output_tokens: number;
|
|
14
|
+
input_tokens_details: {
|
|
15
|
+
cached_tokens: number;
|
|
16
|
+
};
|
|
17
|
+
output_tokens_details: {
|
|
18
|
+
reasoning_tokens: number;
|
|
19
|
+
};
|
|
13
20
|
}): {
|
|
14
21
|
input: number;
|
|
15
22
|
output: number;
|
|
23
|
+
total: number;
|
|
16
24
|
};
|
|
17
25
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/agent/cua/model.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAEL,QAAQ,EACR,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAElD,eAAO,MAAM,SAAS,oCAAoC,CAAC;AAiC3D,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE;IACD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,qBAAqB,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;;;;EAMA"}
|
package/dist/agent/cua/model.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CUA_MODEL = void 0;
|
|
3
4
|
exports.callComputerUseModel = callComputerUseModel;
|
|
4
5
|
exports.tokensToCost = tokensToCost;
|
|
6
|
+
const llm_1 = require("@empiricalrun/llm");
|
|
7
|
+
exports.CUA_MODEL = "computer-use-preview-2025-03-11";
|
|
5
8
|
const INSTRUCTIONS = `You will be asked to execute some actions in a browser context.
|
|
6
9
|
Don't ask the user for confirmations - just execute the actions.
|
|
7
10
|
|
|
@@ -32,7 +35,7 @@ const pageGotoTool = {
|
|
|
32
35
|
};
|
|
33
36
|
async function callComputerUseModel({ input, previousResponseId, screenWidth, screenHeight, openAIClient, }) {
|
|
34
37
|
const response = await openAIClient.responses.create({
|
|
35
|
-
model:
|
|
38
|
+
model: exports.CUA_MODEL,
|
|
36
39
|
previous_response_id: previousResponseId,
|
|
37
40
|
parallel_tool_calls: false,
|
|
38
41
|
tools: [
|
|
@@ -54,12 +57,10 @@ async function callComputerUseModel({ input, previousResponseId, screenWidth, sc
|
|
|
54
57
|
});
|
|
55
58
|
return response;
|
|
56
59
|
}
|
|
57
|
-
function tokensToCost(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const outputCost = (tokens.output / 1_000_000) * outputUsdFor1MTokens;
|
|
64
|
-
return { input: inputCost, output: outputCost };
|
|
60
|
+
function tokensToCost(usage) {
|
|
61
|
+
const fullUsage = {
|
|
62
|
+
...usage,
|
|
63
|
+
total_tokens: usage.input_tokens + usage.output_tokens,
|
|
64
|
+
};
|
|
65
|
+
return (0, llm_1.calculateOpenAITokenCosts)({ usage: fullUsage, model: exports.CUA_MODEL });
|
|
65
66
|
}
|
|
@@ -1,44 +1,5 @@
|
|
|
1
1
|
import { Artifact, ArtifactInput } from "@empiricalrun/shared-types/chat-agent";
|
|
2
2
|
export declare function isArtifactCollectionEnabled(): string | undefined;
|
|
3
|
-
/**
|
|
4
|
-
* Collects artifacts from the repository directory and returns their URLs.
|
|
5
|
-
*
|
|
6
|
-
* @param inputs - An array of artifact inputs.
|
|
7
|
-
* @param repoDir - The absolute path to the repository directory.
|
|
8
|
-
* @param toolCallId - Unique identifier for the tool call.
|
|
9
|
-
* @returns An array of artifacts with their URLs.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* // Collect artifacts from both file paths and in-memory data
|
|
13
|
-
* const artifacts = await collectArtifacts([
|
|
14
|
-
* {
|
|
15
|
-
* name: "screenshot.png",
|
|
16
|
-
* contentType: "image/png",
|
|
17
|
-
* path: "/Users/project/screenshots/test.png"
|
|
18
|
-
* },
|
|
19
|
-
* {
|
|
20
|
-
* name: "log.txt",
|
|
21
|
-
* contentType: "text/plain",
|
|
22
|
-
* data: Buffer.from("test log content")
|
|
23
|
-
* }
|
|
24
|
-
* ], "/Users/project", "tool-123");
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* // Returns empty array when artifact collection is disabled
|
|
28
|
-
* const artifacts = await collectArtifacts([], "/Users/project", "tool-123");
|
|
29
|
-
* // Returns: []
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* // Throws error for invalid file paths
|
|
33
|
-
* await collectArtifacts([
|
|
34
|
-
* {
|
|
35
|
-
* name: "test.png",
|
|
36
|
-
* contentType: "image/png",
|
|
37
|
-
* path: "relative/path/test.png" // Invalid - not absolute path
|
|
38
|
-
* }
|
|
39
|
-
* ], "/Users/project", "tool-123");
|
|
40
|
-
* // Throws: "Invalid path: relative/path/test.png..."
|
|
41
|
-
*/
|
|
42
3
|
export declare function collectArtifacts(inputs: ArtifactInput[], repoDir: string, toolCallId: string): Promise<Artifact[]>;
|
|
43
4
|
export declare class UploadArtifactsQueue {
|
|
44
5
|
private toolCallId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAId,MAAM,uCAAuC,CAAC;AAwB/C,wBAAgB,2BAA2B,uBAM1C;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAId,MAAM,uCAAuC,CAAC;AAwB/C,wBAAgB,2BAA2B,uBAM1C;AAwGD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsErB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAoC;gBAE7C,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAK7C,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiBlD,iBAAiB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAMtD"}
|
package/dist/artifacts/index.js
CHANGED
|
@@ -24,7 +24,10 @@ function isArtifactCollectionEnabled() {
|
|
|
24
24
|
process.env.R2_ACCESS_KEY_ID &&
|
|
25
25
|
process.env.R2_SECRET_ACCESS_KEY);
|
|
26
26
|
}
|
|
27
|
-
const
|
|
27
|
+
const bucket = {
|
|
28
|
+
name: "test-report",
|
|
29
|
+
baseUrl: "https://reports-r2.empirical.run",
|
|
30
|
+
};
|
|
28
31
|
async function collectInMemoryArtifacts(artifacts, { destinationDir, }) {
|
|
29
32
|
const dataFiles = artifacts.reduce((acc, a) => {
|
|
30
33
|
if (!Buffer.isBuffer(a.data)) {
|
|
@@ -49,7 +52,7 @@ async function collectInMemoryArtifacts(artifacts, { destinationDir, }) {
|
|
|
49
52
|
return (0, r2_uploader_1.uploadInMemoryFiles)({
|
|
50
53
|
files: dataFiles,
|
|
51
54
|
destinationDir,
|
|
52
|
-
uploadBucket:
|
|
55
|
+
uploadBucket: bucket.name,
|
|
53
56
|
accountId: process.env.R2_ACCOUNT_ID,
|
|
54
57
|
accessKeyId: process.env.R2_ACCESS_KEY_ID,
|
|
55
58
|
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
|
|
@@ -71,7 +74,7 @@ async function collectFilePathArtifacts(artifacts, { destinationDir, sourceDir,
|
|
|
71
74
|
fileList: filePaths,
|
|
72
75
|
sourceDir,
|
|
73
76
|
destinationDir,
|
|
74
|
-
uploadBucket:
|
|
77
|
+
uploadBucket: bucket.name,
|
|
75
78
|
accountId: process.env.R2_ACCOUNT_ID,
|
|
76
79
|
accessKeyId: process.env.R2_ACCESS_KEY_ID,
|
|
77
80
|
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
|
|
@@ -81,79 +84,16 @@ async function collectFilePathArtifacts(artifacts, { destinationDir, sourceDir,
|
|
|
81
84
|
files: filePaths,
|
|
82
85
|
sourceDir,
|
|
83
86
|
destinationDir,
|
|
84
|
-
bucket:
|
|
87
|
+
bucket: bucket.name,
|
|
85
88
|
});
|
|
86
89
|
throw error;
|
|
87
90
|
});
|
|
88
91
|
console.log("Uploaded path-based files:", urls);
|
|
89
92
|
return urls;
|
|
90
93
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Checks if a given path is a full (absolute) path that starts with the repository directory.
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* // Valid full path
|
|
96
|
-
* const repoDir = "/Users/aashishwork/flash-tests";
|
|
97
|
-
* const path1 = "/Users/aashishwork/flash-tests/src/test.spec.ts";
|
|
98
|
-
* isFullPath(path1, repoDir); // Returns true
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* // Invalid - relative path
|
|
102
|
-
* const path2 = "src/test.spec.ts";
|
|
103
|
-
* isFullPath(path2, repoDir); // Returns false
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* // Invalid - absolute path but outside repo
|
|
107
|
-
* const path3 = "/Users/otheruser/project/test.spec.ts";
|
|
108
|
-
* isFullPath(path3, repoDir); // Returns false
|
|
109
|
-
*
|
|
110
|
-
* @example
|
|
111
|
-
* // Valid full path with trailing slash
|
|
112
|
-
* const path4 = "/Users/aashishwork/flash-tests/";
|
|
113
|
-
* isFullPath(path4, repoDir); // Returns true
|
|
114
|
-
*/
|
|
115
94
|
function isFullPath(path, repoDir) {
|
|
116
95
|
return path.startsWith("/") && path.startsWith(repoDir);
|
|
117
96
|
}
|
|
118
|
-
/**
|
|
119
|
-
* Collects artifacts from the repository directory and returns their URLs.
|
|
120
|
-
*
|
|
121
|
-
* @param inputs - An array of artifact inputs.
|
|
122
|
-
* @param repoDir - The absolute path to the repository directory.
|
|
123
|
-
* @param toolCallId - Unique identifier for the tool call.
|
|
124
|
-
* @returns An array of artifacts with their URLs.
|
|
125
|
-
*
|
|
126
|
-
* @example
|
|
127
|
-
* // Collect artifacts from both file paths and in-memory data
|
|
128
|
-
* const artifacts = await collectArtifacts([
|
|
129
|
-
* {
|
|
130
|
-
* name: "screenshot.png",
|
|
131
|
-
* contentType: "image/png",
|
|
132
|
-
* path: "/Users/project/screenshots/test.png"
|
|
133
|
-
* },
|
|
134
|
-
* {
|
|
135
|
-
* name: "log.txt",
|
|
136
|
-
* contentType: "text/plain",
|
|
137
|
-
* data: Buffer.from("test log content")
|
|
138
|
-
* }
|
|
139
|
-
* ], "/Users/project", "tool-123");
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* // Returns empty array when artifact collection is disabled
|
|
143
|
-
* const artifacts = await collectArtifacts([], "/Users/project", "tool-123");
|
|
144
|
-
* // Returns: []
|
|
145
|
-
*
|
|
146
|
-
* @example
|
|
147
|
-
* // Throws error for invalid file paths
|
|
148
|
-
* await collectArtifacts([
|
|
149
|
-
* {
|
|
150
|
-
* name: "test.png",
|
|
151
|
-
* contentType: "image/png",
|
|
152
|
-
* path: "relative/path/test.png" // Invalid - not absolute path
|
|
153
|
-
* }
|
|
154
|
-
* ], "/Users/project", "tool-123");
|
|
155
|
-
* // Throws: "Invalid path: relative/path/test.png..."
|
|
156
|
-
*/
|
|
157
97
|
async function collectArtifacts(inputs, repoDir, toolCallId) {
|
|
158
98
|
if (!isArtifactCollectionEnabled())
|
|
159
99
|
return [];
|
|
@@ -197,7 +137,7 @@ async function collectArtifacts(inputs, repoDir, toolCallId) {
|
|
|
197
137
|
? path_1.default.relative(repoDir, artifact.path)
|
|
198
138
|
: artifact.fileName;
|
|
199
139
|
const pathInBucket = path_1.default.join(destinationDir, relativePath);
|
|
200
|
-
url =
|
|
140
|
+
url = `${bucket.baseUrl}/${pathInBucket}`;
|
|
201
141
|
}
|
|
202
142
|
return {
|
|
203
143
|
name: artifact.name,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PendingToolCall, ToolResult, Usage } from "@empiricalrun/shared-types/chat-agent";
|
|
2
|
+
import type { TelemetryEvent } from "@empiricalrun/shared-types/telemetry";
|
|
3
|
+
export type TelemetryEnv = {
|
|
4
|
+
EMPIRICAL_TELEMETRY_API_KEY?: string;
|
|
5
|
+
ENVIRONMENT?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function trackEvent(event: TelemetryEvent, env?: TelemetryEnv): Promise<void>;
|
|
8
|
+
export declare function trackToolExecutionStarted(toolCall: PendingToolCall, chatSessionId: number, queuedTimestamp: number, env?: TelemetryEnv): Promise<void>;
|
|
9
|
+
export declare function trackToolExecutionCompleted(toolCall: PendingToolCall, toolResult: ToolResult, chatSessionId: number, queuedTimestamp: number, startedTimestamp: number, env?: TelemetryEnv): Promise<void>;
|
|
10
|
+
export declare function trackLLMResponse(opts: {
|
|
11
|
+
modelName: string;
|
|
12
|
+
projectRepoName: string;
|
|
13
|
+
chatSessionId?: number;
|
|
14
|
+
chatSessionSource: string;
|
|
15
|
+
usage: Usage;
|
|
16
|
+
env?: TelemetryEnv;
|
|
17
|
+
}): void;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,KAAK,EACN,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAM3E,MAAM,MAAM,YAAY,GAAG;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,KAAK,EAAE,cAAc,EACrB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EACxB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB,GAAG,IAAI,CAoBP"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trackEvent = trackEvent;
|
|
4
|
+
exports.trackToolExecutionStarted = trackToolExecutionStarted;
|
|
5
|
+
exports.trackToolExecutionCompleted = trackToolExecutionCompleted;
|
|
6
|
+
exports.trackLLMResponse = trackLLMResponse;
|
|
7
|
+
const tools_1 = require("../tools");
|
|
8
|
+
const TELEMETRY_WORKER_URL = "https://telemetry-worker.empirical-run.workers.dev";
|
|
9
|
+
async function trackEvent(event, env) {
|
|
10
|
+
const apiKey = env?.EMPIRICAL_TELEMETRY_API_KEY || process.env.EMPIRICAL_TELEMETRY_API_KEY;
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(`${TELEMETRY_WORKER_URL}/track`, {
|
|
16
|
+
method: "POST",
|
|
17
|
+
headers: {
|
|
18
|
+
"Content-Type": "application/json",
|
|
19
|
+
Authorization: `Bearer ${apiKey}`,
|
|
20
|
+
},
|
|
21
|
+
body: JSON.stringify(event),
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
throw new Error(`Telemetry request failed: ${response.status}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Don't throw - telemetry failures shouldn't break the application
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function trackToolExecutionStarted(toolCall, chatSessionId, queuedTimestamp, env) {
|
|
32
|
+
const event = {
|
|
33
|
+
name: "tool_call_started",
|
|
34
|
+
properties: {
|
|
35
|
+
environment: env?.ENVIRONMENT || process.env.ENVIRONMENT || "unknown",
|
|
36
|
+
tool_name: (0, tools_1.nameForTelemetry)(toolCall),
|
|
37
|
+
tool_needs_browser: (0, tools_1.toolsNeedBrowser)([toolCall]),
|
|
38
|
+
tool_call_id: toolCall.id,
|
|
39
|
+
ms_since_queued: Date.now() - queuedTimestamp,
|
|
40
|
+
chat_session_id: chatSessionId,
|
|
41
|
+
machine_id: "inline",
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
await trackEvent(event, env);
|
|
45
|
+
}
|
|
46
|
+
async function trackToolExecutionCompleted(toolCall, toolResult, chatSessionId, queuedTimestamp, startedTimestamp, env) {
|
|
47
|
+
const errorMessage = toolResult.isError && typeof toolResult.result === "string"
|
|
48
|
+
? toolResult.result
|
|
49
|
+
: null;
|
|
50
|
+
const event = {
|
|
51
|
+
name: "tool_call_completed",
|
|
52
|
+
properties: {
|
|
53
|
+
environment: env?.ENVIRONMENT || process.env.ENVIRONMENT || "unknown",
|
|
54
|
+
chat_session_id: chatSessionId,
|
|
55
|
+
tool_name: (0, tools_1.nameForTelemetry)(toolCall),
|
|
56
|
+
tool_needs_browser: (0, tools_1.toolsNeedBrowser)([toolCall]),
|
|
57
|
+
tool_call_id: toolCall.id,
|
|
58
|
+
is_error: toolResult.isError,
|
|
59
|
+
error_message: errorMessage,
|
|
60
|
+
machine_id: "inline",
|
|
61
|
+
ms_since_queued: Date.now() - queuedTimestamp,
|
|
62
|
+
ms_since_started: Date.now() - startedTimestamp,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
await trackEvent(event, env);
|
|
66
|
+
}
|
|
67
|
+
function trackLLMResponse(opts) {
|
|
68
|
+
const environment = opts.env?.ENVIRONMENT || process.env.ENVIRONMENT || "unknown";
|
|
69
|
+
void trackEvent({
|
|
70
|
+
name: "llm_response_generated",
|
|
71
|
+
properties: {
|
|
72
|
+
environment,
|
|
73
|
+
model_name: opts.modelName,
|
|
74
|
+
project_repo_name: opts.projectRepoName,
|
|
75
|
+
chat_session_id: opts.chatSessionId,
|
|
76
|
+
chat_session_source: opts.chatSessionSource,
|
|
77
|
+
tokens_input: opts.usage.tokens?.input || 0,
|
|
78
|
+
tokens_output: opts.usage.tokens?.output || 0,
|
|
79
|
+
cost_input: opts.usage.cost?.input || 0,
|
|
80
|
+
cost_output: opts.usage.cost?.output || 0,
|
|
81
|
+
},
|
|
82
|
+
}, opts.env);
|
|
83
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/analyse-video/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/analyse-video/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,OAAO,EACL,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AAetC,eAAO,MAAM,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CA8DjE,CAAC"}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.analyseVideo = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const constants_1 = require("../../constants");
|
|
9
|
+
const telemetry_1 = require("../../telemetry");
|
|
9
10
|
const hash_1 = require("../../utils/hash");
|
|
10
11
|
const url_validation_1 = require("../../utils/url-validation");
|
|
11
12
|
const video_core_1 = require("../../video-core");
|
|
@@ -19,7 +20,7 @@ function getVideoAnalysisParams(params) {
|
|
|
19
20
|
}
|
|
20
21
|
exports.analyseVideo = {
|
|
21
22
|
...analyse_video_1.analyseVideo,
|
|
22
|
-
execute: async ({ input, repoPath, logger }) => {
|
|
23
|
+
execute: async ({ input, repoPath, chatSession, logger }) => {
|
|
23
24
|
const { url } = input;
|
|
24
25
|
const params = getVideoAnalysisParams(input.params);
|
|
25
26
|
const videoHash = (0, hash_1.createHashBasedOnParams)(url, params);
|
|
@@ -36,11 +37,12 @@ exports.analyseVideo = {
|
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
const workingDirectory = node_path_1.default.join(repoPath, "video-analysis", videoHash);
|
|
39
|
-
const { result, error, interleaved_tool_result } = await (0, video_core_1.runVideoAnalysis)({
|
|
40
|
+
const { result, error, interleaved_tool_result, usage } = await (0, video_core_1.runVideoAnalysis)({
|
|
40
41
|
url,
|
|
41
42
|
videoHash,
|
|
42
43
|
params,
|
|
43
44
|
workingDirectory,
|
|
45
|
+
logger,
|
|
44
46
|
});
|
|
45
47
|
if (error) {
|
|
46
48
|
return {
|
|
@@ -48,6 +50,15 @@ exports.analyseVideo = {
|
|
|
48
50
|
result: error,
|
|
49
51
|
};
|
|
50
52
|
}
|
|
53
|
+
if (usage) {
|
|
54
|
+
(0, telemetry_1.trackLLMResponse)({
|
|
55
|
+
modelName: params.model,
|
|
56
|
+
projectRepoName: chatSession?.repoName || "unknown",
|
|
57
|
+
chatSessionId: chatSession?.id,
|
|
58
|
+
chatSessionSource: "video_analysis",
|
|
59
|
+
usage,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
51
62
|
const finalResult = [
|
|
52
63
|
{
|
|
53
64
|
type: "text",
|
|
@@ -58,6 +69,7 @@ exports.analyseVideo = {
|
|
|
58
69
|
return {
|
|
59
70
|
isError: error !== null,
|
|
60
71
|
result: finalResult,
|
|
72
|
+
usage,
|
|
61
73
|
};
|
|
62
74
|
},
|
|
63
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/executor/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/executor/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;CA8BzD"}
|