mirror of
https://github.com/Xe138/AI-Trader.git
synced 2026-04-02 01:27:24 -04:00
Compare commits
2 Commits
v0.4.2-alp
...
v0.4.2-alp
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c73f30583 | |||
| b73d88ca8f |
@@ -32,22 +32,30 @@ class ToolCallArgsParsingWrapper:
|
||||
# Model doesn't have this method (e.g., MockChatModel), skip patching
|
||||
return
|
||||
|
||||
# CRITICAL: Also patch parse_tool_call to see what it's returning
|
||||
from langchain_core.output_parsers import openai_tools
|
||||
original_parse_tool_call = openai_tools.parse_tool_call
|
||||
# CRITICAL: Patch parse_tool_call in base.py's namespace (not in openai_tools module!)
|
||||
from langchain_openai.chat_models import base as langchain_base
|
||||
original_parse_tool_call = langchain_base.parse_tool_call
|
||||
|
||||
def patched_parse_tool_call(raw_tool_call, *, partial=False, strict=False, return_id=True):
|
||||
"""Patched parse_tool_call to log what it returns"""
|
||||
"""Patched parse_tool_call to fix string args bug and add logging"""
|
||||
result = original_parse_tool_call(raw_tool_call, partial=partial, strict=strict, return_id=return_id)
|
||||
if result:
|
||||
args_type = type(result.get('args', None)).__name__
|
||||
print(f"[DIAGNOSTIC] parse_tool_call returned: args type = {args_type}")
|
||||
if args_type == 'str':
|
||||
print(f"[DIAGNOSTIC] ⚠️ BUG FOUND! parse_tool_call returned STRING args: {result['args']}")
|
||||
print(f"[DIAGNOSTIC] ⚠️ BUG FOUND! parse_tool_call returned STRING args, fixing...")
|
||||
# FIX: parse_tool_call sometimes returns string args instead of dict
|
||||
# This happens when it fails to parse but doesn't raise an exception
|
||||
try:
|
||||
result['args'] = json.loads(result['args'])
|
||||
print(f"[DIAGNOSTIC] ✓ Fixed! Converted string args to dict")
|
||||
except (json.JSONDecodeError, TypeError) as e:
|
||||
print(f"[DIAGNOSTIC] ❌ Failed to parse args: {e}")
|
||||
# Leave as string if we can't parse it
|
||||
return result
|
||||
|
||||
# Replace globally
|
||||
openai_tools.parse_tool_call = patched_parse_tool_call
|
||||
# Replace in base.py's namespace (where _convert_dict_to_message uses it)
|
||||
langchain_base.parse_tool_call = patched_parse_tool_call
|
||||
|
||||
original_create_chat_result = self.wrapped_model._create_chat_result
|
||||
|
||||
|
||||
Reference in New Issue
Block a user