fix(formatting)

This commit is contained in:
Willie Zutz 2025-06-21 16:15:46 -06:00
parent 7b127e5635
commit c3e845e0e2
6 changed files with 77 additions and 40 deletions

View file

@ -185,31 +185,43 @@ const AgentActionDisplay = ({
{event.details.currentTask && (
<div className="flex space-x-1">
<span className="font-bold">Current Task:</span>
<span className="italic">"{event.details.currentTask}"</span>
</div>
)}
{event.details.taskIndex !== undefined && event.details.totalTasks !== undefined && (
<div className="flex space-x-1">
<span className="font-bold">Progress:</span>
<span>Task {event.details.taskIndex} of {event.details.totalTasks}</span>
<span className="italic">
&quot;{event.details.currentTask}&quot;
</span>
</div>
)}
{event.details.taskIndex !== undefined &&
event.details.totalTasks !== undefined && (
<div className="flex space-x-1">
<span className="font-bold">Progress:</span>
<span>
Task {event.details.taskIndex} of{' '}
{event.details.totalTasks}
</span>
</div>
)}
{event.details.completedTask && (
<div className="flex space-x-1">
<span className="font-bold">Completed:</span>
<span className="italic">"{event.details.completedTask}"</span>
<span className="italic">
&quot;{event.details.completedTask}&quot;
</span>
</div>
)}
{event.details.nextTask && (
<div className="flex space-x-1">
<span className="font-bold">Next:</span>
<span className="italic">"{event.details.nextTask}"</span>
<span className="italic">
&quot;{event.details.nextTask}&quot;
</span>
</div>
)}
{event.details.currentSearchFocus && (
<div className="flex space-x-1">
<span className="font-bold">Search Focus:</span>
<span className="italic">"{event.details.currentSearchFocus}"</span>
<span className="italic">
&quot;{event.details.currentSearchFocus}&quot;
</span>
</div>
)}
</div>

View file

@ -16,7 +16,10 @@ import {
additionalWebSearchPrompt,
decideNextActionPrompt,
} from '../prompts/analyzer';
import { removeThinkingBlocks, removeThinkingBlocksFromMessages } from '../utils/contentUtils';
import {
removeThinkingBlocks,
removeThinkingBlocksFromMessages,
} from '../utils/contentUtils';
export class AnalyzerAgent {
private llm: BaseChatModel;
@ -84,7 +87,9 @@ export class AnalyzerAgent {
query: state.originalQuery || state.query, // Use original query for analysis context
});
const thinkingBlocksRemovedMessages = removeThinkingBlocksFromMessages(state.messages);
const thinkingBlocksRemovedMessages = removeThinkingBlocksFromMessages(
state.messages,
);
const nextActionResponse = await this.llm.invoke(
[...thinkingBlocksRemovedMessages, new HumanMessage(nextActionPrompt)],
@ -118,7 +123,10 @@ export class AnalyzerAgent {
});
const stream = await this.llm.stream(
[...removeThinkingBlocksFromMessages(state.messages), new SystemMessage(moreUserInfoPrompt)],
[
...removeThinkingBlocksFromMessages(state.messages),
new SystemMessage(moreUserInfoPrompt),
],
{ signal: this.signal },
);
@ -175,7 +183,10 @@ export class AnalyzerAgent {
});
const moreInfoResponse = await this.llm.invoke(
[...removeThinkingBlocksFromMessages(state.messages), new HumanMessage(moreInfoPrompt)],
[
...removeThinkingBlocksFromMessages(state.messages),
new HumanMessage(moreInfoPrompt),
],
{ signal: this.signal },
);
@ -210,7 +221,10 @@ export class AnalyzerAgent {
],
query: moreInfoQuestion, // Use the refined question for TaskManager to analyze
searchInstructions: moreInfoQuestion,
searchInstructionHistory: [...(state.searchInstructionHistory || []), moreInfoQuestion],
searchInstructionHistory: [
...(state.searchInstructionHistory || []),
moreInfoQuestion,
],
fullAnalysisAttempts: 1,
originalQuery: state.originalQuery || state.query, // Preserve the original user query
// Reset task list so TaskManager can break down the search requirements again

View file

@ -98,7 +98,11 @@ ${doc.metadata?.url.toLowerCase().includes('file') ? '' : '\n<url>' + doc.metada
);
const stream = await this.llm.stream(
[...removeThinkingBlocksFromMessages(state.messages), new SystemMessage(synthesisPrompt), new HumanMessage(state.originalQuery || state.query)],
[
...removeThinkingBlocksFromMessages(state.messages),
new SystemMessage(synthesisPrompt),
new HumanMessage(state.originalQuery || state.query),
],
{ signal: this.signal },
);

View file

@ -115,25 +115,26 @@ export class TaskManagerAgent {
query: state.query,
});
const taskBreakdownResult = await this.llm.invoke(
[prompt],
{ signal: this.signal },
);
const taskBreakdownResult = await this.llm.invoke([prompt], {
signal: this.signal,
});
// Parse the response to extract tasks
const responseContent = taskBreakdownResult.content as string;
const taskLines = responseContent
.split('\n')
.filter(line => line.trim().startsWith('TASK:'))
.map(line => line.replace('TASK:', '').trim())
.filter(task => task.length > 0);
.filter((line) => line.trim().startsWith('TASK:'))
.map((line) => line.replace('TASK:', '').trim())
.filter((task) => task.length > 0);
if (taskLines.length === 0) {
// Fallback: if no tasks found, use the original query
taskLines.push(state.query);
}
console.log(`Task breakdown completed: ${taskLines.length} tasks identified`);
console.log(
`Task breakdown completed: ${taskLines.length} tasks identified`,
);
taskLines.forEach((task, index) => {
console.log(`Task ${index + 1}: ${task}`);
});
@ -152,9 +153,10 @@ export class TaskManagerAgent {
},
});
const responseMessage = taskLines.length === 1
? 'Question is already focused and ready for processing'
: `Question broken down into ${taskLines.length} focused tasks for parallel processing`;
const responseMessage =
taskLines.length === 1
? 'Question is already focused and ready for processing'
: `Question broken down into ${taskLines.length} focused tasks for parallel processing`;
return new Command({
goto: 'web_search', // Next step would typically be web search for each task

View file

@ -44,11 +44,14 @@ export class WebSearchAgent {
setTemperature(this.llm, 0); // Set temperature to 0 for deterministic output
// Determine current task to process
const currentTask = state.tasks && state.tasks.length > 0
? state.tasks[state.currentTaskIndex || 0]
: state.query;
const currentTask =
state.tasks && state.tasks.length > 0
? state.tasks[state.currentTaskIndex || 0]
: state.query;
console.log(`Processing task ${(state.currentTaskIndex || 0) + 1} of ${state.tasks?.length || 1}: "${currentTask}"`);
console.log(
`Processing task ${(state.currentTaskIndex || 0) + 1} of ${state.tasks?.length || 1}: "${currentTask}"`,
);
// Emit preparing web search event
this.emitter.emit('agent_action', {

View file

@ -1,8 +1,8 @@
import {
BaseMessage,
AIMessage,
HumanMessage,
SystemMessage
import {
BaseMessage,
AIMessage,
HumanMessage,
SystemMessage,
} from '@langchain/core/messages';
/**
@ -21,15 +21,17 @@ export const removeThinkingBlocks = (text: string): string => {
* @param messages Array of BaseMessage objects
* @returns New array with thinking blocks removed from each message's content
*/
export const removeThinkingBlocksFromMessages = (messages: BaseMessage[]): BaseMessage[] => {
return messages.map(message => {
export const removeThinkingBlocksFromMessages = (
messages: BaseMessage[],
): BaseMessage[] => {
return messages.map((message) => {
// Only process string content, leave complex content as-is
if (typeof message.content !== 'string') {
return message;
}
const cleanedContent = removeThinkingBlocks(message.content);
// Create new instance of the same message type with cleaned content
if (message instanceof AIMessage) {
return new AIMessage(cleanedContent);
@ -43,4 +45,4 @@ export const removeThinkingBlocksFromMessages = (messages: BaseMessage[]): BaseM
return message;
}
});
};
};