This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import pytest
|
||||
import asyncio
|
||||
import itertools
|
||||
|
||||
from traderai.agent import OllamaAgent, SYSTEM_PROMPT
|
||||
from traderai.memory import MemoryStore
|
||||
@@ -217,6 +218,38 @@ def test_ollama_options_include_num_ctx():
|
||||
assert agent._ollama_options() == {"num_ctx": 64000}
|
||||
|
||||
|
||||
def test_deepseek_tool_rounds_are_not_capped_at_ten():
|
||||
agent = OllamaAgent("https://api.deepseek.com", "deepseek-v4-flash", EmptyTools(), provider="deepseek", api_key="test")
|
||||
|
||||
rounds = list(itertools.islice(agent._tool_rounds(), 12))
|
||||
|
||||
assert len(rounds) == 12
|
||||
|
||||
|
||||
def test_plan_draft_normalization_extracts_json_and_defaults():
|
||||
seed = {"title": "Wikelo Polaris", "objective": "Find parts", "kind": "buying", "constraints": {}, "items": []}
|
||||
raw = 'draft:\n{"title":"Wikelo Polaris Parts","objective":"Find and draft deals for the parts below","kind":"buying","cadence":"0 */3 * * *","constraints":{"message_tone":"casual","instructions":"Prioritize cheap listings first."},"items":[{"item_name":"RCMBNT-RGL-1","desired_quantity":2}]}'
|
||||
|
||||
draft = OllamaAgent._normalize_plan_draft(raw, seed)
|
||||
|
||||
assert draft["title"] == "Wikelo Polaris Parts"
|
||||
assert draft["cadence"] == "0 */3 * * *"
|
||||
assert draft["constraints"]["message_tone"] == "casual"
|
||||
assert draft["items"][0]["item_name"] == "RCMBNT-RGL-1"
|
||||
assert draft["items"][0]["desired_quantity"] == 2
|
||||
|
||||
|
||||
def test_plan_draft_heuristic_fills_in_basic_instructions():
|
||||
seed = {"title": "Watch open negotiations", "objective": "", "kind": "custom", "constraints": {}, "items": []}
|
||||
|
||||
draft = OllamaAgent._heuristic_plan_draft(seed)
|
||||
|
||||
assert draft["kind"] == "custom"
|
||||
assert draft["cadence"] == "0 */4 * * *"
|
||||
assert "summarize" in draft["constraints"]["instructions"].casefold()
|
||||
assert draft["constraints"]["message_tone"] == "friendly and direct"
|
||||
|
||||
|
||||
def test_codex_prompt_mentions_tools_and_images(tmp_path):
|
||||
memory = MemoryStore(str(tmp_path / "memory.sqlite3"))
|
||||
agent = OllamaAgent("codex", "gpt-5.3-codex", EmptyTools(), memory=memory, provider="codex")
|
||||
@@ -257,6 +290,34 @@ def test_codex_prompt_mentions_tools_and_images(tmp_path):
|
||||
assert "tool search_marketplace_listings" in prompt
|
||||
|
||||
|
||||
def test_deepseek_openai_messages_include_reasoning_content_for_tool_turns():
|
||||
agent = OllamaAgent("https://api.deepseek.com", "deepseek-v4-flash", EmptyTools(), provider="deepseek", api_key="test")
|
||||
|
||||
messages = agent._openai_messages(
|
||||
"check listing",
|
||||
[
|
||||
{"role": "system", "content": SYSTEM_PROMPT},
|
||||
{"role": "user", "content": "Check this listing"},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "",
|
||||
"reasoning_content": "I should check the current listing first.",
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": "call_123",
|
||||
"type": "function",
|
||||
"function": {"name": "search_marketplace_listings", "arguments": "{\"query\":\"panel\"}"},
|
||||
}
|
||||
],
|
||||
},
|
||||
{"role": "tool", "tool_name": "search_marketplace_listings", "tool_call_id": "call_123", "content": "{\"ok\":true}"},
|
||||
],
|
||||
)
|
||||
|
||||
assistant_turn = next(message for message in messages if message["role"] == "assistant")
|
||||
assert assistant_turn["reasoning_content"] == "I should check the current listing first."
|
||||
|
||||
|
||||
def test_codex_structured_response_extracts_text_and_tool_calls():
|
||||
agent = OllamaAgent("codex", "gpt-5.3-codex", EmptyTools(), provider="codex")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user