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()