nanobot/debug_nanobot.py
Tanya e6b5ead3fd Merge origin/main into feature branch
- Merged latest 166 commits from origin/main
- Resolved conflicts in .gitignore, commands.py, schema.py, providers/__init__.py, and registry.py
- Kept both local providers (Ollama, AirLLM) and new providers from main
- Preserved transformers 4.39.3 compatibility fixes
- Combined error handling improvements with new features
2026-02-18 13:03:19 -05:00

103 lines
3.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""Debug script to test nanobot AirLLM setup"""
import sys
import asyncio
import traceback
# Ensure output is not buffered
sys.stdout.reconfigure(line_buffering=True)
sys.stderr.reconfigure(line_buffering=True)
def log(msg):
print(msg, flush=True)
sys.stderr.write(f"{msg}\n")
sys.stderr.flush()
log("=" * 60)
log("NANOBOT AIRLLM DEBUG SCRIPT")
log("=" * 60)
try:
log("\n[1/6] Adding current directory to path...")
import os
sys.path.insert(0, os.getcwd())
log("[2/6] Importing nanobot modules...")
from nanobot.config.loader import load_config
from nanobot.bus.queue import MessageBus
from nanobot.agent.loop import AgentLoop
from nanobot.cli.commands import _make_provider
log("[3/6] Loading configuration...")
config = load_config()
log(f" Provider name: {config.get_provider_name()}")
log(f" Default model: {config.agents.defaults.model}")
log("[4/6] Creating provider...")
provider = _make_provider(config)
log(f" Provider type: {type(provider).__name__}")
log(f" Default model: {provider.get_default_model()}")
log("[5/6] Creating agent loop...")
bus = MessageBus()
agent_loop = AgentLoop(
bus=bus,
provider=provider,
workspace=config.workspace_path,
brave_api_key=config.tools.web.search.api_key or None,
exec_config=config.tools.exec,
restrict_to_workspace=config.tools.restrict_to_workspace,
)
log(" Agent loop created successfully")
log("[6/6] Processing test message...")
log(" Message: 'Hello, what is 2+5?'")
async def process():
try:
response = await agent_loop.process_direct("Hello, what is 2+5?", "cli:debug")
log(f"\n{'='*60}")
log("RESPONSE RECEIVED")
log(f"{'='*60}")
log(f"Response object: {response}")
log(f"Response type: {type(response)}")
if response:
log(f"Response content: {repr(response.content)}")
log(f"Content length: {len(response.content) if response.content else 0}")
log(f"\n{'='*60}")
log("FINAL OUTPUT:")
log(f"{'='*60}")
print(response.content or "(empty response)")
else:
log("ERROR: Response is None!")
return 1
except Exception as e:
log(f"\n{'='*60}")
log("ERROR DURING PROCESSING")
log(f"{'='*60}")
log(f"Exception: {e}")
log(f"Type: {type(e).__name__}")
traceback.print_exc()
return 1
return 0
exit_code = asyncio.run(process())
sys.exit(exit_code)
except ImportError as e:
log(f"\n{'='*60}")
log("IMPORT ERROR")
log(f"{'='*60}")
log(f"Failed to import: {e}")
traceback.print_exc()
sys.exit(1)
except Exception as e:
log(f"\n{'='*60}")
log("UNEXPECTED ERROR")
log(f"{'='*60}")
log(f"Exception: {e}")
log(f"Type: {type(e).__name__}")
traceback.print_exc()
sys.exit(1)