peerbench 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/benchmarks/examples/echo-basic/schema-sets/echo.v1.d.ts +13 -13
- package/dist/benchmarks/examples/exact-match-scorer/runner.d.ts +1 -1
- package/dist/benchmarks/examples/exact-match-scorer/schema-sets/exact-match.v1.d.ts +13 -13
- package/dist/benchmarks/examples/text-transform/runner.d.ts +2 -2
- package/dist/benchmarks/examples/text-transform/schema-sets/echo.v1.d.ts +13 -13
- package/dist/benchmarks/examples/text-transform/schema-sets/reverse.v1.d.ts +13 -13
- package/dist/benchmarks/index.js +1 -1
- package/dist/benchmarks/peerbench/mcq-runner.d.ts +1 -1
- package/dist/benchmarks/peerbench/qa-runner.d.ts +1 -1
- package/dist/benchmarks/peerbench/schema-sets/mcq.v1.d.ts +13 -13
- package/dist/benchmarks/peerbench/schema-sets/multi-turn.v1.d.ts +13 -13
- package/dist/benchmarks/peerbench/schema-sets/qa.v1.d.ts +13 -13
- package/dist/{chunk-TRNCF2BG.js → chunk-HBGC6BDW.js} +1 -1
- package/dist/chunk-HBGC6BDW.js.map +1 -0
- package/dist/dev.d.ts +22 -0
- package/dist/providers/ai-sdk.d.ts +24 -0
- package/dist/providers/callables/llm.d.ts +3 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +116 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/schemas/extensions/index.js +1 -1
- package/dist/schemas/extensions/response/llm.d.ts +17 -0
- package/dist/schemas/llm/simple-system-prompt.d.ts +3 -3
- package/dist/schemas/llm/system-prompt.d.ts +7 -7
- package/dist/schemas/response.d.ts +7 -7
- package/dist/schemas/schema-definer.d.ts +5 -5
- package/dist/schemas/score.d.ts +7 -7
- package/dist/schemas/test-case.d.ts +7 -7
- package/package.json +5 -3
- package/dist/chunk-TRNCF2BG.js.map +0 -1
|
@@ -6,7 +6,7 @@ export declare const MultiTurnTestCaseSchemaV1: z.ZodObject<Omit<{
|
|
|
6
6
|
schemaVersion: z.ZodNumber;
|
|
7
7
|
kind: z.ZodString;
|
|
8
8
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
9
|
-
}, "kind" | "
|
|
9
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
10
10
|
messages: z.ZodArray<z.ZodObject<{
|
|
11
11
|
role: z.ZodString;
|
|
12
12
|
content: z.ZodString;
|
|
@@ -34,7 +34,7 @@ export declare const MultiTurnTestCaseSchemaV1: z.ZodObject<Omit<{
|
|
|
34
34
|
metadata?: Record<string, unknown> | undefined;
|
|
35
35
|
maxTurns?: number | undefined;
|
|
36
36
|
expectedOutcome?: string | undefined;
|
|
37
|
-
}, "kind" | "
|
|
37
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
38
38
|
id: string;
|
|
39
39
|
messages: {
|
|
40
40
|
role: string;
|
|
@@ -63,7 +63,7 @@ export declare const MultiTurnTestCaseSchemaV1: z.ZodObject<Omit<{
|
|
|
63
63
|
metadata?: Record<string, unknown> | undefined;
|
|
64
64
|
maxTurns?: number | undefined;
|
|
65
65
|
expectedOutcome?: string | undefined;
|
|
66
|
-
}, "
|
|
66
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../../index.js").IdGenerator): Promise<{
|
|
67
67
|
id: string;
|
|
68
68
|
messages: {
|
|
69
69
|
role: string;
|
|
@@ -89,7 +89,7 @@ export declare const MultiTurnResponseSchemaV1: z.ZodObject<Omit<{
|
|
|
89
89
|
completedAt: z.ZodNumber;
|
|
90
90
|
testCaseId: z.ZodString;
|
|
91
91
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
92
|
-
}, "kind" | "
|
|
92
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
93
93
|
replies: z.ZodArray<z.ZodObject<{
|
|
94
94
|
messageIndex: z.ZodNumber;
|
|
95
95
|
startedAt: z.ZodNumber;
|
|
@@ -140,7 +140,7 @@ export declare const MultiTurnResponseSchemaV1: z.ZodObject<Omit<{
|
|
|
140
140
|
outputTokensUsed?: number | undefined;
|
|
141
141
|
inputCost?: string | undefined;
|
|
142
142
|
outputCost?: string | undefined;
|
|
143
|
-
}, "kind" | "
|
|
143
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
144
144
|
id: string;
|
|
145
145
|
testCaseId: string;
|
|
146
146
|
startedAt: number;
|
|
@@ -195,7 +195,7 @@ export declare const MultiTurnResponseSchemaV1: z.ZodObject<Omit<{
|
|
|
195
195
|
outputTokensUsed?: number | undefined;
|
|
196
196
|
inputCost?: string | undefined;
|
|
197
197
|
outputCost?: string | undefined;
|
|
198
|
-
}, "
|
|
198
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../../index.js").IdGenerator): Promise<{
|
|
199
199
|
id: string;
|
|
200
200
|
testCaseId: string;
|
|
201
201
|
startedAt: number;
|
|
@@ -239,7 +239,7 @@ export declare const MultiTurnScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
239
239
|
readonly human: "human";
|
|
240
240
|
readonly algo: "algo";
|
|
241
241
|
}>;
|
|
242
|
-
}, "kind" | "
|
|
242
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
243
243
|
individualScores: z.ZodArray<z.ZodObject<{
|
|
244
244
|
replyIndex: z.ZodNumber;
|
|
245
245
|
value: z.ZodNumber;
|
|
@@ -258,9 +258,9 @@ export declare const MultiTurnScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
258
258
|
schemaVersion: z.ZodLiteral<1>;
|
|
259
259
|
}, z.core.$strip> & {
|
|
260
260
|
new: (input: Omit<{
|
|
261
|
-
value: number;
|
|
262
261
|
id: string;
|
|
263
262
|
responseId: string;
|
|
263
|
+
value: number;
|
|
264
264
|
scoringMethod: "ai" | "human" | "algo";
|
|
265
265
|
individualScores: {
|
|
266
266
|
replyIndex: number;
|
|
@@ -279,10 +279,10 @@ export declare const MultiTurnScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
279
279
|
scorerAIOutputTokensUsed?: number | undefined;
|
|
280
280
|
scorerAIInputCost?: string | undefined;
|
|
281
281
|
scorerAIOutputCost?: string | undefined;
|
|
282
|
-
}, "kind" | "
|
|
283
|
-
value: number;
|
|
282
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
284
283
|
id: string;
|
|
285
284
|
responseId: string;
|
|
285
|
+
value: number;
|
|
286
286
|
scoringMethod: "ai" | "human" | "algo";
|
|
287
287
|
individualScores: {
|
|
288
288
|
replyIndex: number;
|
|
@@ -303,9 +303,9 @@ export declare const MultiTurnScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
303
303
|
scorerAIOutputCost?: string | undefined;
|
|
304
304
|
};
|
|
305
305
|
newWithId(input: Omit<{
|
|
306
|
-
value: number;
|
|
307
306
|
id: string;
|
|
308
307
|
responseId: string;
|
|
308
|
+
value: number;
|
|
309
309
|
scoringMethod: "ai" | "human" | "algo";
|
|
310
310
|
individualScores: {
|
|
311
311
|
replyIndex: number;
|
|
@@ -324,10 +324,10 @@ export declare const MultiTurnScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
324
324
|
scorerAIOutputTokensUsed?: number | undefined;
|
|
325
325
|
scorerAIInputCost?: string | undefined;
|
|
326
326
|
scorerAIOutputCost?: string | undefined;
|
|
327
|
-
}, "
|
|
328
|
-
value: number;
|
|
327
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../../index.js").IdGenerator): Promise<{
|
|
329
328
|
id: string;
|
|
330
329
|
responseId: string;
|
|
330
|
+
value: number;
|
|
331
331
|
scoringMethod: "ai" | "human" | "algo";
|
|
332
332
|
individualScores: {
|
|
333
333
|
replyIndex: number;
|
|
@@ -6,7 +6,7 @@ export declare const QATestCaseSchemaV1: z.ZodObject<Omit<{
|
|
|
6
6
|
schemaVersion: z.ZodNumber;
|
|
7
7
|
kind: z.ZodString;
|
|
8
8
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
9
|
-
}, "kind" | "
|
|
9
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
10
10
|
question: z.ZodString;
|
|
11
11
|
goodAnswers: z.ZodArray<z.ZodString>;
|
|
12
12
|
badAnswers: z.ZodArray<z.ZodString>;
|
|
@@ -24,7 +24,7 @@ export declare const QATestCaseSchemaV1: z.ZodObject<Omit<{
|
|
|
24
24
|
kind: "llm/qa.tc";
|
|
25
25
|
schemaVersion: 1;
|
|
26
26
|
metadata?: Record<string, unknown> | undefined;
|
|
27
|
-
}, "kind" | "
|
|
27
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
28
28
|
id: string;
|
|
29
29
|
question: string;
|
|
30
30
|
goodAnswers: string[];
|
|
@@ -43,7 +43,7 @@ export declare const QATestCaseSchemaV1: z.ZodObject<Omit<{
|
|
|
43
43
|
kind: "llm/qa.tc";
|
|
44
44
|
schemaVersion: 1;
|
|
45
45
|
metadata?: Record<string, unknown> | undefined;
|
|
46
|
-
}, "
|
|
46
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../../index.js").IdGenerator): Promise<{
|
|
47
47
|
id: string;
|
|
48
48
|
question: string;
|
|
49
49
|
goodAnswers: string[];
|
|
@@ -64,7 +64,7 @@ export declare const QAResponseSchemaV1: z.ZodObject<Omit<{
|
|
|
64
64
|
completedAt: z.ZodNumber;
|
|
65
65
|
testCaseId: z.ZodString;
|
|
66
66
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
67
|
-
}, "kind" | "
|
|
67
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
68
68
|
data: z.ZodString;
|
|
69
69
|
modelSlug: z.ZodString;
|
|
70
70
|
provider: z.ZodString;
|
|
@@ -95,7 +95,7 @@ export declare const QAResponseSchemaV1: z.ZodObject<Omit<{
|
|
|
95
95
|
outputTokensUsed?: number | undefined;
|
|
96
96
|
inputCost?: string | undefined;
|
|
97
97
|
outputCost?: string | undefined;
|
|
98
|
-
}, "kind" | "
|
|
98
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
99
99
|
id: string;
|
|
100
100
|
testCaseId: string;
|
|
101
101
|
startedAt: number;
|
|
@@ -130,7 +130,7 @@ export declare const QAResponseSchemaV1: z.ZodObject<Omit<{
|
|
|
130
130
|
outputTokensUsed?: number | undefined;
|
|
131
131
|
inputCost?: string | undefined;
|
|
132
132
|
outputCost?: string | undefined;
|
|
133
|
-
}, "
|
|
133
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../../index.js").IdGenerator): Promise<{
|
|
134
134
|
id: string;
|
|
135
135
|
testCaseId: string;
|
|
136
136
|
startedAt: number;
|
|
@@ -164,7 +164,7 @@ export declare const QAScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
164
164
|
readonly human: "human";
|
|
165
165
|
readonly algo: "algo";
|
|
166
166
|
}>;
|
|
167
|
-
}, "kind" | "
|
|
167
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
168
168
|
scorerAISystemPrompt: z.ZodOptional<z.ZodString>;
|
|
169
169
|
scorerAISystemPromptId: z.ZodOptional<z.ZodString>;
|
|
170
170
|
scorerAIProvider: z.ZodOptional<z.ZodString>;
|
|
@@ -179,9 +179,9 @@ export declare const QAScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
179
179
|
schemaVersion: z.ZodLiteral<1>;
|
|
180
180
|
}, z.core.$strip> & {
|
|
181
181
|
new: (input: Omit<{
|
|
182
|
-
value: number;
|
|
183
182
|
id: string;
|
|
184
183
|
responseId: string;
|
|
184
|
+
value: number;
|
|
185
185
|
scoringMethod: "ai" | "human" | "algo";
|
|
186
186
|
namespace: "peerbench.ai";
|
|
187
187
|
kind: "llm/qa.sc";
|
|
@@ -196,10 +196,10 @@ export declare const QAScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
196
196
|
scorerAIOutputTokensUsed?: number | undefined;
|
|
197
197
|
scorerAIInputCost?: string | undefined;
|
|
198
198
|
scorerAIOutputCost?: string | undefined;
|
|
199
|
-
}, "kind" | "
|
|
200
|
-
value: number;
|
|
199
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
201
200
|
id: string;
|
|
202
201
|
responseId: string;
|
|
202
|
+
value: number;
|
|
203
203
|
scoringMethod: "ai" | "human" | "algo";
|
|
204
204
|
namespace: "peerbench.ai";
|
|
205
205
|
kind: "llm/qa.sc";
|
|
@@ -216,9 +216,9 @@ export declare const QAScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
216
216
|
scorerAIOutputCost?: string | undefined;
|
|
217
217
|
};
|
|
218
218
|
newWithId(input: Omit<{
|
|
219
|
-
value: number;
|
|
220
219
|
id: string;
|
|
221
220
|
responseId: string;
|
|
221
|
+
value: number;
|
|
222
222
|
scoringMethod: "ai" | "human" | "algo";
|
|
223
223
|
namespace: "peerbench.ai";
|
|
224
224
|
kind: "llm/qa.sc";
|
|
@@ -233,10 +233,10 @@ export declare const QAScoreSchemaV1: z.ZodObject<Omit<{
|
|
|
233
233
|
scorerAIOutputTokensUsed?: number | undefined;
|
|
234
234
|
scorerAIInputCost?: string | undefined;
|
|
235
235
|
scorerAIOutputCost?: string | undefined;
|
|
236
|
-
}, "
|
|
237
|
-
value: number;
|
|
236
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../../index.js").IdGenerator): Promise<{
|
|
238
237
|
id: string;
|
|
239
238
|
responseId: string;
|
|
239
|
+
value: number;
|
|
240
240
|
scoringMethod: "ai" | "human" | "algo";
|
|
241
241
|
namespace: "peerbench.ai";
|
|
242
242
|
kind: "llm/qa.sc";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/extensions/response/llm.ts","../src/schemas/extensions/score/llm-as-a-judge-scorer.ts"],"sourcesContent":["import { IdSchema } from \"@/schemas/id\";\nimport z from \"zod\";\n\n/**\n * Provides a set of fields that holds information about the LLM and its response.\n */\nexport const ExtensionLLMResponseFieldsV1 = {\n data: z.string(),\n modelSlug: z.string(),\n provider: z.string(),\n systemPromptId: IdSchema.optional(),\n\n inputTokensUsed: z.number().optional(),\n outputTokensUsed: z.number().optional(),\n inputCost: z.string().optional(),\n outputCost: z.string().optional(),\n};\n\nexport function LLMResponseFieldsV1<\n TRawDataField extends boolean = false,\n>(params?: {\n /**\n * If `true` then the `data` field (which is a `z.string()`)\n * will be included in the returned fields\n */\n withRawDataField?: TRawDataField;\n}) {\n const baseFields = {\n modelSlug: z.string(),\n provider: z.string(),\n systemPromptId: IdSchema.optional(),\n\n inputTokensUsed: z.number().optional(),\n outputTokensUsed: z.number().optional(),\n inputCost: z.string().optional(),\n outputCost: z.string().optional(),\n };\n\n const fields = {\n ...baseFields,\n data: undefined as z.ZodString | undefined,\n };\n\n if (params?.withRawDataField) {\n fields.data = z.string();\n }\n\n return fields as unknown as typeof baseFields &\n (TRawDataField extends true ? { data: z.ZodString } : {});\n}\n","import z from \"zod\";\n\n/**\n * Provides a set of fields that holds information about the LLM model\n * that was used to judge the response.\n */\nexport const ExtensionLLMAsAJudgeScoreFieldsV1 = {\n scorerAISystemPrompt: z.string().optional(),\n scorerAISystemPromptId: z.string().optional(),\n scorerAIProvider: z.string().optional(),\n scorerAIModelSlug: z.string().optional(),\n scorerAIInputTokensUsed: z.number().optional(),\n scorerAIOutputTokensUsed: z.number().optional(),\n scorerAIInputCost: z.string().optional(),\n scorerAIOutputCost: z.string().optional(),\n};\n"],"mappings":";;;;;AACA,OAAO,OAAO;AAKP,IAAM,+BAA+B;AAAA,EAC1C,MAAM,EAAE,OAAO;AAAA,EACf,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU,EAAE,OAAO;AAAA,EACnB,gBAAgB,SAAS,SAAS;AAAA,EAElC,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,EACrC,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,EAAE,OAAO,EAAE,SAAS;AAClC;;;AChBA,OAAOA,QAAO;AAMP,IAAM,oCAAoC;AAAA,EAC/C,sBAAsBA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,wBAAwBA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,kBAAkBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACtC,mBAAmBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACvC,yBAAyBA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,0BAA0BA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,mBAAmBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoBA,GAAE,OAAO,EAAE,SAAS;AAC1C;","names":["z"]}
|
package/dist/dev.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type PeerBenchTestCase<TKind extends string, TSchemaVersion extends number> = {
|
|
2
|
+
id: string;
|
|
3
|
+
kind: TKind;
|
|
4
|
+
schemaVersion: TSchemaVersion;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
};
|
|
7
|
+
type PeerBenchResponse<TKind extends string, TSchemaVersion extends number> = {
|
|
8
|
+
id: string;
|
|
9
|
+
kind: TKind;
|
|
10
|
+
schemaVersion: TSchemaVersion;
|
|
11
|
+
testCaseId: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
type PeerBenchScore<TKind extends string, TSchemaVersion extends number> = {
|
|
15
|
+
id: string;
|
|
16
|
+
kind: TKind;
|
|
17
|
+
schemaVersion: TSchemaVersion;
|
|
18
|
+
responseId: string;
|
|
19
|
+
};
|
|
20
|
+
declare function createTestCase<TKind extends string, TSchemaVersion extends number>(kind: TKind, schemaVersion: TSchemaVersion, tc: Omit<PeerBenchTestCase<TKind, TSchemaVersion>, "kind" | "schemaVersion">): PeerBenchTestCase<TKind, TSchemaVersion>;
|
|
21
|
+
declare function createResponse<TKind extends string, TSchemaVersion extends number>(kind: TKind, schemaVersion: TSchemaVersion, rs: Omit<PeerBenchResponse<TKind, TSchemaVersion>, "kind" | "schemaVersion">): PeerBenchResponse<TKind, TSchemaVersion>;
|
|
22
|
+
declare function createScore<TKind extends string, TSchemaVersion extends number>(kind: TKind, schemaVersion: TSchemaVersion, sc: Omit<PeerBenchScore<TKind, TSchemaVersion>, "kind" | "schemaVersion">): PeerBenchScore<TKind, TSchemaVersion>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from "@ai-sdk/provider";
|
|
2
|
+
import { RateLimiter } from "../utils";
|
|
3
|
+
import { AbstractProvider } from "./abstract";
|
|
4
|
+
import { type CallableLLM } from "./callables/llm";
|
|
5
|
+
declare const AISdkProvider_base: (new () => AbstractProvider & {
|
|
6
|
+
readonly kind: "peerbench.ai/llm/ai-sdk";
|
|
7
|
+
}) & {
|
|
8
|
+
readonly kind: "peerbench.ai/llm/ai-sdk";
|
|
9
|
+
};
|
|
10
|
+
export declare class AISdkProvider extends AISdkProvider_base {
|
|
11
|
+
private rateLimiter;
|
|
12
|
+
private maxRetries;
|
|
13
|
+
constructor(config?: AISdkProviderConfig);
|
|
14
|
+
model(config: AISdkModelConfig): CallableLLM<AISdkProvider>;
|
|
15
|
+
}
|
|
16
|
+
type AISdkProviderConfig = {
|
|
17
|
+
rateLimiter?: RateLimiter;
|
|
18
|
+
maxRetries?: number;
|
|
19
|
+
};
|
|
20
|
+
type AISdkModelConfig = {
|
|
21
|
+
aiSdkModel: LanguageModelV3;
|
|
22
|
+
stream?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export {};
|
package/dist/providers/index.js
CHANGED
|
@@ -264,7 +264,123 @@ var OpenRouterProvider = class extends AbstractProvider.withKind(
|
|
|
264
264
|
await this.modelsCachePromise;
|
|
265
265
|
}
|
|
266
266
|
};
|
|
267
|
+
|
|
268
|
+
// src/providers/ai-sdk.ts
|
|
269
|
+
import { generateText, streamText } from "ai";
|
|
270
|
+
function toModelMessages(messages) {
|
|
271
|
+
return messages.filter(
|
|
272
|
+
(m) => m.role === "system" || m.role === "user" || m.role === "assistant"
|
|
273
|
+
).map((m) => ({
|
|
274
|
+
role: m.role,
|
|
275
|
+
content: typeof m.content === "string" ? m.content : JSON.stringify(m.content ?? "")
|
|
276
|
+
}));
|
|
277
|
+
}
|
|
278
|
+
var aiModuleCache = null;
|
|
279
|
+
async function buildOutputOption(responseFormat) {
|
|
280
|
+
if (!responseFormat || responseFormat.type === "text") {
|
|
281
|
+
return void 0;
|
|
282
|
+
}
|
|
283
|
+
if (!aiModuleCache) {
|
|
284
|
+
aiModuleCache = await import("ai");
|
|
285
|
+
}
|
|
286
|
+
const Output = aiModuleCache["Output"];
|
|
287
|
+
const jsonSchema = aiModuleCache["jsonSchema"];
|
|
288
|
+
if (!Output || !jsonSchema) {
|
|
289
|
+
return void 0;
|
|
290
|
+
}
|
|
291
|
+
if (responseFormat.type === "json_schema") {
|
|
292
|
+
return Output.object({
|
|
293
|
+
schema: jsonSchema(responseFormat.json_schema.schema)
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
if (responseFormat.type === "json_object") {
|
|
297
|
+
return Output.json();
|
|
298
|
+
}
|
|
299
|
+
return void 0;
|
|
300
|
+
}
|
|
301
|
+
var AISdkProvider = class extends AbstractProvider.withKind(
|
|
302
|
+
`${PEERBENCH_NAMESPACE}/llm/ai-sdk`
|
|
303
|
+
) {
|
|
304
|
+
rateLimiter;
|
|
305
|
+
maxRetries;
|
|
306
|
+
constructor(config) {
|
|
307
|
+
super();
|
|
308
|
+
this.maxRetries = config?.maxRetries ?? 2;
|
|
309
|
+
this.rateLimiter = config?.rateLimiter ?? new RateLimiter({
|
|
310
|
+
maxWeight: 20,
|
|
311
|
+
timeWindow: 3e3
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
model(config) {
|
|
315
|
+
const slug = `${config.aiSdkModel.provider}/${config.aiSdkModel.modelId}`;
|
|
316
|
+
return {
|
|
317
|
+
slug,
|
|
318
|
+
provider: this,
|
|
319
|
+
forward: async (args) => {
|
|
320
|
+
const messages = toModelMessages(args.messages);
|
|
321
|
+
const output = await buildOutputOption(args.responseFormat);
|
|
322
|
+
const baseOptions = {
|
|
323
|
+
model: config.aiSdkModel,
|
|
324
|
+
messages,
|
|
325
|
+
temperature: args.temperature,
|
|
326
|
+
maxOutputTokens: args.maxTokens,
|
|
327
|
+
abortSignal: args.abortSignal,
|
|
328
|
+
maxRetries: this.maxRetries
|
|
329
|
+
};
|
|
330
|
+
if (config.stream) {
|
|
331
|
+
let startedAt2;
|
|
332
|
+
const result2 = await this.rateLimiter.execute(
|
|
333
|
+
async () => {
|
|
334
|
+
startedAt2 = Date.now();
|
|
335
|
+
return streamText({
|
|
336
|
+
...baseOptions,
|
|
337
|
+
...output !== void 0 ? { output } : {}
|
|
338
|
+
});
|
|
339
|
+
},
|
|
340
|
+
{ signal: args.abortSignal }
|
|
341
|
+
);
|
|
342
|
+
let text = "";
|
|
343
|
+
let firstTokenAt;
|
|
344
|
+
for await (const chunk of result2.textStream) {
|
|
345
|
+
if (firstTokenAt === void 0) {
|
|
346
|
+
firstTokenAt = Date.now();
|
|
347
|
+
}
|
|
348
|
+
text += chunk;
|
|
349
|
+
}
|
|
350
|
+
const usage = await result2.usage;
|
|
351
|
+
return {
|
|
352
|
+
data: text,
|
|
353
|
+
startedAt: startedAt2,
|
|
354
|
+
completedAt: Date.now(),
|
|
355
|
+
inputTokensUsed: usage.inputTokens,
|
|
356
|
+
outputTokensUsed: usage.outputTokens,
|
|
357
|
+
timeToFirstToken: firstTokenAt !== void 0 ? firstTokenAt - startedAt2 : void 0
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
let startedAt;
|
|
361
|
+
const result = await this.rateLimiter.execute(
|
|
362
|
+
async () => {
|
|
363
|
+
startedAt = Date.now();
|
|
364
|
+
return generateText({
|
|
365
|
+
...baseOptions,
|
|
366
|
+
...output !== void 0 ? { output } : {}
|
|
367
|
+
});
|
|
368
|
+
},
|
|
369
|
+
{ signal: args.abortSignal }
|
|
370
|
+
);
|
|
371
|
+
return {
|
|
372
|
+
data: result.text,
|
|
373
|
+
startedAt,
|
|
374
|
+
completedAt: Date.now(),
|
|
375
|
+
inputTokensUsed: result.usage.inputTokens,
|
|
376
|
+
outputTokensUsed: result.usage.outputTokens
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
};
|
|
267
382
|
export {
|
|
383
|
+
AISdkProvider,
|
|
268
384
|
AbstractProvider,
|
|
269
385
|
MastraProvider,
|
|
270
386
|
OpenAIProvider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/providers/abstract.ts","../../src/providers/mastra.ts","../../src/providers/openai.ts","../../src/providers/openrouter.ts"],"sourcesContent":["export abstract class AbstractProvider {\n readonly kind: string;\n\n constructor() {\n this.kind = (this.constructor as any).kind;\n if (!this.kind)\n throw new Error(\n `${this.constructor.name} must define \"static readonly kind\" as a constant property.`\n );\n }\n static withKind<\n TKind extends string,\n TThis extends abstract new (...args: any[]) => AbstractProvider,\n >(this: TThis, kind: TKind) {\n const base = this as unknown as new (...args: any[]) => any;\n const derived = class extends base {\n static readonly kind: TKind = kind;\n declare readonly kind: TKind;\n };\n\n return derived as unknown as (new () => InstanceType<TThis> & {\n readonly kind: TKind;\n }) & {\n readonly kind: TKind;\n };\n }\n}\n\nexport type ProviderResponse<TData = unknown> = {\n startedAt: number;\n completedAt: number;\n data: TData;\n};\n","import { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport { AbstractProvider } from \"./abstract\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\nimport { MastraClient, type GetAgentResponse } from \"@mastra/client-js\";\nimport type { RequestContext } from \"@mastra/core/request-context\";\nimport { AgentMemoryOption } from \"@mastra/core/agent\";\nimport { ProviderOptions } from \"@mastra/core/dist/llm/model/provider-options\";\nimport { CoreMessage } from \"@mastra/core/llm\";\n\nexport class MastraProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/mastra`\n) {\n private readonly endpoint: string;\n private readonly authToken?: string;\n private client: MastraClient;\n\n constructor(params: { endpoint: string; authToken?: string }) {\n super();\n this.endpoint = params.endpoint;\n this.authToken = params.authToken;\n this.client = new MastraClient({\n baseUrl: this.endpoint,\n headers: this.authToken\n ? {\n Authorization: `Bearer ${this.authToken}`,\n }\n : undefined,\n });\n }\n\n async getAgentInfo(args: {\n agentId: string;\n requestContext?: RequestContext;\n }) {\n return await this.client\n .getAgent(args.agentId)\n .details(args.requestContext);\n }\n\n async getAgents(params?: {\n requestContext?: RequestContext;\n partial?: boolean;\n }): Promise<Record<string, GetAgentResponse>> {\n return this.client.listAgents(params?.requestContext, params?.partial);\n }\n\n agent(config: {\n agentId: string;\n memory?: AgentMemoryOption;\n requestContext?: RequestContext;\n providerOptions?: ProviderOptions;\n }): CallableLLM<MastraProvider> {\n return {\n slug: config.agentId,\n provider: this,\n forward: async (\n args: CallableLLMForwardArgs\n ): Promise<LLMResponse> => {\n const apiMessages = args.messages\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map<CoreMessage>((m) => ({\n role: m.role,\n content: String(m.content ?? \"\"),\n }));\n\n const agent = this.client.getAgent(config.agentId);\n const startedAt = Date.now();\n\n const response = await agent.stream(\n apiMessages,\n {\n providerOptions: config.providerOptions,\n memory: config.memory,\n requestContext: config.requestContext,\n }\n );\n\n let text = \"\";\n let firstTokenAt: number | undefined;\n let inputTokensUsed: number | undefined;\n let outputTokensUsed: number | undefined;\n const metadata: Record<string, unknown> = {};\n\n await response.processDataStream({\n onChunk: async (chunk) => {\n if (chunk.type === \"text-delta\") {\n if (firstTokenAt === undefined) {\n firstTokenAt = Date.now();\n }\n const payload = chunk.payload as { text?: string };\n text += payload.text ?? \"\";\n }\n\n if (chunk.type === \"finish\") {\n const payload = chunk.payload as {\n output?: {\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n };\n };\n };\n inputTokensUsed = payload.output?.usage?.inputTokens;\n outputTokensUsed = payload.output?.usage?.outputTokens;\n }\n },\n });\n\n return {\n data: text,\n startedAt,\n completedAt: Date.now(),\n inputTokensUsed,\n outputTokensUsed,\n timeToFirstToken:\n firstTokenAt !== undefined ? firstTokenAt - startedAt : undefined,\n metadata:\n Object.keys(metadata).length > 0 ? metadata : undefined,\n };\n },\n };\n }\n}\n","import { RateLimiter } from \"@/utils\";\nimport OpenAI, { APIError } from \"openai\";\nimport { AbstractProvider } from \"./abstract\";\nimport { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\n\n/**\n * Provider implementation that uses OpenAI SDK. It can be used with\n * any OpenAI compatible API.\n *\n * @example\n * ```ts\n * const provider = new OpenAIProvider({\n * apiKey: \"sk-1234567890\",\n * baseURL: \"https://openrouter.ai/api/v1\",\n * });\n * \n * const model = provider.model({ model: \"gpt-4o\" });\n * \n * const response = await model.forward({\n * messages: [{ role: \"user\", content: \"Hello, how are you?\" }],\n * });\n * \n * console.log(response.data);\n * ```\n */\nexport class OpenAIProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/openai`\n) {\n private client: OpenAI;\n private rateLimiter: RateLimiter;\n private maxRetries: number;\n\n constructor(config: {\n apiKey: string;\n baseURL: string;\n maxRetries?: number;\n timeout?: number;\n rateLimiter?: RateLimiter;\n }) {\n super();\n this.maxRetries = config.maxRetries ?? 3;\n this.rateLimiter =\n config.rateLimiter ??\n new RateLimiter({\n maxWeight: 20,\n timeWindow: 3_000,\n });\n\n this.client = new OpenAI({\n baseURL: config.baseURL,\n apiKey: config.apiKey,\n timeout: config.timeout,\n dangerouslyAllowBrowser: true,\n });\n }\n\n model(config: { model: string }): CallableLLM<OpenAIProvider> {\n return {\n slug: config.model,\n provider: this,\n forward: async (args: CallableLLMForwardArgs): Promise<LLMResponse> => {\n let retryCount = this.maxRetries;\n while (retryCount > 0) {\n let startedAt: Date = new Date();\n\n try {\n const response = await this.rateLimiter.execute(\n async () => {\n startedAt = new Date();\n return await this.client.chat.completions.create(\n {\n model: config.model,\n messages: args.messages,\n temperature: args.temperature,\n response_format: args.responseFormat,\n },\n { signal: args.abortSignal }\n );\n },\n { signal: args.abortSignal }\n );\n\n if (\"error\" in response) {\n const err = response.error as any;\n throw new Error(\n `${err.message} - Code ${err.code} - ${JSON.stringify(err)}`\n );\n }\n\n if (!response?.choices?.[0]?.message?.content) {\n throw new Error(\"No content returned from the model\");\n }\n\n return {\n data: response.choices[0].message.content,\n inputTokensUsed: response?.usage?.prompt_tokens,\n outputTokensUsed: response?.usage?.completion_tokens,\n startedAt: startedAt.getTime(),\n completedAt: Date.now(),\n };\n } catch (err) {\n if (err instanceof APIError && err.status === 401) {\n throw new Error(`Invalid credentials provided`, { cause: err });\n }\n\n retryCount--;\n\n if (err instanceof SyntaxError) {\n console.debug(err);\n continue;\n }\n\n if (retryCount !== 0) {\n continue;\n }\n\n throw new Error(\n `Failed to forward prompt to the model: ${err instanceof Error ? err.message : err}`,\n { cause: err }\n );\n }\n }\n\n throw new Error(\n `Failed to forward prompt to the model: Max retries reached`,\n { cause: new Error(\"Max retries reached\") }\n );\n },\n };\n }\n}\n","import { AbstractProvider } from \"./abstract\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\nimport { RateLimiter } from \"@/utils\";\nimport { OpenAIProvider } from \"./openai\";\nimport { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport Decimal from \"decimal.js\";\nimport axios from \"axios\";\n\nconst baseURL = \"https://openrouter.ai/api/v1\";\nconst MODELS_CACHE_TTL = 1000 * 60 * 60 * 24; // 24 hours\n\nexport class OpenRouterProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/openrouter.ai`\n) {\n private models: ModelsResponse | undefined = undefined;\n private modelsCachePromise: Promise<ModelsResponse | undefined> =\n Promise.resolve(undefined);\n private modelsUpdatedAt = 0;\n private openAIProvider: OpenAIProvider;\n\n constructor(config: {\n apiKey: string;\n maxRetries?: number;\n timeout?: number;\n rateLimiter?: RateLimiter;\n }) {\n super();\n this.openAIProvider = new OpenAIProvider({\n baseURL,\n apiKey: config.apiKey,\n maxRetries: config.maxRetries,\n timeout: config.timeout,\n rateLimiter: config.rateLimiter,\n });\n }\n\n model(config: { model: string }): CallableLLM<OpenRouterProvider> {\n const openAICallable = this.openAIProvider.model({ model: config.model });\n this.updateModelsCache().catch(() => { });\n\n return {\n slug: config.model,\n provider: this,\n forward: async (\n args: CallableLLMForwardArgs\n ): Promise<LLMResponse> => {\n const response = await openAICallable.forward(args);\n\n const modelInfo = this.models?.data.find(\n (m) => m.id === config.model\n );\n let inputCost: string | undefined = undefined;\n let outputCost: string | undefined = undefined;\n\n if (modelInfo !== undefined) {\n if (response.inputTokensUsed !== undefined) {\n inputCost = new Decimal(modelInfo.pricing.prompt)\n .mul(response.inputTokensUsed)\n .toFixed(10);\n }\n if (response.outputTokensUsed !== undefined) {\n outputCost = new Decimal(modelInfo.pricing.completion)\n .mul(response.outputTokensUsed)\n .toFixed(10);\n }\n }\n\n return { ...response, inputCost, outputCost };\n },\n };\n }\n\n private async updateModelsCache() {\n this.modelsCachePromise = this.modelsCachePromise\n .then(async () => {\n if (\n this.models !== undefined &&\n Date.now() - this.modelsUpdatedAt < MODELS_CACHE_TTL\n ) {\n return this.models;\n }\n\n return axios\n .get<ModelsResponse>(`${baseURL}/models`)\n .then((res) => res.data)\n .then((data) => {\n data = {\n data: data.data.filter(\n (m) =>\n m.architecture.input_modalities.includes(\"text\") &&\n m.architecture.output_modalities.includes(\"text\") &&\n ![\n \"morph/morph-v3-large\",\n \"morph/morph-v3-fast\",\n \"relace/relace-apply-3\",\n ].includes(m.id)\n ),\n };\n\n this.models = data;\n this.modelsUpdatedAt = Date.now();\n\n return data;\n });\n })\n .catch(() => undefined);\n\n await this.modelsCachePromise;\n }\n}\n\ntype PutModality = \"text\" | \"image\" | \"file\" | \"audio\";\ntype Modality = \"text->text\" | \"text+image->text\" | \"text+image->text+image\";\n\ntype ModelInfo = {\n readonly id: string;\n readonly canonical_slug: string;\n readonly hugging_face_id: null | string;\n readonly name: string;\n readonly created: number;\n readonly description: string;\n readonly context_length: number;\n readonly architecture: {\n readonly modality: Modality;\n readonly input_modalities: PutModality[];\n readonly output_modalities: PutModality[];\n readonly instruct_type: null | string;\n };\n readonly pricing: {\n readonly prompt: string;\n readonly completion: string;\n readonly request?: string;\n readonly image?: string;\n readonly web_search?: string;\n readonly internal_reasoning?: string;\n readonly input_cache_read?: string;\n readonly input_cache_write?: string;\n readonly audio?: string;\n };\n};\n\ntype ModelsResponse = {\n data: ModelInfo[];\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/providers/abstract.ts","../../src/providers/mastra.ts","../../src/providers/openai.ts","../../src/providers/openrouter.ts","../../src/providers/ai-sdk.ts"],"sourcesContent":["export abstract class AbstractProvider {\n readonly kind: string;\n\n constructor() {\n this.kind = (this.constructor as any).kind;\n if (!this.kind)\n throw new Error(\n `${this.constructor.name} must define \"static readonly kind\" as a constant property.`\n );\n }\n static withKind<\n TKind extends string,\n TThis extends abstract new (...args: any[]) => AbstractProvider,\n >(this: TThis, kind: TKind) {\n const base = this as unknown as new (...args: any[]) => any;\n const derived = class extends base {\n static readonly kind: TKind = kind;\n declare readonly kind: TKind;\n };\n\n return derived as unknown as (new () => InstanceType<TThis> & {\n readonly kind: TKind;\n }) & {\n readonly kind: TKind;\n };\n }\n}\n\nexport type ProviderResponse<TData = unknown> = {\n startedAt: number;\n completedAt: number;\n data: TData;\n};\n","import { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport { AbstractProvider } from \"./abstract\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\nimport { MastraClient, type GetAgentResponse } from \"@mastra/client-js\";\nimport type { RequestContext } from \"@mastra/core/request-context\";\nimport { AgentMemoryOption } from \"@mastra/core/agent\";\nimport { ProviderOptions } from \"@mastra/core/dist/llm/model/provider-options\";\nimport { CoreMessage } from \"@mastra/core/llm\";\n\nexport class MastraProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/mastra`\n) {\n private readonly endpoint: string;\n private readonly authToken?: string;\n private client: MastraClient;\n\n constructor(params: { endpoint: string; authToken?: string }) {\n super();\n this.endpoint = params.endpoint;\n this.authToken = params.authToken;\n this.client = new MastraClient({\n baseUrl: this.endpoint,\n headers: this.authToken\n ? {\n Authorization: `Bearer ${this.authToken}`,\n }\n : undefined,\n });\n }\n\n async getAgentInfo(args: {\n agentId: string;\n requestContext?: RequestContext;\n }) {\n return await this.client\n .getAgent(args.agentId)\n .details(args.requestContext);\n }\n\n async getAgents(params?: {\n requestContext?: RequestContext;\n partial?: boolean;\n }): Promise<Record<string, GetAgentResponse>> {\n return this.client.listAgents(params?.requestContext, params?.partial);\n }\n\n agent(config: {\n agentId: string;\n memory?: AgentMemoryOption;\n requestContext?: RequestContext;\n providerOptions?: ProviderOptions;\n }): CallableLLM<MastraProvider> {\n return {\n slug: config.agentId,\n provider: this,\n forward: async (\n args: CallableLLMForwardArgs\n ): Promise<LLMResponse> => {\n const apiMessages = args.messages\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map<CoreMessage>((m) => ({\n role: m.role,\n content: String(m.content ?? \"\"),\n }));\n\n const agent = this.client.getAgent(config.agentId);\n const startedAt = Date.now();\n\n const response = await agent.stream(\n apiMessages,\n {\n providerOptions: config.providerOptions,\n memory: config.memory,\n requestContext: config.requestContext,\n }\n );\n\n let text = \"\";\n let firstTokenAt: number | undefined;\n let inputTokensUsed: number | undefined;\n let outputTokensUsed: number | undefined;\n const metadata: Record<string, unknown> = {};\n\n await response.processDataStream({\n onChunk: async (chunk) => {\n if (chunk.type === \"text-delta\") {\n if (firstTokenAt === undefined) {\n firstTokenAt = Date.now();\n }\n const payload = chunk.payload as { text?: string };\n text += payload.text ?? \"\";\n }\n\n if (chunk.type === \"finish\") {\n const payload = chunk.payload as {\n output?: {\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n };\n };\n };\n inputTokensUsed = payload.output?.usage?.inputTokens;\n outputTokensUsed = payload.output?.usage?.outputTokens;\n }\n },\n });\n\n return {\n data: text,\n startedAt,\n completedAt: Date.now(),\n inputTokensUsed,\n outputTokensUsed,\n timeToFirstToken:\n firstTokenAt !== undefined ? firstTokenAt - startedAt : undefined,\n metadata:\n Object.keys(metadata).length > 0 ? metadata : undefined,\n };\n },\n };\n }\n}\n","import { RateLimiter } from \"@/utils\";\nimport OpenAI, { APIError } from \"openai\";\nimport { AbstractProvider } from \"./abstract\";\nimport { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\n\n/**\n * Provider implementation that uses OpenAI SDK. It can be used with\n * any OpenAI compatible API.\n *\n * @example\n * ```ts\n * const provider = new OpenAIProvider({\n * apiKey: \"sk-1234567890\",\n * baseURL: \"https://openrouter.ai/api/v1\",\n * });\n * \n * const model = provider.model({ model: \"gpt-4o\" });\n * \n * const response = await model.forward({\n * messages: [{ role: \"user\", content: \"Hello, how are you?\" }],\n * });\n * \n * console.log(response.data);\n * ```\n */\nexport class OpenAIProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/openai`\n) {\n private client: OpenAI;\n private rateLimiter: RateLimiter;\n private maxRetries: number;\n\n constructor(config: {\n apiKey: string;\n baseURL: string;\n maxRetries?: number;\n timeout?: number;\n rateLimiter?: RateLimiter;\n }) {\n super();\n this.maxRetries = config.maxRetries ?? 3;\n this.rateLimiter =\n config.rateLimiter ??\n new RateLimiter({\n maxWeight: 20,\n timeWindow: 3_000,\n });\n\n this.client = new OpenAI({\n baseURL: config.baseURL,\n apiKey: config.apiKey,\n timeout: config.timeout,\n dangerouslyAllowBrowser: true,\n });\n }\n\n model(config: { model: string }): CallableLLM<OpenAIProvider> {\n return {\n slug: config.model,\n provider: this,\n forward: async (args: CallableLLMForwardArgs): Promise<LLMResponse> => {\n let retryCount = this.maxRetries;\n while (retryCount > 0) {\n let startedAt: Date = new Date();\n\n try {\n const response = await this.rateLimiter.execute(\n async () => {\n startedAt = new Date();\n return await this.client.chat.completions.create(\n {\n model: config.model,\n messages: args.messages,\n temperature: args.temperature,\n response_format: args.responseFormat,\n },\n { signal: args.abortSignal }\n );\n },\n { signal: args.abortSignal }\n );\n\n if (\"error\" in response) {\n const err = response.error as any;\n throw new Error(\n `${err.message} - Code ${err.code} - ${JSON.stringify(err)}`\n );\n }\n\n if (!response?.choices?.[0]?.message?.content) {\n throw new Error(\"No content returned from the model\");\n }\n\n return {\n data: response.choices[0].message.content,\n inputTokensUsed: response?.usage?.prompt_tokens,\n outputTokensUsed: response?.usage?.completion_tokens,\n startedAt: startedAt.getTime(),\n completedAt: Date.now(),\n };\n } catch (err) {\n if (err instanceof APIError && err.status === 401) {\n throw new Error(`Invalid credentials provided`, { cause: err });\n }\n\n retryCount--;\n\n if (err instanceof SyntaxError) {\n console.debug(err);\n continue;\n }\n\n if (retryCount !== 0) {\n continue;\n }\n\n throw new Error(\n `Failed to forward prompt to the model: ${err instanceof Error ? err.message : err}`,\n { cause: err }\n );\n }\n }\n\n throw new Error(\n `Failed to forward prompt to the model: Max retries reached`,\n { cause: new Error(\"Max retries reached\") }\n );\n },\n };\n }\n}\n","import { AbstractProvider } from \"./abstract\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\nimport { RateLimiter } from \"@/utils\";\nimport { OpenAIProvider } from \"./openai\";\nimport { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport Decimal from \"decimal.js\";\nimport axios from \"axios\";\n\nconst baseURL = \"https://openrouter.ai/api/v1\";\nconst MODELS_CACHE_TTL = 1000 * 60 * 60 * 24; // 24 hours\n\nexport class OpenRouterProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/openrouter.ai`\n) {\n private models: ModelsResponse | undefined = undefined;\n private modelsCachePromise: Promise<ModelsResponse | undefined> =\n Promise.resolve(undefined);\n private modelsUpdatedAt = 0;\n private openAIProvider: OpenAIProvider;\n\n constructor(config: {\n apiKey: string;\n maxRetries?: number;\n timeout?: number;\n rateLimiter?: RateLimiter;\n }) {\n super();\n this.openAIProvider = new OpenAIProvider({\n baseURL,\n apiKey: config.apiKey,\n maxRetries: config.maxRetries,\n timeout: config.timeout,\n rateLimiter: config.rateLimiter,\n });\n }\n\n model(config: { model: string }): CallableLLM<OpenRouterProvider> {\n const openAICallable = this.openAIProvider.model({ model: config.model });\n this.updateModelsCache().catch(() => { });\n\n return {\n slug: config.model,\n provider: this,\n forward: async (\n args: CallableLLMForwardArgs\n ): Promise<LLMResponse> => {\n const response = await openAICallable.forward(args);\n\n const modelInfo = this.models?.data.find(\n (m) => m.id === config.model\n );\n let inputCost: string | undefined = undefined;\n let outputCost: string | undefined = undefined;\n\n if (modelInfo !== undefined) {\n if (response.inputTokensUsed !== undefined) {\n inputCost = new Decimal(modelInfo.pricing.prompt)\n .mul(response.inputTokensUsed)\n .toFixed(10);\n }\n if (response.outputTokensUsed !== undefined) {\n outputCost = new Decimal(modelInfo.pricing.completion)\n .mul(response.outputTokensUsed)\n .toFixed(10);\n }\n }\n\n return { ...response, inputCost, outputCost };\n },\n };\n }\n\n private async updateModelsCache() {\n this.modelsCachePromise = this.modelsCachePromise\n .then(async () => {\n if (\n this.models !== undefined &&\n Date.now() - this.modelsUpdatedAt < MODELS_CACHE_TTL\n ) {\n return this.models;\n }\n\n return axios\n .get<ModelsResponse>(`${baseURL}/models`)\n .then((res) => res.data)\n .then((data) => {\n data = {\n data: data.data.filter(\n (m) =>\n m.architecture.input_modalities.includes(\"text\") &&\n m.architecture.output_modalities.includes(\"text\") &&\n ![\n \"morph/morph-v3-large\",\n \"morph/morph-v3-fast\",\n \"relace/relace-apply-3\",\n ].includes(m.id)\n ),\n };\n\n this.models = data;\n this.modelsUpdatedAt = Date.now();\n\n return data;\n });\n })\n .catch(() => undefined);\n\n await this.modelsCachePromise;\n }\n}\n\ntype PutModality = \"text\" | \"image\" | \"file\" | \"audio\";\ntype Modality = \"text->text\" | \"text+image->text\" | \"text+image->text+image\";\n\ntype ModelInfo = {\n readonly id: string;\n readonly canonical_slug: string;\n readonly hugging_face_id: null | string;\n readonly name: string;\n readonly created: number;\n readonly description: string;\n readonly context_length: number;\n readonly architecture: {\n readonly modality: Modality;\n readonly input_modalities: PutModality[];\n readonly output_modalities: PutModality[];\n readonly instruct_type: null | string;\n };\n readonly pricing: {\n readonly prompt: string;\n readonly completion: string;\n readonly request?: string;\n readonly image?: string;\n readonly web_search?: string;\n readonly internal_reasoning?: string;\n readonly input_cache_read?: string;\n readonly input_cache_write?: string;\n readonly audio?: string;\n };\n};\n\ntype ModelsResponse = {\n data: ModelInfo[];\n};\n","import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport { generateText, streamText } from \"ai\";\nimport { RateLimiter } from \"@/utils\";\nimport { AbstractProvider } from \"./abstract\";\nimport { PEERBENCH_NAMESPACE } from \"@/constants\";\nimport {\n type CallableLLM,\n type LLMResponse,\n type CallableLLMForwardArgs,\n} from \"./callables/llm\";\n\nfunction toModelMessages(messages: CallableLLMForwardArgs[\"messages\"]) {\n return messages\n .filter(\n (m) => m.role === \"system\" || m.role === \"user\" || m.role === \"assistant\"\n )\n .map((m) => ({\n role: m.role as \"system\" | \"user\" | \"assistant\",\n content:\n typeof m.content === \"string\"\n ? m.content\n : JSON.stringify(m.content ?? \"\"),\n }));\n}\n\nlet aiModuleCache: Record<string, unknown> | null = null;\n\nasync function buildOutputOption(\n responseFormat: CallableLLMForwardArgs[\"responseFormat\"]\n): Promise<unknown> {\n if (!responseFormat || responseFormat.type === \"text\") {\n return undefined;\n }\n\n if (!aiModuleCache) {\n aiModuleCache = (await import(\"ai\")) as unknown as Record<string, unknown>;\n }\n\n const Output = aiModuleCache[\"Output\"] as\n | {\n object: (opts: { schema: unknown }) => unknown;\n json: () => unknown;\n }\n | undefined;\n const jsonSchema = aiModuleCache[\"jsonSchema\"] as\n | ((schema: unknown) => unknown)\n | undefined;\n\n if (!Output || !jsonSchema) {\n return undefined;\n }\n\n if (responseFormat.type === \"json_schema\") {\n return Output.object({\n schema: jsonSchema(responseFormat.json_schema.schema),\n });\n }\n\n if (responseFormat.type === \"json_object\") {\n return Output.json();\n }\n\n return undefined;\n}\n\nexport class AISdkProvider extends AbstractProvider.withKind(\n `${PEERBENCH_NAMESPACE}/llm/ai-sdk`\n) {\n private rateLimiter: RateLimiter;\n private maxRetries: number;\n\n constructor(config?: AISdkProviderConfig) {\n super();\n this.maxRetries = config?.maxRetries ?? 2;\n this.rateLimiter =\n config?.rateLimiter ??\n new RateLimiter({\n maxWeight: 20,\n timeWindow: 3_000,\n });\n }\n\n model(config: AISdkModelConfig): CallableLLM<AISdkProvider> {\n const slug = `${config.aiSdkModel.provider}/${config.aiSdkModel.modelId}`;\n\n return {\n slug,\n provider: this,\n forward: async (args: CallableLLMForwardArgs): Promise<LLMResponse> => {\n const messages = toModelMessages(args.messages);\n const output = await buildOutputOption(args.responseFormat);\n\n const baseOptions = {\n model: config.aiSdkModel,\n messages,\n temperature: args.temperature,\n maxOutputTokens: args.maxTokens,\n abortSignal: args.abortSignal,\n maxRetries: this.maxRetries,\n };\n\n if (config.stream) {\n let startedAt!: number;\n const result = await this.rateLimiter.execute(\n async () => {\n startedAt = Date.now();\n return streamText({\n ...baseOptions,\n ...(output !== undefined ? { output } : {}),\n } as any);\n },\n { signal: args.abortSignal }\n );\n\n let text = \"\";\n let firstTokenAt: number | undefined;\n\n for await (const chunk of result.textStream) {\n if (firstTokenAt === undefined) {\n firstTokenAt = Date.now();\n }\n text += chunk;\n }\n\n const usage = await result.usage;\n\n return {\n data: text,\n startedAt,\n completedAt: Date.now(),\n inputTokensUsed: usage.inputTokens,\n outputTokensUsed: usage.outputTokens,\n timeToFirstToken:\n firstTokenAt !== undefined ? firstTokenAt - startedAt : undefined,\n };\n }\n\n let startedAt!: number;\n const result = await this.rateLimiter.execute(\n async () => {\n startedAt = Date.now();\n return generateText({\n ...baseOptions,\n ...(output !== undefined ? { output } : {}),\n } as any);\n },\n { signal: args.abortSignal }\n );\n\n return {\n data: result.text,\n startedAt,\n completedAt: Date.now(),\n inputTokensUsed: result.usage.inputTokens,\n outputTokensUsed: result.usage.outputTokens,\n };\n },\n };\n }\n}\n\ntype AISdkProviderConfig = {\n rateLimiter?: RateLimiter;\n maxRetries?: number;\n};\n\ntype AISdkModelConfig = {\n aiSdkModel: LanguageModelV3;\n stream?: boolean;\n};\n"],"mappings":"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","names":["startedAt","result"]}
|
|
@@ -12,3 +12,20 @@ export declare const ExtensionLLMResponseFieldsV1: {
|
|
|
12
12
|
inputCost: z.ZodOptional<z.ZodString>;
|
|
13
13
|
outputCost: z.ZodOptional<z.ZodString>;
|
|
14
14
|
};
|
|
15
|
+
export declare function LLMResponseFieldsV1<TRawDataField extends boolean = false>(params?: {
|
|
16
|
+
/**
|
|
17
|
+
* If `true` then the `data` field (which is a `z.string()`)
|
|
18
|
+
* will be included in the returned fields
|
|
19
|
+
*/
|
|
20
|
+
withRawDataField?: TRawDataField;
|
|
21
|
+
}): {
|
|
22
|
+
modelSlug: z.ZodString;
|
|
23
|
+
provider: z.ZodString;
|
|
24
|
+
systemPromptId: z.ZodOptional<z.ZodString>;
|
|
25
|
+
inputTokensUsed: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
outputTokensUsed: z.ZodOptional<z.ZodNumber>;
|
|
27
|
+
inputCost: z.ZodOptional<z.ZodString>;
|
|
28
|
+
outputCost: z.ZodOptional<z.ZodString>;
|
|
29
|
+
} & (TRawDataField extends true ? {
|
|
30
|
+
data: z.ZodString;
|
|
31
|
+
} : {});
|
|
@@ -6,7 +6,7 @@ export declare const SimpleSystemPromptSchemaV1: z.ZodObject<Omit<{
|
|
|
6
6
|
schemaVersion: z.ZodNumber;
|
|
7
7
|
version: z.ZodNumber;
|
|
8
8
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
9
|
-
}, "kind" | "
|
|
9
|
+
}, "kind" | "schemaVersion" | "namespace"> & {
|
|
10
10
|
content: z.ZodString;
|
|
11
11
|
} & {
|
|
12
12
|
namespace: z.ZodLiteral<"peerbench.ai">;
|
|
@@ -21,7 +21,7 @@ export declare const SimpleSystemPromptSchemaV1: z.ZodObject<Omit<{
|
|
|
21
21
|
kind: `${string}/simple.sys-prompt`;
|
|
22
22
|
schemaVersion: 1;
|
|
23
23
|
metadata?: Record<string, unknown> | undefined;
|
|
24
|
-
}, "kind" | "
|
|
24
|
+
}, "kind" | "schemaVersion" | "namespace">) => {
|
|
25
25
|
id: string;
|
|
26
26
|
version: number;
|
|
27
27
|
content: string;
|
|
@@ -38,7 +38,7 @@ export declare const SimpleSystemPromptSchemaV1: z.ZodObject<Omit<{
|
|
|
38
38
|
kind: `${string}/simple.sys-prompt`;
|
|
39
39
|
schemaVersion: 1;
|
|
40
40
|
metadata?: Record<string, unknown> | undefined;
|
|
41
|
-
}, "
|
|
41
|
+
}, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../index.js").IdGenerator): Promise<{
|
|
42
42
|
id: string;
|
|
43
43
|
version: number;
|
|
44
44
|
content: string;
|
|
@@ -25,33 +25,33 @@ export declare const defineSystemPromptSchema: <TBaseSchema extends import("../.
|
|
|
25
25
|
fields?: TFields | undefined;
|
|
26
26
|
}) => (TBaseSchema extends z.ZodObject<infer U extends Readonly<{
|
|
27
27
|
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
28
|
-
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "
|
|
28
|
+
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "schemaVersion" | "namespace"> & TFields & {
|
|
29
29
|
namespace: TNamespace extends undefined ? U["namespace"] : z.ZodLiteral<TNamespace>;
|
|
30
30
|
kind: TKind extends undefined ? U["kind"] : z.ZodLiteral<`${TKind}.sys-prompt`>;
|
|
31
31
|
schemaVersion: TSchemaVersion extends undefined ? U["schemaVersion"] : z.ZodLiteral<TSchemaVersion>;
|
|
32
32
|
}, z.core.$strip> : never) & {
|
|
33
33
|
new: (input: Omit<z.core.output<TBaseSchema extends z.ZodObject<infer U extends Readonly<{
|
|
34
34
|
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
35
|
-
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "
|
|
35
|
+
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "schemaVersion" | "namespace"> & TFields & {
|
|
36
36
|
namespace: TNamespace extends undefined ? U["namespace"] : z.ZodLiteral<TNamespace>;
|
|
37
37
|
kind: TKind extends undefined ? U["kind"] : z.ZodLiteral<`${TKind}.sys-prompt`>;
|
|
38
38
|
schemaVersion: TSchemaVersion extends undefined ? U["schemaVersion"] : z.ZodLiteral<TSchemaVersion>;
|
|
39
|
-
}, z.core.$strip> : never>, "kind" | "
|
|
39
|
+
}, z.core.$strip> : never>, "kind" | "schemaVersion" | "namespace">) => z.core.output<TBaseSchema extends z.ZodObject<infer U extends Readonly<{
|
|
40
40
|
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
41
|
-
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "
|
|
41
|
+
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "schemaVersion" | "namespace"> & TFields & {
|
|
42
42
|
namespace: TNamespace extends undefined ? U["namespace"] : z.ZodLiteral<TNamespace>;
|
|
43
43
|
kind: TKind extends undefined ? U["kind"] : z.ZodLiteral<`${TKind}.sys-prompt`>;
|
|
44
44
|
schemaVersion: TSchemaVersion extends undefined ? U["schemaVersion"] : z.ZodLiteral<TSchemaVersion>;
|
|
45
45
|
}, z.core.$strip> : never>;
|
|
46
46
|
newWithId(input: Omit<z.core.output<TBaseSchema extends z.ZodObject<infer U extends Readonly<{
|
|
47
47
|
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
48
|
-
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "
|
|
48
|
+
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "schemaVersion" | "namespace"> & TFields & {
|
|
49
49
|
namespace: TNamespace extends undefined ? U["namespace"] : z.ZodLiteral<TNamespace>;
|
|
50
50
|
kind: TKind extends undefined ? U["kind"] : z.ZodLiteral<`${TKind}.sys-prompt`>;
|
|
51
51
|
schemaVersion: TSchemaVersion extends undefined ? U["schemaVersion"] : z.ZodLiteral<TSchemaVersion>;
|
|
52
|
-
}, z.core.$strip> : never>, "
|
|
52
|
+
}, z.core.$strip> : never>, "id" | "kind" | "schemaVersion" | "namespace">, generator: import("../../index.js").IdGenerator): Promise<z.core.output<TBaseSchema extends z.ZodObject<infer U extends Readonly<{
|
|
53
53
|
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
54
|
-
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "
|
|
54
|
+
}>, z.core.$strip> ? z.ZodObject<Omit<U, "kind" | "schemaVersion" | "namespace"> & TFields & {
|
|
55
55
|
namespace: TNamespace extends undefined ? U["namespace"] : z.ZodLiteral<TNamespace>;
|
|
56
56
|
kind: TKind extends undefined ? U["kind"] : z.ZodLiteral<`${TKind}.sys-prompt`>;
|
|
57
57
|
schemaVersion: TSchemaVersion extends undefined ? U["schemaVersion"] : z.ZodLiteral<TSchemaVersion>;
|