import gradio as gr from gradio_client import Client, handle_file # Moondream2 ve LLaMA API'lerine bağlanmak için Client'ları başlatıyoruz moondream_client = Client("vikhyatk/moondream2") llama_client = Client("goingyt/meta-llama-Llama-3.3-70B-Instruct") # Sohbet geçmişini tutmak için bir değişken history = [] # Resim açıklama fonksiyonu def describe_image(image, user_message): global history # Resmi Moondream2 API'sine gönderiyoruz result = moondream_client.predict( img=handle_file(image), prompt="Describe this image.", api_name="/answer_question" ) # Moondream2'den alınan açıklamayı sisteme dahil ediyoruz description = result # Moondream2'nin cevabını alıyoruz # LLaMA API'sine açıklamayı ve kullanıcının mesajını gönderiyoruz history.append(("User", user_message)) history.append(("Assistant", description)) llama_result = llama_client.predict( message=user_message, history=history, api_name="/chat" ) # Sonucu döndürüyoruz return description + "\n\nAssistant: " + llama_result # Sohbet fonksiyonu, resim yüklenip yüklenmediğine göre yönlendirecek def chat_or_image(image, user_message): global history # Resim yüklenmişse, önce açıklama alıp sonra LLaMA'ya gönderiyoruz if image: return describe_image(image, user_message) else: # Resim yoksa, direkt LLaMA'ya mesajı gönderiyoruz history.append(("User", user_message)) llama_result = llama_client.predict( message=user_message, history=history, api_name="/chat" ) return llama_result # Gradio arayüzü demo = gr.Interface( fn=chat_or_image, # Hem resim hem de metin için kullanılacak fonksiyon inputs=[ gr.Image(type="filepath", label="Resim Yükle (isteğe bağlı)"), # Resim yükleme gr.Textbox(label="Soru Sor ya da Konuş", placeholder="Soru sor...", lines=2) # Metin girişi ], outputs="text", # Çıktı metin olarak dönecek ) if __name__ == "__main__": demo.launch()