@agentuity/runtime 0.0.42 โ 0.0.44
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/AGENTS.md +11 -9
- package/README.md +4 -4
- package/dist/_context.d.ts +12 -4
- package/dist/_context.d.ts.map +1 -1
- package/dist/_server.d.ts +7 -4
- package/dist/_server.d.ts.map +1 -1
- package/dist/_services.d.ts +13 -2
- package/dist/_services.d.ts.map +1 -1
- package/dist/_util.d.ts +1 -1
- package/dist/_util.d.ts.map +1 -1
- package/dist/_waituntil.d.ts +1 -3
- package/dist/_waituntil.d.ts.map +1 -1
- package/dist/agent.d.ts +41 -14
- package/dist/agent.d.ts.map +1 -1
- package/dist/app.d.ts +90 -8
- package/dist/app.d.ts.map +1 -1
- package/dist/eval.d.ts +79 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/io/email.d.ts +77 -0
- package/dist/io/email.d.ts.map +1 -0
- package/dist/logger/console.d.ts +21 -1
- package/dist/logger/console.d.ts.map +1 -1
- package/dist/logger/index.d.ts +0 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/user.d.ts +2 -2
- package/dist/logger/user.d.ts.map +1 -1
- package/dist/otel/config.d.ts +3 -1
- package/dist/otel/config.d.ts.map +1 -1
- package/dist/otel/console.d.ts +2 -1
- package/dist/otel/console.d.ts.map +1 -1
- package/dist/otel/exporters/index.d.ts +4 -0
- package/dist/otel/exporters/index.d.ts.map +1 -0
- package/dist/otel/exporters/jsonl-log-exporter.d.ts +36 -0
- package/dist/otel/exporters/jsonl-log-exporter.d.ts.map +1 -0
- package/dist/otel/exporters/jsonl-metric-exporter.d.ts +40 -0
- package/dist/otel/exporters/jsonl-metric-exporter.d.ts.map +1 -0
- package/dist/otel/exporters/jsonl-trace-exporter.d.ts +36 -0
- package/dist/otel/exporters/jsonl-trace-exporter.d.ts.map +1 -0
- package/dist/otel/http.d.ts.map +1 -1
- package/dist/otel/logger.d.ts +15 -11
- package/dist/otel/logger.d.ts.map +1 -1
- package/dist/otel/otel.d.ts +8 -2
- package/dist/otel/otel.d.ts.map +1 -1
- package/dist/router.d.ts +4 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/services/evalrun/composite.d.ts +21 -0
- package/dist/services/evalrun/composite.d.ts.map +1 -0
- package/dist/services/evalrun/http.d.ts +24 -0
- package/dist/services/evalrun/http.d.ts.map +1 -0
- package/dist/services/evalrun/index.d.ts +5 -0
- package/dist/services/evalrun/index.d.ts.map +1 -0
- package/dist/services/evalrun/json.d.ts +21 -0
- package/dist/services/evalrun/json.d.ts.map +1 -0
- package/dist/services/evalrun/local.d.ts +19 -0
- package/dist/services/evalrun/local.d.ts.map +1 -0
- package/dist/services/local/_db.d.ts +4 -0
- package/dist/services/local/_db.d.ts.map +1 -0
- package/dist/services/local/_router.d.ts +3 -0
- package/dist/services/local/_router.d.ts.map +1 -0
- package/dist/services/local/_util.d.ts +18 -0
- package/dist/services/local/_util.d.ts.map +1 -0
- package/dist/services/local/index.d.ts +8 -0
- package/dist/services/local/index.d.ts.map +1 -0
- package/dist/services/local/keyvalue.d.ts +10 -0
- package/dist/services/local/keyvalue.d.ts.map +1 -0
- package/dist/services/local/objectstore.d.ts +11 -0
- package/dist/services/local/objectstore.d.ts.map +1 -0
- package/dist/services/local/stream.d.ts +10 -0
- package/dist/services/local/stream.d.ts.map +1 -0
- package/dist/services/local/vector.d.ts +13 -0
- package/dist/services/local/vector.d.ts.map +1 -0
- package/dist/services/session/composite.d.ts +21 -0
- package/dist/services/session/composite.d.ts.map +1 -0
- package/dist/services/session/http.d.ts +23 -0
- package/dist/services/session/http.d.ts.map +1 -0
- package/dist/services/session/index.d.ts +5 -0
- package/dist/services/session/index.d.ts.map +1 -0
- package/dist/services/session/json.d.ts +22 -0
- package/dist/services/session/json.d.ts.map +1 -0
- package/dist/services/session/local.d.ts +19 -0
- package/dist/services/session/local.d.ts.map +1 -0
- package/dist/session.d.ts +70 -0
- package/dist/session.d.ts.map +1 -0
- package/package.json +10 -6
- package/src/_config.ts +1 -1
- package/src/_context.ts +19 -16
- package/src/_server.ts +284 -42
- package/src/_services.ts +147 -34
- package/src/_util.ts +2 -3
- package/src/_waituntil.ts +5 -153
- package/src/agent.ts +667 -65
- package/src/app.ts +159 -13
- package/src/eval.ts +95 -0
- package/src/index.ts +6 -1
- package/src/io/email.ts +173 -0
- package/src/logger/console.ts +222 -15
- package/src/logger/index.ts +0 -1
- package/src/logger/user.ts +8 -4
- package/src/otel/config.ts +7 -44
- package/src/otel/console.ts +9 -4
- package/src/otel/exporters/README.md +217 -0
- package/src/otel/exporters/index.ts +3 -0
- package/src/otel/exporters/jsonl-log-exporter.ts +113 -0
- package/src/otel/exporters/jsonl-metric-exporter.ts +120 -0
- package/src/otel/exporters/jsonl-trace-exporter.ts +121 -0
- package/src/otel/http.ts +3 -1
- package/src/otel/logger.ts +106 -41
- package/src/otel/otel.ts +43 -22
- package/src/router.ts +44 -4
- package/src/services/evalrun/composite.ts +34 -0
- package/src/services/evalrun/http.ts +112 -0
- package/src/services/evalrun/index.ts +4 -0
- package/src/services/evalrun/json.ts +46 -0
- package/src/services/evalrun/local.ts +28 -0
- package/src/services/local/README.md +1576 -0
- package/src/services/local/_db.ts +182 -0
- package/src/services/local/_router.ts +86 -0
- package/src/services/local/_util.ts +49 -0
- package/src/services/local/index.ts +7 -0
- package/src/services/local/keyvalue.ts +118 -0
- package/src/services/local/objectstore.ts +152 -0
- package/src/services/local/stream.ts +296 -0
- package/src/services/local/vector.ts +264 -0
- package/src/services/session/composite.ts +33 -0
- package/src/services/session/http.ts +64 -0
- package/src/services/session/index.ts +4 -0
- package/src/services/session/json.ts +42 -0
- package/src/services/session/local.ts +28 -0
- package/src/session.ts +284 -0
- package/dist/_unauthenticated.d.ts +0 -26
- package/dist/_unauthenticated.d.ts.map +0 -1
- package/src/_unauthenticated.ts +0 -126
package/src/_services.ts
CHANGED
|
@@ -11,18 +11,42 @@ import {
|
|
|
11
11
|
type ListStreamsResponse,
|
|
12
12
|
type VectorUpsertResult,
|
|
13
13
|
type VectorSearchResult,
|
|
14
|
+
type Logger,
|
|
15
|
+
type SessionEventProvider,
|
|
16
|
+
type EvalRunEventProvider,
|
|
14
17
|
} from '@agentuity/core';
|
|
15
|
-
import { createServerFetchAdapter, getServiceUrls } from '@agentuity/server';
|
|
18
|
+
import { /*APIClient,*/ createServerFetchAdapter, getServiceUrls } from '@agentuity/server';
|
|
19
|
+
import {
|
|
20
|
+
CompositeSessionEventProvider,
|
|
21
|
+
LocalSessionEventProvider,
|
|
22
|
+
JSONSessionEventProvider,
|
|
23
|
+
// HTTPSessionEventProvider,
|
|
24
|
+
} from './services/session';
|
|
25
|
+
import {
|
|
26
|
+
CompositeEvalRunEventProvider,
|
|
27
|
+
LocalEvalRunEventProvider,
|
|
28
|
+
JSONEvalRunEventProvider,
|
|
29
|
+
// HTTPEvalRunEventProvider,
|
|
30
|
+
} from './services/evalrun';
|
|
16
31
|
import { injectTraceContextToHeaders } from './otel/http';
|
|
17
32
|
import { getLogger, getTracer } from './_server';
|
|
18
|
-
import { getSDKVersion, isAuthenticated } from './_config';
|
|
33
|
+
import { getSDKVersion, isAuthenticated, isProduction } from './_config';
|
|
19
34
|
import type { AppConfig } from './app';
|
|
20
35
|
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} from './
|
|
36
|
+
DefaultSessionProvider,
|
|
37
|
+
DefaultThreadProvider,
|
|
38
|
+
type ThreadProvider,
|
|
39
|
+
type SessionProvider,
|
|
40
|
+
} from './session';
|
|
41
|
+
import {
|
|
42
|
+
LocalKeyValueStorage,
|
|
43
|
+
LocalObjectStorage,
|
|
44
|
+
LocalStreamStorage,
|
|
45
|
+
LocalVectorStorage,
|
|
46
|
+
getLocalDB,
|
|
47
|
+
normalizeProjectPath,
|
|
48
|
+
createLocalStorageRouter,
|
|
49
|
+
} from './services/local';
|
|
26
50
|
|
|
27
51
|
const userAgent = `Agentuity SDK/${getSDKVersion()}`;
|
|
28
52
|
const bearerKey = `Bearer ${process.env.AGENTUITY_SDK_KEY}`;
|
|
@@ -32,6 +56,7 @@ const kvBaseUrl = serviceUrls.keyvalue;
|
|
|
32
56
|
const streamBaseUrl = serviceUrls.stream;
|
|
33
57
|
const vectorBaseUrl = serviceUrls.vector;
|
|
34
58
|
const objectBaseUrl = serviceUrls.objectstore;
|
|
59
|
+
// const catalystBaseUrl = serviceUrls.catalyst;
|
|
35
60
|
|
|
36
61
|
const adapter = createServerFetchAdapter({
|
|
37
62
|
headers: {
|
|
@@ -149,45 +174,113 @@ let kv: KeyValueStorage;
|
|
|
149
174
|
let objectStore: ObjectStorage;
|
|
150
175
|
let stream: StreamStorage;
|
|
151
176
|
let vector: VectorStorage;
|
|
177
|
+
let session: SessionProvider;
|
|
178
|
+
let thread: ThreadProvider;
|
|
179
|
+
let sessionEvent: SessionEventProvider;
|
|
180
|
+
let evalRunEvent: EvalRunEventProvider;
|
|
181
|
+
|
|
182
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
183
|
+
let localRouter: any | null = null;
|
|
152
184
|
|
|
153
|
-
export function createServices(config?: AppConfig) {
|
|
185
|
+
export function createServices(logger: Logger, config?: AppConfig, serverUrl?: string) {
|
|
154
186
|
const authenticated = isAuthenticated();
|
|
187
|
+
const useLocal = config?.services?.useLocal ?? false;
|
|
155
188
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
kv = new KeyValueStorageService(kvBaseUrl, adapter);
|
|
160
|
-
} else {
|
|
161
|
-
kv = new UnauthenticatedKeyValueStorage();
|
|
162
|
-
}
|
|
189
|
+
// Use local services if explicitly requested OR if not authenticated
|
|
190
|
+
const shouldUseLocal =
|
|
191
|
+
useLocal || !authenticated || process.env.AGENTUITY_FORCE_LOCAL_SERVICES === 'true';
|
|
163
192
|
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
193
|
+
if (shouldUseLocal) {
|
|
194
|
+
const db = getLocalDB();
|
|
195
|
+
const projectPath = normalizeProjectPath();
|
|
196
|
+
|
|
197
|
+
if (!serverUrl) {
|
|
198
|
+
throw new Error('serverUrl is required when using local services');
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
logger.info('Using local services (development only)');
|
|
202
|
+
|
|
203
|
+
kv = config?.services?.keyvalue || new LocalKeyValueStorage(db, projectPath);
|
|
204
|
+
objectStore = config?.services?.object || new LocalObjectStorage(db, projectPath, serverUrl);
|
|
205
|
+
stream = config?.services?.stream || new LocalStreamStorage(db, projectPath, serverUrl);
|
|
206
|
+
vector = config?.services?.vector || new LocalVectorStorage(db, projectPath);
|
|
207
|
+
session = config?.services?.session || new DefaultSessionProvider();
|
|
208
|
+
thread = config?.services?.thread || new DefaultThreadProvider();
|
|
209
|
+
sessionEvent = config?.services?.sessionEvent
|
|
210
|
+
? new CompositeSessionEventProvider(
|
|
211
|
+
new LocalSessionEventProvider(),
|
|
212
|
+
config.services.sessionEvent
|
|
213
|
+
)
|
|
214
|
+
: new LocalSessionEventProvider();
|
|
215
|
+
evalRunEvent = config?.services?.evalRunEvent
|
|
216
|
+
? new CompositeEvalRunEventProvider(
|
|
217
|
+
new LocalEvalRunEventProvider(),
|
|
218
|
+
config.services.evalRunEvent
|
|
219
|
+
)
|
|
220
|
+
: new LocalEvalRunEventProvider();
|
|
221
|
+
|
|
222
|
+
localRouter = createLocalStorageRouter(db, projectPath);
|
|
223
|
+
|
|
224
|
+
return { localRouter };
|
|
170
225
|
}
|
|
171
226
|
|
|
172
|
-
if
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
227
|
+
// Reset local router if not using local services
|
|
228
|
+
localRouter = null;
|
|
229
|
+
|
|
230
|
+
// At this point we must be authenticated (since !authenticated would trigger local services above)
|
|
231
|
+
kv = config?.services?.keyvalue || new KeyValueStorageService(kvBaseUrl, adapter);
|
|
232
|
+
objectStore = config?.services?.object || new ObjectStorageService(objectBaseUrl, adapter);
|
|
233
|
+
stream = config?.services?.stream || new StreamStorageService(streamBaseUrl, adapter);
|
|
234
|
+
vector = config?.services?.vector || new VectorStorageService(vectorBaseUrl, adapter);
|
|
235
|
+
session = config?.services?.session || new DefaultSessionProvider();
|
|
236
|
+
thread = config?.services?.thread || new DefaultThreadProvider();
|
|
237
|
+
sessionEvent =
|
|
238
|
+
isProduction() && process.env.AGENTUITY_CLOUD_EXPORT_DIR
|
|
239
|
+
? new JSONSessionEventProvider(process.env.AGENTUITY_CLOUD_EXPORT_DIR)
|
|
240
|
+
: // FIXME: this is turned off for now for production until we have the new changes deployed
|
|
241
|
+
|
|
242
|
+
// ? new HTTPSessionEventProvider(new APIClient(catalystBaseUrl, logger))
|
|
243
|
+
new LocalSessionEventProvider();
|
|
244
|
+
if (config?.services?.sessionEvent) {
|
|
245
|
+
sessionEvent = new CompositeSessionEventProvider(sessionEvent, config.services.sessionEvent);
|
|
178
246
|
}
|
|
247
|
+
evalRunEvent =
|
|
248
|
+
isProduction() && process.env.AGENTUITY_CLOUD_EXPORT_DIR
|
|
249
|
+
? new JSONEvalRunEventProvider(process.env.AGENTUITY_CLOUD_EXPORT_DIR)
|
|
250
|
+
: // FIXME: this is turned off for now for production until we have the new changes deployed
|
|
179
251
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
} else {
|
|
185
|
-
vector = new UnauthenticatedVectorStorage();
|
|
252
|
+
// ? new HTTPEvalRunEventProvider(new APIClient(catalystBaseUrl, logger), logger, catalystBaseUrl)
|
|
253
|
+
new LocalEvalRunEventProvider();
|
|
254
|
+
if (config?.services?.evalRunEvent) {
|
|
255
|
+
evalRunEvent = new CompositeEvalRunEventProvider(evalRunEvent, config.services.evalRunEvent);
|
|
186
256
|
}
|
|
257
|
+
|
|
258
|
+
return {};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export function getThreadProvider(): ThreadProvider {
|
|
262
|
+
return thread;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export function getSessionProvider(): SessionProvider {
|
|
266
|
+
return session;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
270
|
+
export function getLocalRouter(): any | null {
|
|
271
|
+
return localRouter;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export function getSessionEventProvider() {
|
|
275
|
+
return sessionEvent;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export function getEvalRunEventProvider() {
|
|
279
|
+
return evalRunEvent;
|
|
187
280
|
}
|
|
188
281
|
|
|
189
282
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
190
|
-
export function registerServices(o: any) {
|
|
283
|
+
export function registerServices(o: any, includeAgents = false) {
|
|
191
284
|
Object.defineProperty(o, 'kv', {
|
|
192
285
|
get: () => kv,
|
|
193
286
|
enumerable: false,
|
|
@@ -208,4 +301,24 @@ export function registerServices(o: any) {
|
|
|
208
301
|
enumerable: false,
|
|
209
302
|
configurable: false,
|
|
210
303
|
});
|
|
304
|
+
|
|
305
|
+
// Also register agent registry if requested
|
|
306
|
+
if (includeAgents) {
|
|
307
|
+
// Cache the populated registry to avoid re-creating on every access
|
|
308
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
309
|
+
let cachedRegistry: any;
|
|
310
|
+
Object.defineProperty(o, 'agent', {
|
|
311
|
+
get: () => {
|
|
312
|
+
if (!cachedRegistry) {
|
|
313
|
+
// Lazy-load to avoid circular dependency
|
|
314
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
315
|
+
const { populateAgentsRegistry } = require('./agent');
|
|
316
|
+
cachedRegistry = populateAgentsRegistry(o);
|
|
317
|
+
}
|
|
318
|
+
return cachedRegistry;
|
|
319
|
+
},
|
|
320
|
+
enumerable: false,
|
|
321
|
+
configurable: false,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
211
324
|
}
|
package/src/_util.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Context } from 'hono';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
export function returnResponse(ctx: Context, result: any) {
|
|
3
|
+
export function returnResponse(ctx: Context, result: unknown) {
|
|
5
4
|
if (result instanceof ReadableStream) return ctx.body(result);
|
|
6
5
|
if (result instanceof Response) return result;
|
|
7
6
|
if (typeof result === 'string') return ctx.text(result);
|
|
@@ -17,7 +16,7 @@ export function returnResponse(ctx: Context, result: any) {
|
|
|
17
16
|
*/
|
|
18
17
|
export function hash(...val: string[]): string {
|
|
19
18
|
const hasher = new Bun.CryptoHasher('sha256');
|
|
20
|
-
val.
|
|
19
|
+
val.map((val) => hasher.update(val));
|
|
21
20
|
return hasher.digest().toHex();
|
|
22
21
|
}
|
|
23
22
|
|
package/src/_waituntil.ts
CHANGED
|
@@ -18,20 +18,16 @@ export default class WaitUntilHandler {
|
|
|
18
18
|
private tracer: Tracer;
|
|
19
19
|
private started: number | undefined;
|
|
20
20
|
private hasCalledWaitUntilAll = false;
|
|
21
|
-
private setHeader: (k: string, v: string) => void;
|
|
22
21
|
|
|
23
|
-
public constructor(
|
|
22
|
+
public constructor(tracer: Tracer) {
|
|
24
23
|
this.tracer = tracer;
|
|
25
24
|
this.promises = [];
|
|
26
|
-
this.setHeader = setHeader;
|
|
27
|
-
this.hasCalledWaitUntilAll = false;
|
|
28
25
|
}
|
|
29
26
|
|
|
30
27
|
public waitUntil(promise: Promise<void> | (() => void | Promise<void>)): void {
|
|
31
28
|
if (this.hasCalledWaitUntilAll) {
|
|
32
29
|
throw new Error('Cannot call waitUntil after waitUntilAll has been called');
|
|
33
30
|
}
|
|
34
|
-
this.setHeader('x-agentuity-session-pending', 'true');
|
|
35
31
|
running++;
|
|
36
32
|
internal.debug('wait until called, running: %d', running);
|
|
37
33
|
const currentContext = context.active();
|
|
@@ -69,11 +65,6 @@ export default class WaitUntilHandler {
|
|
|
69
65
|
return this.promises.length > 0;
|
|
70
66
|
}
|
|
71
67
|
|
|
72
|
-
private async markSessionCompleted(sessionId: string, duration: number) {
|
|
73
|
-
// TODO:
|
|
74
|
-
internal.debug('markSessionCompleted sessionId: %s, duration: %dms', sessionId, duration);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
68
|
public async waitUntilAll(logger: Logger, sessionId: string): Promise<void> {
|
|
78
69
|
internal.debug(`๐ waitUntilAll() called for session ${sessionId} (count: %d)`, running);
|
|
79
70
|
|
|
@@ -93,12 +84,10 @@ export default class WaitUntilHandler {
|
|
|
93
84
|
// Promises are already executing, just wait for them to complete
|
|
94
85
|
await Promise.all(this.promises);
|
|
95
86
|
const duration = Date.now() - (this.started as number);
|
|
96
|
-
internal.debug(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
// internal.debug('๐ Starting eval execution after session completion');
|
|
101
|
-
// await this.executeEvalsForSession(logger, sessionId);
|
|
87
|
+
internal.debug(
|
|
88
|
+
'โ
All promises completed, marking session completed (duration %dms)',
|
|
89
|
+
duration
|
|
90
|
+
);
|
|
102
91
|
} catch (ex) {
|
|
103
92
|
logger.error('error sending session completed', ex);
|
|
104
93
|
} finally {
|
|
@@ -106,141 +95,4 @@ export default class WaitUntilHandler {
|
|
|
106
95
|
this.promises.length = 0;
|
|
107
96
|
}
|
|
108
97
|
}
|
|
109
|
-
|
|
110
|
-
// /**
|
|
111
|
-
// * Execute evals for the completed session
|
|
112
|
-
// */
|
|
113
|
-
// private async executeEvalsForSession(
|
|
114
|
-
// logger: Logger,
|
|
115
|
-
// sessionId: string
|
|
116
|
-
// ): Promise<void> {
|
|
117
|
-
// try {
|
|
118
|
-
// internal.debug(`๐ Starting eval execution for session ${sessionId}`);
|
|
119
|
-
|
|
120
|
-
// // Get pending eval jobs for this session
|
|
121
|
-
// internal.debug('๐ Getting EvalJobScheduler instance...');
|
|
122
|
-
// const evalJobScheduler = await EvalJobScheduler.getInstance();
|
|
123
|
-
// internal.debug('โ
EvalJobScheduler instance obtained');
|
|
124
|
-
|
|
125
|
-
// internal.debug(`๐ Querying jobs for session ${sessionId}...`);
|
|
126
|
-
// const jobs = evalJobScheduler.getJobs({ sessionId });
|
|
127
|
-
|
|
128
|
-
// if (jobs.length === 0) {
|
|
129
|
-
// internal.debug(`๐ญ No eval jobs found for session ${sessionId}`);
|
|
130
|
-
// return;
|
|
131
|
-
// }
|
|
132
|
-
|
|
133
|
-
// internal.debug(
|
|
134
|
-
// `๐ Found ${jobs.length} eval jobs for session ${sessionId}`
|
|
135
|
-
// );
|
|
136
|
-
|
|
137
|
-
// // Load eval metadata map
|
|
138
|
-
// internal.debug('๐ง Loading eval metadata map...');
|
|
139
|
-
// const evalAPI = new EvalAPI();
|
|
140
|
-
// const evalMetadataMap = await evalAPI.loadEvalMetadataMap();
|
|
141
|
-
// internal.debug(`๐ Loaded ${evalMetadataMap.size} eval mappings`);
|
|
142
|
-
|
|
143
|
-
// // Execute evals for each job
|
|
144
|
-
// let totalEvalsExecuted = 0;
|
|
145
|
-
// for (let i = 0; i < jobs.length; i++) {
|
|
146
|
-
// const job = jobs[i];
|
|
147
|
-
// internal.debug(
|
|
148
|
-
// `๐ฏ Processing job ${i + 1}/${jobs.length} (spanId: ${job.spanId})`
|
|
149
|
-
// );
|
|
150
|
-
// const evalsInJob = await this.executeEvalsForJob(
|
|
151
|
-
// logger,
|
|
152
|
-
// job,
|
|
153
|
-
// evalAPI,
|
|
154
|
-
// evalMetadataMap
|
|
155
|
-
// );
|
|
156
|
-
// totalEvalsExecuted += evalsInJob;
|
|
157
|
-
// internal.debug(
|
|
158
|
-
// `โ
Completed job ${i + 1}/${jobs.length}: ${evalsInJob} evals executed`
|
|
159
|
-
// );
|
|
160
|
-
// }
|
|
161
|
-
|
|
162
|
-
// internal.debug(
|
|
163
|
-
// `โ
Completed eval execution for session ${sessionId}: ${totalEvalsExecuted} evals executed`
|
|
164
|
-
// );
|
|
165
|
-
|
|
166
|
-
// // Clean up completed jobs
|
|
167
|
-
// internal.debug(`๐งน Cleaning up ${jobs.length} completed jobs...`);
|
|
168
|
-
// for (const job of jobs) {
|
|
169
|
-
// evalJobScheduler.removeJob(job.spanId);
|
|
170
|
-
// }
|
|
171
|
-
// internal.debug(`โ
Cleaned up ${jobs.length} completed jobs`);
|
|
172
|
-
// } catch (error) {
|
|
173
|
-
// logger.error('โ Error executing evals for session:', error);
|
|
174
|
-
// }
|
|
175
|
-
// }
|
|
176
|
-
|
|
177
|
-
// /**
|
|
178
|
-
// * Execute evals for a specific job
|
|
179
|
-
// */
|
|
180
|
-
// private async executeEvalsForJob(
|
|
181
|
-
// logger: Logger,
|
|
182
|
-
// job: {
|
|
183
|
-
// spanId: string;
|
|
184
|
-
// sessionId: string;
|
|
185
|
-
// promptMetadata: PromptAttributes[];
|
|
186
|
-
// input?: string;
|
|
187
|
-
// output?: string;
|
|
188
|
-
// },
|
|
189
|
-
// evalAPI: EvalAPI,
|
|
190
|
-
// evalMetadataMap: Map<string, string>
|
|
191
|
-
// ): Promise<number> {
|
|
192
|
-
// let evalsExecuted = 0;
|
|
193
|
-
|
|
194
|
-
// internal.debug(
|
|
195
|
-
// `๐ฏ Processing job ${job.spanId} with ${job.promptMetadata.length} prompt metadata entries`
|
|
196
|
-
// );
|
|
197
|
-
|
|
198
|
-
// for (const promptMeta of job.promptMetadata || []) {
|
|
199
|
-
// if (!promptMeta.evals || promptMeta.evals.length === 0) {
|
|
200
|
-
// logger.debug('โญ๏ธ Skipping prompt metadata with no evals');
|
|
201
|
-
// continue;
|
|
202
|
-
// }
|
|
203
|
-
|
|
204
|
-
// internal.debug(
|
|
205
|
-
// `๐ Found ${promptMeta.evals.length} evals for prompt: ${promptMeta.evals.join(', ')}`
|
|
206
|
-
// );
|
|
207
|
-
|
|
208
|
-
// for (const evalSlug of promptMeta.evals) {
|
|
209
|
-
// try {
|
|
210
|
-
// internal.debug(
|
|
211
|
-
// `๐ Running eval '${evalSlug}' for session ${job.sessionId}`
|
|
212
|
-
// );
|
|
213
|
-
|
|
214
|
-
// internal.debug(`๐ Template hash: ${promptMeta.templateHash}`);
|
|
215
|
-
// internal.debug(`๐ Compiled hash: ${promptMeta.compiledHash}`);
|
|
216
|
-
|
|
217
|
-
// const result = await evalAPI.runEval(
|
|
218
|
-
// evalSlug,
|
|
219
|
-
// job.input || '',
|
|
220
|
-
// job.output || '',
|
|
221
|
-
// job.sessionId,
|
|
222
|
-
// job.spanId,
|
|
223
|
-
// promptMeta.templateHash
|
|
224
|
-
// );
|
|
225
|
-
|
|
226
|
-
// if (result.success) {
|
|
227
|
-
// internal.debug(`โ
Successfully executed eval '${evalSlug}'`);
|
|
228
|
-
// evalsExecuted++;
|
|
229
|
-
// } else {
|
|
230
|
-
// logger.warn(
|
|
231
|
-
// `โ ๏ธ Eval '${evalSlug}' completed but returned error: ${result.message}`
|
|
232
|
-
// );
|
|
233
|
-
// }
|
|
234
|
-
// } catch (error) {
|
|
235
|
-
// logger.error(`โ Failed to execute eval '${evalSlug}':`, error);
|
|
236
|
-
// // Continue with other evals even if one fails
|
|
237
|
-
// }
|
|
238
|
-
// }
|
|
239
|
-
// }
|
|
240
|
-
|
|
241
|
-
// internal.debug(
|
|
242
|
-
// `๐ Job ${job.spanId} completed: ${evalsExecuted} evals executed`
|
|
243
|
-
// );
|
|
244
|
-
// return evalsExecuted;
|
|
245
|
-
// }
|
|
246
98
|
}
|