@elizaos/plugin-trajectory-logger 2.0.0-alpha.20 → 2.0.0-alpha.21
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/node/index.node.js +191 -79
- package/dist/node/index.node.js.map +6 -6
- package/package.json +89 -87
package/dist/node/index.node.js
CHANGED
|
@@ -14,7 +14,7 @@ var __export = (target, all) => {
|
|
|
14
14
|
};
|
|
15
15
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/entity.js
|
|
18
18
|
function is(value, type) {
|
|
19
19
|
if (!value || typeof value !== "object") {
|
|
20
20
|
return false;
|
|
@@ -42,7 +42,7 @@ var init_entity = __esm(() => {
|
|
|
42
42
|
hasOwnEntityKind = Symbol.for("drizzle:hasOwnEntityKind");
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
//
|
|
45
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/column.js
|
|
46
46
|
var Column;
|
|
47
47
|
var init_column = __esm(() => {
|
|
48
48
|
init_entity();
|
|
@@ -96,7 +96,7 @@ var init_column = __esm(() => {
|
|
|
96
96
|
};
|
|
97
97
|
});
|
|
98
98
|
|
|
99
|
-
//
|
|
99
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/column-builder.js
|
|
100
100
|
var ColumnBuilder;
|
|
101
101
|
var init_column_builder = __esm(() => {
|
|
102
102
|
init_entity();
|
|
@@ -156,19 +156,19 @@ var init_column_builder = __esm(() => {
|
|
|
156
156
|
};
|
|
157
157
|
});
|
|
158
158
|
|
|
159
|
-
//
|
|
159
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/table.utils.js
|
|
160
160
|
var TableName;
|
|
161
161
|
var init_table_utils = __esm(() => {
|
|
162
162
|
TableName = Symbol.for("drizzle:Name");
|
|
163
163
|
});
|
|
164
164
|
|
|
165
|
-
//
|
|
165
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/tracing-utils.js
|
|
166
166
|
function iife(fn, ...args) {
|
|
167
167
|
return fn(...args);
|
|
168
168
|
}
|
|
169
169
|
var init_tracing_utils = () => {};
|
|
170
170
|
|
|
171
|
-
//
|
|
171
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/pg-core/unique-constraint.js
|
|
172
172
|
function uniqueKeyName(table, columns) {
|
|
173
173
|
return `${table[TableName]}_${columns.join("_")}_unique`;
|
|
174
174
|
}
|
|
@@ -176,7 +176,7 @@ var init_unique_constraint = __esm(() => {
|
|
|
176
176
|
init_table_utils();
|
|
177
177
|
});
|
|
178
178
|
|
|
179
|
-
//
|
|
179
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/pg-core/columns/common.js
|
|
180
180
|
var PgColumn, ExtraConfigColumn;
|
|
181
181
|
var init_common = __esm(() => {
|
|
182
182
|
init_column();
|
|
@@ -230,7 +230,7 @@ var init_common = __esm(() => {
|
|
|
230
230
|
};
|
|
231
231
|
});
|
|
232
232
|
|
|
233
|
-
//
|
|
233
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/pg-core/columns/enum.js
|
|
234
234
|
function isPgEnum(obj) {
|
|
235
235
|
return !!obj && typeof obj === "function" && isPgEnumSym in obj && obj[isPgEnumSym] === true;
|
|
236
236
|
}
|
|
@@ -265,7 +265,7 @@ var init_enum = __esm(() => {
|
|
|
265
265
|
};
|
|
266
266
|
});
|
|
267
267
|
|
|
268
|
-
//
|
|
268
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/subquery.js
|
|
269
269
|
var Subquery, WithSubquery;
|
|
270
270
|
var init_subquery = __esm(() => {
|
|
271
271
|
init_entity();
|
|
@@ -287,11 +287,11 @@ var init_subquery = __esm(() => {
|
|
|
287
287
|
};
|
|
288
288
|
});
|
|
289
289
|
|
|
290
|
-
//
|
|
290
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/version.js
|
|
291
291
|
var version = "0.45.1";
|
|
292
292
|
var init_version = () => {};
|
|
293
293
|
|
|
294
|
-
//
|
|
294
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/tracing.js
|
|
295
295
|
var otel, rawTracer, tracer;
|
|
296
296
|
var init_tracing = __esm(() => {
|
|
297
297
|
init_tracing_utils();
|
|
@@ -321,13 +321,13 @@ var init_tracing = __esm(() => {
|
|
|
321
321
|
};
|
|
322
322
|
});
|
|
323
323
|
|
|
324
|
-
//
|
|
324
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/view-common.js
|
|
325
325
|
var ViewBaseConfig;
|
|
326
326
|
var init_view_common = __esm(() => {
|
|
327
327
|
ViewBaseConfig = Symbol.for("drizzle:ViewBaseConfig");
|
|
328
328
|
});
|
|
329
329
|
|
|
330
|
-
//
|
|
330
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/table.js
|
|
331
331
|
function isTable(table) {
|
|
332
332
|
return typeof table === "object" && table !== null && IsDrizzleTable in table;
|
|
333
333
|
}
|
|
@@ -378,7 +378,7 @@ var init_table = __esm(() => {
|
|
|
378
378
|
};
|
|
379
379
|
});
|
|
380
380
|
|
|
381
|
-
//
|
|
381
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/sql.js
|
|
382
382
|
function isSQLWrapper(value) {
|
|
383
383
|
return value !== null && value !== undefined && typeof value.getSQL === "function";
|
|
384
384
|
}
|
|
@@ -780,7 +780,7 @@ var init_sql = __esm(() => {
|
|
|
780
780
|
};
|
|
781
781
|
});
|
|
782
782
|
|
|
783
|
-
//
|
|
783
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/alias.js
|
|
784
784
|
function aliasedTable(table, tableAlias) {
|
|
785
785
|
return new Proxy(table, new TableAliasProxyHandler(tableAlias, false));
|
|
786
786
|
}
|
|
@@ -881,7 +881,7 @@ var init_alias = __esm(() => {
|
|
|
881
881
|
};
|
|
882
882
|
});
|
|
883
883
|
|
|
884
|
-
//
|
|
884
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/errors.js
|
|
885
885
|
var DrizzleError, DrizzleQueryError, TransactionRollbackError;
|
|
886
886
|
var init_errors = __esm(() => {
|
|
887
887
|
init_entity();
|
|
@@ -913,7 +913,7 @@ params: ${params}`);
|
|
|
913
913
|
};
|
|
914
914
|
});
|
|
915
915
|
|
|
916
|
-
//
|
|
916
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/logger.js
|
|
917
917
|
var ConsoleLogWriter, DefaultLogger, NoopLogger;
|
|
918
918
|
var init_logger = __esm(() => {
|
|
919
919
|
init_entity();
|
|
@@ -947,7 +947,7 @@ var init_logger = __esm(() => {
|
|
|
947
947
|
};
|
|
948
948
|
});
|
|
949
949
|
|
|
950
|
-
//
|
|
950
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/query-promise.js
|
|
951
951
|
var QueryPromise;
|
|
952
952
|
var init_query_promise = __esm(() => {
|
|
953
953
|
init_entity();
|
|
@@ -972,7 +972,7 @@ var init_query_promise = __esm(() => {
|
|
|
972
972
|
};
|
|
973
973
|
});
|
|
974
974
|
|
|
975
|
-
//
|
|
975
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/utils.js
|
|
976
976
|
function mapResultRow(columns, row, joinsNotNullableMap) {
|
|
977
977
|
const nullifyMap = {};
|
|
978
978
|
const result = columns.reduce((result2, { path, field }, columnIndex) => {
|
|
@@ -1138,7 +1138,7 @@ var init_utils = __esm(() => {
|
|
|
1138
1138
|
textDecoder = typeof TextDecoder === "undefined" ? null : new TextDecoder;
|
|
1139
1139
|
});
|
|
1140
1140
|
|
|
1141
|
-
//
|
|
1141
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/pg-core/table.js
|
|
1142
1142
|
var InlineForeignKeys, EnableRLS, PgTable;
|
|
1143
1143
|
var init_table2 = __esm(() => {
|
|
1144
1144
|
init_entity();
|
|
@@ -1158,7 +1158,7 @@ var init_table2 = __esm(() => {
|
|
|
1158
1158
|
};
|
|
1159
1159
|
});
|
|
1160
1160
|
|
|
1161
|
-
//
|
|
1161
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/pg-core/primary-keys.js
|
|
1162
1162
|
var PrimaryKeyBuilder, PrimaryKey;
|
|
1163
1163
|
var init_primary_keys = __esm(() => {
|
|
1164
1164
|
init_entity();
|
|
@@ -1190,7 +1190,7 @@ var init_primary_keys = __esm(() => {
|
|
|
1190
1190
|
};
|
|
1191
1191
|
});
|
|
1192
1192
|
|
|
1193
|
-
//
|
|
1193
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/expressions/conditions.js
|
|
1194
1194
|
function bindIfParam(value, column) {
|
|
1195
1195
|
if (isDriverValueEncoder(column) && !isSQLWrapper(value) && !is(value, Param) && !is(value, Placeholder) && !is(value, Column) && !is(value, Table) && !is(value, View)) {
|
|
1196
1196
|
return new Param(value, column);
|
|
@@ -1326,7 +1326,7 @@ var init_conditions = __esm(() => {
|
|
|
1326
1326
|
init_sql();
|
|
1327
1327
|
});
|
|
1328
1328
|
|
|
1329
|
-
//
|
|
1329
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/expressions/select.js
|
|
1330
1330
|
function asc(column) {
|
|
1331
1331
|
return sql`${column} asc`;
|
|
1332
1332
|
}
|
|
@@ -1337,13 +1337,13 @@ var init_select = __esm(() => {
|
|
|
1337
1337
|
init_sql();
|
|
1338
1338
|
});
|
|
1339
1339
|
|
|
1340
|
-
//
|
|
1340
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/expressions/index.js
|
|
1341
1341
|
var init_expressions = __esm(() => {
|
|
1342
1342
|
init_conditions();
|
|
1343
1343
|
init_select();
|
|
1344
1344
|
});
|
|
1345
1345
|
|
|
1346
|
-
//
|
|
1346
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/relations.js
|
|
1347
1347
|
function getOperators() {
|
|
1348
1348
|
return {
|
|
1349
1349
|
and,
|
|
@@ -1575,7 +1575,7 @@ var init_relations = __esm(() => {
|
|
|
1575
1575
|
};
|
|
1576
1576
|
});
|
|
1577
1577
|
|
|
1578
|
-
//
|
|
1578
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/functions/aggregate.js
|
|
1579
1579
|
function count(expression) {
|
|
1580
1580
|
return sql`count(${expression || sql.raw("*")})`.mapWith(Number);
|
|
1581
1581
|
}
|
|
@@ -1606,7 +1606,7 @@ var init_aggregate = __esm(() => {
|
|
|
1606
1606
|
init_sql();
|
|
1607
1607
|
});
|
|
1608
1608
|
|
|
1609
|
-
//
|
|
1609
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/functions/vector.js
|
|
1610
1610
|
function toSql(value) {
|
|
1611
1611
|
return JSON.stringify(value);
|
|
1612
1612
|
}
|
|
@@ -1650,20 +1650,20 @@ var init_vector = __esm(() => {
|
|
|
1650
1650
|
init_sql();
|
|
1651
1651
|
});
|
|
1652
1652
|
|
|
1653
|
-
//
|
|
1653
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/functions/index.js
|
|
1654
1654
|
var init_functions = __esm(() => {
|
|
1655
1655
|
init_aggregate();
|
|
1656
1656
|
init_vector();
|
|
1657
1657
|
});
|
|
1658
1658
|
|
|
1659
|
-
//
|
|
1659
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/sql/index.js
|
|
1660
1660
|
var init_sql2 = __esm(() => {
|
|
1661
1661
|
init_expressions();
|
|
1662
1662
|
init_functions();
|
|
1663
1663
|
init_sql();
|
|
1664
1664
|
});
|
|
1665
1665
|
|
|
1666
|
-
//
|
|
1666
|
+
// ../../../node_modules/.bun/drizzle-orm@0.45.1+6e0ea2f0f122d214/node_modules/drizzle-orm/index.js
|
|
1667
1667
|
var exports_drizzle_orm = {};
|
|
1668
1668
|
__export(exports_drizzle_orm, {
|
|
1669
1669
|
textDecoder: () => textDecoder,
|
|
@@ -1808,8 +1808,24 @@ import {
|
|
|
1808
1808
|
import crypto from "node:crypto";
|
|
1809
1809
|
|
|
1810
1810
|
// TrajectoryLoggerService.ts
|
|
1811
|
-
import {
|
|
1811
|
+
import {
|
|
1812
|
+
logger as logger2,
|
|
1813
|
+
Service,
|
|
1814
|
+
getTrajectoryContext,
|
|
1815
|
+
runWithTrajectoryContext,
|
|
1816
|
+
setTrajectoryContextManager
|
|
1817
|
+
} from "@elizaos/core";
|
|
1812
1818
|
import { v4 as uuidv4 } from "uuid";
|
|
1819
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
1820
|
+
var trajectoryStorage = new AsyncLocalStorage;
|
|
1821
|
+
setTrajectoryContextManager({
|
|
1822
|
+
run(context, fn) {
|
|
1823
|
+
return trajectoryStorage.run(context, fn);
|
|
1824
|
+
},
|
|
1825
|
+
active() {
|
|
1826
|
+
return trajectoryStorage.getStore();
|
|
1827
|
+
}
|
|
1828
|
+
});
|
|
1813
1829
|
function asNumber(value) {
|
|
1814
1830
|
if (typeof value === "number" && Number.isFinite(value))
|
|
1815
1831
|
return value;
|
|
@@ -1865,11 +1881,49 @@ class TrajectoryLoggerService extends Service {
|
|
|
1865
1881
|
return TrajectoryLoggerService.serviceType;
|
|
1866
1882
|
}
|
|
1867
1883
|
capabilityDescription = "Captures and persists LLM calls, provider accesses, and full trajectories for debugging, analysis, and RL training";
|
|
1884
|
+
static resolveFromRuntime(runtime) {
|
|
1885
|
+
const first = runtime.getService(TrajectoryLoggerService.serviceType);
|
|
1886
|
+
if (first && typeof first.startTrajectory === "function") {
|
|
1887
|
+
return first;
|
|
1888
|
+
}
|
|
1889
|
+
const all = typeof runtime.getServicesByType === "function" ? runtime.getServicesByType(TrajectoryLoggerService.serviceType) : [];
|
|
1890
|
+
for (const svc of all) {
|
|
1891
|
+
if (typeof svc.startTrajectory === "function") {
|
|
1892
|
+
return svc;
|
|
1893
|
+
}
|
|
1894
|
+
}
|
|
1895
|
+
return null;
|
|
1896
|
+
}
|
|
1897
|
+
static async waitForService(runtime, timeoutMs = 1e4) {
|
|
1898
|
+
const deadline = Date.now() + timeoutMs;
|
|
1899
|
+
while (Date.now() < deadline) {
|
|
1900
|
+
const svc = TrajectoryLoggerService.resolveFromRuntime(runtime);
|
|
1901
|
+
if (svc)
|
|
1902
|
+
return svc;
|
|
1903
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
1904
|
+
}
|
|
1905
|
+
return null;
|
|
1906
|
+
}
|
|
1868
1907
|
enabled = true;
|
|
1869
1908
|
initialized = false;
|
|
1870
1909
|
activeStepIds = new Map;
|
|
1871
1910
|
stepToTrajectory = new Map;
|
|
1872
1911
|
writeQueues = new Map;
|
|
1912
|
+
exposeBoundMethods() {
|
|
1913
|
+
const service = this;
|
|
1914
|
+
service.startTrajectory = this.startTrajectory.bind(this);
|
|
1915
|
+
service.endTrajectory = this.endTrajectory.bind(this);
|
|
1916
|
+
service.startStep = this.startStep.bind(this);
|
|
1917
|
+
service.getCurrentStepId = this.getCurrentStepId.bind(this);
|
|
1918
|
+
service.completeStep = this.completeStep.bind(this);
|
|
1919
|
+
service.logLLMCall = this.logLLMCall.bind(this);
|
|
1920
|
+
service.logProviderAccess = this.logProviderAccess.bind(this);
|
|
1921
|
+
service.logProviderAccessByTrajectoryId = this.logProviderAccessByTrajectoryId.bind(this);
|
|
1922
|
+
service.isEnabled = this.isEnabled.bind(this);
|
|
1923
|
+
service.listTrajectories = this.listTrajectories.bind(this);
|
|
1924
|
+
service.getTrajectoryDetail = this.getTrajectoryDetail.bind(this);
|
|
1925
|
+
service.flushWriteQueue = this.flushWriteQueue.bind(this);
|
|
1926
|
+
}
|
|
1873
1927
|
static async start(runtime) {
|
|
1874
1928
|
const service = new this(runtime);
|
|
1875
1929
|
await service.initialize();
|
|
@@ -1904,6 +1958,7 @@ class TrajectoryLoggerService extends Service {
|
|
|
1904
1958
|
async initialize() {
|
|
1905
1959
|
if (this.initialized)
|
|
1906
1960
|
return;
|
|
1961
|
+
this.exposeBoundMethods();
|
|
1907
1962
|
const runtime = this.runtime;
|
|
1908
1963
|
if (!runtime?.adapter) {
|
|
1909
1964
|
logger2.warn("[trajectory-logger] No runtime adapter available, skipping initialization");
|
|
@@ -1911,6 +1966,29 @@ class TrajectoryLoggerService extends Service {
|
|
|
1911
1966
|
}
|
|
1912
1967
|
await this.ensureTablesExist();
|
|
1913
1968
|
await this.backfillTrajectoriesMissingLlmCalls();
|
|
1969
|
+
const originalUseModel = runtime.useModel;
|
|
1970
|
+
if (typeof originalUseModel === "function") {
|
|
1971
|
+
const patchedUseModel = async function(...args) {
|
|
1972
|
+
const context = getTrajectoryContext();
|
|
1973
|
+
if (context?.trajectoryStepId) {
|
|
1974
|
+
return originalUseModel.call(this, ...args);
|
|
1975
|
+
}
|
|
1976
|
+
const trajLogger = TrajectoryLoggerService.resolveFromRuntime(runtime);
|
|
1977
|
+
if (!trajLogger || !trajLogger.isEnabled()) {
|
|
1978
|
+
return originalUseModel.call(this, ...args);
|
|
1979
|
+
}
|
|
1980
|
+
const stepId = await trajLogger.startTrajectory(runtime.agentId, {
|
|
1981
|
+
source: "chat-orphan",
|
|
1982
|
+
metadata: { autoPatch: true }
|
|
1983
|
+
});
|
|
1984
|
+
try {
|
|
1985
|
+
return await runWithTrajectoryContext({ trajectoryStepId: stepId }, () => originalUseModel.call(this, ...args));
|
|
1986
|
+
} finally {
|
|
1987
|
+
await trajLogger.endTrajectory(stepId, "completed");
|
|
1988
|
+
}
|
|
1989
|
+
};
|
|
1990
|
+
runtime.useModel = patchedUseModel;
|
|
1991
|
+
}
|
|
1914
1992
|
this.initialized = true;
|
|
1915
1993
|
logger2.info("[trajectory-logger] Trajectory logger service initialized");
|
|
1916
1994
|
}
|
|
@@ -2178,7 +2256,15 @@ class TrajectoryLoggerService extends Service {
|
|
|
2178
2256
|
completionTokens: 0,
|
|
2179
2257
|
latencyMs: 0,
|
|
2180
2258
|
purpose: "other",
|
|
2181
|
-
actionType: "TRAJECTORY_FALLBACK"
|
|
2259
|
+
actionType: "TRAJECTORY_FALLBACK",
|
|
2260
|
+
stepType: "synthetic",
|
|
2261
|
+
tags: [
|
|
2262
|
+
"llm",
|
|
2263
|
+
"step:synthetic",
|
|
2264
|
+
"purpose:other",
|
|
2265
|
+
"action:trajectory_fallback",
|
|
2266
|
+
"synthetic"
|
|
2267
|
+
]
|
|
2182
2268
|
};
|
|
2183
2269
|
step.llmCalls.push(syntheticCall);
|
|
2184
2270
|
if (!step.metadata)
|
|
@@ -2214,6 +2300,12 @@ class TrajectoryLoggerService extends Service {
|
|
|
2214
2300
|
totalCompletionTokens
|
|
2215
2301
|
};
|
|
2216
2302
|
}
|
|
2303
|
+
async flushWriteQueue(trajectoryId) {
|
|
2304
|
+
const pending = this.writeQueues.get(trajectoryId);
|
|
2305
|
+
if (pending) {
|
|
2306
|
+
await pending.catch(() => {});
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2217
2309
|
async withTrajectoryWriteLock(trajectoryId, task) {
|
|
2218
2310
|
const previous = this.writeQueues.get(trajectoryId) ?? Promise.resolve();
|
|
2219
2311
|
const next = previous.catch(() => {}).then(task);
|
|
@@ -2364,41 +2456,49 @@ class TrajectoryLoggerService extends Service {
|
|
|
2364
2456
|
logLlmCall(params) {
|
|
2365
2457
|
if (!this.enabled)
|
|
2366
2458
|
return;
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
}
|
|
2373
|
-
await this.withTrajectoryWriteLock(trajectoryId, async () => {
|
|
2374
|
-
const trajectory = await this.getTrajectoryById(trajectoryId);
|
|
2375
|
-
if (!trajectory)
|
|
2459
|
+
const trajectoryId = this.stepToTrajectory.get(params.stepId);
|
|
2460
|
+
if (!trajectoryId) {
|
|
2461
|
+
(async () => {
|
|
2462
|
+
const resolved = await this.resolveTrajectoryId(params.stepId);
|
|
2463
|
+
if (!resolved)
|
|
2376
2464
|
return;
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
timestamp: Date.now(),
|
|
2381
|
-
model: params.model,
|
|
2382
|
-
modelVersion: params.modelVersion,
|
|
2383
|
-
systemPrompt: params.systemPrompt,
|
|
2384
|
-
userPrompt: params.userPrompt,
|
|
2385
|
-
response: params.response,
|
|
2386
|
-
reasoning: params.reasoning,
|
|
2387
|
-
temperature: params.temperature,
|
|
2388
|
-
maxTokens: params.maxTokens,
|
|
2389
|
-
purpose: this.normalizePurpose(params.purpose),
|
|
2390
|
-
actionType: params.actionType,
|
|
2391
|
-
promptTokens: params.promptTokens,
|
|
2392
|
-
completionTokens: params.completionTokens,
|
|
2393
|
-
latencyMs: params.latencyMs
|
|
2394
|
-
};
|
|
2395
|
-
step.llmCalls.push(llmCall);
|
|
2396
|
-
await this.persistTrajectory(trajectoryId, trajectory, "active");
|
|
2465
|
+
await this._persistLlmCall(resolved, params);
|
|
2466
|
+
})().catch((err) => {
|
|
2467
|
+
logger2.warn({ err, stepId: params.stepId }, "[trajectory-logger] Failed to persist LLM call (fallback)");
|
|
2397
2468
|
});
|
|
2398
|
-
|
|
2469
|
+
return;
|
|
2470
|
+
}
|
|
2471
|
+
this._persistLlmCall(trajectoryId, params).catch((err) => {
|
|
2399
2472
|
logger2.warn({ err, stepId: params.stepId }, "[trajectory-logger] Failed to persist LLM call");
|
|
2400
2473
|
});
|
|
2401
2474
|
}
|
|
2475
|
+
async _persistLlmCall(trajectoryId, params) {
|
|
2476
|
+
await this.withTrajectoryWriteLock(trajectoryId, async () => {
|
|
2477
|
+
const trajectory = await this.getTrajectoryById(trajectoryId);
|
|
2478
|
+
if (!trajectory)
|
|
2479
|
+
return;
|
|
2480
|
+
const step = await this.ensureStepExists(trajectory, params.stepId);
|
|
2481
|
+
const llmCall = {
|
|
2482
|
+
callId: uuidv4(),
|
|
2483
|
+
timestamp: Date.now(),
|
|
2484
|
+
model: params.model,
|
|
2485
|
+
modelVersion: params.modelVersion,
|
|
2486
|
+
systemPrompt: params.systemPrompt,
|
|
2487
|
+
userPrompt: params.userPrompt,
|
|
2488
|
+
response: params.response,
|
|
2489
|
+
reasoning: params.reasoning,
|
|
2490
|
+
temperature: params.temperature,
|
|
2491
|
+
maxTokens: params.maxTokens,
|
|
2492
|
+
purpose: this.normalizePurpose(params.purpose),
|
|
2493
|
+
actionType: params.actionType,
|
|
2494
|
+
promptTokens: params.promptTokens,
|
|
2495
|
+
completionTokens: params.completionTokens,
|
|
2496
|
+
latencyMs: params.latencyMs
|
|
2497
|
+
};
|
|
2498
|
+
step.llmCalls.push(llmCall);
|
|
2499
|
+
await this.persistTrajectory(trajectoryId, trajectory, "active");
|
|
2500
|
+
});
|
|
2501
|
+
}
|
|
2402
2502
|
logLLMCall(stepId, details) {
|
|
2403
2503
|
this.logLlmCall({
|
|
2404
2504
|
stepId,
|
|
@@ -2632,21 +2732,28 @@ class TrajectoryLoggerService extends Service {
|
|
|
2632
2732
|
return;
|
|
2633
2733
|
}
|
|
2634
2734
|
const now = Date.now();
|
|
2635
|
-
|
|
2636
|
-
trajectory.
|
|
2637
|
-
trajectory.metrics.finalStatus = status;
|
|
2638
|
-
trajectory.metrics.episodeLength = trajectory.steps.length;
|
|
2735
|
+
const durationMs = now - trajectory.startTime;
|
|
2736
|
+
const metrics = { ...trajectory.metrics, finalStatus: status, episodeLength: trajectory.steps.length };
|
|
2639
2737
|
if (finalMetrics) {
|
|
2640
|
-
|
|
2641
|
-
...trajectory.metrics,
|
|
2642
|
-
...finalMetrics
|
|
2643
|
-
};
|
|
2738
|
+
Object.assign(metrics, finalMetrics);
|
|
2644
2739
|
}
|
|
2645
2740
|
await this.markAllStepsInactive(trajectoryId);
|
|
2646
2741
|
this.activeStepIds.delete(trajectoryId);
|
|
2647
|
-
|
|
2742
|
+
const updatedAtIso = new Date().toISOString();
|
|
2743
|
+
await this.executeRawSql(`
|
|
2744
|
+
UPDATE trajectories SET
|
|
2745
|
+
status = ${sqlLiteral(status)},
|
|
2746
|
+
end_time = ${now},
|
|
2747
|
+
duration_ms = ${durationMs},
|
|
2748
|
+
metrics_json = ${sqlLiteral(metrics)},
|
|
2749
|
+
updated_at = ${sqlLiteral(updatedAtIso)}
|
|
2750
|
+
WHERE id = ${sqlLiteral(trajectoryId)}
|
|
2751
|
+
`);
|
|
2648
2752
|
});
|
|
2649
|
-
for (const [
|
|
2753
|
+
for (const [
|
|
2754
|
+
stepId,
|
|
2755
|
+
mappedTrajectoryId
|
|
2756
|
+
] of this.stepToTrajectory.entries()) {
|
|
2650
2757
|
if (mappedTrajectoryId === trajectoryId) {
|
|
2651
2758
|
this.stepToTrajectory.delete(stepId);
|
|
2652
2759
|
}
|
|
@@ -3067,7 +3174,7 @@ var trajectoryContexts = new WeakMap;
|
|
|
3067
3174
|
function setTrajectoryContext(runtime, trajectoryId, trajectoryLogger) {
|
|
3068
3175
|
trajectoryContexts.set(runtime, { trajectoryId, logger: trajectoryLogger });
|
|
3069
3176
|
}
|
|
3070
|
-
function
|
|
3177
|
+
function getTrajectoryContext2(runtime) {
|
|
3071
3178
|
return trajectoryContexts.get(runtime) || null;
|
|
3072
3179
|
}
|
|
3073
3180
|
function clearTrajectoryContext(runtime) {
|
|
@@ -3078,7 +3185,7 @@ function wrapActionWithLogging(action, _trajectoryLogger) {
|
|
|
3078
3185
|
return {
|
|
3079
3186
|
...action,
|
|
3080
3187
|
handler: async (runtime, message, state, options, callback) => {
|
|
3081
|
-
const context =
|
|
3188
|
+
const context = getTrajectoryContext2(runtime);
|
|
3082
3189
|
if (!context) {
|
|
3083
3190
|
const result = await originalHandler(runtime, message, state, options, callback);
|
|
3084
3191
|
return result ?? undefined;
|
|
@@ -3185,7 +3292,7 @@ function wrapProviderWithLogging(provider, _trajectoryLogger) {
|
|
|
3185
3292
|
return {
|
|
3186
3293
|
...provider,
|
|
3187
3294
|
get: async (runtime, message, state) => {
|
|
3188
|
-
const context =
|
|
3295
|
+
const context = getTrajectoryContext2(runtime);
|
|
3189
3296
|
if (!context) {
|
|
3190
3297
|
return originalGet?.(runtime, message, state) || { text: "" };
|
|
3191
3298
|
}
|
|
@@ -3520,6 +3627,7 @@ async function recomputeTrajectoryRewards(_trajectoryIds) {}
|
|
|
3520
3627
|
import { logger as logger4 } from "@elizaos/core";
|
|
3521
3628
|
async function startAutonomousTick(trajectoryLogger, context) {
|
|
3522
3629
|
const trajectoryId = await trajectoryLogger.startTrajectory(context.agentId, {
|
|
3630
|
+
source: context.source,
|
|
3523
3631
|
scenarioId: context.scenarioId,
|
|
3524
3632
|
episodeId: context.episodeId,
|
|
3525
3633
|
batchId: context.batchId,
|
|
@@ -3537,6 +3645,10 @@ async function startAutonomousTick(trajectoryLogger, context) {
|
|
|
3537
3645
|
return trajectoryId;
|
|
3538
3646
|
}
|
|
3539
3647
|
async function endAutonomousTick(trajectoryLogger, trajectoryId, status = "completed", finalMetrics) {
|
|
3648
|
+
const flush = trajectoryLogger.flushWriteQueue;
|
|
3649
|
+
if (typeof flush === "function") {
|
|
3650
|
+
await flush(trajectoryId);
|
|
3651
|
+
}
|
|
3540
3652
|
await trajectoryLogger.endTrajectory(trajectoryId, status, finalMetrics);
|
|
3541
3653
|
logger4.info({ trajectoryId, status }, "Ended autonomous tick trajectory");
|
|
3542
3654
|
}
|
|
@@ -3689,7 +3801,7 @@ var trajectoryLoggerPlugin = {
|
|
|
3689
3801
|
};
|
|
3690
3802
|
}
|
|
3691
3803
|
const meta = message.metadata;
|
|
3692
|
-
const logger5 =
|
|
3804
|
+
const logger5 = TrajectoryLoggerService.resolveFromRuntime(runtime);
|
|
3693
3805
|
if (!logger5)
|
|
3694
3806
|
return;
|
|
3695
3807
|
let trajectoryStepId = crypto.randomUUID();
|
|
@@ -3745,7 +3857,7 @@ var trajectoryLoggerPlugin = {
|
|
|
3745
3857
|
}
|
|
3746
3858
|
if (!trajectoryStepId)
|
|
3747
3859
|
return;
|
|
3748
|
-
const logger5 =
|
|
3860
|
+
const logger5 = TrajectoryLoggerService.resolveFromRuntime(runtime);
|
|
3749
3861
|
if (!logger5)
|
|
3750
3862
|
return;
|
|
3751
3863
|
try {
|
|
@@ -3790,7 +3902,7 @@ export {
|
|
|
3790
3902
|
logProviderAccess,
|
|
3791
3903
|
logLLMCallFromAction,
|
|
3792
3904
|
groupTrajectories,
|
|
3793
|
-
getTrajectoryContext,
|
|
3905
|
+
getTrajectoryContext2 as getTrajectoryContext,
|
|
3794
3906
|
extractSharedPrefix,
|
|
3795
3907
|
exportToHuggingFace,
|
|
3796
3908
|
exportGroupedForGRPO,
|
|
@@ -3807,4 +3919,4 @@ export {
|
|
|
3807
3919
|
RewardService
|
|
3808
3920
|
};
|
|
3809
3921
|
|
|
3810
|
-
//# debugId=
|
|
3922
|
+
//# debugId=82D6338D5E8EB6DA64756E2164756E21
|