new feature: frontend with separated responses

This commit is contained in:
2026-09-11 10:45:49 -03:00
parent c9eb71af32
commit e6bc243cf7

View File

@@ -34,6 +34,15 @@ function stripOwnAgentMarker(value, agent) {
const normalize = (name) => String(name || "").replace(/[_\s-]+/g, "").toLowerCase(); const normalize = (name) => String(name || "").replace(/[_\s-]+/g, "").toLowerCase();
return normalize(marker[1]) === normalize(agent) ? text.slice(marker[0].length).trim() : text; return normalize(marker[1]) === normalize(agent) ? text.slice(marker[0].length).trim() : text;
} }
function orderAgentMessages(agentResponses) {
return [...agentResponses].sort(
(a, b) => Number(Boolean(a.primary)) - Number(Boolean(b.primary))
);
}
function sameAgent(left, right) {
const normalize = (name) => String(name || "").replace(/[_\s-]+/g, "").toLowerCase();
return Boolean(normalize(left)) && normalize(left) === normalize(right);
}
function addUserMessage(text) { function addUserMessage(text) {
const div = document.createElement("div"); const div = document.createElement("div");
div.className = "msg user chat-bubble--user"; div.className = "msg user chat-bubble--user";
@@ -68,12 +77,19 @@ function getAgentMessages(data) {
const messages = candidates.map((item) => ({ const messages = candidates.map((item) => ({
agent: item?.agent || item?.agent_id || item?.agentId || item?.name, agent: item?.agent || item?.agent_id || item?.agentId || item?.name,
text: stripOwnAgentMarker(item?.answer ?? item?.text ?? item?.message ?? item?.response ?? item?.content, item?.agent || item?.agent_id || item?.agentId || item?.name), text: stripOwnAgentMarker(item?.answer ?? item?.text ?? item?.message ?? item?.response ?? item?.content, item?.agent || item?.agent_id || item?.agentId || item?.name),
primary: item?.primary === true,
})).filter((item) => item.agent && responseText(item.text).trim()); })).filter((item) => item.agent && responseText(item.text).trim());
if (messages.length) return messages; if (messages.length) return orderAgentMessages(messages);
} }
const text = data?.text ?? data?.speak ?? data?.message ?? data?.response ?? data?.content ?? data?.output; const text = data?.text ?? data?.speak ?? data?.message ?? data?.response ?? data?.content ?? data?.output;
const taggedMessages = splitTaggedAgentMessages(text); const taggedMessages = splitTaggedAgentMessages(text);
if (taggedMessages.length) return taggedMessages; if (taggedMessages.length) {
const primaryAgent = metadata.active_agent || metadata.route || data?.route || metadata.route_decision?.agent || metadata.route_decision?.route;
return orderAgentMessages(taggedMessages.map((item) => ({
...item,
primary: sameAgent(item.agent, primaryAgent),
})));
}
const agent = metadata.active_agent || metadata.route || data?.agent_id || metadata.agent_id || val("agent") || "agent"; const agent = metadata.active_agent || metadata.route || data?.agent_id || metadata.agent_id || val("agent") || "agent";
return responseText(text).trim() ? [{ agent, text }] : []; return responseText(text).trim() ? [{ agent, text }] : [];
} }