LaiTool/src/main/setting/gptSetting.ts

133 lines
4.2 KiB
TypeScript
Raw Normal View History

2024-07-13 15:44:13 +08:00
import path from 'path'
import os from 'os'
import { define } from '../../define/define'
2024-08-03 12:46:12 +08:00
import { errorMessage, successMessage } from '../Public/generalTools'
2024-07-13 15:44:13 +08:00
import axios from 'axios'
import { ServiceBase } from '../../define/db/service/serviceBase'
2024-08-03 12:46:12 +08:00
import { isEmpty } from 'lodash'
import { ValidateJson } from '../../define/Tools/validate'
2024-08-18 16:22:19 +08:00
import { SyncGptKeyType } from '../../define/enum/softwareEnum'
import { GeneralResponse } from '../../model/generalResponse'
import { SoftWareServiceBasic } from '../Service/ServiceBasic/softwareServiceBasic'
import { SubtitleService } from '../Service/Subtitle/subtitleService'
import { SubtitleModel } from '../../model/subtitle'
2024-07-13 15:44:13 +08:00
export class GptSetting extends ServiceBase {
2024-08-18 16:22:19 +08:00
softWareServiceBasic: SoftWareServiceBasic
subtitleService: SubtitleService
2024-07-13 15:44:13 +08:00
constructor() {
super()
axios.defaults.baseURL = define.serverUrl
2024-08-18 16:22:19 +08:00
this.softWareServiceBasic = new SoftWareServiceBasic();
this.subtitleService = new SubtitleService()
2024-07-13 15:44:13 +08:00
}
2024-08-04 15:00:00 +08:00
/**
*
* @returns
*/
async InitAISetting() {
let defaultData = {
laiapi: {
gpt_url: 'https://laitool.net/v1/chat/completions',
api_key: "请输入你的LAI API 的 Key",
model: "请输入你的LAI API 的 Model名称"
},
kimi: {
gpt_url: 'https://api.moonshot.cn/v1/chat/completions',
api_key: "请输入你的Kimi API 的 Key",
model: "请输入你的Kimi API 的 Model名称"
},
doubao: {
gpt_url: 'https://ark.cn-beijing.volces.com/api/v3/chat/completions',
api_key: "请输入你的Doubao API 的 Key",
model: "请输入你的Doubao API 的 Model名称"
}
}
await this.SaveAISetting(defaultData)
return defaultData
}
2024-07-13 15:44:13 +08:00
/**
*
*/
async InitServerGptOptions() {
try {
// 获取提示词类型数据
let promptRes = await axios.get('/api/Prompt/GetPromptType/100/1')
let promptType = promptRes.data.data
// 获取提示词数据
let prompt = await axios.get('/api/Prompt/GetPromptString/all/100/1')
let promptData = prompt.data.data
let gptOptions = {
promptType: promptType,
promptData: promptData
}
return successMessage(gptOptions, '请求成功', 'GptSetting_InitServerGptOptions')
} catch (error) {
return errorMessage(
'获取服务端提示词数据错误,错误信息如下:' + error.toString(),
'GptSetting_InitServerGptOptions'
)
}
}
// 获取软件设置里面的AI设置没有的话设置初始值
async GetAISetting() {
try {
await this.InitService()
2024-08-04 15:00:00 +08:00
let aiSetting = undefined
2024-07-13 15:44:13 +08:00
let res = this.softService.GetSoftWarePropertyData('aiSetting')
2024-08-03 12:46:12 +08:00
if (isEmpty(res)) {
2024-08-04 15:00:00 +08:00
aiSetting = await this.InitAISetting();
2024-07-13 15:44:13 +08:00
} else {
2024-08-03 12:46:12 +08:00
let tryP = ValidateJson(res)
if (!tryP) {
throw new Error('AI设置的数据格式不正确')
}
2024-08-04 15:00:00 +08:00
aiSetting = JSON.parse(res)
2024-07-13 15:44:13 +08:00
}
2024-08-04 15:00:00 +08:00
return successMessage(aiSetting, '请求成功', 'GptSetting_GetAISetting')
2024-07-13 15:44:13 +08:00
} catch (error) {
return errorMessage(
'获取软件设置里面的AI设置错误错误信息如下' + error.toString(),
'GptSetting_GetAISetting'
)
}
}
/**
* AI设置
* @param {*} value
*/
async SaveAISetting(value) {
try {
await this.InitService()
let res = this.softService.SaveSoftwarePropertyData('aiSetting', JSON.stringify(value))
return res
} catch (error) {
return errorMessage(
'保存软件设置里面的AI设置错误错误信息如下' + error.toString(),
'GptSetting_SaveAISetting'
)
}
}
2024-08-18 16:22:19 +08:00
/**
* GPT的Key到其他的设置中
* @param syncTpye
*/
async SyncGptKey(syncTpye: SyncGptKeyType): Promise<GeneralResponse.SuccessItem | GeneralResponse.ErrorItem> {
try {
let globalGptKey = global.config.gpt_key;
console.log(globalGptKey);
return successMessage(globalGptKey, '获取全局配置成功', 'GptSetting_SyncGptKey')
} catch (error) {
return errorMessage("同步GPT的Key到其他的设置中失败失败信息如下" + error.toString(), "GptSetting_SyncGptKey")
}
}
2024-07-13 15:44:13 +08:00
}