- 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
103 lines
3.1 KiB
Python
Executable File
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)
|
|
|