feat(playground): enhance SSE debugging and add image paste support with i18n

- Add SSEViewer component for interactive SSE message inspection
  * Display SSE data stream with collapsible panels
  * Show parsed JSON with syntax highlighting
  * Display key information badges (content, tokens, finish reason)
  * Support copy individual or all SSE messages
  * Show error messages with detailed information

- Support Ctrl+V to paste images in chat input
  * Enable image paste in CustomInputRender component
  * Auto-detect and add pasted images to image list
  * Show toast notifications for paste results

- Add complete i18n support for 6 languages
  * Chinese (zh): Complete translations
  * English (en): Complete translations
  * Japanese (ja): Add 28 new translations
  * French (fr): Add 28 new translations
  * Russian (ru): Add 28 new translations
  * Vietnamese (vi): Add 32 new translations

- Update .gitignore to exclude data directory
This commit is contained in:
ImogeneOctaviap794
2025-11-26 16:54:11 +08:00
parent a6a20a2069
commit 9140dee70c
20 changed files with 810 additions and 65 deletions

View File

@@ -179,6 +179,8 @@ export const useApiRequest = (
request: payload,
timestamp: new Date().toISOString(),
response: null,
sseMessages: null, // 非流式请求清除 SSE 消息
isStreaming: false,
}));
setActiveDebugTab(DEBUG_TABS.REQUEST);
@@ -291,6 +293,8 @@ export const useApiRequest = (
request: payload,
timestamp: new Date().toISOString(),
response: null,
sseMessages: [], // 新增:存储 SSE 消息数组
isStreaming: true, // 新增:标记流式状态
}));
setActiveDebugTab(DEBUG_TABS.REQUEST);
@@ -314,7 +318,12 @@ export const useApiRequest = (
isStreamComplete = true; // 标记流正常完成
source.close();
sseSourceRef.current = null;
setDebugData((prev) => ({ ...prev, response: responseData }));
setDebugData((prev) => ({
...prev,
response: responseData,
sseMessages: [...(prev.sseMessages || []), '[DONE]'], // 添加 DONE 标记
isStreaming: false,
}));
completeMessage();
return;
}
@@ -328,6 +337,12 @@ export const useApiRequest = (
hasReceivedFirstResponse = true;
}
// 新增:将 SSE 消息添加到数组
setDebugData((prev) => ({
...prev,
sseMessages: [...(prev.sseMessages || []), e.data],
}));
const delta = payload.choices?.[0]?.delta;
if (delta) {
if (delta.reasoning_content) {
@@ -347,6 +362,8 @@ export const useApiRequest = (
setDebugData((prev) => ({
...prev,
response: responseData + `\n\nError: ${errorInfo}`,
sseMessages: [...(prev.sseMessages || []), e.data], // 即使解析失败也保存原始数据
isStreaming: false,
}));
setActiveDebugTab(DEBUG_TABS.RESPONSE);