Files
ajarbot/test_installation.py
Jordan Ramos a99799bf3d Initial commit: Ajarbot with optimizations
Features:
- Multi-platform bot (Slack, Telegram)
- Memory system with SQLite FTS
- Tool use capabilities (file ops, commands)
- Scheduled tasks system
- Dynamic model switching (/sonnet, /haiku)
- Prompt caching for cost optimization

Optimizations:
- Default to Haiku 4.5 (12x cheaper)
- Reduced context: 3 messages, 2 memory results
- Optimized SOUL.md (48% smaller)
- Automatic caching when using Sonnet (90% savings)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-13 19:06:28 -07:00

210 lines
5.6 KiB
Python

"""
Installation verification script for Windows 11.
Tests all core components without making API calls.
"""
import sys
from pathlib import Path
def test_python_version() -> bool:
"""Check Python version is 3.8+."""
version = sys.version_info
if version.major >= 3 and version.minor >= 8:
print(f" Python {version.major}.{version.minor}.{version.micro}")
return True
print(f" [FAIL] Python {version.major}.{version.minor} is too old")
print(" Please install Python 3.8 or higher")
return False
def test_imports() -> bool:
"""Test all required imports."""
required_modules = [
("anthropic", "Anthropic SDK"),
("requests", "Requests"),
("watchdog", "Watchdog"),
]
optional_modules = [
("slack_bolt", "Slack Bolt (for Slack adapter)"),
("telegram", "python-telegram-bot (for Telegram adapter)"),
("yaml", "PyYAML"),
]
all_ok = True
print("\nRequired modules:")
for module_name, display_name in required_modules:
try:
__import__(module_name)
print(f" {display_name}")
except ImportError:
print(f" [FAIL] {display_name} not installed")
all_ok = False
print("\nOptional modules:")
for module_name, display_name in optional_modules:
try:
__import__(module_name)
print(f" {display_name}")
except ImportError:
print(f" [SKIP] {display_name} (optional)")
return all_ok
def test_core_modules() -> bool:
"""Test core ajarbot modules can be imported."""
core_modules = [
"agent",
"memory_system",
"llm_interface",
"pulse_brain",
"scheduled_tasks",
"heartbeat",
"hooks",
]
all_ok = True
print("\nCore modules:")
for module_name in core_modules:
try:
__import__(module_name)
print(f" {module_name}.py")
except Exception as e:
print(f" [FAIL] {module_name}.py: {e}")
all_ok = False
return all_ok
def test_file_structure() -> bool:
"""Check required files and directories exist."""
required_paths = [
("agent.py", "file"),
("memory_system.py", "file"),
("llm_interface.py", "file"),
("pulse_brain.py", "file"),
("bot_runner.py", "file"),
("requirements.txt", "file"),
("adapters", "dir"),
("config", "dir"),
("docs", "dir"),
]
all_ok = True
print("\nProject structure:")
for path_str, path_type in required_paths:
path = Path(path_str)
if path_type == "file":
exists = path.is_file()
else:
exists = path.is_dir()
if exists:
print(f" {path_str}")
else:
print(f" [FAIL] {path_str} not found")
all_ok = False
return all_ok
def test_environment() -> bool:
"""Check environment variables."""
import os
print("\nEnvironment variables:")
api_key = os.getenv("ANTHROPIC_API_KEY")
if api_key:
masked = api_key[:10] + "..." + api_key[-4:]
print(f" ANTHROPIC_API_KEY: {masked}")
else:
print(" [WARN] ANTHROPIC_API_KEY not set")
print(" You'll need to set this before running examples")
glm_key = os.getenv("GLM_API_KEY")
if glm_key:
print(" GLM_API_KEY: set (optional)")
else:
print(" [INFO] GLM_API_KEY not set (optional)")
return True
def test_memory_workspace() -> bool:
"""Check or create memory workspace."""
workspace = Path("memory_workspace")
print("\nMemory workspace:")
if workspace.exists():
print(f" memory_workspace/ exists")
db_file = workspace / "memory.db"
if db_file.exists():
size_mb = db_file.stat().st_size / 1024 / 1024
print(f" Database size: {size_mb:.2f} MB")
else:
print(" [INFO] memory_workspace/ will be created on first run")
return True
def main() -> None:
"""Run all tests."""
print("=" * 60)
print("Ajarbot Installation Verification")
print("=" * 60)
tests = [
("Python version", test_python_version),
("Dependencies", test_imports),
("Core modules", test_core_modules),
("File structure", test_file_structure),
("Environment", test_environment),
("Memory workspace", test_memory_workspace),
]
results = {}
for test_name, test_func in tests:
print(f"\n[TEST] {test_name}")
try:
results[test_name] = test_func()
except Exception as e:
print(f" [ERROR] {e}")
results[test_name] = False
print("\n" + "=" * 60)
print("Summary")
print("=" * 60)
passed = sum(1 for result in results.values() if result)
total = len(results)
for test_name, result in results.items():
status = "PASS" if result else "FAIL"
print(f" [{status}] {test_name}")
print(f"\nPassed: {passed}/{total}")
if passed == total:
print("\nAll tests passed!")
print("\nNext steps:")
print(" 1. Set ANTHROPIC_API_KEY if not already set")
print(" 2. Run: python example_usage.py")
print(" 3. See docs/WINDOWS_DEPLOYMENT.md for more options")
else:
print("\nSome tests failed. Please:")
print(" 1. Ensure Python 3.8+ is installed")
print(" 2. Run: pip install -r requirements.txt")
print(" 3. Check you're in the correct directory")
print(" 4. See docs/WINDOWS_DEPLOYMENT.md for help")
print("\n" + "=" * 60)
if __name__ == "__main__":
main()