This commit is contained in:
Timothy Jaeryang Baek 2025-02-03 16:07:43 -08:00
parent e3214d08b5
commit 1635dcb69b
3 changed files with 29 additions and 16 deletions

View File

@ -1120,7 +1120,7 @@ async def process_chat_response(
output = html.escape(json.dumps(output)) output = html.escape(json.dumps(output))
if raw: if raw:
content = f'{content}<details type="code_interpreter" done="true" output="{output}">\n<summary>Analyzed</summary>\n```{lang}\n{block["content"]}\n```\n```output\n{output}\n```\n</details>\n' content = f'{content}<code_interpreter type="code" lang="{lang}">\n{block["content"]}\n</code_interpreter>\n```output\n{output}\n```\n'
else: else:
content = f'{content}<details type="code_interpreter" done="true" output="{output}">\n<summary>Analyzed</summary>\n```{lang}\n{block["content"]}\n```\n</details>\n' content = f'{content}<details type="code_interpreter" done="true" output="{output}">\n<summary>Analyzed</summary>\n```{lang}\n{block["content"]}\n```\n</details>\n'
else: else:
@ -1312,6 +1312,12 @@ async def process_chat_response(
) )
if end: if end:
data = {
"content": serialize_content_blocks(
content_blocks
),
}
break break
if ENABLE_REALTIME_CHAT_SAVE: if ENABLE_REALTIME_CHAT_SAVE:

View File

@ -45,7 +45,7 @@
promptTemplate, promptTemplate,
splitStream, splitStream,
sleep, sleep,
removeDetailsWithReasoning, removeDetails,
getPromptVariables getPromptVariables
} from '$lib/utils'; } from '$lib/utils';
@ -1338,8 +1338,17 @@
parentId: string, parentId: string,
{ modelId = null, modelIdx = null, newChat = false } = {} { modelId = null, modelIdx = null, newChat = false } = {}
) => { ) => {
const _chatId = JSON.parse(JSON.stringify($chatId)); // If modelId is provided, use it, else use selected model
let selectedModelIds = modelId
? [modelId]
: atSelectedModel !== undefined
? [atSelectedModel.id]
: selectedModels;
// Create response messages for each selected model
const responseMessageIds: Record<PropertyKey, string> = {};
const _chatId = JSON.parse(JSON.stringify($chatId));
// Create new chat if newChat is true and first user message // Create new chat if newChat is true and first user message
if ( if (
newChat && newChat &&
@ -1351,15 +1360,6 @@
await saveChatHandler(_chatId); await saveChatHandler(_chatId);
} }
// If modelId is provided, use it, else use selected model
let selectedModelIds = modelId
? [modelId]
: atSelectedModel !== undefined
? [atSelectedModel.id]
: selectedModels;
// Create response messages for each selected model
const responseMessageIds: Record<PropertyKey, string> = {};
for (const [_modelIdx, modelId] of selectedModelIds.entries()) { for (const [_modelIdx, modelId] of selectedModelIds.entries()) {
const model = $models.filter((m) => m.id === modelId).at(0); const model = $models.filter((m) => m.id === modelId).at(0);
@ -1515,7 +1515,7 @@
: undefined, : undefined,
...createMessagesList(history, responseMessageId).map((message) => ({ ...createMessagesList(history, responseMessageId).map((message) => ({
...message, ...message,
content: removeDetailsWithReasoning(message.content) content: removeDetails(message.content, ['reasoning', 'code_interpreter'])
})) }))
] ]
.filter((message) => message?.content?.trim()) .filter((message) => message?.content?.trim())

View File

@ -668,8 +668,15 @@ export const cleanText = (content: string) => {
return removeFormattings(removeEmojis(content.trim())); return removeFormattings(removeEmojis(content.trim()));
}; };
export const removeDetailsWithReasoning = (content) => { export const removeDetails = (content, types) => {
return content.replace(/<details\s+type="reasoning"[^>]*>.*?<\/details>/gis, '').trim(); for (const type of types) {
content = content.replace(
new RegExp(`<details\\s+type="${type}"[^>]*>.*?<\\/details>`, 'gis'),
''
);
}
return content;
}; };
// This regular expression matches code blocks marked by triple backticks // This regular expression matches code blocks marked by triple backticks
@ -741,7 +748,7 @@ export const extractSentencesForAudio = (text: string) => {
}; };
export const getMessageContentParts = (content: string, split_on: string = 'punctuation') => { export const getMessageContentParts = (content: string, split_on: string = 'punctuation') => {
content = removeDetailsWithReasoning(content); content = removeDetails(content, ['reasoning', 'code_interpreter']);
const messageContentParts: string[] = []; const messageContentParts: string[] = [];
switch (split_on) { switch (split_on) {