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