scorecard-ai 1.0.0-alpha.6 → 1.0.0-alpha.7
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 +33 -0
- package/README.md +15 -5
- package/client.d.mts +9 -2
- package/client.d.mts.map +1 -1
- package/client.d.ts +9 -2
- package/client.d.ts.map +1 -1
- package/client.js +20 -0
- package/client.js.map +1 -1
- package/client.mjs +20 -0
- package/client.mjs.map +1 -1
- package/internal/headers.js +1 -1
- package/internal/headers.js.map +1 -1
- package/internal/headers.mjs +1 -1
- package/internal/headers.mjs.map +1 -1
- package/internal/to-file.d.mts +0 -1
- package/internal/to-file.d.mts.map +1 -1
- package/internal/to-file.d.ts +0 -1
- package/internal/to-file.d.ts.map +1 -1
- package/internal/to-file.js +3 -2
- package/internal/to-file.js.map +1 -1
- package/internal/to-file.mjs +3 -2
- package/internal/to-file.mjs.map +1 -1
- package/internal/uploads.d.mts +1 -1
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts +1 -1
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +14 -4
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +12 -3
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/uuid.d.mts +1 -1
- package/internal/utils/uuid.d.mts.map +1 -1
- package/internal/utils/uuid.d.ts +1 -1
- package/internal/utils/uuid.d.ts.map +1 -1
- package/internal/utils/uuid.js +1 -2
- package/internal/utils/uuid.js.map +1 -1
- package/internal/utils/uuid.mjs +1 -2
- package/internal/utils/uuid.mjs.map +1 -1
- package/package.json +1 -5
- package/resources/index.d.mts +2 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +2 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +3 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +1 -0
- package/resources/index.mjs.map +1 -1
- package/resources/projects.d.mts +39 -4
- package/resources/projects.d.mts.map +1 -1
- package/resources/projects.d.ts +39 -4
- package/resources/projects.d.ts.map +1 -1
- package/resources/projects.js +23 -4
- package/resources/projects.js.map +1 -1
- package/resources/projects.mjs +23 -4
- package/resources/projects.mjs.map +1 -1
- package/resources/records.d.mts +10 -0
- package/resources/records.d.mts.map +1 -1
- package/resources/records.d.ts +10 -0
- package/resources/records.d.ts.map +1 -1
- package/resources/records.js +10 -0
- package/resources/records.js.map +1 -1
- package/resources/records.mjs +10 -0
- package/resources/records.mjs.map +1 -1
- package/resources/runs.d.mts +16 -0
- package/resources/runs.d.mts.map +1 -1
- package/resources/runs.d.ts +16 -0
- package/resources/runs.d.ts.map +1 -1
- package/resources/runs.js +16 -0
- package/resources/runs.js.map +1 -1
- package/resources/runs.mjs +16 -0
- package/resources/runs.mjs.map +1 -1
- package/resources/scores.d.mts +83 -0
- package/resources/scores.d.mts.map +1 -0
- package/resources/scores.d.ts +83 -0
- package/resources/scores.d.ts.map +1 -0
- package/resources/scores.js +35 -0
- package/resources/scores.js.map +1 -0
- package/resources/scores.mjs +31 -0
- package/resources/scores.mjs.map +1 -0
- package/resources/system-configs.d.mts +33 -0
- package/resources/system-configs.d.mts.map +1 -1
- package/resources/system-configs.d.ts +33 -0
- package/resources/system-configs.d.ts.map +1 -1
- package/resources/system-configs.js +33 -0
- package/resources/system-configs.js.map +1 -1
- package/resources/system-configs.mjs +33 -0
- package/resources/system-configs.mjs.map +1 -1
- package/resources/systems.d.mts +73 -0
- package/resources/systems.d.mts.map +1 -1
- package/resources/systems.d.ts +73 -0
- package/resources/systems.d.ts.map +1 -1
- package/resources/systems.js +73 -0
- package/resources/systems.js.map +1 -1
- package/resources/systems.mjs +73 -0
- package/resources/systems.mjs.map +1 -1
- package/resources/testcases.d.mts +62 -0
- package/resources/testcases.d.mts.map +1 -1
- package/resources/testcases.d.ts +62 -0
- package/resources/testcases.d.ts.map +1 -1
- package/resources/testcases.js +62 -0
- package/resources/testcases.js.map +1 -1
- package/resources/testcases.mjs +62 -0
- package/resources/testcases.mjs.map +1 -1
- package/resources/testsets.d.mts +48 -0
- package/resources/testsets.d.mts.map +1 -1
- package/resources/testsets.d.ts +48 -0
- package/resources/testsets.d.ts.map +1 -1
- package/resources/testsets.js +48 -0
- package/resources/testsets.js.map +1 -1
- package/resources/testsets.mjs +48 -0
- package/resources/testsets.mjs.map +1 -1
- package/src/client.ts +29 -4
- package/src/internal/headers.ts +1 -1
- package/src/internal/to-file.ts +4 -2
- package/src/internal/uploads.ts +16 -4
- package/src/internal/utils/uuid.ts +1 -3
- package/src/resources/index.ts +4 -2
- package/src/resources/projects.ts +48 -9
- package/src/resources/records.ts +10 -0
- package/src/resources/runs.ts +16 -0
- package/src/resources/scores.ts +98 -0
- package/src/resources/system-configs.ts +33 -0
- package/src/resources/systems.ts +73 -0
- package/src/resources/testcases.ts +62 -0
- package/src/resources/testsets.ts +48 -0
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
- package/internal/shims/crypto.d.mts +0 -13
- package/internal/shims/crypto.d.mts.map +0 -1
- package/internal/shims/crypto.d.ts +0 -13
- package/internal/shims/crypto.d.ts.map +0 -1
- package/internal/shims/crypto.js +0 -13
- package/internal/shims/crypto.js.map +0 -1
- package/internal/shims/crypto.mjs +0 -9
- package/internal/shims/crypto.mjs.map +0 -1
- package/internal/shims/file.d.mts +0 -22
- package/internal/shims/file.d.mts.map +0 -1
- package/internal/shims/file.d.ts +0 -22
- package/internal/shims/file.d.ts.map +0 -1
- package/internal/shims/file.js +0 -16
- package/internal/shims/file.js.map +0 -1
- package/internal/shims/file.mjs +0 -12
- package/internal/shims/file.mjs.map +0 -1
- package/internal/shims/getBuiltinModule.d.mts +0 -11
- package/internal/shims/getBuiltinModule.d.mts.map +0 -1
- package/internal/shims/getBuiltinModule.d.ts +0 -11
- package/internal/shims/getBuiltinModule.d.ts.map +0 -1
- package/internal/shims/getBuiltinModule.js +0 -71
- package/internal/shims/getBuiltinModule.js.map +0 -1
- package/internal/shims/getBuiltinModule.mjs +0 -67
- package/internal/shims/getBuiltinModule.mjs.map +0 -1
- package/internal/shims/nullGetBuiltinModule.d.mts +0 -2
- package/internal/shims/nullGetBuiltinModule.d.mts.map +0 -1
- package/internal/shims/nullGetBuiltinModule.d.ts +0 -2
- package/internal/shims/nullGetBuiltinModule.d.ts.map +0 -1
- package/internal/shims/nullGetBuiltinModule.js +0 -5
- package/internal/shims/nullGetBuiltinModule.js.map +0 -1
- package/internal/shims/nullGetBuiltinModule.mjs +0 -2
- package/internal/shims/nullGetBuiltinModule.mjs.map +0 -1
- package/src/internal/shims/crypto.ts +0 -18
- package/src/internal/shims/file.ts +0 -32
- package/src/internal/shims/getBuiltinModule.ts +0 -66
- package/src/internal/shims/nullGetBuiltinModule.ts +0 -1
package/resources/testsets.mjs
CHANGED
|
@@ -6,6 +6,28 @@ export class Testsets extends APIResource {
|
|
|
6
6
|
/**
|
|
7
7
|
* Create a new Testset for a Project. The Testset will be created in the Project
|
|
8
8
|
* specified in the path.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const testset = await client.testsets.create('314', {
|
|
13
|
+
* description: 'Testset for long context Q&A chatbot.',
|
|
14
|
+
* fieldMapping: {
|
|
15
|
+
* inputs: ['question'],
|
|
16
|
+
* labels: ['idealAnswer'],
|
|
17
|
+
* metadata: [],
|
|
18
|
+
* },
|
|
19
|
+
* jsonSchema: {
|
|
20
|
+
* type: 'object',
|
|
21
|
+
* properties: {
|
|
22
|
+
* question: { type: 'string' },
|
|
23
|
+
* idealAnswer: { type: 'string' },
|
|
24
|
+
* provenance: { type: 'string' },
|
|
25
|
+
* geo: { type: 'string' },
|
|
26
|
+
* },
|
|
27
|
+
* },
|
|
28
|
+
* name: 'Long Context Q&A',
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
9
31
|
*/
|
|
10
32
|
create(projectID, body, options) {
|
|
11
33
|
return this._client.post(path `/projects/${projectID}/testsets`, { body, ...options });
|
|
@@ -23,12 +45,28 @@ export class Testsets extends APIResource {
|
|
|
23
45
|
* updated schema
|
|
24
46
|
* - For complete control, provide both schema and fieldMapping when updating the
|
|
25
47
|
* schema
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const testset = await client.testsets.update('246', {
|
|
52
|
+
* description: 'Updated description for the Q&A Testset.',
|
|
53
|
+
* name: 'Updated Q&A Testset',
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
26
56
|
*/
|
|
27
57
|
update(testsetID, body = {}, options) {
|
|
28
58
|
return this._client.patch(path `/testsets/${testsetID}`, { body, ...options });
|
|
29
59
|
}
|
|
30
60
|
/**
|
|
31
61
|
* Retrieve a paginated list of Testsets belonging to a Project.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* // Automatically fetches more pages as needed.
|
|
66
|
+
* for await (const testset of client.testsets.list('314')) {
|
|
67
|
+
* // ...
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
32
70
|
*/
|
|
33
71
|
list(projectID, query = {}, options) {
|
|
34
72
|
return this._client.getAPIList(path `/projects/${projectID}/testsets`, (PaginatedResponse), {
|
|
@@ -38,12 +76,22 @@ export class Testsets extends APIResource {
|
|
|
38
76
|
}
|
|
39
77
|
/**
|
|
40
78
|
* Delete Testset
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const testset = await client.testsets.delete('246');
|
|
83
|
+
* ```
|
|
41
84
|
*/
|
|
42
85
|
delete(testsetID, options) {
|
|
43
86
|
return this._client.delete(path `/testsets/${testsetID}`, options);
|
|
44
87
|
}
|
|
45
88
|
/**
|
|
46
89
|
* Get Testset by ID
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* const testset = await client.testsets.get('246');
|
|
94
|
+
* ```
|
|
47
95
|
*/
|
|
48
96
|
get(testsetID, options) {
|
|
49
97
|
return this._client.get(path `/testsets/${testsetID}`, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testsets.mjs","sourceRoot":"","sources":["../src/resources/testsets.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OAEf,EAAe,iBAAiB,EAAgC;OAEhE,EAAE,IAAI,EAAE;AAEf,MAAM,OAAO,QAAS,SAAQ,WAAW;IACvC
|
|
1
|
+
{"version":3,"file":"testsets.mjs","sourceRoot":"","sources":["../src/resources/testsets.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OAEf,EAAe,iBAAiB,EAAgC;OAEhE,EAAE,IAAI,EAAE;AAEf,MAAM,OAAO,QAAS,SAAQ,WAAW;IACvC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,SAAiB,EAAE,IAAyB,EAAE,OAAwB;QAC3E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,aAAa,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CACJ,SAAiB,EACjB,OAA+C,EAAE,EACjD,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAA,aAAa,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAI,CACF,SAAiB,EACjB,QAA8C,EAAE,EAChD,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAA,aAAa,SAAS,WAAW,EAAE,CAAA,iBAA0B,CAAA,EAAE;YAChG,KAAK;YACL,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,SAAiB,EAAE,OAAwB;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAA,aAAa,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CAAC,SAAiB,EAAE,OAAwB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA,aAAa,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;CACF"}
|
package/src/client.ts
CHANGED
|
@@ -23,13 +23,15 @@ import { type Fetch } from './internal/builtin-types';
|
|
|
23
23
|
import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
|
|
24
24
|
import { FinalRequestOptions, RequestOptions } from './internal/request-options';
|
|
25
25
|
import {
|
|
26
|
+
Project,
|
|
27
|
+
ProjectCreateParams,
|
|
26
28
|
ProjectListParams,
|
|
27
|
-
ProjectListResponse,
|
|
28
|
-
ProjectListResponsesPaginatedResponse,
|
|
29
29
|
Projects,
|
|
30
|
+
ProjectsPaginatedResponse,
|
|
30
31
|
} from './resources/projects';
|
|
31
32
|
import { Record as RecordsAPIRecord, RecordCreateParams, Records } from './resources/records';
|
|
32
33
|
import { Run, RunCreateParams, RunUpdateParams, RunUpdateResponse, Runs } from './resources/runs';
|
|
34
|
+
import { Score, ScoreUpsertParams, Scores } from './resources/scores';
|
|
33
35
|
import {
|
|
34
36
|
SystemConfig,
|
|
35
37
|
SystemConfigCreateParams,
|
|
@@ -236,6 +238,24 @@ export class Scorecard {
|
|
|
236
238
|
this.apiKey = apiKey;
|
|
237
239
|
}
|
|
238
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Create a new client instance re-using the same options given to the current client with optional overriding.
|
|
243
|
+
*/
|
|
244
|
+
withOptions(options: Partial<ClientOptions>): this {
|
|
245
|
+
return new (this.constructor as any as new (props: ClientOptions) => typeof this)({
|
|
246
|
+
...this._options,
|
|
247
|
+
environment: options.environment ? options.environment : undefined,
|
|
248
|
+
baseURL: options.environment ? undefined : this.baseURL,
|
|
249
|
+
maxRetries: this.maxRetries,
|
|
250
|
+
timeout: this.timeout,
|
|
251
|
+
logger: this.logger,
|
|
252
|
+
logLevel: this.logLevel,
|
|
253
|
+
fetchOptions: this.fetchOptions,
|
|
254
|
+
apiKey: this.apiKey,
|
|
255
|
+
...options,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
|
|
239
259
|
protected defaultQuery(): Record<string, string | undefined> | undefined {
|
|
240
260
|
return this._options.defaultQuery;
|
|
241
261
|
}
|
|
@@ -769,6 +789,7 @@ export class Scorecard {
|
|
|
769
789
|
testcases: API.Testcases = new API.Testcases(this);
|
|
770
790
|
runs: API.Runs = new API.Runs(this);
|
|
771
791
|
records: API.Records = new API.Records(this);
|
|
792
|
+
scores: API.Scores = new API.Scores(this);
|
|
772
793
|
systems: API.Systems = new API.Systems(this);
|
|
773
794
|
systemConfigs: API.SystemConfigs = new API.SystemConfigs(this);
|
|
774
795
|
}
|
|
@@ -777,6 +798,7 @@ Scorecard.Testsets = Testsets;
|
|
|
777
798
|
Scorecard.Testcases = Testcases;
|
|
778
799
|
Scorecard.Runs = Runs;
|
|
779
800
|
Scorecard.Records = Records;
|
|
801
|
+
Scorecard.Scores = Scores;
|
|
780
802
|
Scorecard.Systems = Systems;
|
|
781
803
|
Scorecard.SystemConfigs = SystemConfigs;
|
|
782
804
|
export declare namespace Scorecard {
|
|
@@ -790,8 +812,9 @@ export declare namespace Scorecard {
|
|
|
790
812
|
|
|
791
813
|
export {
|
|
792
814
|
Projects as Projects,
|
|
793
|
-
type
|
|
794
|
-
type
|
|
815
|
+
type Project as Project,
|
|
816
|
+
type ProjectsPaginatedResponse as ProjectsPaginatedResponse,
|
|
817
|
+
type ProjectCreateParams as ProjectCreateParams,
|
|
795
818
|
type ProjectListParams as ProjectListParams,
|
|
796
819
|
};
|
|
797
820
|
|
|
@@ -831,6 +854,8 @@ export declare namespace Scorecard {
|
|
|
831
854
|
type RecordCreateParams as RecordCreateParams,
|
|
832
855
|
};
|
|
833
856
|
|
|
857
|
+
export { Scores as Scores, type Score as Score, type ScoreUpsertParams as ScoreUpsertParams };
|
|
858
|
+
|
|
834
859
|
export {
|
|
835
860
|
Systems as Systems,
|
|
836
861
|
type System as System,
|
package/src/internal/headers.ts
CHANGED
|
@@ -71,8 +71,8 @@ function* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [strin
|
|
|
71
71
|
export const buildHeaders = (newHeaders: HeadersLike[]): NullableHeaders => {
|
|
72
72
|
const targetHeaders = new Headers();
|
|
73
73
|
const nullHeaders = new Set<string>();
|
|
74
|
-
const seenHeaders = new Set<string>();
|
|
75
74
|
for (const headers of newHeaders) {
|
|
75
|
+
const seenHeaders = new Set<string>();
|
|
76
76
|
for (const [name, value] of iterateHeaders(headers)) {
|
|
77
77
|
const lowerName = name.toLowerCase();
|
|
78
78
|
if (!seenHeaders.has(lowerName)) {
|
package/src/internal/to-file.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type File, getFile } from './shims/file';
|
|
2
1
|
import { BlobPart, getName, makeFile, isAsyncIterable } from './uploads';
|
|
3
2
|
import type { FilePropertyBag } from './builtin-types';
|
|
3
|
+
import { checkFileSupport } from './uploads';
|
|
4
4
|
|
|
5
5
|
type BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | DataView;
|
|
6
6
|
|
|
@@ -85,12 +85,14 @@ export async function toFile(
|
|
|
85
85
|
name?: string | null | undefined,
|
|
86
86
|
options?: FilePropertyBag | undefined,
|
|
87
87
|
): Promise<File> {
|
|
88
|
+
checkFileSupport();
|
|
89
|
+
|
|
88
90
|
// If it's a promise, resolve it.
|
|
89
91
|
value = await value;
|
|
90
92
|
|
|
91
93
|
// If we've been given a `File` we don't need to do anything
|
|
92
94
|
if (isFileLike(value)) {
|
|
93
|
-
if (value instanceof
|
|
95
|
+
if (value instanceof File) {
|
|
94
96
|
return value;
|
|
95
97
|
}
|
|
96
98
|
return makeFile([await value.arrayBuffer()], value.name);
|
package/src/internal/uploads.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type RequestOptions } from './request-options';
|
|
2
2
|
import type { FilePropertyBag, Fetch } from './builtin-types';
|
|
3
3
|
import type { Scorecard } from '../client';
|
|
4
|
-
import { type File, getFile } from './shims/file';
|
|
5
4
|
import { ReadableStreamFrom } from './shims';
|
|
6
5
|
|
|
7
6
|
export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView;
|
|
@@ -12,6 +11,20 @@ interface BunFile extends Blob {
|
|
|
12
11
|
readonly name?: string | undefined;
|
|
13
12
|
}
|
|
14
13
|
|
|
14
|
+
export const checkFileSupport = () => {
|
|
15
|
+
if (typeof File === 'undefined') {
|
|
16
|
+
const { process } = globalThis as any;
|
|
17
|
+
const isOldNode =
|
|
18
|
+
typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;
|
|
19
|
+
throw new Error(
|
|
20
|
+
'`File` is not defined as a global, which is required for file uploads.' +
|
|
21
|
+
(isOldNode ?
|
|
22
|
+
" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`."
|
|
23
|
+
: ''),
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
15
28
|
/**
|
|
16
29
|
* Typically, this is a native "File" class.
|
|
17
30
|
*
|
|
@@ -32,7 +45,7 @@ export function makeFile(
|
|
|
32
45
|
fileName: string | undefined,
|
|
33
46
|
options?: FilePropertyBag,
|
|
34
47
|
): File {
|
|
35
|
-
|
|
48
|
+
checkFileSupport();
|
|
36
49
|
return new File(fileBits as any, fileName ?? 'unknown_file', options);
|
|
37
50
|
}
|
|
38
51
|
|
|
@@ -125,8 +138,7 @@ export const createForm = async <T = Record<string, unknown>>(
|
|
|
125
138
|
|
|
126
139
|
// We check for Blob not File because Bun.File doesn't inherit from File,
|
|
127
140
|
// but they both inherit from Blob and have a `name` property at runtime.
|
|
128
|
-
const isNamedBlob = (value: object) =>
|
|
129
|
-
value instanceof getFile() || (value instanceof Blob && 'name' in value);
|
|
141
|
+
const isNamedBlob = (value: object) => value instanceof Blob && 'name' in value;
|
|
130
142
|
|
|
131
143
|
const isUploadable = (value: unknown) =>
|
|
132
144
|
typeof value === 'object' &&
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
2
|
|
|
3
|
-
import { getCrypto } from '../shims/crypto';
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* https://stackoverflow.com/a/2117523
|
|
7
5
|
*/
|
|
8
6
|
export let uuid4 = function () {
|
|
9
|
-
const crypto =
|
|
7
|
+
const { crypto } = globalThis as any;
|
|
10
8
|
if (crypto?.randomUUID) {
|
|
11
9
|
uuid4 = crypto.randomUUID.bind(crypto);
|
|
12
10
|
return crypto.randomUUID();
|
package/src/resources/index.ts
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
export * from './shared';
|
|
4
4
|
export {
|
|
5
5
|
Projects,
|
|
6
|
-
type
|
|
6
|
+
type Project,
|
|
7
|
+
type ProjectCreateParams,
|
|
7
8
|
type ProjectListParams,
|
|
8
|
-
type
|
|
9
|
+
type ProjectsPaginatedResponse,
|
|
9
10
|
} from './projects';
|
|
10
11
|
export { Records, type Record, type RecordCreateParams } from './records';
|
|
11
12
|
export { Runs, type Run, type RunUpdateResponse, type RunCreateParams, type RunUpdateParams } from './runs';
|
|
13
|
+
export { Scores, type Score, type ScoreUpsertParams } from './scores';
|
|
12
14
|
export {
|
|
13
15
|
SystemConfigs,
|
|
14
16
|
type SystemConfig,
|
|
@@ -1,48 +1,87 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
2
|
|
|
3
3
|
import { APIResource } from '../core/resource';
|
|
4
|
+
import { APIPromise } from '../core/api-promise';
|
|
4
5
|
import { PagePromise, PaginatedResponse, type PaginatedResponseParams } from '../core/pagination';
|
|
5
6
|
import { RequestOptions } from '../internal/request-options';
|
|
6
7
|
|
|
7
8
|
export class Projects extends APIResource {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new Project.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const project = await client.projects.create({
|
|
15
|
+
* description: 'This is a test project',
|
|
16
|
+
* name: 'My Project',
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
create(body: ProjectCreateParams, options?: RequestOptions): APIPromise<Project> {
|
|
21
|
+
return this._client.post('/projects', { body, ...options });
|
|
22
|
+
}
|
|
23
|
+
|
|
8
24
|
/**
|
|
9
25
|
* Retrieve a paginated list of all Projects. Projects are ordered by creation
|
|
10
26
|
* date, with oldest Projects first.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // Automatically fetches more pages as needed.
|
|
31
|
+
* for await (const project of client.projects.list()) {
|
|
32
|
+
* // ...
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
11
35
|
*/
|
|
12
36
|
list(
|
|
13
37
|
query: ProjectListParams | null | undefined = {},
|
|
14
38
|
options?: RequestOptions,
|
|
15
|
-
): PagePromise<
|
|
16
|
-
return this._client.getAPIList('/projects', PaginatedResponse<
|
|
17
|
-
query,
|
|
18
|
-
...options,
|
|
19
|
-
});
|
|
39
|
+
): PagePromise<ProjectsPaginatedResponse, Project> {
|
|
40
|
+
return this._client.getAPIList('/projects', PaginatedResponse<Project>, { query, ...options });
|
|
20
41
|
}
|
|
21
42
|
}
|
|
22
43
|
|
|
23
|
-
export type
|
|
44
|
+
export type ProjectsPaginatedResponse = PaginatedResponse<Project>;
|
|
24
45
|
|
|
25
46
|
/**
|
|
26
47
|
* A Project in the Scorecard system.
|
|
27
48
|
*/
|
|
28
|
-
export interface
|
|
49
|
+
export interface Project {
|
|
29
50
|
/**
|
|
30
51
|
* The ID of the Project.
|
|
31
52
|
*/
|
|
32
53
|
id: string;
|
|
33
54
|
|
|
55
|
+
/**
|
|
56
|
+
* The description of the Project.
|
|
57
|
+
*/
|
|
58
|
+
description: string | null;
|
|
59
|
+
|
|
34
60
|
/**
|
|
35
61
|
* The name of the Project.
|
|
36
62
|
*/
|
|
37
63
|
name: string | null;
|
|
38
64
|
}
|
|
39
65
|
|
|
66
|
+
export interface ProjectCreateParams {
|
|
67
|
+
/**
|
|
68
|
+
* The description of the Project.
|
|
69
|
+
*/
|
|
70
|
+
description: string;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The name of the Project.
|
|
74
|
+
*/
|
|
75
|
+
name: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
40
78
|
export interface ProjectListParams extends PaginatedResponseParams {}
|
|
41
79
|
|
|
42
80
|
export declare namespace Projects {
|
|
43
81
|
export {
|
|
44
|
-
type
|
|
45
|
-
type
|
|
82
|
+
type Project as Project,
|
|
83
|
+
type ProjectsPaginatedResponse as ProjectsPaginatedResponse,
|
|
84
|
+
type ProjectCreateParams as ProjectCreateParams,
|
|
46
85
|
type ProjectListParams as ProjectListParams,
|
|
47
86
|
};
|
|
48
87
|
}
|
package/src/resources/records.ts
CHANGED
|
@@ -9,6 +9,16 @@ import { path } from '../internal/utils/path';
|
|
|
9
9
|
export class Records extends APIResource {
|
|
10
10
|
/**
|
|
11
11
|
* Create a new Record in a Run.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const record = await client.records.create('135', {
|
|
16
|
+
* inputs: { question: 'What is the capital of France?' },
|
|
17
|
+
* labels: { idealAnswer: 'Paris is the capital of France' },
|
|
18
|
+
* outputs: { response: 'The capital of France is Paris.' },
|
|
19
|
+
* testcaseId: '248',
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
12
22
|
*/
|
|
13
23
|
create(runID: string, body: RecordCreateParams, options?: RequestOptions): APIPromise<Record> {
|
|
14
24
|
return this._client.post(path`/runs/${runID}/records`, { body, ...options });
|
package/src/resources/runs.ts
CHANGED
|
@@ -8,6 +8,15 @@ import { path } from '../internal/utils/path';
|
|
|
8
8
|
export class Runs extends APIResource {
|
|
9
9
|
/**
|
|
10
10
|
* Create a new Run.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const run = await client.runs.create('314', {
|
|
15
|
+
* metricIds: ['789', '101'],
|
|
16
|
+
* testsetId: '246',
|
|
17
|
+
* systemConfigId: '87654321-4d3b-4ae4-8c7a-4b6e2a19ccf0',
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
11
20
|
*/
|
|
12
21
|
create(projectID: string, body: RunCreateParams, options?: RequestOptions): APIPromise<Run> {
|
|
13
22
|
return this._client.post(path`/projects/${projectID}/runs`, { body, ...options });
|
|
@@ -15,6 +24,13 @@ export class Runs extends APIResource {
|
|
|
15
24
|
|
|
16
25
|
/**
|
|
17
26
|
* Update the status of a Run.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const run = await client.runs.update('135', {
|
|
31
|
+
* status: 'awaiting_scoring',
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
18
34
|
*/
|
|
19
35
|
update(runID: string, body: RunUpdateParams, options?: RequestOptions): APIPromise<RunUpdateResponse> {
|
|
20
36
|
return this._client.patch(path`/runs/${runID}`, { body, ...options });
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import { APIResource } from '../core/resource';
|
|
4
|
+
import { APIPromise } from '../core/api-promise';
|
|
5
|
+
import { RequestOptions } from '../internal/request-options';
|
|
6
|
+
import { path } from '../internal/utils/path';
|
|
7
|
+
|
|
8
|
+
export class Scores extends APIResource {
|
|
9
|
+
/**
|
|
10
|
+
* Create or update a Score for a given Record and MetricConfig. If a Score with
|
|
11
|
+
* the specified Record ID and MetricConfig ID already exists, it will be updated.
|
|
12
|
+
* Otherwise, a new Score will be created. The score provided should conform to the
|
|
13
|
+
* schema defined by the MetricConfig; otherwise, validation errors will be
|
|
14
|
+
* reported.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const score = await client.scores.upsert(
|
|
19
|
+
* 'a1b2c3d4-e5f6-7890-1234-567890abcdef',
|
|
20
|
+
* {
|
|
21
|
+
* recordId: '777',
|
|
22
|
+
* score: {
|
|
23
|
+
* value: true,
|
|
24
|
+
* reasoning: 'The response is correct',
|
|
25
|
+
* },
|
|
26
|
+
* },
|
|
27
|
+
* );
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
upsert(metricConfigID: string, params: ScoreUpsertParams, options?: RequestOptions): APIPromise<Score> {
|
|
31
|
+
const { recordId, ...body } = params;
|
|
32
|
+
return this._client.put(path`/records/${recordId}/scores/${metricConfigID}`, { body, ...options });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A Score represents the evaluation of a Record against a specific MetricConfig.
|
|
38
|
+
* The actual `score` is stored as flexible JSON. While any JSON is accepted, it is
|
|
39
|
+
* expected to conform to the output schema defined by the MetricConfig. Any
|
|
40
|
+
* discrepancies will be noted in the `validationErrors` field, but the Score will
|
|
41
|
+
* still be stored.
|
|
42
|
+
*/
|
|
43
|
+
export interface Score {
|
|
44
|
+
/**
|
|
45
|
+
* The ID of the MetricConfig this Score is for.
|
|
46
|
+
*/
|
|
47
|
+
metricConfigId: string;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The ID of the Record this Score is for.
|
|
51
|
+
*/
|
|
52
|
+
recordId: string;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The score of the Record, as arbitrary JSON. This data should ideally conform to
|
|
56
|
+
* the output schema defined by the associated MetricConfig. If it doesn't,
|
|
57
|
+
* validation errors will be captured in the `validationErrors` field.
|
|
58
|
+
*/
|
|
59
|
+
score: Record<string, unknown>;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Validation errors found in the Score data. If present, the Score doesn't fully
|
|
63
|
+
* conform to its MetricConfig's schema.
|
|
64
|
+
*/
|
|
65
|
+
validationErrors?: Array<Score.ValidationError>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export namespace Score {
|
|
69
|
+
export interface ValidationError {
|
|
70
|
+
/**
|
|
71
|
+
* Human-readable error description.
|
|
72
|
+
*/
|
|
73
|
+
message: string;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* JSON Pointer to the field with the validation error.
|
|
77
|
+
*/
|
|
78
|
+
path: string;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface ScoreUpsertParams {
|
|
83
|
+
/**
|
|
84
|
+
* Path param: The ID of the Record.
|
|
85
|
+
*/
|
|
86
|
+
recordId: string;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Body param: The score of the Record, as arbitrary JSON. This data should ideally
|
|
90
|
+
* conform to the output schema defined by the associated MetricConfig. If it
|
|
91
|
+
* doesn't, validation errors will be captured in the `validationErrors` field.
|
|
92
|
+
*/
|
|
93
|
+
score: Record<string, unknown>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export declare namespace Scores {
|
|
97
|
+
export { type Score as Score, type ScoreUpsertParams as ScoreUpsertParams };
|
|
98
|
+
}
|
|
@@ -23,6 +23,21 @@ export class SystemConfigs extends APIResource {
|
|
|
23
23
|
* - Validation errors indicate fields that don't match the schema but don't
|
|
24
24
|
* prevent creation
|
|
25
25
|
* - Having validation errors may affect how some evaluation metrics are calculated
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const systemConfig = await client.systemConfigs.create(
|
|
30
|
+
* '12345678-0a8b-4f66-b6f3-2ddcfa097257',
|
|
31
|
+
* {
|
|
32
|
+
* config: {
|
|
33
|
+
* temperature: 0.1,
|
|
34
|
+
* maxTokens: 1024,
|
|
35
|
+
* model: 'gpt-4-turbo',
|
|
36
|
+
* },
|
|
37
|
+
* name: 'Production (Low Temperature)',
|
|
38
|
+
* },
|
|
39
|
+
* );
|
|
40
|
+
* ```
|
|
26
41
|
*/
|
|
27
42
|
create(
|
|
28
43
|
systemID: string,
|
|
@@ -37,6 +52,16 @@ export class SystemConfigs extends APIResource {
|
|
|
37
52
|
*
|
|
38
53
|
* System configurations provide concrete parameter values for a System Under Test,
|
|
39
54
|
* defining exactly how the system should be configured during an evaluation run.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* // Automatically fetches more pages as needed.
|
|
59
|
+
* for await (const systemConfig of client.systemConfigs.list(
|
|
60
|
+
* '12345678-0a8b-4f66-b6f3-2ddcfa097257',
|
|
61
|
+
* )) {
|
|
62
|
+
* // ...
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
40
65
|
*/
|
|
41
66
|
list(
|
|
42
67
|
systemID: string,
|
|
@@ -51,6 +76,14 @@ export class SystemConfigs extends APIResource {
|
|
|
51
76
|
|
|
52
77
|
/**
|
|
53
78
|
* Retrieve a specific system configuration by ID.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const systemConfig = await client.systemConfigs.get(
|
|
83
|
+
* '87654321-4d3b-4ae4-8c7a-4b6e2a19ccf0',
|
|
84
|
+
* { systemId: '12345678-0a8b-4f66-b6f3-2ddcfa097257' },
|
|
85
|
+
* );
|
|
86
|
+
* ```
|
|
54
87
|
*/
|
|
55
88
|
get(
|
|
56
89
|
systemConfigID: string,
|
package/src/resources/systems.ts
CHANGED
|
@@ -23,6 +23,45 @@ export class Systems extends APIResource {
|
|
|
23
23
|
*
|
|
24
24
|
* This separation lets you evaluate any system as a black box, focusing on its
|
|
25
25
|
* interface rather than implementation details.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const system = await client.systems.create('314', {
|
|
30
|
+
* configSchema: {
|
|
31
|
+
* type: 'object',
|
|
32
|
+
* properties: {
|
|
33
|
+
* temperature: { type: 'number' },
|
|
34
|
+
* maxTokens: { type: 'integer' },
|
|
35
|
+
* model: { type: 'string', enum: ['gpt-4', 'gpt-4-turbo'] },
|
|
36
|
+
* },
|
|
37
|
+
* required: ['model'],
|
|
38
|
+
* },
|
|
39
|
+
* description: 'Production chatbot powered by GPT-4',
|
|
40
|
+
* inputSchema: {
|
|
41
|
+
* type: 'object',
|
|
42
|
+
* properties: {
|
|
43
|
+
* messages: {
|
|
44
|
+
* type: 'array',
|
|
45
|
+
* items: {
|
|
46
|
+
* type: 'object',
|
|
47
|
+
* properties: {
|
|
48
|
+
* role: { type: 'string', enum: ['system', 'user', 'assistant'] },
|
|
49
|
+
* content: { type: 'string' },
|
|
50
|
+
* },
|
|
51
|
+
* required: ['role', 'content'],
|
|
52
|
+
* },
|
|
53
|
+
* },
|
|
54
|
+
* },
|
|
55
|
+
* required: ['messages'],
|
|
56
|
+
* },
|
|
57
|
+
* name: 'GPT-4 Chatbot',
|
|
58
|
+
* outputSchema: {
|
|
59
|
+
* type: 'object',
|
|
60
|
+
* properties: { response: { type: 'string' } },
|
|
61
|
+
* required: ['response'],
|
|
62
|
+
* },
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
26
65
|
*/
|
|
27
66
|
create(projectID: string, body: SystemCreateParams, options?: RequestOptions): APIPromise<System> {
|
|
28
67
|
return this._client.post(path`/projects/${projectID}/systems`, { body, ...options });
|
|
@@ -41,6 +80,18 @@ export class Systems extends APIResource {
|
|
|
41
80
|
* - Schema updates won't invalidate existing evaluations or configurations
|
|
42
81
|
* - For significant redesigns, creating a new system definition provides a cleaner
|
|
43
82
|
* separation
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* const system = await client.systems.update(
|
|
87
|
+
* '12345678-0a8b-4f66-b6f3-2ddcfa097257',
|
|
88
|
+
* {
|
|
89
|
+
* description:
|
|
90
|
+
* 'Updated production chatbot powered by GPT-4 Turbo',
|
|
91
|
+
* name: 'GPT-4 Turbo Chatbot',
|
|
92
|
+
* },
|
|
93
|
+
* );
|
|
94
|
+
* ```
|
|
44
95
|
*/
|
|
45
96
|
update(
|
|
46
97
|
systemID: string,
|
|
@@ -52,6 +103,14 @@ export class Systems extends APIResource {
|
|
|
52
103
|
|
|
53
104
|
/**
|
|
54
105
|
* Retrieve a paginated list of all systems. Systems are ordered by creation date.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* // Automatically fetches more pages as needed.
|
|
110
|
+
* for await (const system of client.systems.list('314')) {
|
|
111
|
+
* // ...
|
|
112
|
+
* }
|
|
113
|
+
* ```
|
|
55
114
|
*/
|
|
56
115
|
list(
|
|
57
116
|
projectID: string,
|
|
@@ -67,6 +126,13 @@ export class Systems extends APIResource {
|
|
|
67
126
|
/**
|
|
68
127
|
* Delete a system definition by ID. This will not delete associated system
|
|
69
128
|
* configurations.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* const system = await client.systems.delete(
|
|
133
|
+
* '12345678-0a8b-4f66-b6f3-2ddcfa097257',
|
|
134
|
+
* );
|
|
135
|
+
* ```
|
|
70
136
|
*/
|
|
71
137
|
delete(systemID: string, options?: RequestOptions): APIPromise<SystemDeleteResponse> {
|
|
72
138
|
return this._client.delete(path`/systems/${systemID}`, options);
|
|
@@ -74,6 +140,13 @@ export class Systems extends APIResource {
|
|
|
74
140
|
|
|
75
141
|
/**
|
|
76
142
|
* Retrieve a specific system by ID.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts
|
|
146
|
+
* const system = await client.systems.get(
|
|
147
|
+
* '12345678-0a8b-4f66-b6f3-2ddcfa097257',
|
|
148
|
+
* );
|
|
149
|
+
* ```
|
|
77
150
|
*/
|
|
78
151
|
get(systemID: string, options?: RequestOptions): APIPromise<System> {
|
|
79
152
|
return this._client.get(path`/systems/${systemID}`, options);
|