1
package api
1
package api
2
2
3
type ChatMessage struct {
3
type ChatMessage struct {
4
Role string `json:"role"`
4
Role string `json:"role"`
5
Content []ContentBlock `json:"content"`
5
Content []ContentBlock `json:"content"`
6
}
6
}
7
7
8
type MessagesRequest struct {
8
type MessagesRequest struct {
9
Model string `json:"model"`
9
Model string `json:"model"`
10
Messages []ChatMessage `json:"messages"`
10
Messages []ChatMessage `json:"messages"`
11
MaxTokens int `json:"max_tokens"`
11
MaxTokens int `json:"max_tokens"`
12
System string `json:"system,omitempty"`
12
System string `json:"system,omitempty"`
13
Temperature float64 `json:"temperature"`
13
Temperature float64 `json:"temperature"`
14
Tools []Tool `json:"tools,omitempty"`
14
Tools []Tool `json:"tools,omitempty"`
15
}
15
}
16
16
17
type ContentBlock struct {
17
type ContentBlock struct {
18
// Type is "text", "image", "tool_use", or "tool_result".
18
// Type is "text", "image", "tool_use", or "tool_result".
19
Type string `json:"type"`
19
Type string `json:"type"`
20
20
21
// Text is for Type="text"
21
// Text is for Type="text"
22
Text string `json:"text"`
22
Text string `json:"text"`
23
23
24
// Source is for Type="image"
24
// Source is for Type="image"
25
Source *ContentSource `json:"source"`
25
Source *ContentSource `json:"source"`
26
26
27
// Id, Name, and Input are for Type="tool_use".
27
// Id, Name, and Input are for Type="tool_use".
28
ID string `json:"id"`
28
ID string `json:"id"`
29
Name string `json:"name"`
29
Name string `json:"name"`
30
Input interface{} `json:"input"`
30
Input interface{} `json:"input"`
31
Output string `json:"output"`
31
Output string `json:"output"`
32
}
32
}
33
33
34
type ContentSource struct {
34
type ContentSource struct {
35
// Type can only be "base64".
35
// Type can only be "base64".
36
Type string `json:"type"`
36
Type string `json:"type"`
37
37
38
// MediaType can be one of:
38
// MediaType can be one of:
39
// - "image/jpeg",
39
// - "image/jpeg",
40
// - "image/png",
40
// - "image/png",
41
// - "image/gif", or
41
// - "image/gif", or
42
// - "image/webp".
42
// - "image/webp".
43
MediaType string `json:"media_type,omitempty"`
43
MediaType string `json:"media_type,omitempty"`
44
44
45
Data string `json:"data,omitempty"`
45
Data string `json:"data,omitempty"`
46
}
46
}
47
47
48
type Usage struct {
48
type Usage struct {
49
InputTokens int `json:"input_tokens"`
49
InputTokens int `json:"input_tokens"`
50
CacheCreationInputTokens *int `json:"cache_creation_input_tokens"`
50
CacheCreationInputTokens *int `json:"cache_creation_input_tokens"`
51
CacheReadInputTokens *int `json:"cache_read_input_tokens"`
51
CacheReadInputTokens *int `json:"cache_read_input_tokens"`
52
OutputTokens int `json:"output_tokens"`
52
OutputTokens int `json:"output_tokens"`
53
}
53
}
54
54
55
type ErrorResponse struct {
55
type ErrorResponse struct {
56
Type string `json:"type"`
56
Type string `json:"type"`
57
Message string `json:"message"`
57
Message string `json:"message"`
58
}
58
}
59
59
60
type MessagesResponse struct {
60
type MessagesResponse struct {
61
Id string `json:"id"`
61
Id string `json:"id"`
62
Type string `json:"type"`
62
Type string `json:"type"`
63
Role string `json:"role"`
63
Role string `json:"role"`
64
Content []ContentBlock `json:"content"`
64
Content []ContentBlock `json:"content"`
65
Model string `json:"model"`
65
Model string `json:"model"`
66
StopReason *string `json:"stop_reason,omitempty"`
66
StopReason *string `json:"stop_reason,omitempty"`
67
StopSequence *string `json:"stop_sequence,omitempty"`
67
StopSequence *string `json:"stop_sequence,omitempty"`
68
Usage Usage `json:"usage"`
68
Usage Usage `json:"usage"`
69
Error *ErrorResponse `json:"error"`
69
Error *ErrorResponse `json:"error"`
70
}
70
}
71
71
72
type Tool struct {
72
type Tool struct {
73
Type string `json:"type"`
73
Type string `json:"type"`
74
Function *ToolFunction `json:"function"`
74
Function *ToolFunction `json:"function"`
75
}
75
}
76
76
77
type ToolFunction struct {
77
type ToolFunction struct {
78
Name string `json:"name"`
78
Name string `json:"name"`
79
Description string `json:"description"`
79
Description string `json:"description"`
80
InputSchema interface{} `json:"input_schema"`
80
InputSchema interface{} `json:"input_schema"`
81
}
81
}