Files
18xchat/assets/Scripts/chat18x/core/ApiConfigLoader.ts
T
xionglijia 8ea553a23f Merge branch 'main' of 47.107.44.202:xionglijia/18xchat
# Conflicts:
#	assets/Scripts/chat18x/core/ChatAIService.ts
#	assets/Scripts/chat18x/utils/ErrorHandler.ts
#	xchat_cfg
2025-09-21 20:51:31 +08:00

129 lines
3.2 KiB
TypeScript

/**
* API配置管理
* 统一管理所有API相关的配置信息
*/
import { DataId, DataManager } from "../data/DataManager";
import { GlobalData } from "../data/GlobalData";
import { ConfigManager } from "../manager/ConfigManager";
import { logger } from "db://assets/Scripts/Main/Common/Logger";
export interface AIConfig {
/** API密钥 */
apiKey: string;
/** 模型名称 */
model: string;
/** 生成温度参数 */
temperature: number;
/** 最大令牌数 */
maxTokens?: number;
/** 请求超时时间(毫秒) */
timeout?: number;
}
/**
* API配置管理器
*/
export class ApiConfig {
private static _instance: ApiConfig;
private config: AIConfig;
private baseUrl: "https://generativelanguage.googleapis.com";
private constructor() {
this.initConfig();
}
public static get Instance(): ApiConfig {
if (!this._instance) {
this._instance = new ApiConfig();
}
return this._instance;
}
/**
* 初始化配置
* TODO: 应该从环境变量或安全配置文件中读取
*/
private initConfig(): void {
//const config = DataManager.I.getDataById<GlobalData>(DataId.Global).getApiKey();
this.config = {
// 警告: API密钥不应该硬编码在代码中
// 生产环境中应该从环境变量或安全配置文件中读取
apiKey: DataManager.I.getDataById<GlobalData>(DataId.Global).getApiKey(),
model: DataManager.I.getDataById<GlobalData>(DataId.Global).getModel(),
temperature: DataManager.I.getDataById<GlobalData>(
DataId.Global
).getTemperature(),
maxTokens: DataManager.I.getDataById<GlobalData>(
DataId.Global
).getMaxTokens(),
timeout: DataManager.I.getDataById<GlobalData>(
DataId.Global
).getTimeout(), // 30秒
};
//logger.warn(this.config.apiKey);
}
/**
* 获取AI配置
*/
public getAIConfig(): AIConfig {
return { ...this.config };
}
/**
* 获取情绪AI配置
*/
public getEmotionAIConfig(): AIConfig {
return {
apiKey: DataManager.I.getDataById<GlobalData>(
DataId.Global
).getEmotionApiKey(),
model: DataManager.I.getDataById<GlobalData>(DataId.Global).getModel(),
temperature: 0.2,
maxTokens: DataManager.I.getDataById<GlobalData>(
DataId.Global
).getMaxTokens(),
timeout: DataManager.I.getDataById<GlobalData>(
DataId.Global
).getTimeout(),
};
}
/**
* 更新生成参数
* @param temperature 温度参数
*/
public updateTemperature(temperature: number): void {
if (temperature >= 0 && temperature <= 2) {
this.config.temperature = temperature;
} else {
logger.warn("Temperature should be between 0 and 2");
}
}
public getTimeout() {
return this.config.timeout;
}
public getBaseUrl() {
return this.baseUrl;
}
/**
* 验证配置是否有效
*/
public validateConfig(): boolean {
if (!this.config.apiKey || this.config.apiKey.trim() === "") {
logger.error("API key is missing");
return false;
}
if (!this.config.model || this.config.model.trim() === "") {
logger.error("Model name is missing");
return false;
}
return true;
}
}