CreateMessage sends a sampling request to the client. If the client returns multiple content blocks (e.g. parallel tool calls), CreateMessage returns an error. Use [ServerSession.CreateMessageWithTools] for tool-enabled sampling.
(ctx context.Context, params *CreateMessageParams)
| 1184 | // CreateMessage returns an error. Use [ServerSession.CreateMessageWithTools] |
| 1185 | // for tool-enabled sampling. |
| 1186 | func (ss *ServerSession) CreateMessage(ctx context.Context, params *CreateMessageParams) (*CreateMessageResult, error) { |
| 1187 | if err := ss.checkInitialized(methodCreateMessage); err != nil { |
| 1188 | return nil, err |
| 1189 | } |
| 1190 | if params == nil { |
| 1191 | params = &CreateMessageParams{Messages: []*SamplingMessage{}} |
| 1192 | } |
| 1193 | if params.Messages == nil { |
| 1194 | p2 := *params |
| 1195 | p2.Messages = []*SamplingMessage{} // avoid JSON "null" |
| 1196 | params = &p2 |
| 1197 | } |
| 1198 | res, err := handleSend[*CreateMessageWithToolsResult](ctx, methodCreateMessage, newServerRequest(ss, orZero[Params](params))) |
| 1199 | if err != nil { |
| 1200 | return nil, err |
| 1201 | } |
| 1202 | // Downconvert to singular content. |
| 1203 | if len(res.Content) > 1 { |
| 1204 | return nil, fmt.Errorf("CreateMessage result has %d content blocks; use CreateMessageWithTools for multiple content", len(res.Content)) |
| 1205 | } |
| 1206 | var content Content |
| 1207 | if len(res.Content) > 0 { |
| 1208 | content = res.Content[0] |
| 1209 | } |
| 1210 | return &CreateMessageResult{ |
| 1211 | Meta: res.Meta, |
| 1212 | Content: content, |
| 1213 | Model: res.Model, |
| 1214 | Role: res.Role, |
| 1215 | StopReason: res.StopReason, |
| 1216 | }, nil |
| 1217 | } |
| 1218 | |
| 1219 | // CreateMessageWithTools sends a sampling request with tools to the client, |
| 1220 | // returning a [CreateMessageWithToolsResult] that supports array content |