Nasro31's picture
Restore original app before kabyle-voice experiment
480c8c1 verified
Raw
History Blame Contribute Delete
6.67 kB
import gradio as gr
from huggingface_hub import InferenceClient
import base64
from PIL import Image
import io
# Client d'inférence pour Apriel-1.6-15b-Thinker
model_id = "ServiceNow-AI/Apriel-1.6-15b-Thinker"
client = InferenceClient(model=model_id)
def encode_image_to_base64(image):
"""Encode l'image en base64 pour l'API"""
if image is None:
return None
buffered = io.BytesIO()
image.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
return f"data:image/png;base64,{img_str}"
def chat_with_apriel(message, history, image=None, temperature=0.6, max_tokens=1024):
"""Fonction de chatbot avec support texte et image"""
if not message:
return ""
try:
messages = []
for user_msg, assistant_msg in history:
messages.append({"role": "user", "content": user_msg})
messages.append({"role": "assistant", "content": assistant_msg})
if image is not None:
img_b64 = encode_image_to_base64(image)
messages.append({"role": "user", "content": [{"type": "text", "text": message}, {"type": "image_url", "image_url": {"url": img_b64}}]})
else:
messages.append({"role": "user", "content": message})
response = client.chat_completion(messages=messages, max_tokens=max_tokens, temperature=temperature, stream=False)
return response.choices[0].message.content
except Exception as e:
return f"⚠️ Erreur: {str(e)}\n\nLe modèle peut prendre ~30s au premier démarrage."
def generate_text(prompt, temperature=0.6, max_tokens=1024):
"""Fonction de génération de texte"""
if not prompt:
return ""
try:
messages = [{"role": "user", "content": prompt}]
response = client.chat_completion(messages=messages, max_tokens=max_tokens, temperature=temperature, stream=False)
return response.choices[0].message.content
except Exception as e:
return f"⚠️ Erreur: {str(e)}\n\nLe modèle peut prendre ~30s au premier démarrage."
with gr.Blocks(title="Apriel Chatbot Complete") as demo:
gr.Markdown("""
# 🤖 Apriel-1.6-15B-Thinker - Interface Complète
Modèle multimodal 15B paramètres - ServiceNow AI
🚀 **Utilise l'API Inference HuggingFace** - Rapide & performant!
""")
with gr.Tabs():
with gr.Tab("💬 Chatbot"):
gr.Markdown("### Chat interactif avec Apriel")
with gr.Row():
with gr.Column(scale=2):
chatbot = gr.Chatbot(label="Conversation", height=500)
with gr.Row():
msg = gr.Textbox(label="Message", placeholder="Votre message...", scale=4)
with gr.Row():
image_input = gr.Image(label="Image (optionnelle)", type="pil", height=200)
with gr.Row():
clear = gr.Button("🗑️ Effacer")
submit = gr.Button("📤 Envoyer", variant="primary")
with gr.Column(scale=1):
gr.Markdown("### ⚙️ Paramètres")
temperature_chat = gr.Slider(0.1, 1.0, 0.6, 0.1, label="Température")
max_tokens_chat = gr.Slider(128, 2048, 1024, 128, label="Tokens max")
gr.Markdown("""
### 📚 Capacités
- Raisonnement complexe
- Images & texte
- Code & math
- Conversations
**Note:** 1ère réponse ~30s
""")
def respond(message, chat_history, image, temp, max_tok):
if not message:
return "", chat_history, None
bot_message = chat_with_apriel(message, chat_history, image, temp, max_tok)
chat_history.append((message, bot_message))
return "", chat_history, None
submit.click(respond, [msg, chatbot, image_input, temperature_chat, max_tokens_chat], [msg, chatbot, image_input])
msg.submit(respond, [msg, chatbot, image_input, temperature_chat, max_tokens_chat], [msg, chatbot, image_input])
clear.click(lambda: (None, None), None, [chatbot, image_input], queue=False)
with gr.Tab("✨ Génération"):
gr.Markdown("### Génération de texte")
with gr.Row():
with gr.Column(scale=2):
prompt_input = gr.Textbox(label="Prompt", placeholder="Entrez votre prompt...", lines=5)
generate_btn = gr.Button("🚀 Générer", variant="primary")
output_text = gr.Textbox(label="Réponse", lines=15)
with gr.Column(scale=1):
gr.Markdown("### ⚙️ Paramètres")
temperature_gen = gr.Slider(0.1, 1.0, 0.6, 0.1, label="Température")
max_tokens_gen = gr.Slider(128, 2048, 1024, 128, label="Tokens max")
gr.Markdown("""
### 💡 Exemples
- "Explique le concept de..."
- "Écris une fonction Python..."
- "Résous ce problème math..."
""")
generate_btn.click(generate_text, inputs=[prompt_input, temperature_gen, max_tokens_gen], outputs=output_text)
with gr.Tab("ℹ️ À propos"):
gr.Markdown("""
## Apriel-1.6-15B-Thinker
### 🎯 Caractéristiques
- **15B paramètres** - Compact mais puissant
- **Multimodal** - Texte + Images
- **Raisonnement avancé**
- **30% plus efficace** que v1.5
- **Score 57** sur Artificial Analysis
### 📊 Performance
- MMMU: 72% | MathVista: 79.9%
- AIME 25: 88% | IFBench: 69%
### 🚀 Architecture
Utilise **l'API Inference HuggingFace**:
- 💨 Réponses rapides
- ⚙️ Infrastructure GPU optimisée
- 🌐 Disponibilité maximale
### 🔗 Liens
- [Modèle HF](https://huggingface.co/ServiceNow-AI/Apriel-1.6-15b-Thinker)
- [Blog Post](https://huggingface.co/blog/ServiceNow-AI/apriel-1p6-15b-thinker)
MIT License - ServiceNow AI
""")
if __name__ == "__main__":
demo.launch(theme=gr.themes.Soft())