| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import { formatMessageForAPI } from './messageUtils';
- // 构建API请求载荷
- export const buildApiPayload = (messages, systemPrompt, inputs, parameterEnabled) => {
- const processedMessages = messages.map(formatMessageForAPI);
- // 如果有系统提示,插入到消息开头
- if (systemPrompt && systemPrompt.trim()) {
- processedMessages.unshift({
- role: 'system',
- content: systemPrompt.trim()
- });
- }
- const payload = {
- model: inputs.model,
- messages: processedMessages,
- stream: inputs.stream,
- };
- // 添加启用的参数
- if (parameterEnabled.temperature && inputs.temperature !== undefined) {
- payload.temperature = inputs.temperature;
- }
- if (parameterEnabled.top_p && inputs.top_p !== undefined) {
- payload.top_p = inputs.top_p;
- }
- if (parameterEnabled.max_tokens && inputs.max_tokens !== undefined) {
- payload.max_tokens = inputs.max_tokens;
- }
- if (parameterEnabled.frequency_penalty && inputs.frequency_penalty !== undefined) {
- payload.frequency_penalty = inputs.frequency_penalty;
- }
- if (parameterEnabled.presence_penalty && inputs.presence_penalty !== undefined) {
- payload.presence_penalty = inputs.presence_penalty;
- }
- if (parameterEnabled.seed && inputs.seed !== undefined && inputs.seed !== null) {
- payload.seed = inputs.seed;
- }
- return payload;
- };
- // 处理API错误响应
- export const handleApiError = (error, response = null) => {
- const errorInfo = {
- error: error.message || '未知错误',
- timestamp: new Date().toISOString(),
- stack: error.stack
- };
- if (response) {
- errorInfo.status = response.status;
- errorInfo.statusText = response.statusText;
- }
- if (error.message.includes('HTTP error')) {
- errorInfo.details = '服务器返回了错误状态码';
- } else if (error.message.includes('Failed to fetch')) {
- errorInfo.details = '网络连接失败或服务器无响应';
- }
- return errorInfo;
- };
- // 处理模型数据
- export const processModelsData = (data, currentModel) => {
- const modelOptions = data.map(model => ({
- label: model,
- value: model,
- }));
- const hasCurrentModel = modelOptions.some(option => option.value === currentModel);
- const selectedModel = hasCurrentModel && modelOptions.length > 0
- ? currentModel
- : modelOptions[0]?.value;
- return { modelOptions, selectedModel };
- };
- // 处理分组数据
- export const processGroupsData = (data, userGroup) => {
- let groupOptions = Object.entries(data).map(([group, info]) => ({
- label: info.desc.length > 20 ? info.desc.substring(0, 20) + '...' : info.desc,
- value: group,
- ratio: info.ratio,
- fullLabel: info.desc,
- }));
- if (groupOptions.length === 0) {
- groupOptions = [{
- label: '用户分组',
- value: '',
- ratio: 1,
- }];
- } else if (userGroup) {
- const userGroupIndex = groupOptions.findIndex(g => g.value === userGroup);
- if (userGroupIndex > -1) {
- const userGroupOption = groupOptions.splice(userGroupIndex, 1)[0];
- groupOptions.unshift(userGroupOption);
- }
- }
- return groupOptions;
- };
|