add: cheshire-cat configuration, tooling, tests, and documentation

Configuration:
- .env.example, .gitignore, compose.yml (main docker compose)
- docker-compose-amd.yml (ROCm), docker-compose-macos.yml
- start.sh, stop.sh convenience scripts
- LICENSE (Apache 2.0, from upstream Cheshire Cat)

Memory management utilities:
- analyze_consolidation.py, manual_consolidation.py, verify_consolidation.py
- check_memories.py, extract_declarative_facts.py, store_declarative_facts.py
- compare_systems.py (system comparison tool)
- benchmark_cat.py, streaming_benchmark.py, streaming_benchmark_v2.py

Test suite:
- quick_test.py, test_setup.py, test_setup_simple.py
- test_consolidation_direct.py, test_declarative_recall.py, test_recall.py
- test_end_to_end.py, test_full_pipeline.py
- test_phase2.py, test_phase2_comprehensive.py

Documentation:
- README.md, QUICK_START.txt, TEST_README.md, SETUP_COMPLETE.md
- PHASE2_IMPLEMENTATION_NOTES.md, PHASE2_TEST_RESULTS.md
- POST_OPTIMIZATION_ANALYSIS.md
This commit is contained in:
2026-03-04 00:51:14 +02:00
parent eafab336b4
commit ae1e0aa144
35 changed files with 6055 additions and 0 deletions

132
cheshire-cat/quick_test.py Executable file
View File

@@ -0,0 +1,132 @@
#!/usr/bin/env python3
"""
Quick Test - Verify Cheshire Cat is working with Miku personality
"""
import requests
import time
CAT_URL = "http://localhost:1865"
def test_query(query, timeout=60):
"""Test a single query"""
print(f"\n❓ Query: {query}")
start = time.time()
try:
response = requests.post(
f"{CAT_URL}/message",
json={"text": query},
headers={"Content-Type": "application/json"},
timeout=timeout
)
elapsed = (time.time() - start) * 1000
if response.status_code == 200:
data = response.json()
content = data.get("content", "")
# Check if it's a tool call (shouldn't be)
if content.startswith('{"name":'):
print(f" ❌ Got tool call instead of text ({elapsed:.0f}ms)")
print(f" Content: {content[:100]}")
return False
print(f" ✅ Success ({elapsed:.0f}ms)")
print(f" Response: {content}")
return True
else:
print(f" ❌ HTTP {response.status_code} ({elapsed:.0f}ms)")
return False
except requests.exceptions.Timeout:
print(f" ⏱️ Timeout after {timeout}s (model might be loading)")
return False
except Exception as e:
print(f" ❌ Error: {e}")
return False
def main():
print("=" * 70)
print("🐱 Cheshire Cat Quick Test - Miku Personality")
print("=" * 70)
# Check if Cat is running
try:
response = requests.get(f"{CAT_URL}/", timeout=5)
print(f"\n✅ Cat is running (v{response.json().get('version', 'unknown')})")
except:
print("\n❌ Cat is not responding at http://localhost:1865")
print(" Make sure containers are running:")
print(" docker-compose -f docker-compose.test.yml up -d")
return
# Check plugin status
try:
response = requests.get(f"{CAT_URL}/plugins/", timeout=5)
plugins = response.json()
miku_plugin = None
for plugin in plugins.get('installed', []):
if plugin['id'] == 'miku_personality':
miku_plugin = plugin
break
if miku_plugin:
if miku_plugin['active']:
print(f"✅ Miku personality plugin is ACTIVE")
else:
print(f"⚠️ Miku personality plugin is INACTIVE")
print(" Activating...")
requests.put(f"{CAT_URL}/plugins/toggle/miku_personality")
print(" ✅ Activated!")
else:
print("❌ Miku personality plugin not found")
except Exception as e:
print(f"⚠️ Could not check plugin status: {e}")
# Test queries
print("\n" + "=" * 70)
print("Running test queries...")
print("=" * 70)
queries = [
"Hi! What's your name?",
"What is your favorite food?",
"Who are your friends?",
]
success_count = 0
# First query might be slow (model loading)
print("\n⏳ First query may take 30-45s (loading darkidol model)...")
for query in queries:
if test_query(query):
success_count += 1
time.sleep(2)
# Results
print("\n" + "=" * 70)
print("📊 RESULTS")
print("=" * 70)
print(f"Successful: {success_count}/{len(queries)}")
if success_count == len(queries):
print("\n✅ ALL TESTS PASSED!")
print("\nNext steps:")
print(" - Run full benchmarks: python3 benchmark_cat.py")
print(" - Compare systems: python3 compare_systems.py")
print(" - Use admin panel: http://localhost:1865/admin")
elif success_count > 0:
print("\n⚠️ SOME TESTS FAILED")
print(" Check logs: docker logs miku_cheshire_cat_test")
else:
print("\n❌ ALL TESTS FAILED")
print(" Troubleshooting:")
print(" 1. Check logs: docker logs miku_cheshire_cat_test")
print(" 2. Check llama-swap: docker logs llama-swap-amd")
print(" 3. Verify network: docker inspect miku_cheshire_cat_test")
if __name__ == "__main__":
main()