-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
openai-chat.ts
101 lines (83 loc) · 2.58 KB
/
openai-chat.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
100
101
import { OpenAIChat } from "@langchain/openai";
import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
import type { Generation, LLMResult } from "@langchain/core/outputs";
import { getEnvironmentVariable } from "@langchain/core/utils/env";
import { promptLayerTrackRequest } from "../util/prompt-layer.js";
export {
type AzureOpenAIInput,
type OpenAICallOptions,
type OpenAIInput,
type OpenAIChatCallOptions,
} from "@langchain/openai";
export { OpenAIChat };
/**
* PromptLayer wrapper to OpenAIChat
* @deprecated
*/
export class PromptLayerOpenAIChat extends OpenAIChat {
get lc_secrets(): { [key: string]: string } | undefined {
return {
promptLayerApiKey: "PROMPTLAYER_API_KEY",
};
}
lc_serializable = false;
promptLayerApiKey?: string;
plTags?: string[];
returnPromptLayerId?: boolean;
constructor(
fields?: ConstructorParameters<typeof OpenAIChat>[0] & {
promptLayerApiKey?: string;
plTags?: string[];
returnPromptLayerId?: boolean;
}
) {
super(fields);
this.plTags = fields?.plTags ?? [];
this.returnPromptLayerId = fields?.returnPromptLayerId ?? false;
this.promptLayerApiKey =
fields?.promptLayerApiKey ??
getEnvironmentVariable("PROMPTLAYER_API_KEY");
if (!this.promptLayerApiKey) {
throw new Error("Missing PromptLayer API key");
}
}
async _generate(
prompts: string[],
options: this["ParsedCallOptions"],
runManager?: CallbackManagerForLLMRun
): Promise<LLMResult> {
let choice: Generation[];
const generations: Generation[][] = await Promise.all(
prompts.map(async (prompt) => {
const requestStartTime = Date.now();
const text = await this._call(prompt, options, runManager);
const requestEndTime = Date.now();
choice = [{ text }];
const parsedResp = {
text,
};
const promptLayerRespBody = await promptLayerTrackRequest(
this.caller,
"langchain.PromptLayerOpenAIChat",
// eslint-disable-next-line @typescript-eslint/no-explicit-any
{ ...this._identifyingParams(), prompt } as any,
this.plTags,
parsedResp,
requestStartTime,
requestEndTime,
this.promptLayerApiKey
);
if (
this.returnPromptLayerId === true &&
promptLayerRespBody.success === true
) {
choice[0].generationInfo = {
promptLayerRequestId: promptLayerRespBody.request_id,
};
}
return choice;
})
);
return { generations };
}
}