File size: 4,723 Bytes
8d95406 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import gradio as gr
import os
import random
from functools import partial
from huggingface_hub import InferenceClient
import threading
system_prompt = """
You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.
"""
def inference(prompt, hf_token, model, model_name):
messages = [{"role": "system", "content": system_prompt},{"role":"user","content": prompt}]
if hf_token is None or not hf_token.strip():
hf_token = os.getenv("HF_TOKEN")
client = InferenceClient(model=model, token=hf_token)
tokens=f"**'{model_name}'**\n\n"
for completion in client.chat_completion(messages, max_tokens=1000, stream=True):
token = completion.choices[0].delta.content
tokens += token
yield tokens
def hide_textbox():
return gr.Textbox(visible=False)
def random_prompt():
return random.choice([
"Rédigez une lettre officielle pour demander un rendez-vous à un responsable administratif.",
"Expliquez comment créer un budget mensuel simple pour mieux gérer ses finances personnelles.",
"Rédigez une recette détaillée pour préparer un plat équilibré et rapide, comme une salade de quinoa aux légumes grillés.",
"Proposez une routine matinale de 30 minutes pour améliorer son bien-être physique et mental.",
"Expliquez comment rédiger un CV attractif pour postuler à un emploi dans le domaine technologique.",
"Créez un guide étape par étape pour apprendre à méditer et réduire le stress.",
"Rédigez une lettre de motivation pour candidater à une formation professionnelle.",
"Donnez les instructions pour fabriquer un meuble simple en bois recyclé pour débutants.",
"Expliquez comment organiser un espace de travail à domicile ergonomique et propice à la concentration.",
"Rédigez une recette simple pour faire du pain maison avec des ingrédients de base."
])
with gr.Blocks(theme='JohnSmith9982/small_and_pretty') as demo:
gr.Markdown("<center><h1> Aaron créée par INEDIIA </h1></center>")
gr.Markdown("<center><h2> inediia.com </h2></center>")
gr.Markdown("""
Aaron est un assistant basé sur l'intelligence artificielle conçu pour épauler les utilisateurs dans leurs différentes tâches quotidiennes. Son rôle est d'analyser les demandes et de suggérer des recommandations, tout en gardant à l'esprit que, comme toute IA, il peut commettre des erreurs. Les suggestions d'Aaron doivent donc être systématiquement vérifiées par l'utilisateur. Interface de dialogue intuitive, Aaron enrichit la réflexion en apportant un second regard. Son utilisation requiert un esprit critique constant : chaque proposition doit être évaluée avec soin par l'utilisateur, qui reste seul responsable des choix effectués. Cette version intègre 3 modèles différents : LLama 3, Mistral et QWEN.
""")
prompt = gr.Textbox(label="Prompt", lines=3, max_lines=10)
token = gr.Textbox(label="Hugging face Token", type ="password", placeholder="Your Hugging Face token (not required, but a HF Pro account avoids rate limits)")
with gr.Group():
with gr.Row():
generate_btn = gr.Button(variant="primary", size="sm")
with gr.Row() as output_row:
llama_output = gr.Markdown("Meta-Llama-3-8B")
nous_output = gr.Markdown("Mixtral 8x7B")
pythia_output = gr.Markdown("Qwen2.5-72B")
gr.on(
triggers=[prompt.submit, generate_btn.click],
fn=hide_textbox,
inputs=None,
outputs=[token],
)
gr.on(
triggers=[prompt.submit, generate_btn.click],
fn=partial(inference, model="meta-llama/Meta-Llama-3-8B-Instruct", model_name="Meta-Llama-3-8B-Instruct"),
inputs=[prompt, token],
outputs=[llama_output],
show_progress="hidden"
)
gr.on(
triggers=[prompt.submit, generate_btn.click],
fn=partial(inference, model="NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO", model_name="Nous Hermes 2 Mixtral 8x7B DPO"),
inputs=[prompt, token],
outputs=[nous_output],
show_progress="hidden"
)
gr.on(
triggers=[prompt.submit, generate_btn.click],
fn=partial(inference, model="Qwen/Qwen2.5-72B-Instruct", model_name="Qwen2.5-72B-Instruct"),
inputs =[prompt, token],
outputs=[pythia_output],
show_progress="hidden"
)
demo.launch() |