Unfucked gemini's mess

This commit is contained in:
2025-12-07 03:27:45 +01:00
parent 5b71233fb0
commit a923a760ef
24 changed files with 1885 additions and 1282 deletions
+158 -123
View File
@@ -10,59 +10,68 @@ class TestChatCompletionsEdgeCases:
def test_very_long_message(self, memory):
"""Should handle very long user message."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.return_value = "Response"
mock_llm_class.return_value = mock_llm
from app import app, agent
# Patch the agent's LLM directly
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": "Response"
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
long_message = "x" * 100000
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": long_message}],
})
long_message = "x" * 100000
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": long_message}],
})
assert response.status_code == 200
assert response.status_code == 200
def test_unicode_message(self, memory):
"""Should handle unicode in message."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.return_value = "日本語の応答"
mock_llm_class.return_value = mock_llm
from app import app, agent
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": "日本語の応答"
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "日本語のメッセージ 🎬"}],
})
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "日本語のメッセージ 🎬"}],
})
assert response.status_code == 200
content = response.json()["choices"][0]["message"]["content"]
# Response may vary based on agent behavior
assert "日本語" in content or len(content) > 0
assert response.status_code == 200
content = response.json()["choices"][0]["message"]["content"]
assert "日本語" in content or len(content) > 0
def test_special_characters_in_message(self, memory):
"""Should handle special characters."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.return_value = "Response"
mock_llm_class.return_value = mock_llm
from app import app, agent
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": "Response"
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
special_message = 'Test with "quotes" and \\backslash and \n newline'
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": special_message}],
})
special_message = 'Test with "quotes" and \\backslash and \n newline'
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": special_message}],
})
assert response.status_code == 200
assert response.status_code == 200
def test_empty_content_in_message(self, memory):
"""Should handle empty content in message."""
@@ -152,26 +161,29 @@ class TestChatCompletionsEdgeCases:
def test_many_messages(self, memory):
"""Should handle many messages in conversation."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.return_value = "Response"
mock_llm_class.return_value = mock_llm
from app import app, agent
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": "Response"
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
messages = []
for i in range(100):
messages.append({"role": "user", "content": f"Message {i}"})
messages.append({"role": "assistant", "content": f"Response {i}"})
messages.append({"role": "user", "content": "Final message"})
messages = []
for i in range(100):
messages.append({"role": "user", "content": f"Message {i}"})
messages.append({"role": "assistant", "content": f"Response {i}"})
messages.append({"role": "user", "content": "Final message"})
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": messages,
})
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": messages,
})
assert response.status_code == 200
assert response.status_code == 200
def test_only_system_messages(self, memory):
"""Should reject if only system messages."""
@@ -246,87 +258,110 @@ class TestChatCompletionsEdgeCases:
def test_extra_fields_in_request(self, memory):
"""Should ignore extra fields in request."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.return_value = "Response"
mock_llm_class.return_value = mock_llm
from app import app, agent
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": "Response"
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "Hello"}],
"extra_field": "should be ignored",
"temperature": 0.7,
"max_tokens": 100,
})
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "Hello"}],
"extra_field": "should be ignored",
"temperature": 0.7,
"max_tokens": 100,
})
assert response.status_code == 200
assert response.status_code == 200
def test_streaming_with_tool_call(self, memory, real_folder):
"""Should handle streaming with tool execution."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.side_effect = [
'{"thought": "list", "action": {"name": "list_folder", "args": {"folder_type": "download"}}}',
"Listed the folder.",
]
mock_llm_class.return_value = mock_llm
from app import app, agent
from infrastructure.persistence import get_memory
mem = get_memory()
mem.ltm.set_config("download_folder", str(real_folder["downloads"]))
call_count = [0]
def mock_complete(messages, tools=None):
call_count[0] += 1
if call_count[0] == 1:
return {
"role": "assistant",
"content": None,
"tool_calls": [{
"id": "call_1",
"function": {
"name": "list_folder",
"arguments": '{"folder_type": "download"}'
}
}]
}
return {
"role": "assistant",
"content": "Listed the folder."
}
mock_llm = Mock()
mock_llm.complete = Mock(side_effect=mock_complete)
agent.llm = mock_llm
client = TestClient(app)
from app import app
from infrastructure.persistence import get_memory
mem = get_memory()
mem.ltm.set_config("download_folder", str(real_folder["downloads"]))
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "List downloads"}],
"stream": True,
})
client = TestClient(app)
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "List downloads"}],
"stream": True,
})
assert response.status_code == 200
assert response.status_code == 200
def test_concurrent_requests_simulation(self, memory):
"""Should handle rapid sequential requests."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
mock_llm.complete.return_value = "Response"
mock_llm_class.return_value = mock_llm
from app import app, agent
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": "Response"
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
for i in range(10):
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": f"Request {i}"}],
})
assert response.status_code == 200
for i in range(10):
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": f"Request {i}"}],
})
assert response.status_code == 200
def test_llm_returns_json_in_response(self, memory):
"""Should handle LLM returning JSON in text response."""
with patch("app.DeepSeekClient") as mock_llm_class:
mock_llm = Mock()
# LLM returns JSON but not a tool call
mock_llm.complete.return_value = '{"result": "some data", "count": 5}'
mock_llm_class.return_value = mock_llm
from app import app, agent
mock_llm = Mock()
mock_llm.complete.return_value = {
"role": "assistant",
"content": '{"result": "some data", "count": 5}'
}
agent.llm = mock_llm
client = TestClient(app)
from app import app
client = TestClient(app)
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "Give me JSON"}],
})
response = client.post("/v1/chat/completions", json={
"model": "agent-media",
"messages": [{"role": "user", "content": "Give me JSON"}],
})
assert response.status_code == 200
# Should return the JSON as-is since it's not a tool call
content = response.json()["choices"][0]["message"]["content"]
# May parse as tool call or return as text
assert "result" in content or len(content) > 0
assert response.status_code == 200
content = response.json()["choices"][0]["message"]["content"]
assert "result" in content or len(content) > 0
class TestMemoryEndpointsEdgeCases: