mirror of
https://github.com/Xe138/AI-Trader.git
synced 2026-04-13 21:47:25 -04:00
feat: add mock AI provider for dev mode with stock rotation
This commit is contained in:
4
agent/mock_provider/__init__.py
Normal file
4
agent/mock_provider/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
"""Mock AI provider for development mode testing"""
|
||||||
|
from .mock_ai_provider import MockAIProvider
|
||||||
|
|
||||||
|
__all__ = ["MockAIProvider"]
|
||||||
60
agent/mock_provider/mock_ai_provider.py
Normal file
60
agent/mock_provider/mock_ai_provider.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
"""
|
||||||
|
Mock AI Provider for Development Mode
|
||||||
|
|
||||||
|
Returns static but rotating trading responses to test orchestration without AI API costs.
|
||||||
|
Rotates through NASDAQ 100 stocks in a predictable pattern.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class MockAIProvider:
|
||||||
|
"""Mock AI provider that returns pre-defined trading responses"""
|
||||||
|
|
||||||
|
# Rotation of stocks for variety in testing
|
||||||
|
STOCK_ROTATION = [
|
||||||
|
"AAPL", "MSFT", "GOOGL", "AMZN", "NVDA",
|
||||||
|
"META", "TSLA", "BRK.B", "UNH", "JNJ"
|
||||||
|
]
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
"""Initialize mock provider"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def generate_response(self, date: str, step: int = 0) -> str:
|
||||||
|
"""
|
||||||
|
Generate mock trading response based on date
|
||||||
|
|
||||||
|
Args:
|
||||||
|
date: Trading date (YYYY-MM-DD)
|
||||||
|
step: Current step in reasoning loop (0-indexed)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Mock AI response string with tool calls and finish signal
|
||||||
|
"""
|
||||||
|
# Use date to deterministically select stock
|
||||||
|
date_obj = datetime.strptime(date, "%Y-%m-%d")
|
||||||
|
day_offset = (date_obj - datetime(2025, 1, 1)).days
|
||||||
|
stock_idx = day_offset % len(self.STOCK_ROTATION)
|
||||||
|
selected_stock = self.STOCK_ROTATION[stock_idx]
|
||||||
|
|
||||||
|
# Generate mock response
|
||||||
|
response = f"""Let me analyze the market for today ({date}).
|
||||||
|
|
||||||
|
I'll check the current price for {selected_stock}.
|
||||||
|
[calls tool_get_price with symbol={selected_stock}]
|
||||||
|
|
||||||
|
Based on the analysis, I'll make a small purchase to test the system.
|
||||||
|
[calls tool_trade with action=buy, symbol={selected_stock}, amount=5]
|
||||||
|
|
||||||
|
I've completed today's trading session.
|
||||||
|
<FINISH_SIGNAL>"""
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "MockAIProvider(mode=development)"
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.__str__()
|
||||||
34
tests/unit/test_mock_provider.py
Normal file
34
tests/unit/test_mock_provider.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import pytest
|
||||||
|
from agent.mock_provider.mock_ai_provider import MockAIProvider
|
||||||
|
|
||||||
|
|
||||||
|
def test_mock_provider_rotates_stocks():
|
||||||
|
"""Test that mock provider returns different stocks on different days"""
|
||||||
|
provider = MockAIProvider()
|
||||||
|
|
||||||
|
# Day 1 should recommend AAPL
|
||||||
|
response1 = provider.generate_response("2025-01-01", step=0)
|
||||||
|
assert "AAPL" in response1
|
||||||
|
assert "<FINISH_SIGNAL>" in response1
|
||||||
|
|
||||||
|
# Day 2 should recommend MSFT
|
||||||
|
response2 = provider.generate_response("2025-01-02", step=0)
|
||||||
|
assert "MSFT" in response2
|
||||||
|
assert "<FINISH_SIGNAL>" in response2
|
||||||
|
|
||||||
|
# Responses should be different
|
||||||
|
assert response1 != response2
|
||||||
|
|
||||||
|
|
||||||
|
def test_mock_provider_finish_signal():
|
||||||
|
"""Test that all responses include finish signal"""
|
||||||
|
provider = MockAIProvider()
|
||||||
|
response = provider.generate_response("2025-01-01", step=0)
|
||||||
|
assert "<FINISH_SIGNAL>" in response
|
||||||
|
|
||||||
|
|
||||||
|
def test_mock_provider_valid_json_tool_calls():
|
||||||
|
"""Test that responses contain valid tool call syntax"""
|
||||||
|
provider = MockAIProvider()
|
||||||
|
response = provider.generate_response("2025-01-01", step=0)
|
||||||
|
assert "[calls tool_get_price" in response or "get_price" in response.lower()
|
||||||
Reference in New Issue
Block a user