MCPcopy Create free account
hub / github.com/bytebase/bytebase / chatClaude

Method chatClaude

backend/api/v1/ai_service.go:354–476  ·  view source on GitHub ↗
(ctx context.Context, aiSetting *storepb.AISetting, request *v1pb.AIChatRequest)

Source from the content-addressed store, hash-verified

352}
353
354func (*AIService) chatClaude(ctx context.Context, aiSetting *storepb.AISetting, request *v1pb.AIChatRequest) (*connect.Response[v1pb.AIChatResponse], error) {
355 payload := chatClaudeRequest{
356 Model: aiSetting.Model,
357 MaxTokens: 4096,
358 }
359
360 for _, m := range request.Messages {
361 switch m.Role {
362 case v1pb.AIChatMessageRole_AI_CHAT_MESSAGE_ROLE_SYSTEM:
363 payload.System = m.GetContent()
364 continue
365 case v1pb.AIChatMessageRole_AI_CHAT_MESSAGE_ROLE_USER:
366 payload.Messages = append(payload.Messages, chatClaudeMsg{
367 Role: "user",
368 Content: m.GetContent(),
369 })
370 case v1pb.AIChatMessageRole_AI_CHAT_MESSAGE_ROLE_ASSISTANT:
371 var contentBlocks []chatClaudeContentBlock
372 if m.Content != nil && *m.Content != "" {
373 contentBlocks = append(contentBlocks, chatClaudeContentBlock{
374 Type: "text",
375 Text: *m.Content,
376 })
377 }
378 for _, tc := range m.ToolCalls {
379 var input any
380 if err := json.Unmarshal([]byte(tc.Arguments), &input); err != nil {
381 input = tc.Arguments
382 }
383 contentBlocks = append(contentBlocks, chatClaudeContentBlock{
384 Type: "tool_use",
385 ID: tc.Id,
386 Name: tc.Name,
387 Input: input,
388 })
389 }
390 payload.Messages = append(payload.Messages, chatClaudeMsg{
391 Role: "assistant",
392 Content: contentBlocks,
393 })
394 case v1pb.AIChatMessageRole_AI_CHAT_MESSAGE_ROLE_TOOL:
395 // Claude uses "user" role with tool_result content block.
396 payload.Messages = append(payload.Messages, chatClaudeMsg{
397 Role: "user",
398 Content: []chatClaudeContentBlock{
399 {
400 Type: "tool_result",
401 ToolUseID: m.GetToolCallId(),
402 Content: m.GetContent(),
403 },
404 },
405 })
406 default:
407 continue
408 }
409 }
410
411 for _, td := range request.ToolDefinitions {

Callers 1

ChatMethod · 0.95

Calls 7

doHTTPRequestFunction · 0.85
newAIChatUsageFunction · 0.85
UnmarshalMethod · 0.80
GetToolCallIdMethod · 0.80
ErrorfMethod · 0.80
GetContentMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected