- 新增日志系统配置选项,支持日志级别、输出模式、文件大小等设置 - 添加当日日志文件下载功能,可通过Web界面直接下载 - 将console.log/error替换为结构化logger,提升日志可管理性 - 在日志页面添加自动滚动到底部功能 - 更新配置示例文件,包含完整的日志配置参数
86 lines
3.2 KiB
JavaScript
86 lines
3.2 KiB
JavaScript
import { ProviderStrategy } from '../../utils/provider-strategy.js';
|
|
import logger from '../../utils/logger.js';
|
|
import { extractSystemPromptFromRequestBody, MODEL_PROTOCOL_PREFIX } from '../../utils/common.js';
|
|
|
|
/**
|
|
* OpenAI provider strategy implementation.
|
|
*/
|
|
class OpenAIStrategy extends ProviderStrategy {
|
|
extractModelAndStreamInfo(req, requestBody) {
|
|
const model = requestBody.model;
|
|
const isStream = requestBody.stream === true;
|
|
return { model, isStream };
|
|
}
|
|
|
|
extractResponseText(response) {
|
|
if (!response.choices) {
|
|
return '';
|
|
}
|
|
if (response.choices && response.choices.length > 0) {
|
|
const choice = response.choices[0];
|
|
if (choice.message && choice.message.content) {
|
|
return choice.message.content;
|
|
} else if (choice.delta && choice.delta.content) {
|
|
return choice.delta.content;
|
|
} else if (choice.delta && choice.delta.tool_calls && choice.delta.tool_calls.length > 0) {
|
|
return choice.delta.tool_calls;
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
extractPromptText(requestBody) {
|
|
if (requestBody.messages && requestBody.messages.length > 0) {
|
|
const lastMessage = requestBody.messages[requestBody.messages.length - 1];
|
|
let content = lastMessage.content;
|
|
if (typeof content === 'object' && content !== null) {
|
|
if (Array.isArray(content)) {
|
|
return content.map(item => item.text).join('\n');
|
|
} else {
|
|
return JSON.stringify(content);
|
|
}
|
|
}
|
|
return content;
|
|
}
|
|
return '';
|
|
}
|
|
|
|
async applySystemPromptFromFile(config, requestBody) {
|
|
if (!config.SYSTEM_PROMPT_FILE_PATH) {
|
|
return requestBody;
|
|
}
|
|
|
|
const filePromptContent = config.SYSTEM_PROMPT_CONTENT;
|
|
if (filePromptContent === null) {
|
|
return requestBody;
|
|
}
|
|
|
|
const existingSystemText = extractSystemPromptFromRequestBody(requestBody, MODEL_PROTOCOL_PREFIX.OPENAI);
|
|
|
|
const newSystemText = config.SYSTEM_PROMPT_MODE === 'append' && existingSystemText
|
|
? `${existingSystemText}\n${filePromptContent}`
|
|
: filePromptContent;
|
|
|
|
if (!requestBody.messages) {
|
|
requestBody.messages = [];
|
|
}
|
|
const systemMessageIndex = requestBody.messages.findIndex(m => m.role === 'system');
|
|
if (systemMessageIndex !== -1) {
|
|
requestBody.messages[systemMessageIndex].content = newSystemText;
|
|
} else {
|
|
requestBody.messages.unshift({ role: 'system', content: newSystemText });
|
|
}
|
|
logger.info(`[System Prompt] Applied system prompt from ${config.SYSTEM_PROMPT_FILE_PATH} in '${config.SYSTEM_PROMPT_MODE}' mode for provider 'openai'.`);
|
|
|
|
return requestBody;
|
|
}
|
|
|
|
async manageSystemPrompt(requestBody) {
|
|
//logger.info('[System Prompt] Managing system prompt for provider "openai".', requestBody);
|
|
const incomingSystemText = extractSystemPromptFromRequestBody(requestBody, MODEL_PROTOCOL_PREFIX.OPENAI);
|
|
await this._updateSystemPromptFile(incomingSystemText, MODEL_PROTOCOL_PREFIX.OPENAI);
|
|
}
|
|
}
|
|
|
|
export { OpenAIStrategy };
|
|
|