MCPcopy
hub / github.com/docker/docker-agent / buildSession

Function buildSession

pkg/chatserver/agent.go:67–123  ·  view source on GitHub ↗

buildSession converts an OpenAI-style message history into a docker-agent session. System messages are added as system context, prior user/ assistant/tool turns are replayed verbatim so the agent sees the full conversation, and the latest user message becomes the prompt. Tool approval and non-inter

(messages []ChatCompletionMessage)

Source from the content-addressed store, hash-verified

65// Returns nil when the history contains no usable user message, in which
66// case the caller should reject the request.
67func buildSession(messages []ChatCompletionMessage) *session.Session {
68 sess := session.New(
69 session.WithToolsApproved(true),
70 session.WithNonInteractive(true),
71 )
72
73 hasUser := false
74 for _, m := range messages {
75 role := strings.ToLower(strings.TrimSpace(m.Role))
76 if len(m.Parts) > 0 && (role == "" || (role != "system" && role != "assistant" && role != "tool")) {
77 // Multi-part content: route through chat.MultiContent so the
78 // runtime/provider sees image parts. Only user-style messages
79 // support images today.
80 parts := convertParts(m.Parts)
81 if len(parts) == 0 {
82 continue
83 }
84 sess.AddMessage(&session.Message{Message: chat.Message{
85 Role: chat.MessageRoleUser,
86 Content: m.Content,
87 MultiContent: parts,
88 }})
89 hasUser = true
90 continue
91 }
92
93 content := m.Content
94 if strings.TrimSpace(content) == "" {
95 continue
96 }
97 switch role {
98 case "system":
99 sess.AddMessage(session.SystemMessage(content))
100 case "assistant":
101 sess.AddMessage(&session.Message{Message: chat.Message{
102 Role: chat.MessageRoleAssistant,
103 Content: content,
104 }})
105 case "tool":
106 sess.AddMessage(&session.Message{Message: chat.Message{
107 Role: chat.MessageRoleTool,
108 Content: content,
109 ToolCallID: m.ToolCallID,
110 }})
111 default:
112 // user, developer, or any other role: feed it to the agent
113 // as user input rather than rejecting the request.
114 sess.AddMessage(session.UserMessage(content))
115 hasUser = true
116 }
117 }
118
119 if !hasUser {
120 return nil
121 }
122 return sess
123}
124

Calls 7

NewFunction · 0.92
WithToolsApprovedFunction · 0.92
WithNonInteractiveFunction · 0.92
SystemMessageFunction · 0.92
UserMessageFunction · 0.92
convertPartsFunction · 0.85
AddMessageMethod · 0.65