mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-29 06:08:37 +00:00
- Rename files to follow camelCase naming convention: • auth-header.js → authUtils.js • other.js → logUtils.js • rehypeSplitWordsIntoSpans.js → textAnimationUtils.js - Update import paths in affected components: • Update exports in helpers/index.js • Fix import in LogsTable.js for logUtils • Fix import in MarkdownRenderer.js for textAnimationUtils - Remove old files after successful migration - Improve file naming clarity: • authUtils.js better describes authentication utilities • logUtils.js clearly indicates log processing functions • textAnimationUtils.js concisely describes text animation functionality This refactoring enhances code maintainability and follows consistent naming patterns throughout the helpers directory.
111 lines
3.5 KiB
JavaScript
111 lines
3.5 KiB
JavaScript
import { useCallback, useRef } from 'react';
|
|
import { MESSAGE_ROLES } from '../constants/playground.constants';
|
|
|
|
export const useSyncMessageAndCustomBody = (
|
|
customRequestMode,
|
|
customRequestBody,
|
|
message,
|
|
inputs,
|
|
setCustomRequestBody,
|
|
setMessage,
|
|
debouncedSaveConfig
|
|
) => {
|
|
const isUpdatingFromMessage = useRef(false);
|
|
const isUpdatingFromCustomBody = useRef(false);
|
|
const lastMessageHash = useRef('');
|
|
const lastCustomBodyHash = useRef('');
|
|
|
|
const getMessageHash = useCallback((messages) => {
|
|
return JSON.stringify(messages.map(msg => ({
|
|
id: msg.id,
|
|
role: msg.role,
|
|
content: msg.content
|
|
})));
|
|
}, []);
|
|
|
|
const getCustomBodyHash = useCallback((customBody) => {
|
|
try {
|
|
const parsed = JSON.parse(customBody);
|
|
return JSON.stringify(parsed.messages || []);
|
|
} catch {
|
|
return '';
|
|
}
|
|
}, []);
|
|
|
|
const syncMessageToCustomBody = useCallback(() => {
|
|
if (!customRequestMode || isUpdatingFromCustomBody.current) return;
|
|
|
|
const currentMessageHash = getMessageHash(message);
|
|
if (currentMessageHash === lastMessageHash.current) return;
|
|
|
|
try {
|
|
isUpdatingFromMessage.current = true;
|
|
let customPayload;
|
|
|
|
try {
|
|
customPayload = JSON.parse(customRequestBody || '{}');
|
|
} catch {
|
|
customPayload = {
|
|
model: inputs.model || 'gpt-4o',
|
|
messages: [],
|
|
temperature: inputs.temperature || 0.7,
|
|
stream: inputs.stream !== false
|
|
};
|
|
}
|
|
|
|
customPayload.messages = message.map(msg => ({
|
|
role: msg.role,
|
|
content: msg.content
|
|
}));
|
|
|
|
const newCustomBody = JSON.stringify(customPayload, null, 2);
|
|
setCustomRequestBody(newCustomBody);
|
|
lastMessageHash.current = currentMessageHash;
|
|
lastCustomBodyHash.current = getCustomBodyHash(newCustomBody);
|
|
|
|
setTimeout(() => {
|
|
debouncedSaveConfig();
|
|
}, 0);
|
|
} finally {
|
|
isUpdatingFromMessage.current = false;
|
|
}
|
|
}, [customRequestMode, customRequestBody, message, inputs.model, inputs.temperature, inputs.stream, getMessageHash, getCustomBodyHash, setCustomRequestBody, debouncedSaveConfig]);
|
|
|
|
const syncCustomBodyToMessage = useCallback(() => {
|
|
if (!customRequestMode || isUpdatingFromMessage.current) return;
|
|
|
|
const currentCustomBodyHash = getCustomBodyHash(customRequestBody);
|
|
if (currentCustomBodyHash === lastCustomBodyHash.current) return;
|
|
|
|
try {
|
|
isUpdatingFromCustomBody.current = true;
|
|
const customPayload = JSON.parse(customRequestBody || '{}');
|
|
|
|
if (customPayload.messages && Array.isArray(customPayload.messages)) {
|
|
const newMessages = customPayload.messages.map((msg, index) => ({
|
|
id: msg.id || (index + 1).toString(),
|
|
role: msg.role || MESSAGE_ROLES.USER,
|
|
content: msg.content || '',
|
|
createAt: Date.now(),
|
|
...(msg.role === MESSAGE_ROLES.ASSISTANT && {
|
|
reasoningContent: msg.reasoningContent || '',
|
|
isReasoningExpanded: false
|
|
})
|
|
}));
|
|
|
|
setMessage(newMessages);
|
|
lastCustomBodyHash.current = currentCustomBodyHash;
|
|
lastMessageHash.current = getMessageHash(newMessages);
|
|
}
|
|
} catch (error) {
|
|
console.warn('同步自定义请求体到消息失败:', error);
|
|
} finally {
|
|
isUpdatingFromCustomBody.current = false;
|
|
}
|
|
}, [customRequestMode, customRequestBody, getCustomBodyHash, getMessageHash, setMessage]);
|
|
|
|
return {
|
|
syncMessageToCustomBody,
|
|
syncCustomBodyToMessage
|
|
};
|
|
};
|