2023-06-13 10:49:53 +09:00
|
|
|
import {EventStream, getTokenSize} from "../utils";
|
2023-05-05 10:57:42 +09:00
|
|
|
|
|
|
|
export interface ChatOptions {
|
|
|
|
}
|
|
|
|
|
2023-06-13 10:49:53 +09:00
|
|
|
export interface ChatResponse {
|
|
|
|
content?: string;
|
|
|
|
error?: string;
|
2023-05-05 10:57:42 +09:00
|
|
|
}
|
|
|
|
|
2023-06-13 10:49:53 +09:00
|
|
|
export type Message = {
|
|
|
|
role: string;
|
|
|
|
content: string;
|
2023-05-05 10:57:42 +09:00
|
|
|
}
|
|
|
|
|
2023-06-13 10:49:53 +09:00
|
|
|
export enum ModelType {
|
2023-06-13 11:42:33 +09:00
|
|
|
GPT3p5Turbo = 'gpt3.5-turbo',
|
2023-06-13 10:49:53 +09:00
|
|
|
GPT4 = 'gpt4',
|
2023-06-15 00:08:15 +09:00
|
|
|
NetGpt3p5 = 'net-gpt3.5-turbo',
|
2023-06-13 10:49:53 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface ChatRequest {
|
2023-05-05 10:57:42 +09:00
|
|
|
prompt: string;
|
2023-06-13 10:49:53 +09:00
|
|
|
model: ModelType;
|
|
|
|
}
|
|
|
|
|
2023-06-13 11:10:29 +09:00
|
|
|
export function PromptToString(prompt: string, limit: number): string {
|
|
|
|
try {
|
|
|
|
const messages: Message[] = JSON.parse(prompt);
|
|
|
|
let result: Message[] = [];
|
|
|
|
let tokenSize = 0;
|
|
|
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
|
|
const item = messages[i];
|
|
|
|
const {role, content} = item;
|
|
|
|
tokenSize += getTokenSize(content);
|
|
|
|
if (tokenSize > limit) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
result.push(item);
|
2023-06-13 10:49:53 +09:00
|
|
|
}
|
2023-06-13 11:10:29 +09:00
|
|
|
return `${result.reverse().map(item => `${item.role}
|
|
|
|
: ${item.content}
|
|
|
|
`).join('\n')}\nassistant: `;
|
|
|
|
} catch (e) {
|
|
|
|
return prompt;
|
2023-06-13 10:49:53 +09:00
|
|
|
}
|
2023-05-05 10:57:42 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
export abstract class Chat {
|
2023-05-07 01:30:22 +09:00
|
|
|
protected options: ChatOptions | undefined;
|
2023-05-05 10:57:42 +09:00
|
|
|
|
2023-05-05 19:36:27 +09:00
|
|
|
protected constructor(options?: ChatOptions) {
|
2023-05-07 01:30:22 +09:00
|
|
|
this.options = options;
|
2023-05-05 10:57:42 +09:00
|
|
|
}
|
|
|
|
|
2023-06-13 10:49:53 +09:00
|
|
|
public abstract support(model: ModelType): number
|
|
|
|
|
|
|
|
public abstract ask(req: ChatRequest): Promise<ChatResponse>
|
2023-05-05 10:57:42 +09:00
|
|
|
|
2023-06-13 10:49:53 +09:00
|
|
|
public abstract askStream(req: ChatRequest, stream: EventStream): Promise<void>
|
2023-05-05 10:57:42 +09:00
|
|
|
}
|