Spaces:
Running
Running
File size: 2,732 Bytes
971fd00 77063b5 22f0020 77063b5 d23f41e bed4b10 77063b5 22f0020 e5eb20b 77063b5 53d47a7 77063b5 53d47a7 77063b5 971fd00 77063b5 | 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 | import os
import gradio as gr
from openai import OpenAI
# 1) Ton token Hugging Face (HF_TOKEN doit être défini dans Settings → Secrets)
HF_TOKEN = os.environ.get("HF_TOKEN")
if not HF_TOKEN:
raise RuntimeError(
"La variable d'environnement HF_TOKEN n'est pas définie.\n"
"Va dans Settings → Variables and secrets → Secrets et ajoute HF_TOKEN "
"avec ton token Hugging Face (celui qui a la permission « Inference Providers »)."
)
# 2) Client OpenAI configuré pour passer par le router Hugging Face
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=HF_TOKEN,
)
# 3) Modèle supporté par HF Inference (gratuit dans la limite de la free tier)
MODEL_ID = "katanemo/Arch-Router-1.5B:hf-inference"
SYSTEM_PROMPT = """
Tu es ArtGPT, un assistant spécialisé à 100% dans l'art :
- illustration, dessin, peinture, graphisme,
- composition, couleur, lumière,
- histoire de l'art, mouvements artistiques,
- direction artistique, portfolio,
- conseils logiciels et création visuelle.
Règles :
- Tu réponds uniquement en français.
- Si la question n’est pas liée à l’art ou à la création visuelle,
tu rediriges gentiment vers ces thèmes.
- Tu donnes des réponses claires, structurées, pédagogiques.
- Tu proposes volontiers des exercices pratiques.
"""
def answer(question: str) -> str:
question = (question or "").strip()
if not question:
return "Écris une question sur l’art pour commencer 🙂"
try:
completion = client.chat.completions.create(
model=MODEL_ID,
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": question},
],
max_tokens=512,
temperature=0.7,
top_p=0.95,
)
# Avec la nouvelle lib openai, le contenu est dans .message.content
return completion.choices[0].message.content
except Exception as e:
# On affiche une erreur lisible au lieu du gros JSON
return f"Erreur lors de l'appel au modèle :\n\n{e}"
demo = gr.Interface(
fn=answer,
inputs=gr.Textbox(
label="Pose ta question sur l'art",
placeholder="Ex : Donne-moi un exercice pour progresser en composition d’affiche.",
),
outputs=gr.Markdown(label="Réponse d’ArtGPT"),
title="🎨 ArtGPT — Assistant IA pour artistes",
description=(
"Pose une question sur l'illustration, le dessin, la couleur, la composition, "
"l'histoire de l'art, le graphisme ou la direction artistique. "
"ArtGPT te répond de manière claire et pédagogique."
),
)
if __name__ == "__main__":
demo.launch() |