10
10
ChatCompletionNamedToolChoiceParam ,
11
11
ChatCompletionRole ,
12
12
ChatCompletionSystemMessageParam ,
13
+ ChatCompletionToolMessageParam ,
13
14
ChatCompletionToolParam ,
14
15
ChatCompletionUserMessageParam ,
15
16
)
@@ -48,7 +49,12 @@ def all_messages(self) -> list[ChatCompletionMessageParam]:
48
49
return [self .system_message ] + self .messages
49
50
50
51
def insert_message (
51
- self , role : ChatCompletionRole , content : Union [str , Iterable [ChatCompletionContentPartParam ]], index : int = 0
52
+ self ,
53
+ role : ChatCompletionRole ,
54
+ content : Union [str , Iterable [ChatCompletionContentPartParam ]],
55
+ index : int = 0 ,
56
+ tool_calls : Optional [list [ChatCompletionToolParam ]] = None ,
57
+ tool_call_id : Optional [str ] = None ,
52
58
):
53
59
"""
54
60
Inserts a message into the conversation at the specified index,
@@ -63,8 +69,14 @@ def insert_message(
63
69
message = ChatCompletionUserMessageParam (role = "user" , content = normalize_content (content ))
64
70
elif role == "assistant" and isinstance (content , str ):
65
71
message = ChatCompletionAssistantMessageParam (role = "assistant" , content = normalize_content (content ))
72
+ elif role == "assistant" and tool_calls is not None :
73
+ message = ChatCompletionAssistantMessageParam (role = "assistant" , tool_calls = tool_calls )
74
+ elif role == "tool" and tool_call_id is not None :
75
+ message = ChatCompletionToolMessageParam (
76
+ role = "tool" , tool_call_id = tool_call_id , content = normalize_content (content )
77
+ )
66
78
else :
67
- raise ValueError (f "Invalid role: { role } " )
79
+ raise ValueError ("Invalid message for builder " )
68
80
self .messages .insert (index , message )
69
81
70
82
@@ -102,9 +114,11 @@ def build_messages(
102
114
message_builder = _MessageBuilder (system_prompt )
103
115
104
116
for shot in reversed (few_shots ):
105
- if shot ["role" ] is None or shot ["content" ] is None :
106
- raise ValueError ("Few-shot messages must have both role and content" )
107
- message_builder .insert_message (shot ["role" ], shot ["content" ])
117
+ if shot ["role" ] is None or (shot .get ("content" ) is None and shot .get ("tool_calls" ) is None ):
118
+ raise ValueError ("Few-shot messages must have role and either content or tool_calls" )
119
+ message_builder .insert_message (
120
+ shot ["role" ], shot .get ("content" ), tool_calls = shot .get ("tool_calls" ), tool_call_id = shot .get ("tool_call_id" )
121
+ )
108
122
109
123
append_index = len (few_shots )
110
124
0 commit comments