Backup-bdg's picture
Upload 565 files
b59aa07 verified
import { trackError } from "#/utils/error-handler";
import { appendSecurityAnalyzerInput } from "#/state/security-analyzer-slice";
import { setCurStatusMessage } from "#/state/status-slice";
import { setMetrics } from "#/state/metrics-slice";
import store from "#/store";
import ActionType from "#/types/action-type";
import {
ActionMessage,
ObservationMessage,
StatusMessage,
} from "#/types/message";
import { handleObservationMessage } from "./observations";
import { appendInput } from "#/state/command-slice";
import { queryClient } from "#/query-client-config";
export function handleActionMessage(message: ActionMessage) {
if (message.args?.hidden) {
return;
}
// Update metrics if available
if (message.llm_metrics) {
const metrics = {
cost: message.llm_metrics?.accumulated_cost ?? null,
usage: message.llm_metrics?.accumulated_token_usage ?? null,
};
store.dispatch(setMetrics(metrics));
}
if (message.action === ActionType.RUN) {
store.dispatch(appendInput(message.args.command));
}
if ("args" in message && "security_risk" in message.args) {
store.dispatch(appendSecurityAnalyzerInput(message));
}
}
export function handleStatusMessage(message: StatusMessage) {
// Info message with conversation_title indicates new title for conversation
if (message.type === "info" && message.conversation_title) {
const conversationId = message.message;
// Invalidate the conversation query to trigger a refetch with the new title
queryClient.invalidateQueries({
queryKey: ["user", "conversation", conversationId],
});
} else if (message.type === "info") {
store.dispatch(
setCurStatusMessage({
...message,
}),
);
} else if (message.type === "error") {
trackError({
message: message.message,
source: "chat",
metadata: { msgId: message.id },
});
}
}
export function handleAssistantMessage(message: Record<string, unknown>) {
if (message.action) {
handleActionMessage(message as unknown as ActionMessage);
} else if (message.observation) {
handleObservationMessage(message as unknown as ObservationMessage);
} else if (message.status_update) {
handleStatusMessage(message as unknown as StatusMessage);
}
}