nordabiz/scripts/simulate_model_comparison.py
Maciej Pienczyn 5030b71beb
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
chore: update Author to Maciej Pienczyn, InPi sp. z o.o. across all files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 08:20:47 +02:00

174 lines
6.9 KiB
Python

#!/usr/bin/env python3
"""
Model Comparison Simulator
==========================
Simulates conversations with different Gemini models for comparison.
Usage:
python scripts/simulate_model_comparison.py
Author: Maciej Pienczyn, InPi sp. z o.o.
Created: 2026-01-29
"""
import os
import sys
import json
from datetime import datetime
# Add parent directory to path for imports
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from dotenv import load_dotenv
load_dotenv()
from database import SessionLocal, AIChatConversation, AIChatMessage, User
from nordabiz_chat import NordaBizChatEngine
# Questions to compare (from Artur's and Maciej's conversations)
COMPARISON_QUESTIONS = {
'artur': {
'user_id': 3,
'user_name': 'Artur Wiertel',
'original_conversation_id': 63,
'questions': [
{
'id': 1,
'question': 'ilu członków ma izba norda?',
'type': 'simple',
'original_answer': 'Izba Norda Biznes zrzesza obecnie 111 firm.'
},
{
'id': 2,
'question': 'czy w izbie są osoby gotowe do współpracy przy wspólnych projektach inwestycyjnych?',
'type': 'complex',
'original_answer': 'W Norda Biznes posiadamy firmy otwarte na współpracę przy projektach inwestycyjnych. Szczególnie interesujące mogą być podmioty z kategorii Budownictwo, Nieruchomości oraz Usługi Biznesowe. Czy szukasz konkretnego rodzaju partnera lub projektu?'
},
{
'id': 3,
'question': 'Mam pomysł i projekt ciekawego przedsięwzięcia inwestycyjnego - budowa nieruchomości komercyjnej. Szukam partnerów - 3 osoby, wkład na poziomie 1,5 mln netto',
'type': 'business',
'original_answer': 'Poszukujesz partnerów do inwestycji w nieruchomość komercyjną. W naszej bazie znajdują się firmy, które mogą być zainteresowane takim przedsięwzięciem. Warto zwrócić uwagę na: ARD Invest, Progress Optima...'
},
{
'id': 4,
'question': 'a co sądzisz o firmie sigma?',
'type': 'company',
'original_answer': 'Firma Sigma Budownictwo to generalny wykonawca robót budowlanych, który ma na swoim koncie portfolio ponad 250 tys. m² powierzchni użytkowej, w tym hale przemysłowe. Jest to rodzinna firma z Wejherowa, zarządzana przez Romana i Tomasza Wiercińskich.'
},
{
'id': 5,
'question': 'co myślisz o pomysłach Jacka Pomieczyńskiego na forum?',
'type': 'analysis',
'original_answer': 'Chętnie pomogę! Aby odpowiedzieć na Twoje pytanie o pomysły Jacka Pomieczyńskiego, potrzebuję więcej informacji. Czy możesz sprecyzować, o jakie konkretnie pomysły chodzi?'
}
]
},
'maciej': {
'user_id': 1,
'user_name': 'Maciej Pienczyn',
'original_conversation_id': 62,
'questions': [
{
'id': 1,
'question': 'Kto jest prezesem PIXLAB?',
'type': 'simple',
'original_answer': 'Prezesem firmy Pixlab Softwarehouse jest Michał Bogdan Roszman.'
},
{
'id': 2,
'question': 'jakie znasz inne firmy IT w Norda?',
'type': 'listing',
'original_answer': 'W Norda Biznes działa kilka firm z branży IT i Telekomunikacja. Są to między innymi VENCODE, oferujące dedykowane aplikacje oparte na sztucznej inteligencji i technologii blockchain, oraz Delkom, specjalizujący się w usługach IT, cyberbezpieczeństwie i doradztwie informatycznym.'
},
{
'id': 3,
'question': 'podaj osoby kontaktowe - będę budował sieć komputerową',
'type': 'contact',
'original_answer': 'Wśród firm z branży IT i telekomunikacja, które mogą pomóc w budowie sieci komputerowej, znajdują się: Chopin Telewizja Kablowa: Operator telekomunikacyjny...'
}
]
}
}
def run_simulation():
"""Run model comparison simulation."""
print("=" * 60)
print("MODEL COMPARISON SIMULATION")
print(f"New model: gemini-3-flash-preview")
print(f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
print("=" * 60)
# Initialize chat engine (uses new model from app config)
try:
chat_engine = NordaBizChatEngine()
print(f"✓ Chat engine initialized with model: {chat_engine.gemini_service.model_name}")
except Exception as e:
print(f"✗ Failed to initialize chat engine: {e}")
return None
results = {}
for user_key, user_data in COMPARISON_QUESTIONS.items():
print(f"\n--- {user_data['user_name']} ---")
results[user_key] = {
'user_id': user_data['user_id'],
'user_name': user_data['user_name'],
'original_conversation_id': user_data['original_conversation_id'],
'comparisons': []
}
for q in user_data['questions']:
print(f"\nQ{q['id']}: {q['question'][:50]}...")
try:
# Get response from new model
response = chat_engine.chat(
user_message=q['question'],
user_id=user_data['user_id'],
conversation_id=None, # New conversation context
save_to_db=False # Don't save simulation
)
new_answer = response.get('response', 'Brak odpowiedzi')
print(f" ✓ Got response ({len(new_answer)} chars)")
except Exception as e:
new_answer = f"Error: {str(e)}"
print(f" ✗ Error: {e}")
results[user_key]['comparisons'].append({
'question_id': q['id'],
'question': q['question'],
'type': q['type'],
'old_model': 'gemini-2.5-flash-lite',
'old_answer': q['original_answer'],
'new_model': 'gemini-3-flash-preview',
'new_answer': new_answer
})
# Save results to JSON
output_file = os.path.join(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
'data',
'model_comparison_results.json'
)
os.makedirs(os.path.dirname(output_file), exist_ok=True)
with open(output_file, 'w', encoding='utf-8') as f:
json.dump({
'generated_at': datetime.now().isoformat(),
'old_model': 'gemini-2.5-flash-lite',
'new_model': 'gemini-3-flash-preview',
'results': results
}, f, ensure_ascii=False, indent=2)
print(f"\n✓ Results saved to: {output_file}")
return results
if __name__ == '__main__':
run_simulation()