fix(agent): enhance 413 error handling and improve conversation history management in tests
This commit is contained in:
parent
2c817ce4a5
commit
19f28a633a
4 changed files with 23 additions and 5 deletions
|
|
@ -539,6 +539,7 @@ class TelegramAdapter(BasePlatformAdapter):
|
||||||
try:
|
try:
|
||||||
text_content = raw_bytes.decode("utf-8")
|
text_content = raw_bytes.decode("utf-8")
|
||||||
display_name = original_filename or f"document{ext}"
|
display_name = original_filename or f"document{ext}"
|
||||||
|
display_name = re.sub(r'[^\w.\- ]', '_', display_name)
|
||||||
injection = f"[Content of {display_name}]:\n{text_content}"
|
injection = f"[Content of {display_name}]:\n{text_content}"
|
||||||
if event.text:
|
if event.text:
|
||||||
event.text = f"{injection}\n\n{event.text}"
|
event.text = f"{injection}\n\n{event.text}"
|
||||||
|
|
|
||||||
|
|
@ -2099,6 +2099,7 @@ class AIAgent:
|
||||||
is_payload_too_large = (
|
is_payload_too_large = (
|
||||||
status_code == 413
|
status_code == 413
|
||||||
or 'request entity too large' in error_msg
|
or 'request entity too large' in error_msg
|
||||||
|
or 'payload too large' in error_msg
|
||||||
or 'error code: 413' in error_msg
|
or 'error code: 413' in error_msg
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,18 +88,24 @@ class TestHTTP413Compression:
|
||||||
ok_resp = _mock_response(content="Success after compression", finish_reason="stop")
|
ok_resp = _mock_response(content="Success after compression", finish_reason="stop")
|
||||||
agent.client.chat.completions.create.side_effect = [err_413, ok_resp]
|
agent.client.chat.completions.create.side_effect = [err_413, ok_resp]
|
||||||
|
|
||||||
|
# Prefill so there are multiple messages for compression to reduce
|
||||||
|
prefill = [
|
||||||
|
{"role": "user", "content": "previous question"},
|
||||||
|
{"role": "assistant", "content": "previous answer"},
|
||||||
|
]
|
||||||
|
|
||||||
with (
|
with (
|
||||||
patch.object(agent, "_compress_context") as mock_compress,
|
patch.object(agent, "_compress_context") as mock_compress,
|
||||||
patch.object(agent, "_persist_session"),
|
patch.object(agent, "_persist_session"),
|
||||||
patch.object(agent, "_save_trajectory"),
|
patch.object(agent, "_save_trajectory"),
|
||||||
patch.object(agent, "_cleanup_task_resources"),
|
patch.object(agent, "_cleanup_task_resources"),
|
||||||
):
|
):
|
||||||
# Compression removes messages, enabling retry
|
# Compression reduces 3 messages down to 1
|
||||||
mock_compress.return_value = (
|
mock_compress.return_value = (
|
||||||
[{"role": "user", "content": "hello"}],
|
[{"role": "user", "content": "hello"}],
|
||||||
"compressed prompt",
|
"compressed prompt",
|
||||||
)
|
)
|
||||||
result = agent.run_conversation("hello")
|
result = agent.run_conversation("hello", conversation_history=prefill)
|
||||||
|
|
||||||
mock_compress.assert_called_once()
|
mock_compress.assert_called_once()
|
||||||
assert result["completed"] is True
|
assert result["completed"] is True
|
||||||
|
|
@ -111,6 +117,11 @@ class TestHTTP413Compression:
|
||||||
ok_resp = _mock_response(content="Recovered", finish_reason="stop")
|
ok_resp = _mock_response(content="Recovered", finish_reason="stop")
|
||||||
agent.client.chat.completions.create.side_effect = [err_413, ok_resp]
|
agent.client.chat.completions.create.side_effect = [err_413, ok_resp]
|
||||||
|
|
||||||
|
prefill = [
|
||||||
|
{"role": "user", "content": "previous question"},
|
||||||
|
{"role": "assistant", "content": "previous answer"},
|
||||||
|
]
|
||||||
|
|
||||||
with (
|
with (
|
||||||
patch.object(agent, "_compress_context") as mock_compress,
|
patch.object(agent, "_compress_context") as mock_compress,
|
||||||
patch.object(agent, "_persist_session"),
|
patch.object(agent, "_persist_session"),
|
||||||
|
|
@ -121,7 +132,7 @@ class TestHTTP413Compression:
|
||||||
[{"role": "user", "content": "hello"}],
|
[{"role": "user", "content": "hello"}],
|
||||||
"compressed",
|
"compressed",
|
||||||
)
|
)
|
||||||
result = agent.run_conversation("hello")
|
result = agent.run_conversation("hello", conversation_history=prefill)
|
||||||
|
|
||||||
# If 413 were treated as generic 4xx, result would have "failed": True
|
# If 413 were treated as generic 4xx, result would have "failed": True
|
||||||
assert result.get("failed") is not True
|
assert result.get("failed") is not True
|
||||||
|
|
@ -133,6 +144,11 @@ class TestHTTP413Compression:
|
||||||
ok_resp = _mock_response(content="OK", finish_reason="stop")
|
ok_resp = _mock_response(content="OK", finish_reason="stop")
|
||||||
agent.client.chat.completions.create.side_effect = [err, ok_resp]
|
agent.client.chat.completions.create.side_effect = [err, ok_resp]
|
||||||
|
|
||||||
|
prefill = [
|
||||||
|
{"role": "user", "content": "previous question"},
|
||||||
|
{"role": "assistant", "content": "previous answer"},
|
||||||
|
]
|
||||||
|
|
||||||
with (
|
with (
|
||||||
patch.object(agent, "_compress_context") as mock_compress,
|
patch.object(agent, "_compress_context") as mock_compress,
|
||||||
patch.object(agent, "_persist_session"),
|
patch.object(agent, "_persist_session"),
|
||||||
|
|
@ -143,7 +159,7 @@ class TestHTTP413Compression:
|
||||||
[{"role": "user", "content": "hello"}],
|
[{"role": "user", "content": "hello"}],
|
||||||
"compressed",
|
"compressed",
|
||||||
)
|
)
|
||||||
result = agent.run_conversation("hello")
|
result = agent.run_conversation("hello", conversation_history=prefill)
|
||||||
|
|
||||||
mock_compress.assert_called_once()
|
mock_compress.assert_called_once()
|
||||||
assert result["completed"] is True
|
assert result["completed"] is True
|
||||||
|
|
|
||||||
|
|
@ -468,7 +468,7 @@ class TestBuildApiKwargs:
|
||||||
kwargs = agent._build_api_kwargs(messages)
|
kwargs = agent._build_api_kwargs(messages)
|
||||||
assert kwargs["model"] == agent.model
|
assert kwargs["model"] == agent.model
|
||||||
assert kwargs["messages"] is messages
|
assert kwargs["messages"] is messages
|
||||||
assert kwargs["timeout"] == 600.0
|
assert kwargs["timeout"] == 900.0
|
||||||
|
|
||||||
def test_provider_preferences_injected(self, agent):
|
def test_provider_preferences_injected(self, agent):
|
||||||
agent.providers_allowed = ["Anthropic"]
|
agent.providers_allowed = ["Anthropic"]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue