Spaces:
Sleeping
Sleeping
import gradio as gr | |
import requests | |
import json | |
import os | |
# API kimlik bilgileri | |
API_KEY = os.environ.get("API_KEY") | |
API_URL = os.environ.get("API_URL") | |
# Logo path'ini burada belirtin | |
LOGO_PATH = "osstart-desen.png" # Logo dosya yolunu buraya yazın | |
def chat_with_dify(message): | |
if not message.strip(): | |
return "Lütfen bir mesaj girin." | |
headers = { | |
"Authorization": f"Bearer {API_KEY}", | |
"Content-Type": "application/json" | |
} | |
payload = { | |
"inputs": {}, | |
"query": message, | |
"response_mode": "blocking", | |
"conversation_id": None, | |
"user": "gradio-user" | |
} | |
try: | |
response = requests.post(API_URL, headers=headers, json=payload) | |
if response.status_code != 200: | |
print(f"API Yanıt Kodu: {response.status_code}") | |
print(f"API Yanıt İçeriği: {response.text}") | |
return f"API hatası: {response.status_code} - {response.text}" | |
result = response.json() | |
return result.get("answer", "Yanıt alınamadı.") | |
except requests.exceptions.RequestException as e: | |
print(f"İstek hatası: {e}") | |
return f"API hatası: {str(e)}" | |
except json.JSONDecodeError as e: | |
print(f"JSON ayrıştırma hatası: {e}") | |
return "Yanıt ayrıştırılamadı." | |
css = """ | |
:root { | |
--background-color: #ffffff; /* Siyah arka plan */ | |
--secondary-bg: #ffffff; /* Siyah ikincil arka plan */ | |
--text-color: #000000; /* Beyaz metin */ | |
--primary-color: #3498db; /* Mavi vurgu rengi */ | |
--border-color: #333333; /* Daha koyu gri kenarlar */ | |
--hover-color: #222222; /* Koyu gri hover rengi */ | |
} | |
body { | |
background-color: var(--background-color) !important; | |
color: var(--text-color) !important; | |
} | |
.container { | |
max-width: 1200px !important; | |
width: 90% !important; | |
margin: auto !important; | |
padding: 20px !important; | |
background-color: var(--background-color) !important; | |
border-radius: 10px !important; | |
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3) !important; | |
} | |
.title { | |
text-align: center !important; | |
margin-bottom: 10px !important; | |
font-size: 2.5em !important; | |
color: var(--text-color) !important; | |
} | |
.chatbot { | |
width: 100% !important; | |
height: 600px !important; | |
margin-bottom: 20px !important; | |
border: 1px solid var(--border-color) !important; | |
border-radius: 8px !important; | |
background-color: var(--background-color) !important; | |
color: var(--text-color) !important; | |
min-width: 800px !important; | |
} | |
.input-row { | |
display: flex !important; | |
gap: 10px !important; | |
align-items: flex-start !important; | |
width: 100% !important; | |
margin-bottom: 10px !important; | |
} | |
.message-input { | |
flex-grow: 1 !important; | |
} | |
.message-input textarea { | |
background-color: var(--background-color) !important; | |
color: var(--text-color) !important; | |
border: 1px solid var(--border-color) !important; | |
} | |
.send-button { | |
background-color: var(--primary-color) !important; | |
color: var(--text-color) !important; | |
border: none !important; | |
padding: 8px 16px !important; | |
border-radius: 4px !important; | |
cursor: pointer !important; | |
transition: all 0.3s ease !important; | |
} | |
.send-button:hover { | |
background-color: #2980b9 !important; | |
transform: translateY(-1px) !important; | |
} | |
.message { | |
background-color: var(--background-color) !important; | |
border: 1px solid var(--border-color) !important; | |
color: var(--text-color) !important; | |
margin: 4px 0 !important; | |
padding: 8px !important; | |
border-radius: 4px !important; | |
} | |
/* Gradio specifikasyon stilleri */ | |
.dark { | |
background-color: var(--background-color) !important; | |
color: var(--text-color) !important; | |
} | |
.dark input, .dark textarea { | |
background-color: var(--background-color) !important; | |
color: var(--text-color) !important; | |
border-color: var(--border-color) !important; | |
} | |
.dark label { | |
color: var(--text-color) !important; | |
} | |
/* Tüm Gradio bileşenlerinin arka planını siyah yap */ | |
.gradio-container { | |
background-color: var(--background-color) !important; | |
} | |
.contain { | |
background-color: var(--background-color) !important; | |
} | |
.wrap { | |
background-color: var(--background-color) !important; | |
} | |
/* Chatbot mesajlarının stilini ayarla */ | |
.message-wrap { | |
background-color: var(--background-color) !important; | |
} | |
.message-wrap .user-message { | |
background-color: #222 !important; | |
color: var(--text-color) !important; | |
} | |
.message-wrap .bot-message { | |
background-color: #333 !important; | |
color: var(--text-color) !important; | |
} | |
""" | |
with gr.Blocks(css=css, theme=gr.themes.Soft(primary_hue="blue", neutral_hue="gray", text_size="lg")) as demo: | |
with gr.Column(elem_classes="container"): | |
# Logo ve başlık | |
gr.Image(value=LOGO_PATH, show_label=False, container=False, width=150, height=150) | |
gr.Markdown("# Eco19 AI Asistan", elem_classes="title") | |
chatbot = gr.Chatbot( | |
elem_classes="chatbot", | |
height=500, | |
show_label=False | |
) | |
with gr.Row(elem_classes="input-row"): | |
# Mesaj giriş alanı | |
with gr.Column(scale=8, elem_classes="message-input"): | |
msg = gr.Textbox( | |
label="Mesajınız", | |
placeholder="Bir mesaj yazın...", | |
show_label=False | |
) | |
# Gönder butonu | |
with gr.Column(scale=1): | |
send = gr.Button("➤", elem_classes="send-button") | |
def respond(message, chat_history): | |
if not message.strip(): | |
return message, chat_history | |
bot_message = chat_with_dify(message) | |
chat_history.append((message, bot_message)) | |
return "", chat_history | |
send.click( | |
respond, | |
inputs=[msg, chatbot], | |
outputs=[msg, chatbot] | |
) | |
msg.submit( | |
respond, | |
inputs=[msg, chatbot], | |
outputs=[msg, chatbot] | |
) | |
if __name__ == "__main__": | |
demo.launch(debug=True, share=True) |