130 lines
4.8 KiB
Python
130 lines
4.8 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Test script for Ollama integration
|
|
Tests connection, configuration, and summarization
|
|
"""
|
|
from config import Config
|
|
from ollama_client import OllamaClient
|
|
|
|
print("\n" + "="*70)
|
|
print("Ollama Integration Test")
|
|
print("="*70)
|
|
|
|
# Print configuration
|
|
Config.print_config()
|
|
|
|
# Validate configuration
|
|
issues = Config.validate()
|
|
if issues:
|
|
print("⚠ Configuration Issues:")
|
|
for issue in issues:
|
|
print(f" - {issue}")
|
|
print()
|
|
|
|
# Initialize client
|
|
client = OllamaClient(
|
|
base_url=Config.OLLAMA_BASE_URL,
|
|
model=Config.OLLAMA_MODEL,
|
|
api_key=Config.OLLAMA_API_KEY,
|
|
enabled=Config.OLLAMA_ENABLED,
|
|
timeout=Config.OLLAMA_TIMEOUT
|
|
)
|
|
|
|
# Test 1: Check if Ollama is enabled
|
|
print("Test 1: Configuration Check")
|
|
print(f" Ollama Enabled: {Config.OLLAMA_ENABLED}")
|
|
if not Config.OLLAMA_ENABLED:
|
|
print(" ⚠ Ollama is disabled. Set OLLAMA_ENABLED=true in .env to enable.")
|
|
print("\n" + "="*70)
|
|
exit(0)
|
|
|
|
# Test 2: Test connection
|
|
print("\nTest 2: Connection Test")
|
|
conn_result = client.test_connection()
|
|
print(f" Available: {conn_result['available']}")
|
|
print(f" Current Model: {conn_result['current_model']}")
|
|
|
|
if conn_result['available']:
|
|
print(f" ✓ Connected to Ollama server")
|
|
if conn_result['models']:
|
|
print(f" Available models: {', '.join(conn_result['models'][:5])}")
|
|
if conn_result['current_model'] not in conn_result['models']:
|
|
print(f" ⚠ Warning: Model '{conn_result['current_model']}' not found in available models")
|
|
else:
|
|
print(f" ✗ Connection failed: {conn_result['error']}")
|
|
print("\n" + "="*70)
|
|
exit(1)
|
|
|
|
# Test 3: Test summarization with sample article
|
|
print("\nTest 3: Summarization Test")
|
|
print(" Testing with sample German article...")
|
|
|
|
sample_article = """
|
|
Die neue U-Bahn-Linie, die das Münchner Stadtzentrum mit dem Flughafen verbindet, wurde heute eröffnet.
|
|
Oberbürgermeister Dieter Reiter nahm zusammen mit hunderten Anwohnern an der Eröffnungszeremonie teil.
|
|
Die Linie wird die Reisezeit zwischen dem Flughafen und der Münchner Innenstadt erheblich verkürzen.
|
|
Der Bau dauerte fünf Jahre und kostete etwa 2 Milliarden Euro. Die neue Linie umfasst 10 Stationen
|
|
und verkehrt während der Hauptverkehrszeiten alle 10 Minuten. Experten erwarten, dass die neue Verbindung
|
|
den Verkehr in der Stadt deutlich entlasten wird. Die Münchner Verkehrsgesellschaft rechnet mit täglich
|
|
über 50.000 Fahrgästen auf der neuen Strecke.
|
|
"""
|
|
|
|
result = client.summarize_article(sample_article, max_words=Config.SUMMARY_MAX_WORDS)
|
|
|
|
print(f"\n Success: {result['success']}")
|
|
if result['success']:
|
|
print(f" ✓ Summarization successful!")
|
|
print(f"\n Original word count: {result['original_word_count']}")
|
|
print(f" Summary word count: {result['summary_word_count']}")
|
|
print(f" Compression ratio: {result['original_word_count'] / max(result['summary_word_count'], 1):.1f}x")
|
|
print(f" Duration: {result['duration']:.2f}s")
|
|
print(f"\n Summary (English):")
|
|
print(f" {'-'*70}")
|
|
print(f" {result['summary']}")
|
|
print(f" {'-'*70}")
|
|
else:
|
|
print(f" ✗ Summarization failed: {result['error']}")
|
|
|
|
# Test 4: Test with English article
|
|
print("\nTest 4: English Article Test")
|
|
print(" Testing with English article...")
|
|
|
|
english_article = """
|
|
The city council approved a new bike lane network spanning 50 kilometers across Munich.
|
|
The project aims to promote sustainable transportation and reduce car traffic in the city center.
|
|
Construction will begin next month and is expected to be completed within two years.
|
|
The bike lanes will connect major residential areas with business districts and public transport hubs.
|
|
Environmental groups have praised the initiative as a significant step toward carbon neutrality.
|
|
"""
|
|
|
|
result2 = client.summarize_article(english_article, max_words=50)
|
|
|
|
print(f"\n Success: {result2['success']}")
|
|
if result2['success']:
|
|
print(f" ✓ Summarization successful!")
|
|
print(f" Original: {result2['original_word_count']} words → Summary: {result2['summary_word_count']} words")
|
|
print(f" Duration: {result2['duration']:.2f}s")
|
|
print(f"\n Summary:")
|
|
print(f" {result2['summary']}")
|
|
else:
|
|
print(f" ✗ Summarization failed: {result2['error']}")
|
|
|
|
# Summary
|
|
print("\n" + "="*70)
|
|
print("Test Summary")
|
|
print("="*70)
|
|
print(f"✓ Configuration: Valid")
|
|
print(f"✓ Connection: {'Success' if conn_result['available'] else 'Failed'}")
|
|
print(f"✓ German→English: {'Success' if result['success'] else 'Failed'}")
|
|
print(f"✓ English→English: {'Success' if result2['success'] else 'Failed'}")
|
|
print("="*70)
|
|
|
|
if result['success'] and result2['success']:
|
|
print("\n🎉 All tests passed! Ollama integration is working correctly.")
|
|
print("\nYou can now run the crawler with AI summarization:")
|
|
print(" python crawler_service.py 5")
|
|
else:
|
|
print("\n⚠ Some tests failed. Check the errors above.")
|
|
|
|
print()
|