import React, { useState, useRef, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; import { InferenceClient } from "@huggingface/inference"; import Avatar from './Avatar.jsx'; import '../App.css'; const ChatInterface = ({ messages = [], setMessages = () => {}, onMessageSent = () => {}, toLogin }) => { const [inputMessage, setInputMessage] = useState(''); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const textareaRef = useRef(null); // Initialisation du client Hugging Face (idéalement dans un .env) const hfClient = new InferenceClient(process.env.REACT_APP_HF_TOKEN || "votre_token_ici"); console.log(hfClient); const isMarkdown = (text) => /[#*_>`-]/.test(text); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); }; useEffect(() => { scrollToBottom(); }, [messages]); const sendMessage = async (message) => { try { setIsLoading(true); onMessageSent(message); // Appel au modèle Mistral via Hugging Face const chatCompletion = await hfClient.chatCompletion({ provider: "novita", // Vous pouvez aussi utiliser "novita" ou d'autres providers model: "mistralai/Mistral-7B-Instruct-v0.3", messages: [ { role: "system", content: "Tu es un assistant médical expert spécialisé uniquement dans la schizophrénie. Réponds uniquement aux questions concernant la schizophrénie. Si la question concerne un autre sujet médical, refuse poliment de répondre." }, { role: "user", content: message } ], max_tokens: 512, temperature: 0.7, }); // Extraction de la réponse const botResponse = chatCompletion.choices[0].message.content; setMessages(prev => [ ...prev, { sender: 'user', text: message }, { sender: 'bot', text: botResponse } ]); setIsLoading(false); } catch (error) { console.error("Erreur:", error); setIsLoading(false); setMessages(prev => [ ...prev, { sender: 'user', text: message }, { sender: 'bot', text: "Désolé, une erreur s'est produite. Veuillez réessayer. 👍" } ]); } }; const handleSubmit = (e) => { e.preventDefault(); if (inputMessage.trim() === '') return; sendMessage(inputMessage); if (textareaRef.current) { textareaRef.current.style.height = 'auto'; } setInputMessage(''); }; // Le reste du composant reste inchangé return (
Bonjour ! Comment puis-je vous aider aujourd'hui ? 🧑⚕️