feat(agent): wire media refs through agent pipeline to LLM provider

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
shikihane 2026-03-03 14:52:57 +08:00
parent 03f7ae494f
commit 43227411ee
2 changed files with 21 additions and 11 deletions

View file

@ -466,10 +466,14 @@ func (cb *ContextBuilder) BuildMessages(
// Add current user message // Add current user message
if strings.TrimSpace(currentMessage) != "" { if strings.TrimSpace(currentMessage) != "" {
messages = append(messages, providers.Message{ msg := providers.Message{
Role: "user", Role: "user",
Content: currentMessage, Content: currentMessage,
}) }
if len(media) > 0 {
msg.Media = media
}
messages = append(messages, msg)
} }
return messages return messages

View file

@ -47,14 +47,15 @@ type AgentLoop struct {
// processOptions configures how a message is processed // processOptions configures how a message is processed
type processOptions struct { type processOptions struct {
SessionKey string // Session identifier for history/context SessionKey string // Session identifier for history/context
Channel string // Target channel for tool execution Channel string // Target channel for tool execution
ChatID string // Target chat ID for tool execution ChatID string // Target chat ID for tool execution
UserMessage string // User message content (may include prefix) UserMessage string // User message content (may include prefix)
DefaultResponse string // Response when LLM returns empty Media []string // media:// refs from inbound message
EnableSummary bool // Whether to trigger summarization DefaultResponse string // Response when LLM returns empty
SendResponse bool // Whether to send response via bus EnableSummary bool // Whether to trigger summarization
NoHistory bool // If true, don't load session history (for heartbeat) SendResponse bool // Whether to send response via bus
NoHistory bool // If true, don't load session history (for heartbeat)
} }
const defaultResponse = "I've completed processing but have no response to give. Increase `max_tool_iterations` in config.json." const defaultResponse = "I've completed processing but have no response to give. Increase `max_tool_iterations` in config.json."
@ -497,6 +498,7 @@ func (al *AgentLoop) processMessage(ctx context.Context, msg bus.InboundMessage)
Channel: msg.Channel, Channel: msg.Channel,
ChatID: msg.ChatID, ChatID: msg.ChatID,
UserMessage: msg.Content, UserMessage: msg.Content,
Media: msg.Media,
DefaultResponse: defaultResponse, DefaultResponse: defaultResponse,
EnableSummary: true, EnableSummary: true,
SendResponse: false, SendResponse: false,
@ -603,11 +605,15 @@ func (al *AgentLoop) runAgentLoop(
history, history,
summary, summary,
opts.UserMessage, opts.UserMessage,
nil, opts.Media,
opts.Channel, opts.Channel,
opts.ChatID, opts.ChatID,
) )
// Resolve media:// refs to base64 data URLs (streaming)
maxMediaSize := al.cfg.Agents.Defaults.GetMaxMediaSize()
messages = resolveMediaRefs(messages, al.mediaStore, maxMediaSize)
// 3. Save user message to session // 3. Save user message to session
agent.Sessions.AddMessage(opts.SessionKey, "user", opts.UserMessage) agent.Sessions.AddMessage(opts.SessionKey, "user", opts.UserMessage)