import gradio as gr import requests from PIL import Image import numpy as np import json import os # đŸ”„ Serveur Ollama OLLAMA_SERVER = "http://localhost:11434/api/generate" def llama_vision_analysis(image, prompt, json_file): if image is None: return "❌ Veuillez fournir une image." if not prompt: return "❌ Veuillez entrer une question." # 📌 VĂ©rifier et convertir l'image (Gradio fournit parfois un numpy array) if isinstance(image, np.ndarray): image = Image.fromarray(image) # Convertir numpy.ndarray en Image PIL # 📂 Sauvegarder l'image image_path = "temp_image.jpg" image.save(image_path) # 📂 Lire le contenu du fichier JSON correctement json_data = {} if json_file is not None: try: json_data = json.loads(json_file) # Corrige l'erreur d'attribut except Exception as e: return f"⚠ Erreur de lecture du JSON : {str(e)}" # 📡 Construire la requĂȘte pour Ollama request_data = { "model": "llama3.2-vision:90b-instruct-q8_0", "prompt": f"{prompt}\n\nAnalyse aussi ces donnĂ©es JSON : {json_data}", "images": [image_path] } # 📹 Envoyer la requĂȘte Ă  Ollama try: response = requests.post(OLLAMA_SERVER, json=request_data) response.raise_for_status() return response.json().get("response", "⚠ RĂ©ponse vide") except requests.exceptions.RequestException as e: return f"⚠ Erreur Ollama : {str(e)}" # 🎹 Interface Gradio interface = gr.Interface( fn=llama_vision_analysis, inputs=["image", "text", "text"], # Utiliser "text" pour JSON outputs="text", title="Llama-Vision 90B - Analyse Image, Texte & JSON", description="Charge une image, un fichier JSON et entre une question pour obtenir une rĂ©ponse dĂ©taillĂ©e de Llama-Vision." ) # đŸ”„ Lancer Gradio interface.launch(server_name="0.0.0.0", server_port=7860, share=True)