import os import gradio as gr from huggingface_hub import InferenceClient # Connexion securisee aux deux modeles d'IA (Texte et Image) client_text = InferenceClient("meta-llama/Meta-Llama-3-8B-Instruct") client_image = InferenceClient("black-forest-labs/FLUX.1-schnell") SYSTEM_PROMPT = """Tu es Aion-Pulse, une IA generaliste ultra-puissante. Tu dois obligatoirement structurer tes reponses pour qu'elles soient tres visuelles et faciles a lire : 1. Donne une reponse directe et percutante des la premiere phrase. 2. Utilise des titres Markdown (###) pour separer tes idees. 3. Utilise des listes a puces claires et courtes. 4. Mets les mots importants en **gras**. 5. Reste chaleureux, pedagogue et professionnel.""" def respond(message, history, image_style): updated_history = list(history) + [{"role": "user", "content": message}] trigger_words = ["dessine", "genere une image", "cree une image", "photo de", "image de", "dessine-moi"] is_image_request = any(word in message.lower() for word in trigger_words) if is_image_request: yield updated_history + [{"role": "assistant", "content": f"Je prepare votre image au style [{image_style}], veuillez patienter..."}] try: style_prompts = { "Standard": "", "Photo Realiste": ", 8k resolution, highly detailed photograph, cinematic lighting, photorealistic, shot on 35mm lens", "Dessin Anime 3D": ", cute 3D pixar style, vibrant colors, smooth rendering, concept art, claymation look", "Cyberpunk / Futuriste": ", cyberpunk aesthetic, neon lighting, glowing elements, sci-fi, dark synthwave atmosphere, highly detailed", "Peinture a l'huile": ", oil painting texture, visible brush strokes, classical art style, masterpiece, rich canvas colors", "Pixel Art": ", 16-bit retro pixel art style, classic video game aesthetic, clean pixel blocks, vibrant colors" } final_image_prompt = message + style_prompts.get(image_style, "") image = client_image.text_to_image(final_image_prompt) image_path = "output_image.png" image.save(image_path) yield updated_history + [{"role": "assistant", "content": {"path": image_path}}] except Exception as e: error_msg = f"Erreur lors de la generation de l'image : {str(e)}" yield updated_history + [{"role": "assistant", "content": error_msg}] else: api_messages = [{"role": "system", "content": SYSTEM_PROMPT}] for turn in history: if isinstance(turn, dict) and "role" in turn and "content" in turn: if isinstance(turn["content"], str): api_messages.append({"role": turn["role"], "content": turn["content"]}) api_messages.append({"role": "user", "content": message}) response_text = "" try: for message_chunk in client_text.chat_completion(api_messages, max_tokens=1024, stream=True): if hasattr(message_chunk, 'choices') and len(message_chunk.choices) > 0: choice = message_chunk.choices if hasattr(choice, 'delta') and hasattr(choice.delta, 'content'): token = choice.delta.content if token: response_text += token yield updated_history + [{"role": "assistant", "content": response_text}] except Exception as e: error_msg = f"Erreur de connexion au modele texte : {str(e)}" yield updated_history + [{"role": "assistant", "content": error_msg}] # Interface graphique moderne with gr.Blocks() as demo: # INJECTION INVISIBLE POUR SARI (Force l'iPad a charger l'image icon.png pour l'ecran d'accueil) gr.HTML('
') gr.Markdown("# Aion-Pulse") gr.Markdown("Posez vos questions ou demandez une image (ex: Dessine un astronaute sur la lune).") gr.Markdown("Vous aimez mon travail ? Vous pouvez soutenir le projet Aion-Pulse avec un don ici : [Faire un don sur Ko-fi](https://ko-fi.com)") chatbot = gr.Chatbot(render_markdown=True) with gr.Row(): msg = gr.Textbox(placeholder="Posez votre question ou demandez une image ici...", show_label=False, scale=4) style_dropdown = gr.Dropdown( choices=["Standard", "Photo Realiste", "Dessin Anime 3D", "Cyberpunk / Futuriste", "Peinture a l'huile", "Pixel Art"], value="Standard", label="Filtre d'image", interactive=True, scale=1 ) gr.Examples( examples=[ "Redige un email professionnel pour demander un rendez-vous", "Resume-moi ce texte de maniere claire et simple : ", "Dessine un cerveau futuriste et lumineux" ], inputs=msg, label="Options et exemples rapides" ) with gr.Row(): clear = gr.ClearButton([msg, chatbot], value="Effacer la discussion") gr.HTML('Soutenir avec un don sur Ko-fi') msg.submit(respond, [msg, chatbot, style_dropdown], [chatbot]) msg.submit(lambda: "", None, msg) # Lancement ameliore avec les autorisations de chemins de fichiers locales demo.launch(theme=gr.themes.Soft(), favicon_path="icon.png", allowed_paths=["."])