mirror of
https://github.com/Xe138/AI-Trader.git
synced 2026-04-09 12:17:24 -04:00
Compare commits
4 Commits
v0.3.0-alp
...
v0.3.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
| 8521f685c7 | |||
| bf12e981fe | |||
| a16bac5d08 | |||
| 81b92e293a |
@@ -5,7 +5,7 @@ This interceptor automatically injects `signature` and `today_date` parameters
|
|||||||
into buy/sell tool calls to support concurrent multi-model simulations.
|
into buy/sell tool calls to support concurrent multi-model simulations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Any, Dict
|
from typing import Any, Callable, Awaitable
|
||||||
|
|
||||||
|
|
||||||
class ContextInjector:
|
class ContextInjector:
|
||||||
@@ -28,23 +28,31 @@ class ContextInjector:
|
|||||||
self.signature = signature
|
self.signature = signature
|
||||||
self.today_date = today_date
|
self.today_date = today_date
|
||||||
|
|
||||||
def __call__(self, tool_name: str, tool_input: Dict[str, Any]) -> Dict[str, Any]:
|
async def __call__(
|
||||||
|
self,
|
||||||
|
request: Any, # MCPToolCallRequest
|
||||||
|
handler: Callable[[Any], Awaitable[Any]]
|
||||||
|
) -> Any: # MCPToolCallResult
|
||||||
"""
|
"""
|
||||||
Intercept tool call and inject context parameters.
|
Intercept tool call and inject context parameters.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
tool_name: Name of the tool being called
|
request: Tool call request containing name and arguments
|
||||||
tool_input: Original tool input parameters
|
handler: Async callable to execute the actual tool
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Modified tool input with injected context
|
Result from handler after injecting context
|
||||||
"""
|
"""
|
||||||
# Only inject for trade tools (buy/sell)
|
# Inject signature and today_date for trade tools
|
||||||
if tool_name in ["buy", "sell"]:
|
if request.name in ["buy", "sell"]:
|
||||||
# Inject signature and today_date if not already provided
|
# Add signature and today_date to args if not present
|
||||||
if "signature" not in tool_input:
|
if "signature" not in request.args:
|
||||||
tool_input["signature"] = self.signature
|
request.args["signature"] = self.signature
|
||||||
if "today_date" not in tool_input:
|
if "today_date" not in request.args:
|
||||||
tool_input["today_date"] = self.today_date
|
request.args["today_date"] = self.today_date
|
||||||
|
|
||||||
return tool_input
|
# Debug logging
|
||||||
|
print(f"[ContextInjector] Tool: {request.name}, Args after injection: {request.args}")
|
||||||
|
|
||||||
|
# Call the actual tool handler
|
||||||
|
return await handler(request)
|
||||||
|
|||||||
@@ -44,8 +44,10 @@ def buy(symbol: str, amount: int, signature: str = None, today_date: str = None)
|
|||||||
"""
|
"""
|
||||||
# Step 1: Get environment variables and basic information
|
# Step 1: Get environment variables and basic information
|
||||||
# Get signature (model name) from parameter or fallback to config/env
|
# Get signature (model name) from parameter or fallback to config/env
|
||||||
|
print(f"[buy] Received signature parameter: {signature}")
|
||||||
if signature is None:
|
if signature is None:
|
||||||
signature = get_config_value("SIGNATURE")
|
signature = get_config_value("SIGNATURE")
|
||||||
|
print(f"[buy] Signature from config: {signature}")
|
||||||
if signature is None:
|
if signature is None:
|
||||||
raise ValueError("SIGNATURE not provided and environment variable is not set")
|
raise ValueError("SIGNATURE not provided and environment variable is not set")
|
||||||
|
|
||||||
@@ -59,9 +61,7 @@ def buy(symbol: str, amount: int, signature: str = None, today_date: str = None)
|
|||||||
try:
|
try:
|
||||||
current_position, current_action_id = get_latest_position(today_date, signature)
|
current_position, current_action_id = get_latest_position(today_date, signature)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
return {"error": f"Failed to get position: {str(e)}", "signature": signature, "date": today_date}
|
||||||
print(current_position, current_action_id)
|
|
||||||
print(today_date, signature)
|
|
||||||
# Step 3: Get stock opening price for the day
|
# Step 3: Get stock opening price for the day
|
||||||
# Use get_open_prices function to get the opening price of specified stock for the day
|
# Use get_open_prices function to get the opening price of specified stock for the day
|
||||||
# If stock symbol does not exist or price data is missing, KeyError exception will be raised
|
# If stock symbol does not exist or price data is missing, KeyError exception will be raised
|
||||||
@@ -151,7 +151,10 @@ def sell(symbol: str, amount: int, signature: str = None, today_date: str = None
|
|||||||
# Step 2: Get current latest position and operation ID
|
# Step 2: Get current latest position and operation ID
|
||||||
# get_latest_position returns two values: position dictionary and current maximum operation ID
|
# get_latest_position returns two values: position dictionary and current maximum operation ID
|
||||||
# This ID is used to ensure each operation has a unique identifier
|
# This ID is used to ensure each operation has a unique identifier
|
||||||
current_position, current_action_id = get_latest_position(today_date, signature)
|
try:
|
||||||
|
current_position, current_action_id = get_latest_position(today_date, signature)
|
||||||
|
except Exception as e:
|
||||||
|
return {"error": f"Failed to get position: {str(e)}", "signature": signature, "date": today_date}
|
||||||
|
|
||||||
# Step 3: Get stock opening price for the day
|
# Step 3: Get stock opening price for the day
|
||||||
# Use get_open_prices function to get the opening price of specified stock for the day
|
# Use get_open_prices function to get the opening price of specified stock for the day
|
||||||
|
|||||||
Reference in New Issue
Block a user