@thinkhive/sdk 3.1.1 → 4.0.0
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/MIGRATION.md +83 -12
- package/README.md +279 -128
- package/dist/api/agents.d.ts +169 -0
- package/dist/api/agents.js +185 -0
- package/dist/api/apiKeys.d.ts +252 -0
- package/dist/api/apiKeys.js +298 -0
- package/dist/api/business-metrics.d.ts +188 -0
- package/dist/api/business-metrics.js +213 -0
- package/dist/api/calibration.d.ts +0 -62
- package/dist/api/calibration.js +5 -48
- package/dist/api/claims.js +10 -7
- package/dist/api/conversation-eval.d.ts +200 -0
- package/dist/api/conversation-eval.js +235 -0
- package/dist/api/deterministic-graders.d.ts +205 -0
- package/dist/api/deterministic-graders.js +191 -0
- package/dist/api/eval-health.d.ts +250 -0
- package/dist/api/eval-health.js +224 -0
- package/dist/api/human-review.d.ts +275 -0
- package/dist/api/human-review.js +236 -0
- package/dist/api/nondeterminism.d.ts +300 -0
- package/dist/api/nondeterminism.js +250 -0
- package/dist/api/quality-metrics.d.ts +303 -0
- package/dist/api/quality-metrics.js +198 -0
- package/dist/api/roi-analytics.d.ts +263 -0
- package/dist/api/roi-analytics.js +204 -0
- package/dist/api/runs.js +12 -6
- package/dist/api/transcript-patterns.d.ts +204 -0
- package/dist/api/transcript-patterns.js +227 -0
- package/dist/core/client.d.ts +83 -9
- package/dist/core/client.js +229 -34
- package/dist/core/config.d.ts +2 -3
- package/dist/core/config.js +3 -4
- package/dist/core/types.d.ts +57 -4
- package/dist/core/types.js +1 -1
- package/dist/index.d.ts +429 -76
- package/dist/index.js +262 -42
- package/package.json +2 -2
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ThinkHive SDK v3.0 - Deterministic Graders API
|
|
4
|
+
*
|
|
5
|
+
* API for running deterministic (code-based) evaluations
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.deterministicGraders = void 0;
|
|
9
|
+
exports.createRegexRule = createRegexRule;
|
|
10
|
+
exports.createContainsRule = createContainsRule;
|
|
11
|
+
exports.createLengthRule = createLengthRule;
|
|
12
|
+
exports.createJsonSchemaRule = createJsonSchemaRule;
|
|
13
|
+
exports.allRulesPassed = allRulesPassed;
|
|
14
|
+
exports.getFailedRules = getFailedRules;
|
|
15
|
+
exports.calculateAverageScore = calculateAverageScore;
|
|
16
|
+
const client_1 = require("../core/client");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// DETERMINISTIC GRADERS API CLIENT
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Deterministic Graders API client for code-based evaluations
|
|
22
|
+
*/
|
|
23
|
+
exports.deterministicGraders = {
|
|
24
|
+
/**
|
|
25
|
+
* Run deterministic evaluation on a single trace
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const result = await deterministicGraders.evaluate({
|
|
30
|
+
* traceId: 'trace_123',
|
|
31
|
+
* criterionId: 'criterion_456',
|
|
32
|
+
* });
|
|
33
|
+
* console.log(`Passed: ${result.passed}, Score: ${result.score}`);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
async evaluate(options) {
|
|
37
|
+
return (0, client_1.apiRequestWithData)('/deterministic-graders/evaluate', {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body: options,
|
|
40
|
+
apiVersion: 'none',
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Run deterministic evaluations on multiple traces
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const { results, summary } = await deterministicGraders.bulkEvaluate({
|
|
49
|
+
* evaluations: [
|
|
50
|
+
* { traceId: 'trace_1', criterionId: 'criterion_456' },
|
|
51
|
+
* { traceId: 'trace_2', criterionId: 'criterion_456' },
|
|
52
|
+
* { traceId: 'trace_3', criterionId: 'criterion_456' },
|
|
53
|
+
* ],
|
|
54
|
+
* });
|
|
55
|
+
* console.log(`Pass rate: ${summary.passRate * 100}%`);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
async bulkEvaluate(options) {
|
|
59
|
+
return (0, client_1.apiRequestWithData)('/deterministic-graders/bulk-evaluate', {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
body: options,
|
|
62
|
+
apiVersion: 'none',
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* Get available rule types with descriptions
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const ruleTypes = await deterministicGraders.getRuleTypes();
|
|
71
|
+
* for (const type of ruleTypes) {
|
|
72
|
+
* console.log(`${type.name}: ${type.description}`);
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
async getRuleTypes() {
|
|
77
|
+
return (0, client_1.apiRequestWithData)('/deterministic-graders/rule-types', { apiVersion: 'none' });
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* Get rule templates
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const templates = await deterministicGraders.getTemplates();
|
|
85
|
+
* const noPiiTemplate = templates.find(t => t.id === 'no_pii');
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
async getTemplates() {
|
|
89
|
+
return (0, client_1.apiRequestWithData)('/deterministic-graders/templates', { apiVersion: 'none' });
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// HELPER FUNCTIONS
|
|
94
|
+
// ============================================================================
|
|
95
|
+
/**
|
|
96
|
+
* Create a regex rule configuration
|
|
97
|
+
*
|
|
98
|
+
* @param pattern - Regular expression pattern
|
|
99
|
+
* @param flags - Regex flags (default: 'gi')
|
|
100
|
+
* @returns Rule configuration object
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const config = createRegexRule('\\b(error|fail)\\b', 'gi');
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
function createRegexRule(pattern, flags = 'gi') {
|
|
108
|
+
return { pattern, flags };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create a contains rule configuration
|
|
112
|
+
*
|
|
113
|
+
* @param values - Strings to check for
|
|
114
|
+
* @param caseSensitive - Whether comparison is case-sensitive
|
|
115
|
+
* @returns Rule configuration object
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* const config = createContainsRule(['hello', 'hi', 'hey'], false);
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
function createContainsRule(values, caseSensitive = false) {
|
|
123
|
+
return { values, caseSensitive };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create a length rule configuration
|
|
127
|
+
*
|
|
128
|
+
* @param min - Minimum length (optional)
|
|
129
|
+
* @param max - Maximum length (optional)
|
|
130
|
+
* @returns Rule configuration object
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const config = createLengthRule(50, 1000);
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
function createLengthRule(min, max) {
|
|
138
|
+
return { min, max };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create a JSON schema rule configuration
|
|
142
|
+
*
|
|
143
|
+
* @param schema - JSON Schema object
|
|
144
|
+
* @returns Rule configuration object
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const config = createJsonSchemaRule({
|
|
149
|
+
* type: 'object',
|
|
150
|
+
* required: ['name', 'email'],
|
|
151
|
+
* properties: {
|
|
152
|
+
* name: { type: 'string' },
|
|
153
|
+
* email: { type: 'string', format: 'email' },
|
|
154
|
+
* },
|
|
155
|
+
* });
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
function createJsonSchemaRule(schema) {
|
|
159
|
+
return { schema };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if all rule results passed
|
|
163
|
+
*
|
|
164
|
+
* @param results - Array of rule results
|
|
165
|
+
* @returns Whether all rules passed
|
|
166
|
+
*/
|
|
167
|
+
function allRulesPassed(results) {
|
|
168
|
+
return results.every(r => r.passed);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get failed rules from results
|
|
172
|
+
*
|
|
173
|
+
* @param results - Array of rule results
|
|
174
|
+
* @returns Array of failed rule results
|
|
175
|
+
*/
|
|
176
|
+
function getFailedRules(results) {
|
|
177
|
+
return results.filter(r => !r.passed);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Calculate average score from rule results
|
|
181
|
+
*
|
|
182
|
+
* @param results - Array of rule results
|
|
183
|
+
* @returns Average score (0-100)
|
|
184
|
+
*/
|
|
185
|
+
function calculateAverageScore(results) {
|
|
186
|
+
if (results.length === 0)
|
|
187
|
+
return 0;
|
|
188
|
+
const sum = results.reduce((acc, r) => acc + r.score, 0);
|
|
189
|
+
return sum / results.length;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZXJtaW5pc3RpYy1ncmFkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9kZXRlcm1pbmlzdGljLWdyYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQXNMSCwwQ0FFQztBQWNELGdEQUtDO0FBY0QsNENBRUM7QUFvQkQsb0RBRUM7QUFRRCx3Q0FFQztBQVFELHdDQUVDO0FBUUQsc0RBSUM7QUEvUUQsMkNBQW9EO0FBOEVwRCwrRUFBK0U7QUFDL0UsbUNBQW1DO0FBQ25DLCtFQUErRTtBQUUvRTs7R0FFRztBQUNVLFFBQUEsb0JBQW9CLEdBQUc7SUFDbEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQXdCO1FBQ3JDLE9BQU8sSUFBQSwyQkFBa0IsRUFBMEIsaUNBQWlDLEVBQUU7WUFDcEYsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsT0FBTztZQUNiLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBNEI7UUFDN0MsT0FBTyxJQUFBLDJCQUFrQixFQUFxQixzQ0FBc0MsRUFBRTtZQUNwRixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1lBQ2IsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixPQUFPLElBQUEsMkJBQWtCLEVBQ3ZCLG1DQUFtQyxFQUNuQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE9BQU8sSUFBQSwyQkFBa0IsRUFDdkIsa0NBQWtDLEVBQ2xDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFlLEVBQUUsS0FBSyxHQUFHLElBQUk7SUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsTUFBZ0IsRUFDaEIsYUFBYSxHQUFHLEtBQUs7SUFFckIsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUFZLEVBQUUsR0FBWTtJQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxNQUErQjtJQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLE9BQXFCO0lBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsT0FBcUI7SUFDbEQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsT0FBcUI7SUFDekQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsT0FBTyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBEZXRlcm1pbmlzdGljIEdyYWRlcnMgQVBJXG4gKlxuICogQVBJIGZvciBydW5uaW5nIGRldGVybWluaXN0aWMgKGNvZGUtYmFzZWQpIGV2YWx1YXRpb25zXG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBSdWxlVHlwZSA9XG4gIHwgJ3JlZ2V4J1xuICB8ICdjb250YWlucydcbiAgfCAnbm90X2NvbnRhaW5zJ1xuICB8ICdqc29uX3ZhbGlkJ1xuICB8ICdqc29uX3NjaGVtYSdcbiAgfCAnbGVuZ3RoJ1xuICB8ICdwaWlfY2hlY2snXG4gIHwgJ3NlbnRpbWVudCdcbiAgfCAnbGF0ZW5jeSdcbiAgfCAndG9rZW5fY291bnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERldGVybWluaXN0aWNFdmFsUmVzdWx0IHtcbiAgcGFzc2VkOiBib29sZWFuO1xuICBzY29yZTogbnVtYmVyO1xuICByZWFzb25pbmc6IHN0cmluZztcbiAgcnVsZVJlc3VsdHM/OiBSdWxlUmVzdWx0W107XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZVJlc3VsdCB7XG4gIHJ1bGVJZDogc3RyaW5nO1xuICBydWxlTmFtZTogc3RyaW5nO1xuICBydWxlVHlwZTogUnVsZVR5cGU7XG4gIHBhc3NlZDogYm9vbGVhbjtcbiAgc2NvcmU6IG51bWJlcjtcbiAgZGV0YWlscz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZU9wdGlvbnMge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIGNyaXRlcmlvbklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVsa0V2YWx1YXRlT3B0aW9ucyB7XG4gIGV2YWx1YXRpb25zOiBBcnJheTx7XG4gICAgdHJhY2VJZDogc3RyaW5nO1xuICAgIGNyaXRlcmlvbklkOiBzdHJpbmc7XG4gIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bGtFdmFsdWF0ZVJlc3VsdCB7XG4gIHJlc3VsdHM6IEFycmF5PHtcbiAgICB0cmFjZUlkOiBzdHJpbmc7XG4gICAgY3JpdGVyaW9uSWQ6IHN0cmluZztcbiAgICBwYXNzZWQ6IGJvb2xlYW47XG4gICAgc2NvcmU6IG51bWJlcjtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfT47XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHBhc3NSYXRlOiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZVR5cGVJbmZvIHtcbiAgaWQ6IFJ1bGVUeXBlO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNvbmZpZ0ZpZWxkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZVRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBydWxlVHlwZTogUnVsZVR5cGU7XG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERFVEVSTUlOSVNUSUMgR1JBREVSUyBBUEkgQ0xJRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyBHcmFkZXJzIEFQSSBjbGllbnQgZm9yIGNvZGUtYmFzZWQgZXZhbHVhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVybWluaXN0aWNHcmFkZXJzID0ge1xuICAvKipcbiAgICogUnVuIGRldGVybWluaXN0aWMgZXZhbHVhdGlvbiBvbiBhIHNpbmdsZSB0cmFjZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRldGVybWluaXN0aWNHcmFkZXJzLmV2YWx1YXRlKHtcbiAgICogICB0cmFjZUlkOiAndHJhY2VfMTIzJyxcbiAgICogICBjcml0ZXJpb25JZDogJ2NyaXRlcmlvbl80NTYnLFxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coYFBhc3NlZDogJHtyZXN1bHQucGFzc2VkfSwgU2NvcmU6ICR7cmVzdWx0LnNjb3JlfWApO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGV2YWx1YXRlKG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyk6IFByb21pc2U8RGV0ZXJtaW5pc3RpY0V2YWxSZXN1bHQ+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPERldGVybWluaXN0aWNFdmFsUmVzdWx0PignL2RldGVybWluaXN0aWMtZ3JhZGVycy9ldmFsdWF0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIGFwaVZlcnNpb246ICdub25lJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogUnVuIGRldGVybWluaXN0aWMgZXZhbHVhdGlvbnMgb24gbXVsdGlwbGUgdHJhY2VzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyByZXN1bHRzLCBzdW1tYXJ5IH0gPSBhd2FpdCBkZXRlcm1pbmlzdGljR3JhZGVycy5idWxrRXZhbHVhdGUoe1xuICAgKiAgIGV2YWx1YXRpb25zOiBbXG4gICAqICAgICB7IHRyYWNlSWQ6ICd0cmFjZV8xJywgY3JpdGVyaW9uSWQ6ICdjcml0ZXJpb25fNDU2JyB9LFxuICAgKiAgICAgeyB0cmFjZUlkOiAndHJhY2VfMicsIGNyaXRlcmlvbklkOiAnY3JpdGVyaW9uXzQ1NicgfSxcbiAgICogICAgIHsgdHJhY2VJZDogJ3RyYWNlXzMnLCBjcml0ZXJpb25JZDogJ2NyaXRlcmlvbl80NTYnIH0sXG4gICAqICAgXSxcbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKGBQYXNzIHJhdGU6ICR7c3VtbWFyeS5wYXNzUmF0ZSAqIDEwMH0lYCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgYnVsa0V2YWx1YXRlKG9wdGlvbnM6IEJ1bGtFdmFsdWF0ZU9wdGlvbnMpOiBQcm9taXNlPEJ1bGtFdmFsdWF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8QnVsa0V2YWx1YXRlUmVzdWx0PignL2RldGVybWluaXN0aWMtZ3JhZGVycy9idWxrLWV2YWx1YXRlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgYXBpVmVyc2lvbjogJ25vbmUnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYXZhaWxhYmxlIHJ1bGUgdHlwZXMgd2l0aCBkZXNjcmlwdGlvbnNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBydWxlVHlwZXMgPSBhd2FpdCBkZXRlcm1pbmlzdGljR3JhZGVycy5nZXRSdWxlVHlwZXMoKTtcbiAgICogZm9yIChjb25zdCB0eXBlIG9mIHJ1bGVUeXBlcykge1xuICAgKiAgIGNvbnNvbGUubG9nKGAke3R5cGUubmFtZX06ICR7dHlwZS5kZXNjcmlwdGlvbn1gKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldFJ1bGVUeXBlcygpOiBQcm9taXNlPFJ1bGVUeXBlSW5mb1tdPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxSdWxlVHlwZUluZm9bXT4oXG4gICAgICAnL2RldGVybWluaXN0aWMtZ3JhZGVycy9ydWxlLXR5cGVzJyxcbiAgICAgIHsgYXBpVmVyc2lvbjogJ25vbmUnIH1cbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgcnVsZSB0ZW1wbGF0ZXNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBkZXRlcm1pbmlzdGljR3JhZGVycy5nZXRUZW1wbGF0ZXMoKTtcbiAgICogY29uc3Qgbm9QaWlUZW1wbGF0ZSA9IHRlbXBsYXRlcy5maW5kKHQgPT4gdC5pZCA9PT0gJ25vX3BpaScpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFJ1bGVUZW1wbGF0ZVtdPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxSdWxlVGVtcGxhdGVbXT4oXG4gICAgICAnL2RldGVybWluaXN0aWMtZ3JhZGVycy90ZW1wbGF0ZXMnLFxuICAgICAgeyBhcGlWZXJzaW9uOiAnbm9uZScgfVxuICAgICk7XG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVnZXggcnVsZSBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtIHBhdHRlcm4gLSBSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVyblxuICogQHBhcmFtIGZsYWdzIC0gUmVnZXggZmxhZ3MgKGRlZmF1bHQ6ICdnaScpXG4gKiBAcmV0dXJucyBSdWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbmZpZyA9IGNyZWF0ZVJlZ2V4UnVsZSgnXFxcXGIoZXJyb3J8ZmFpbClcXFxcYicsICdnaScpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWdleFJ1bGUocGF0dGVybjogc3RyaW5nLCBmbGFncyA9ICdnaScpOiB7IHBhdHRlcm46IHN0cmluZzsgZmxhZ3M6IHN0cmluZyB9IHtcbiAgcmV0dXJuIHsgcGF0dGVybiwgZmxhZ3MgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjb250YWlucyBydWxlIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0gdmFsdWVzIC0gU3RyaW5ncyB0byBjaGVjayBmb3JcbiAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIC0gV2hldGhlciBjb21wYXJpc29uIGlzIGNhc2Utc2Vuc2l0aXZlXG4gKiBAcmV0dXJucyBSdWxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbmZpZyA9IGNyZWF0ZUNvbnRhaW5zUnVsZShbJ2hlbGxvJywgJ2hpJywgJ2hleSddLCBmYWxzZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5zUnVsZShcbiAgdmFsdWVzOiBzdHJpbmdbXSxcbiAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlXG4pOiB7IHZhbHVlczogc3RyaW5nW107IGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gfSB7XG4gIHJldHVybiB7IHZhbHVlcywgY2FzZVNlbnNpdGl2ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGxlbmd0aCBydWxlIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0gbWluIC0gTWluaW11bSBsZW5ndGggKG9wdGlvbmFsKVxuICogQHBhcmFtIG1heCAtIE1heGltdW0gbGVuZ3RoIChvcHRpb25hbClcbiAqIEByZXR1cm5zIFJ1bGUgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29uZmlnID0gY3JlYXRlTGVuZ3RoUnVsZSg1MCwgMTAwMCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlbmd0aFJ1bGUobWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIpOiB7IG1pbj86IG51bWJlcjsgbWF4PzogbnVtYmVyIH0ge1xuICByZXR1cm4geyBtaW4sIG1heCB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIEpTT04gc2NoZW1hIHJ1bGUgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSBzY2hlbWEgLSBKU09OIFNjaGVtYSBvYmplY3RcbiAqIEByZXR1cm5zIFJ1bGUgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29uZmlnID0gY3JlYXRlSnNvblNjaGVtYVJ1bGUoe1xuICogICB0eXBlOiAnb2JqZWN0JyxcbiAqICAgcmVxdWlyZWQ6IFsnbmFtZScsICdlbWFpbCddLFxuICogICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgbmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICogICAgIGVtYWlsOiB7IHR5cGU6ICdzdHJpbmcnLCBmb3JtYXQ6ICdlbWFpbCcgfSxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc29uU2NoZW1hUnVsZShzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogeyBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICByZXR1cm4geyBzY2hlbWEgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbGwgcnVsZSByZXN1bHRzIHBhc3NlZFxuICpcbiAqIEBwYXJhbSByZXN1bHRzIC0gQXJyYXkgb2YgcnVsZSByZXN1bHRzXG4gKiBAcmV0dXJucyBXaGV0aGVyIGFsbCBydWxlcyBwYXNzZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbFJ1bGVzUGFzc2VkKHJlc3VsdHM6IFJ1bGVSZXN1bHRbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVzdWx0cy5ldmVyeShyID0+IHIucGFzc2VkKTtcbn1cblxuLyoqXG4gKiBHZXQgZmFpbGVkIHJ1bGVzIGZyb20gcmVzdWx0c1xuICpcbiAqIEBwYXJhbSByZXN1bHRzIC0gQXJyYXkgb2YgcnVsZSByZXN1bHRzXG4gKiBAcmV0dXJucyBBcnJheSBvZiBmYWlsZWQgcnVsZSByZXN1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGYWlsZWRSdWxlcyhyZXN1bHRzOiBSdWxlUmVzdWx0W10pOiBSdWxlUmVzdWx0W10ge1xuICByZXR1cm4gcmVzdWx0cy5maWx0ZXIociA9PiAhci5wYXNzZWQpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBhdmVyYWdlIHNjb3JlIGZyb20gcnVsZSByZXN1bHRzXG4gKlxuICogQHBhcmFtIHJlc3VsdHMgLSBBcnJheSBvZiBydWxlIHJlc3VsdHNcbiAqIEByZXR1cm5zIEF2ZXJhZ2Ugc2NvcmUgKDAtMTAwKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQXZlcmFnZVNjb3JlKHJlc3VsdHM6IFJ1bGVSZXN1bHRbXSk6IG51bWJlciB7XG4gIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gIGNvbnN0IHN1bSA9IHJlc3VsdHMucmVkdWNlKChhY2MsIHIpID0+IGFjYyArIHIuc2NvcmUsIDApO1xuICByZXR1cm4gc3VtIC8gcmVzdWx0cy5sZW5ndGg7XG59XG4iXX0=
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThinkHive SDK v3.0 - Evaluation Health API
|
|
3
|
+
*
|
|
4
|
+
* API for eval saturation monitoring, regression detection, and health reports
|
|
5
|
+
*/
|
|
6
|
+
export type SaturationType = 'ceiling' | 'floor' | 'healthy';
|
|
7
|
+
export type HealthStatus = 'healthy' | 'warning' | 'critical';
|
|
8
|
+
export type RegressionSeverity = 'minor' | 'moderate' | 'severe';
|
|
9
|
+
export interface EvalHealthSnapshot {
|
|
10
|
+
id: string;
|
|
11
|
+
companyId: string;
|
|
12
|
+
agentId: string;
|
|
13
|
+
criterionId?: string;
|
|
14
|
+
snapshotDate: string;
|
|
15
|
+
passRate?: string;
|
|
16
|
+
evalCount?: number;
|
|
17
|
+
meanScore?: string;
|
|
18
|
+
saturationType?: SaturationType;
|
|
19
|
+
daysAtSaturation?: number;
|
|
20
|
+
trendDirection?: string;
|
|
21
|
+
trendStrength?: string;
|
|
22
|
+
healthStatus?: HealthStatus;
|
|
23
|
+
healthScore?: string;
|
|
24
|
+
createdAt: string;
|
|
25
|
+
}
|
|
26
|
+
export interface EvalRegression {
|
|
27
|
+
id: string;
|
|
28
|
+
companyId: string;
|
|
29
|
+
agentId: string;
|
|
30
|
+
criterionId?: string;
|
|
31
|
+
severity: RegressionSeverity;
|
|
32
|
+
baselinePassRate: string;
|
|
33
|
+
currentPassRate: string;
|
|
34
|
+
delta: string;
|
|
35
|
+
deltaPercent?: string;
|
|
36
|
+
baselinePeriodStart: string;
|
|
37
|
+
baselinePeriodEnd: string;
|
|
38
|
+
currentPeriodStart: string;
|
|
39
|
+
currentPeriodEnd: string;
|
|
40
|
+
baselineEvalCount?: number;
|
|
41
|
+
currentEvalCount?: number;
|
|
42
|
+
suspectedCauses?: unknown[];
|
|
43
|
+
isSignificant?: boolean;
|
|
44
|
+
isResolved: boolean;
|
|
45
|
+
isAcknowledged: boolean;
|
|
46
|
+
resolvedAt?: string;
|
|
47
|
+
resolvedBy?: string;
|
|
48
|
+
resolutionType?: string;
|
|
49
|
+
resolutionNotes?: string;
|
|
50
|
+
acknowledgedAt?: string;
|
|
51
|
+
acknowledgedBy?: string;
|
|
52
|
+
detectedAt: string;
|
|
53
|
+
createdAt: string;
|
|
54
|
+
}
|
|
55
|
+
export interface HealthReport {
|
|
56
|
+
agentId: string;
|
|
57
|
+
generatedAt: string;
|
|
58
|
+
overallHealth: HealthStatus;
|
|
59
|
+
overallScore: number;
|
|
60
|
+
passRate: number;
|
|
61
|
+
evalCount: number;
|
|
62
|
+
saturationStatus: {
|
|
63
|
+
type: SaturationType;
|
|
64
|
+
daysAtSaturation: number;
|
|
65
|
+
recommendation: string;
|
|
66
|
+
};
|
|
67
|
+
regressionCount: number;
|
|
68
|
+
activeRegressions: EvalRegression[];
|
|
69
|
+
trend: {
|
|
70
|
+
direction: 'improving' | 'stable' | 'declining';
|
|
71
|
+
strength: number;
|
|
72
|
+
description: string;
|
|
73
|
+
};
|
|
74
|
+
recommendations: string[];
|
|
75
|
+
}
|
|
76
|
+
export interface CreateSnapshotOptions {
|
|
77
|
+
agentId: string;
|
|
78
|
+
criterionId?: string;
|
|
79
|
+
snapshotDate: string;
|
|
80
|
+
passRate?: string;
|
|
81
|
+
evalCount?: number;
|
|
82
|
+
meanScore?: string;
|
|
83
|
+
saturationType?: SaturationType;
|
|
84
|
+
daysAtSaturation?: number;
|
|
85
|
+
trendDirection?: string;
|
|
86
|
+
trendStrength?: string;
|
|
87
|
+
healthStatus?: HealthStatus;
|
|
88
|
+
healthScore?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface CreateRegressionOptions {
|
|
91
|
+
agentId: string;
|
|
92
|
+
criterionId?: string;
|
|
93
|
+
severity: RegressionSeverity;
|
|
94
|
+
baselinePassRate: string;
|
|
95
|
+
currentPassRate: string;
|
|
96
|
+
delta: string;
|
|
97
|
+
deltaPercent?: string;
|
|
98
|
+
baselinePeriodStart: string;
|
|
99
|
+
baselinePeriodEnd: string;
|
|
100
|
+
currentPeriodStart: string;
|
|
101
|
+
currentPeriodEnd: string;
|
|
102
|
+
baselineEvalCount?: number;
|
|
103
|
+
currentEvalCount?: number;
|
|
104
|
+
suspectedCauses?: unknown[];
|
|
105
|
+
isSignificant?: boolean;
|
|
106
|
+
detectedAt?: string;
|
|
107
|
+
}
|
|
108
|
+
export interface ResolveRegressionOptions {
|
|
109
|
+
resolutionType: string;
|
|
110
|
+
notes?: string;
|
|
111
|
+
}
|
|
112
|
+
export interface GetSnapshotsOptions {
|
|
113
|
+
agentId: string;
|
|
114
|
+
criterionId?: string;
|
|
115
|
+
startDate?: string;
|
|
116
|
+
endDate?: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Evaluation Health API client for monitoring eval quality and detecting regressions
|
|
120
|
+
*/
|
|
121
|
+
export declare const evalHealth: {
|
|
122
|
+
/**
|
|
123
|
+
* Get comprehensive health report for an agent
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const report = await evalHealth.getReport('agent_123');
|
|
128
|
+
* console.log(`Overall health: ${report.overallHealth}`);
|
|
129
|
+
* console.log(`Active regressions: ${report.regressionCount}`);
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
getReport(agentId: string): Promise<HealthReport>;
|
|
133
|
+
/**
|
|
134
|
+
* Get historical health snapshots
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const snapshots = await evalHealth.getSnapshots({
|
|
139
|
+
* agentId: 'agent_123',
|
|
140
|
+
* startDate: '2024-01-01T00:00:00Z',
|
|
141
|
+
* endDate: '2024-01-31T23:59:59Z',
|
|
142
|
+
* });
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
getSnapshots(options: GetSnapshotsOptions): Promise<EvalHealthSnapshot[]>;
|
|
146
|
+
/**
|
|
147
|
+
* Get latest health snapshot
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* const snapshot = await evalHealth.getLatestSnapshot('agent_123');
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
getLatestSnapshot(agentId: string, criterionId?: string): Promise<EvalHealthSnapshot | null>;
|
|
155
|
+
/**
|
|
156
|
+
* Record a health snapshot
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const snapshot = await evalHealth.recordSnapshot({
|
|
161
|
+
* agentId: 'agent_123',
|
|
162
|
+
* snapshotDate: new Date().toISOString(),
|
|
163
|
+
* passRate: '0.85',
|
|
164
|
+
* evalCount: 150,
|
|
165
|
+
* healthStatus: 'healthy',
|
|
166
|
+
* });
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
recordSnapshot(options: CreateSnapshotOptions): Promise<EvalHealthSnapshot>;
|
|
170
|
+
/**
|
|
171
|
+
* Get unresolved regressions for an agent
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* const regressions = await evalHealth.getRegressions('agent_123');
|
|
176
|
+
* for (const regression of regressions) {
|
|
177
|
+
* console.log(`${regression.severity}: ${regression.delta}% drop`);
|
|
178
|
+
* }
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
getRegressions(agentId: string): Promise<EvalRegression[]>;
|
|
182
|
+
/**
|
|
183
|
+
* Record a new regression
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* const regression = await evalHealth.recordRegression({
|
|
188
|
+
* agentId: 'agent_123',
|
|
189
|
+
* severity: 'moderate',
|
|
190
|
+
* baselinePassRate: '0.92',
|
|
191
|
+
* currentPassRate: '0.78',
|
|
192
|
+
* delta: '-0.14',
|
|
193
|
+
* baselinePeriodStart: '2024-01-01T00:00:00Z',
|
|
194
|
+
* baselinePeriodEnd: '2024-01-15T23:59:59Z',
|
|
195
|
+
* currentPeriodStart: '2024-01-16T00:00:00Z',
|
|
196
|
+
* currentPeriodEnd: '2024-01-31T23:59:59Z',
|
|
197
|
+
* });
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
recordRegression(options: CreateRegressionOptions): Promise<EvalRegression>;
|
|
201
|
+
/**
|
|
202
|
+
* Resolve a regression
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```typescript
|
|
206
|
+
* await evalHealth.resolveRegression('regression_123', {
|
|
207
|
+
* resolutionType: 'fixed',
|
|
208
|
+
* notes: 'Updated prompt template to address quality issues',
|
|
209
|
+
* });
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
resolveRegression(regressionId: string, options: ResolveRegressionOptions): Promise<void>;
|
|
213
|
+
/**
|
|
214
|
+
* Acknowledge a regression
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* await evalHealth.acknowledgeRegression('regression_123');
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
acknowledgeRegression(regressionId: string): Promise<void>;
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Check if health status indicates an issue
|
|
225
|
+
*
|
|
226
|
+
* @param status - Health status to check
|
|
227
|
+
* @returns Whether the status indicates a problem
|
|
228
|
+
*/
|
|
229
|
+
export declare function hasHealthIssue(status: HealthStatus): boolean;
|
|
230
|
+
/**
|
|
231
|
+
* Get severity level as numeric value for sorting
|
|
232
|
+
*
|
|
233
|
+
* @param severity - Regression severity
|
|
234
|
+
* @returns Numeric severity (1-3, higher is worse)
|
|
235
|
+
*/
|
|
236
|
+
export declare function getSeverityLevel(severity: RegressionSeverity): number;
|
|
237
|
+
/**
|
|
238
|
+
* Check if evaluation is saturated
|
|
239
|
+
*
|
|
240
|
+
* @param snapshot - Health snapshot to check
|
|
241
|
+
* @returns Whether evaluation is at ceiling or floor
|
|
242
|
+
*/
|
|
243
|
+
export declare function isSaturated(snapshot: EvalHealthSnapshot): boolean;
|
|
244
|
+
/**
|
|
245
|
+
* Get recommendation for saturation type
|
|
246
|
+
*
|
|
247
|
+
* @param saturationType - Type of saturation
|
|
248
|
+
* @returns Recommendation string
|
|
249
|
+
*/
|
|
250
|
+
export declare function getSaturationRecommendation(saturationType: SaturationType): string;
|