KongoBrain / train.py
JMonga's picture
Update train.py
3c7cb3b verified
raw
history blame
2.66 kB
import gradio as gr
import json
import os
from huggingface_hub import InferenceClient
# Initialisation du client Hugging Face
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# Fichier de stockage des questions-réponses personnalisées
DATA_FILE = "qna_data.json"
CREATOR_CODE = "LnMonga2025" # Code secret du créateur
# Fonction pour charger les données enregistrées
def load_json():
if not os.path.exists(DATA_FILE) or os.stat(DATA_FILE).st_size == 0:
return {}
try:
with open(DATA_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except json.JSONDecodeError:
return {}
# Fonction pour sauvegarder une nouvelle question-réponse
def save_json(data):
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
# Fonction principale de réponse
def respond(message, history, system_message, max_tokens, temperature, top_p):
data = load_json()
# Vérification si l'utilisateur est le créateur en utilisant le code spécial
if message.startswith(f"{CREATOR_CODE}:input:"):
question = message.replace(f"{CREATOR_CODE}:input:", "").strip()
response = f"{CREATOR_CODE}:output:"
# Demande manuelle de réponse
response = input(f"Entrez la réponse pour '{question}': ").strip()
if response:
data[question] = response
save_json(data)
return f"✅ Réponse enregistrée : {response}"
# Vérifier si la question est déjà enregistrée
if message in data:
return data[message]
# Si non enregistré, utiliser GPT pour répondre normalement
messages = [{"role": "system", "content": system_message}] + [
{"role": "user", "content": q} if i % 2 == 0 else {"role": "assistant", "content": a}
for i, (q, a) in enumerate(history)
] + [{"role": "user", "content": message}]
response = ""
for msg in client.chat_completion(messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p):
token = msg.choices[0].delta.content
response += token
yield response
# Interface Gradio
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(value="You are a friendly Chatbot.", 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()