Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | 1x 1x 19x 19x 19x 19x 25x 25x 23x 19x 19x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 21x 21x 2x 2x 2x 19x 19x 19x 19x | import {
type ChatCompletionMessage,
ChatCompletionMessageRole,
} from '@shared/types/api/routes/shared/messages';
export function formatMessagesForExtraction(
messages: ChatCompletionMessage[],
): string {
return messages
.filter((message) => {
// Exclude system and developer messages from embeddings
return (
message.role !== ChatCompletionMessageRole.SYSTEM &&
message.role !== ChatCompletionMessageRole.DEVELOPER
);
})
.map((message) => {
const role = message.role;
let content = '';
if (
role === ChatCompletionMessageRole.TOOL ||
role === ChatCompletionMessageRole.FUNCTION
) {
return `Tool Call ${message.tool_call_id} Output: ${content}`;
}
if (typeof message.content === 'string') {
content += message.content;
} else if (Array.isArray(message.content)) {
content += message.content
.map((item) => {
if (typeof item === 'object' && item.text) {
return item.text;
}
return '';
})
.filter(Boolean)
.join(' ');
} else if (message.content) {
content += String(message.content);
}
if (message.tool_calls && message.tool_calls.length > 0) {
const tools = message.tool_calls
.map((tool) => {
const parsedTool = tool as {
id: string;
type: 'mcp_call';
function: {
name: string;
arguments: string;
};
};
return `Tool Call ID: ${parsedTool.id}\nTool Call Name: ${parsedTool.function.name}\nTool Call Arguments: ${parsedTool.function.arguments}`;
})
.join(', ');
return `Assistant Tool Calls:\n${tools}`;
}
// Only include messages with non-empty content after trimming
if (!content.trim()) {
return '';
}
if (role === ChatCompletionMessageRole.USER) {
return `User: ${content}`.trim();
}
if (role === ChatCompletionMessageRole.ASSISTANT) {
return `Assistant: ${content}`.trim();
}
return `${role}: ${content}`.trim();
})
.filter(Boolean)
.join('\n\n\n');
}
|