fix-cron-scheduled-tasks #1
@ -221,13 +221,19 @@ class AgentLoop:
|
|||||||
args_str = json.dumps(tool_call.arguments, ensure_ascii=False)
|
args_str = json.dumps(tool_call.arguments, ensure_ascii=False)
|
||||||
logger.info(f"Tool call: {tool_call.name}({args_str[:200]})")
|
logger.info(f"Tool call: {tool_call.name}({args_str[:200]})")
|
||||||
result = await self.tools.execute(tool_call.name, tool_call.arguments)
|
result = await self.tools.execute(tool_call.name, tool_call.arguments)
|
||||||
|
logger.info(f"Tool result length: {len(result) if result else 0}, preview: {result[:200] if result else 'None'}")
|
||||||
messages = self.context.add_tool_result(
|
messages = self.context.add_tool_result(
|
||||||
messages, tool_call.id, tool_call.name, result
|
messages, tool_call.id, tool_call.name, result
|
||||||
)
|
)
|
||||||
|
logger.debug(f"Added tool result to messages. Total messages: {len(messages)}")
|
||||||
else:
|
else:
|
||||||
final_content = self._strip_think(response.content)
|
final_content = self._strip_think(response.content)
|
||||||
|
logger.info(f"Final response generated. Content length: {len(final_content) if final_content else 0}")
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if final_content is None and iteration >= self.max_iterations:
|
||||||
|
logger.warning(f"Max iterations ({self.max_iterations}) reached without final response. Last tool calls: {tools_used[-3:] if len(tools_used) >= 3 else tools_used}")
|
||||||
|
|
||||||
return final_content, tools_used
|
return final_content, tools_used
|
||||||
|
|
||||||
async def run(self) -> None:
|
async def run(self) -> None:
|
||||||
|
|||||||
@ -3,11 +3,37 @@
|
|||||||
import json
|
import json
|
||||||
import json_repair
|
import json_repair
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
# Workaround for litellm's os.getcwd() issue during import
|
||||||
|
# litellm/proxy/proxy_cli.py does sys.path.append(os.getcwd()) which can fail
|
||||||
|
# if the current directory was deleted. Patch os.getcwd() to handle this gracefully.
|
||||||
|
_original_getcwd = os.getcwd
|
||||||
|
def _safe_getcwd():
|
||||||
|
try:
|
||||||
|
cwd = _original_getcwd()
|
||||||
|
# Verify the directory actually exists
|
||||||
|
if not os.path.exists(cwd):
|
||||||
|
raise FileNotFoundError(f"Current directory does not exist: {cwd}")
|
||||||
|
return cwd
|
||||||
|
except (FileNotFoundError, OSError):
|
||||||
|
# Return a safe fallback directory (home directory)
|
||||||
|
fallback = os.path.expanduser("~")
|
||||||
|
# Ensure fallback exists
|
||||||
|
if not os.path.exists(fallback):
|
||||||
|
fallback = "/tmp"
|
||||||
|
return fallback
|
||||||
|
|
||||||
|
# Patch os.getcwd before importing litellm
|
||||||
|
os.getcwd = _safe_getcwd
|
||||||
|
|
||||||
import litellm
|
import litellm
|
||||||
from litellm import acompletion
|
from litellm import acompletion
|
||||||
|
|
||||||
|
# Restore original getcwd after import
|
||||||
|
os.getcwd = _original_getcwd
|
||||||
|
|
||||||
from nanobot.providers.base import LLMProvider, LLMResponse, ToolCallRequest
|
from nanobot.providers.base import LLMProvider, LLMResponse, ToolCallRequest
|
||||||
from nanobot.providers.registry import find_by_model, find_gateway
|
from nanobot.providers.registry import find_by_model, find_gateway
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user