mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-06-30 17:55:32 +02:00
103 lines
3.0 KiB
Go
103 lines
3.0 KiB
Go
package handler
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
hitlPayloadUserMessage = "userMessage"
|
|
hitlPayloadThinking = "thinking"
|
|
hitlPayloadReasoningChain = "reasoningChain"
|
|
hitlPayloadPlanning = "planning"
|
|
)
|
|
|
|
type hitlCognitionFields struct {
|
|
UserMessage string
|
|
Thinking string
|
|
ReasoningChain string
|
|
Planning string
|
|
}
|
|
|
|
func (h *AgentHandler) enrichHitlApprovalPayload(conversationID, assistantMessageID string, payload map[string]interface{}) {
|
|
if h == nil || payload == nil {
|
|
return
|
|
}
|
|
cog := h.collectHitlCognition(conversationID, assistantMessageID)
|
|
if s := strings.TrimSpace(cog.UserMessage); s != "" {
|
|
payload[hitlPayloadUserMessage] = s
|
|
}
|
|
if s := strings.TrimSpace(cog.Thinking); s != "" {
|
|
payload[hitlPayloadThinking] = s
|
|
}
|
|
if s := strings.TrimSpace(cog.ReasoningChain); s != "" {
|
|
payload[hitlPayloadReasoningChain] = s
|
|
}
|
|
if s := strings.TrimSpace(cog.Planning); s != "" {
|
|
payload[hitlPayloadPlanning] = s
|
|
}
|
|
}
|
|
|
|
func (h *AgentHandler) collectHitlCognition(conversationID, assistantMessageID string) hitlCognitionFields {
|
|
var out hitlCognitionFields
|
|
if h.tasks != nil {
|
|
out = h.tasks.GetHitlCognition(conversationID)
|
|
}
|
|
if strings.TrimSpace(out.UserMessage) == "" && h.db != nil {
|
|
if msg, err := h.db.GetTurnUserMessage(conversationID, assistantMessageID); err == nil {
|
|
out.UserMessage = msg
|
|
}
|
|
}
|
|
if h.db != nil && assistantMessageID != "" {
|
|
dbCog, err := h.db.GetAssistantCognitionTexts(assistantMessageID)
|
|
if err == nil {
|
|
if strings.TrimSpace(out.Thinking) == "" {
|
|
out.Thinking = dbCog.Thinking
|
|
}
|
|
if strings.TrimSpace(out.ReasoningChain) == "" {
|
|
out.ReasoningChain = dbCog.ReasoningChain
|
|
}
|
|
if strings.TrimSpace(out.Planning) == "" {
|
|
out.Planning = dbCog.Planning
|
|
}
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func snapshotHitlCognitionFromStreams(thinkingStreams map[string]*thinkingBuf, respPlan *responsePlanAgg) (thinking, reasoningChain, planning string) {
|
|
if len(thinkingStreams) > 0 {
|
|
var thinkingParts, reasoningParts []string
|
|
for _, tb := range thinkingStreams {
|
|
if tb == nil {
|
|
continue
|
|
}
|
|
content := strings.TrimSpace(tb.b.String())
|
|
if content == "" {
|
|
continue
|
|
}
|
|
if tb.persistAs == "reasoning_chain" {
|
|
reasoningParts = append(reasoningParts, content)
|
|
} else {
|
|
thinkingParts = append(thinkingParts, content)
|
|
}
|
|
}
|
|
thinking = strings.Join(thinkingParts, "\n\n")
|
|
reasoningChain = strings.Join(reasoningParts, "\n\n")
|
|
}
|
|
if respPlan != nil {
|
|
planning = strings.TrimSpace(respPlan.b.String())
|
|
}
|
|
return thinking, reasoningChain, planning
|
|
}
|
|
|
|
func (h *AgentHandler) syncHitlCognitionFromProgress(conversationID, assistantMessageID string, thinkingStreams map[string]*thinkingBuf, respPlan *responsePlanAgg) {
|
|
if h == nil || h.tasks == nil {
|
|
return
|
|
}
|
|
thinking, reasoning, planning := snapshotHitlCognitionFromStreams(thinkingStreams, respPlan)
|
|
if thinking == "" && reasoning == "" && planning == "" {
|
|
return
|
|
}
|
|
h.tasks.UpdateHitlCognitionSnapshot(conversationID, assistantMessageID, thinking, reasoning, planning)
|
|
}
|