import { Injectable } from '@nestjs/common' import { RunPromptDto } from '@/dto/agent-server' import { IAgentServerService } from '@/interface/agent-server.interface' import { ServiceResponse } from '@/response/response.interface' import { BusinessCode, HttpStatusCode } from '@/response/status-code.enum' import { AgentServerHttpService } from './agent-server-http.service' @Injectable() export class AgentServerService implements IAgentServerService { constructor(private readonly httpService: AgentServerHttpService) {} async listStaffs(): Promise> { const { code, data, msg } = await this.httpService.listStaffs() if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取客服列表失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取客服列表成功', data: data } } async listScenes(): Promise> { const { code, data, msg } = await this.httpService.listScenes() if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取场景列表失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取场景列表成功', data: data } } async listModels(): Promise> { const { code, data, msg } = await this.httpService.listModels() if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取模型列表失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取模型列表成功', data: data } } async getBasePrompt(scene: string): Promise> { const { code, data, msg } = await this.httpService.getBasePrompt(scene) if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取基础提示词失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取基础提示词成功', data: data } } async getDialogueHistory( staffId: string, userName: string, unionId: string, recentMinutes: string ): Promise> { const user = await this.httpServiceListUsers(userName, unionId) if (user.length === 0) { return { code: BusinessCode.BAD_REQUEST, msg: '用户不存在', data: null } } const dialogueHistory = await Promise.all( user.map(async (user) => { const res = await this.getDialogueHistoryByUserId( staffId, user, recentMinutes ) return res }) ) return { code: BusinessCode.SUCCESS, msg: '获取对话历史成功', data: dialogueHistory } } async httpServiceListUsers( userName: string, unionId: string ): Promise { const res = await this.httpService.listUsers(userName, unionId) if (res.code !== HttpStatusCode.OK) { return [] } return res.data } async getDialogueHistoryByUserId( staffId: string, user: UserProfile, recentMinutes: string ): Promise { const res = await this.httpService.getDialogueHistory( staffId, user.third_party_user_id, recentMinutes ) const userInfo: UserInfo = { ...user, history: res.data || [] } return userInfo } async getUserProfile(userId: string): Promise> { const { code, data, msg } = await this.httpService.getUserProfile(userId) if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取用户信息失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取用户信息成功', data: data } } async getStaffProfile( staffId: string ): Promise> { const { code, data, msg } = await this.httpService.getStaffProfile(staffId) if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取客服信息失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取客服信息成功', data: data } } async runPrompt(query: RunPromptDto): Promise> { const { code, data, msg } = await this.httpService.runPrompt({ scene: query.scene, prompt: query.prompt, staff_profile: query.staffProfile, user_profile: query.userProfile, dialogue_history: query.dialogueHistory, model_name: query.modelName, current_timestamp: query.currentTimestamp }) console.log(code, data, msg) if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '运行提示词失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '运行提示词成功', data: data } } async listUsers( userName: string, unionId: string ): Promise> { const { code, data, msg } = await this.httpService.listUsers( userName, unionId ) if (code !== HttpStatusCode.OK) { return { code: BusinessCode.BAD_REQUEST, msg: msg || '获取用户列表失败', data: null } } return { code: BusinessCode.SUCCESS, msg: '获取用户列表成功', data: data } } }