-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathuseCreateOnlineEval.ts
More file actions
75 lines (66 loc) · 2.48 KB
/
Copy pathuseCreateOnlineEval.ts
File metadata and controls
75 lines (66 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { onlineEvalConfigPrimitive } from '../../primitives/registry';
import type { OnlineEvalFilter } from '../../../schema';
import { withAddTelemetry } from '../../telemetry/cli-command-run.js';
import { useCallback, useEffect, useState } from 'react';
interface CreateOnlineEvalConfig {
name: string;
agent: string;
endpoint?: string;
evaluators: string[];
samplingRate: number;
sessionTimeoutMinutes?: number;
filters?: OnlineEvalFilter[];
enableOnCreate: boolean;
}
export function useCreateOnlineEval() {
const [status, setStatus] = useState<{ state: 'idle' | 'loading' | 'success' | 'error'; error?: string }>({
state: 'idle',
});
const create = useCallback(async (config: CreateOnlineEvalConfig) => {
setStatus({ state: 'loading' });
try {
const addResult = await withAddTelemetry(
'add.online-eval',
{
evaluator_count: config.evaluators.length,
enable_on_create: config.enableOnCreate ?? false,
},
() =>
onlineEvalConfigPrimitive.add({
name: config.name,
agent: config.agent,
...(config.endpoint ? { endpoint: config.endpoint } : {}),
evaluators: config.evaluators,
samplingRate: config.samplingRate,
...(config.sessionTimeoutMinutes !== undefined && { sessionTimeoutMinutes: config.sessionTimeoutMinutes }),
...(config.filters && config.filters.length > 0 && { filters: config.filters }),
enableOnCreate: config.enableOnCreate,
})
);
if (!addResult.success) {
throw new Error(addResult.error ?? 'Failed to create online eval config');
}
setStatus({ state: 'success' });
return { ok: true as const, configName: config.name };
} catch (err) {
const message = err instanceof Error ? err.message : 'Failed to create online eval config.';
setStatus({ state: 'error', error: message });
return { ok: false as const, error: message };
}
}, []);
const reset = useCallback(() => {
setStatus({ state: 'idle' });
}, []);
return { status, createOnlineEval: create, reset };
}
export function useExistingOnlineEvalNames() {
const [names, setNames] = useState<string[]>([]);
useEffect(() => {
void onlineEvalConfigPrimitive.getAllNames().then(setNames);
}, []);
const refresh = useCallback(async () => {
const result = await onlineEvalConfigPrimitive.getAllNames();
setNames(result);
}, []);
return { names, refresh };
}