-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
Copy pathbase.ts
99 lines (88 loc) · 2.76 KB
/
base.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import {
BaseChatModel,
BaseChatModelCallOptions,
} from "@langchain/core/language_models/chat_models";
import { BaseMessageChunk } from "@langchain/core/messages";
export type RecordStringAny = Record<string, any>;
export type BaseChatModelConstructor<
CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,
OutputMessageType extends BaseMessageChunk = BaseMessageChunk,
ConstructorArgs extends RecordStringAny = RecordStringAny
> = new (args: ConstructorArgs) => BaseChatModel<
CallOptions,
OutputMessageType
>;
export type BaseChatModelsTestsFields<
CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,
OutputMessageType extends BaseMessageChunk = BaseMessageChunk,
ConstructorArgs extends RecordStringAny = RecordStringAny
> = {
Cls: BaseChatModelConstructor<
CallOptions,
OutputMessageType,
ConstructorArgs
>;
chatModelHasToolCalling: boolean;
chatModelHasStructuredOutput: boolean;
constructorArgs: ConstructorArgs;
supportsStandardContentType?: Partial<{
text: boolean;
image: ("url" | "dataUrl" | "base64" | "id")[];
audio: ("url" | "dataUrl" | "base64" | "id")[];
file: ("url" | "dataUrl" | "base64" | "id")[];
}>;
};
export class BaseChatModelsTests<
CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions,
OutputMessageType extends BaseMessageChunk = BaseMessageChunk,
ConstructorArgs extends RecordStringAny = RecordStringAny
> implements
BaseChatModelsTestsFields<CallOptions, OutputMessageType, ConstructorArgs>
{
Cls: BaseChatModelConstructor<
CallOptions,
OutputMessageType,
ConstructorArgs
>;
chatModelHasToolCalling: boolean;
chatModelHasStructuredOutput: boolean;
constructorArgs: ConstructorArgs;
supportsStandardContentType?: Partial<{
text: boolean;
image: ("url" | "dataUrl" | "base64" | "id")[];
audio: ("url" | "dataUrl" | "base64" | "id")[];
file: ("url" | "dataUrl" | "base64" | "id")[];
}>;
constructor(
fields: BaseChatModelsTestsFields<
CallOptions,
OutputMessageType,
ConstructorArgs
>
) {
this.Cls = fields.Cls;
this.chatModelHasToolCalling = fields.chatModelHasToolCalling;
this.chatModelHasStructuredOutput = fields.chatModelHasStructuredOutput;
this.constructorArgs = fields.constructorArgs;
this.supportsStandardContentType = fields.supportsStandardContentType;
}
get multipleApiKeysRequiredMessage(): string {
return "Multiple API keys are required.";
}
/**
* Log a warning message when skipping a test.
*/
skipTestMessage(
testName: string,
chatClassName: string,
extra?: string
): void {
console.warn(
{
chatClassName,
reason: extra ?? "n/a",
},
`Skipping ${testName}.`
);
}
}