perf: replace 8 filter passes with single-pass message categorization
Cherry-picked from upstream 9fa2590e
This commit is contained in:
parent
6fa075de51
commit
aaa766b2ba
1 changed files with 33 additions and 12 deletions
|
|
@ -85,21 +85,42 @@ export class SessionParser {
|
||||||
* Process parsed messages into structured data.
|
* Process parsed messages into structured data.
|
||||||
*/
|
*/
|
||||||
private processMessages(messages: ParsedMessage[]): ParsedSession {
|
private processMessages(messages: ParsedMessage[]): ParsedSession {
|
||||||
// Group by type
|
// Single-pass categorization instead of 8 separate filter passes
|
||||||
const byType = {
|
const byType = {
|
||||||
user: messages.filter((m) => m.type === 'user'),
|
user: [] as ParsedMessage[],
|
||||||
realUser: messages.filter(isParsedRealUserMessage),
|
realUser: [] as ParsedMessage[],
|
||||||
internalUser: messages.filter(isParsedInternalUserMessage),
|
internalUser: [] as ParsedMessage[],
|
||||||
assistant: messages.filter((m) => m.type === 'assistant'),
|
assistant: [] as ParsedMessage[],
|
||||||
system: messages.filter((m) => m.type === 'system'),
|
system: [] as ParsedMessage[],
|
||||||
other: messages.filter(
|
other: [] as ParsedMessage[],
|
||||||
(m) => m.type !== 'user' && m.type !== 'assistant' && m.type !== 'system'
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
|
const sidechainMessages: ParsedMessage[] = [];
|
||||||
|
const mainMessages: ParsedMessage[] = [];
|
||||||
|
|
||||||
// Separate sidechain and main messages
|
for (const m of messages) {
|
||||||
const sidechainMessages = messages.filter((m) => m.isSidechain);
|
switch (m.type) {
|
||||||
const mainMessages = messages.filter((m) => !m.isSidechain);
|
case 'user':
|
||||||
|
byType.user.push(m);
|
||||||
|
if (isParsedRealUserMessage(m)) byType.realUser.push(m);
|
||||||
|
if (isParsedInternalUserMessage(m)) byType.internalUser.push(m);
|
||||||
|
break;
|
||||||
|
case 'assistant':
|
||||||
|
byType.assistant.push(m);
|
||||||
|
break;
|
||||||
|
case 'system':
|
||||||
|
byType.system.push(m);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
byType.other.push(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.isSidechain) {
|
||||||
|
sidechainMessages.push(m);
|
||||||
|
} else {
|
||||||
|
mainMessages.push(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate metrics
|
// Calculate metrics
|
||||||
const metrics = calculateMetrics(messages);
|
const metrics = calculateMetrics(messages);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue