Spaces:
Runtime error
Runtime error
import gradio as gr | |
import json | |
import requests | |
from huggingface_hub import InferenceClient | |
# Modèle de Hugging Face | |
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") | |
# Fichier JSON contenant les mises à jour manuelles | |
JSON_FILE = "actualites.json" | |
# Code secret pour identifier le créateur | |
CREATOR_CODE = "LnMonga2025" | |
# Fonction pour charger les informations stockées | |
def load_json(): | |
try: | |
with open(JSON_FILE, "r", encoding="utf-8") as f: | |
return json.load(f) | |
except FileNotFoundError: | |
return {} # Retourne un dictionnaire vide si le fichier n'existe pas | |
# Fonction pour sauvegarder de nouvelles informations | |
def save_json(data): | |
with open(JSON_FILE, "w", encoding="utf-8") as f: | |
json.dump(data, f, indent=4, ensure_ascii=False) | |
# Fonction pour rechercher des informations sur Internet | |
def search_online(query): | |
url = f"https://www.googleapis.com/customsearch/v1?q={query}&key=TON_API_KEY&cx=TON_CX_ID" | |
try: | |
response = requests.get(url).json() | |
if "items" in response: | |
return f"{response['items'][0]['title']} - {response['items'][0]['link']}" | |
else: | |
return "❌ Désolé, je ne trouve pas cette information en ligne." | |
except Exception: | |
return "❌ Erreur lors de la recherche d'informations." | |
# Fonction principale | |
def respond(message, history, system_message, max_tokens, temperature, top_p): | |
# Charger les informations mises à jour | |
data = load_json() | |
# Vérifier si la question a déjà été enregistrée | |
if message.lower() in data: | |
return data[message.lower()] | |
# Vérifier si l'utilisateur est le créateur | |
if message.startswith(CREATOR_CODE + ": input:"): | |
_, user_message = message.split(": input:", 1) | |
return f"🔒 Bonjour Créateur ! Entrez la réponse pour : '{user_message.strip()}'" | |
elif message.startswith(CREATOR_CODE + ": output:"): | |
_, user_response = message.split(": output:", 1) | |
# Récupérer la question qui a été posée juste avant | |
last_question = history[-1][0] if history else None | |
if last_question: | |
data[last_question.lower()] = user_response.strip() | |
save_json(data) | |
return "✅ Réponse enregistrée avec succès !" | |
else: | |
return "❌ Impossible d'enregistrer la réponse, aucune question associée." | |
# Vérifier si c'est une question d'actualité | |
if "gouverneur du nord-kivu" in message.lower(): | |
return search_online("Gouverneur actuel du Nord-Kivu 2025") | |
# Utilisation du modèle GPT si aucune réponse n'est trouvée | |
messages = [{"role": "system", "content": system_message}] | |
for val in history: | |
if val[0]: | |
messages.append({"role": "user", "content": val[0]}) | |
if val[1]: | |
messages.append({"role": "assistant", "content": val[1]}) | |
messages.append({"role": "user", "content": message}) | |
response = "" | |
for msg in client.chat_completion(messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p): | |
response += msg.choices[0].delta.content | |
yield response | |
# Interface Gradio | |
demo = gr.ChatInterface( | |
respond, | |
additional_inputs=[ | |
gr.Textbox(value="Vous êtes un assistant intelligent.", label="System message"), | |
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), | |
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), | |
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"), | |
], | |
) | |
if __name__ == "__main__": | |
demo.launch() | |