package xx.xxxx.guidetouristiqueaveclangchain.gpt;

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import jakarta.enterprise.context.RequestScoped;

/**
 * Gère l'interface avec l'API OpenAI en utilisant LangChain4j.
 * Son rôle est essentiellement de lancer une requête à chaque nouvelle
 * question qu'on veut envoyer à l'API.
 */
@RequestScoped
public class OpenAiClientForGuideTouristique implements java.io.Serializable {
    private GuideTouristique guideTouristique;

    public OpenAiClientForGuideTouristique() {
        String openAiKey = System.getenv("CHATGPT_KEY");
        // Par défaut c'est le modèle "gpt-3.5-turbo" qui est utilisé.
        // Si on voulait utiliser, par exemple, le modèle "gpt-4.0-turbo", et fixer la température à 0.5 (par défaut 0.7),
        // OpenAiChatModel model = OpenAiChatModel.builder().apiKey(...).modelName("gpt-4.0-turbo").temperature(0.5).build();
        ChatLanguageModel model = OpenAiChatModel.withApiKey(openAiKey);
        this.guideTouristique = AiServices.builder(GuideTouristique.class)
                .chatLanguageModel(model)
                .build();
    }

    /**
     * Envoie une requête à l'API OpenAI.
     * @param villeOuPays nom d'une ville ou d'un pays.
     * @return réponse de l'API (voir interface GuideTouristique).
     */
    public String envoyerRequete(String villeOuPays) {
        // Envoie la requête pour la question
        return guideTouristique.infosVilleOuPays(villeOuPays);
    }
}