AISR / backend /provider /tencent.ts
zhzabcd's picture
Upload 101 files
755dd12 verified
raw
history blame
2.07 kB
import * as tencentcloud from 'tencentcloud-sdk-nodejs';
import { ClientConfig } from 'tencentcloud-sdk-nodejs/tencentcloud/common/interface';
import { Client } from 'tencentcloud-sdk-nodejs/tencentcloud/services/hunyuan/v20230901/hunyuan_client';
import { ChatStdResponse } from 'tencentcloud-sdk-nodejs/tencentcloud/services/hunyuan/v20230901/hunyuan_models';
import { BaseChat } from './base/base';
import { IChatInputMessage, IStreamHandler } from '../interface';
import { DefaultSystem } from '../utils/constant';
export class TencentChat implements BaseChat {
private client: Client;
public platform = 'tencent';
constructor() {
const key = process.env.TENCENT_KEY;
const secret = process.env.TENCENT_SECRET;
const config: ClientConfig = {
credential: {
secretId: key,
secretKey: secret
},
region: '',
profile: {
httpProfile: {
endpoint: 'hunyuan.tencentcloudapi.com'
}
}
};
this.client = new tencentcloud.hunyuan.v20230901.Client(config);
}
async chatStream(
messages: IChatInputMessage[],
onMessage: IStreamHandler,
model: string,
system = DefaultSystem
): Promise<void> {
const Messages = this.transformMessage(messages);
console.log(model);
if (system) {
Messages.unshift({
Role: 'system',
Content: system
});
}
const result: any = await this.client.ChatStd({
Messages
});
return new Promise((resolve) => {
result.on('message', (res: any) => {
const data: ChatStdResponse = JSON.parse(res.data ?? '{}');
const text = data.Choices?.[0].Delta?.Content || '';
const stop = data.Choices?.[0].FinishReason === 'stop' ? true : false;
onMessage?.(text, stop);
if (stop) resolve();
});
});
}
private transformMessage(messages: IChatInputMessage[]) {
return messages.map(msg => {
return {
Role: msg.role,
Content: msg.content
};
});
}
}
export const tencent = new TencentChat();