#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Script d'exemple pour tester les différentes classes LLM
Ce script montre comment initialiser et utiliser chacune des classes
"""

from llm_classes import Mistral, Ollama, DeepSeek, Perplexity, DeepL, RAG

def test_mistral():
    """Test de la classe Mistral"""
    print("\n===== Test Mistral =====")
    
    # Initialisation
    mistral = Mistral()
    mistral.prompt_system = "Tu es un assistant expert concis et précis. Réponds en français."
    
    # Interrogation
    question = "Explique le concept de programmation orientée objet en 3 points clés."
    print(f"Question: {question}")
    response = mistral.Interroger(question)
    print(f"Réponse: {response}")
    
    # Information sur la durée
    print(f"Temps de traitement: {mistral.dureeTraitement.total_seconds()} secondes")

def test_ollama():
    """Test de la classe Ollama"""
    print("\n===== Test Ollama =====")
    
    # Initialisation
    ollama = Ollama()
    ollama.prompt_system = "Tu es un assistant technique expert. Réponds en français."
    
    # Configuration des paramètres avancés
    ollama.o_temperature = 0.7
    ollama.o_num_ctx = 4096
    
    # Interrogation
    question = "Quelles sont les différences entre Python et JavaScript?"
    print(f"Question: {question}")
    response = ollama.Interroger(question)
    print(f"Réponse: {response}")

def test_deepseek():
    """Test de la classe DeepSeek"""
    print("\n===== Test DeepSeek =====")
    
    # Initialisation
    deepseek = DeepSeek()
    deepseek.prompt_system = "Tu es un assistant IA. Réponds en français."
    
    # Configuration
    deepseek.max_tokens = 1000
    
    # Interrogation
    question = "Explique-moi le théorème de Bayes de manière simple."
    print(f"Question: {question}")
    response = deepseek.Interroger(question)
    print(f"Réponse: {response}")

def test_perplexity():
    """Test de la classe Perplexity"""
    print("\n===== Test Perplexity =====")
    
    # Initialisation
    perplexity = Perplexity()
    # Le prompt system est déjà défini par défaut
    
    # Configuration de recherche
    perplexity.search_recency_filter = "year"
    
    # Interrogation
    question = "Quelles sont les dernières avancées en intelligence artificielle en 2023?"
    print(f"Question: {question}")
    response = perplexity.Interroger(question)
    print(f"Réponse: {response}")

def test_deepl():
    """Test de la classe DeepL pour la traduction"""
    print("\n===== Test DeepL =====")
    
    # Initialisation
    translator = DeepL()
    
    # Traduction français -> anglais
    translator.langueSource = "FR"
    translator.langueDesti = "EN"
    text = "L'intelligence artificielle révolutionne notre façon de travailler et de vivre."
    print(f"Texte original (FR): {text}")
    translated = translator.Interroger(text)
    print(f"Traduction (EN): {translated}")
    
    # Traduction anglais -> français
    translator.langueSource = "EN"
    translator.langueDesti = "FR"
    text = "Artificial intelligence is transforming the way we process and understand information."
    print(f"Texte original (EN): {text}")
    translated = translator.Interroger(text)
    print(f"Traduction (FR): {translated}")

def test_rag():
    """Test de la classe RAG"""
    print("\n===== Test RAG =====")
    
    # Initialisation
    rag = RAG()
    
    # Interrogation
    question = "Quels sont les principes fondamentaux de l'apprentissage par renforcement?"
    print(f"Question formatée: {RAG.formateQuestion(question)}")
    
    # Note: Cette partie peut échouer si le service RAG n'est pas accessible
    try:
        response = rag.Chat(question)
        print(f"Réponse: {response}")
    except Exception as e:
        print(f"Erreur lors de l'interrogation RAG: {e}")

def main():
    """Fonction principale qui exécute tous les tests"""
    print("TESTS DES CLASSES LLM")
    print("=====================")
    
    # Sélectionnez les tests à exécuter en décommentant les lignes
    test_mistral()
    test_ollama()
    test_deepseek()
    test_perplexity()
    test_deepl()
    test_rag()
    
    print("\nTous les tests sont terminés!")

if __name__ == "__main__":
    main() 