Skip to content

Commit 46b5440

Browse files
authored
Merge pull request #106 from dwash96/v0.88.9
V0.88.9
2 parents ffae819 + 7828ead commit 46b5440

4 files changed

Lines changed: 37 additions & 9 deletions

File tree

aider/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from packaging import version
22

3-
__version__ = "0.88.8.dev"
3+
__version__ = "0.88.9.dev"
44
safe_version = __version__
55

66
try:

aider/coders/base_coder.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,6 +2743,8 @@ async def send(self, messages, model=None, functions=None, tools=None):
27432743
format_content("ASSISTANT", self.partial_response_content),
27442744
)
27452745

2746+
self.preprocess_response()
2747+
27462748
if self.partial_response_content:
27472749
self.io.ai_output(self.partial_response_content)
27482750
elif self.partial_response_function_call:
@@ -2986,6 +2988,21 @@ def render_incremental_response(self, final):
29862988
# Just return the current content - the streaming logic will handle incremental updates
29872989
return self.get_multi_response_content_in_progress()
29882990

2991+
def preprocess_response(self):
2992+
if len(self.partial_response_tool_calls):
2993+
tool_list = []
2994+
tool_id_set = set()
2995+
2996+
for tool_call_dict in self.partial_response_tool_calls:
2997+
# LLM APIs sometimes return duplicates and that's annoying part 2
2998+
if tool_call_dict.get("id") in tool_id_set:
2999+
continue
3000+
3001+
tool_id_set.add(tool_call_dict.get("id"))
3002+
tool_list.append(tool_call_dict)
3003+
3004+
self.partial_response_tool_calls = tool_list
3005+
29893006
def remove_reasoning_content(self):
29903007
"""Remove reasoning content from the model's response."""
29913008

aider/sendchat.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ def ensure_alternating_roles(messages):
179179

180180
# Add missing tool responses as empty
181181
for tool_id in expected_ids:
182-
tool_sequence.append({"role": "tool", "tool_call_id": tool_id, "content": ""})
182+
tool_sequence.append(
183+
{"role": "tool", "tool_call_id": tool_id, "content": "(empty response)"}
184+
)
183185

184186
# Add the complete tool sequence to result
185187
for tool_msg in tool_sequence:
@@ -194,7 +196,16 @@ def ensure_alternating_roles(messages):
194196
if role == prev_role:
195197
# Insert empty message of opposite role
196198
opposite_role = "user" if role == "assistant" else "assistant"
197-
result.append({"role": opposite_role, "content": ""})
199+
result.append(
200+
{
201+
"role": opposite_role,
202+
"content": (
203+
"(empty response)"
204+
if opposite_role == "assistant"
205+
else "(empty request)"
206+
),
207+
}
208+
)
198209
prev_role = opposite_role
199210

200211
result.append(msg)
@@ -221,8 +232,8 @@ def ensure_alternating_roles(messages):
221232
current_role in ("user", "assistant")
222233
and last_role in ("user", "assistant")
223234
and current_role == last_role
224-
and msg.get("content") == ""
225-
and last_msg.get("content") == ""
235+
and msg.get("content") in ["", "(empty response)", "(empty request)"]
236+
and last_msg.get("content") in ["", "(empty response)", "(empty request)"]
226237
):
227238
continue
228239

tests/basic/test_sendchat.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def test_ensure_alternating_roles_consecutive_user(self):
133133
]
134134
expected = [
135135
{"role": "user", "content": "Hello"},
136-
{"role": "assistant", "content": ""},
136+
{"role": "assistant", "content": "(empty response)"},
137137
{"role": "user", "content": "Are you there?"},
138138
]
139139
result = ensure_alternating_roles(messages)
@@ -148,7 +148,7 @@ def test_ensure_alternating_roles_consecutive_assistant(self):
148148
]
149149
expected = [
150150
{"role": "assistant", "content": "Hi there"},
151-
{"role": "user", "content": ""},
151+
{"role": "user", "content": "(empty request)"},
152152
{"role": "assistant", "content": "How can I help?"},
153153
]
154154
result = ensure_alternating_roles(messages)
@@ -166,10 +166,10 @@ def test_ensure_alternating_roles_mixed_sequence(self):
166166
]
167167
expected = [
168168
{"role": "user", "content": "Hello"},
169-
{"role": "assistant", "content": ""},
169+
{"role": "assistant", "content": "(empty response)"},
170170
{"role": "user", "content": "Are you there?"},
171171
{"role": "assistant", "content": "Yes"},
172-
{"role": "user", "content": ""},
172+
{"role": "user", "content": "(empty request)"},
173173
{"role": "assistant", "content": "How can I help?"},
174174
{"role": "user", "content": "Write code"},
175175
]

0 commit comments

Comments
 (0)