Spaces:
Running
Running
File size: 7,293 Bytes
a519c99 4b1425c a519c99 4b1425c a519c99 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
import gradio as gr
from src.agent_logic import (
generate_tasks_for_idea,
save_api_key,
delete_api_key,
list_available_gemini_models,
list_available_openrouter_models,
format_tasks_for_download
)
import os
# Fetch initial model lists
try:
initial_or_models = list_available_openrouter_models()
except Exception as e:
print(f"Error fetching initial OpenRouter models: {e}")
initial_or_models = ["google/gemini-pro"] # Fallback
initial_gemini_models = list_available_gemini_models()
def create_interface(initial_gemini_status="Kaydedilmedi", initial_or_status="Kaydedilmedi"):
"""Creates the Gradio interface components."""
with gr.Blocks(theme=gr.themes.Soft(), title="AI App Builder Task Master-AI Mevzuları") as iface:
# Store API keys and status in Gradio State for session persistence
gemini_key_state = gr.State(None)
openrouter_key_state = gr.State(None)
gemini_status_state = gr.State(initial_gemini_status)
openrouter_status_state = gr.State(initial_or_status)
tasks_output_state = gr.State("")
gr.Markdown("# AI App Builder Task Master-AI Mevzuları")
gr.Markdown("AI destekli uygulama geliştirme araçları (Cursor, Windsurf vb.) için görevler oluşturun.")
with gr.Tab("Görev Oluşturma"):
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("### Hedef Araç, Fikir ve Dil") # Updated title
target_tool = gr.Dropdown(label="Hedef AI Aracı", choices=["Genel", "Cursor", "Windsurf", "TRAE AI", "CLINE", "ROOCODE"], value="Genel", info="Görevlerin hangi AI aracı için özelleştirileceğini seçin.")
# Add Language Selection
language_select = gr.Radio(["Türkçe", "English"], label="Görev Dili", value="Türkçe", info="Oluşturulacak görevlerin dilini seçin.")
idea_input = gr.Textbox(label="Uygulama Fikri veya Hedefi", lines=10, placeholder="Geliştirmek istediğiniz uygulamanın ana fikrini veya hedefini açıklayın...")
generate_button = gr.Button("Görevleri Oluştur", variant="primary")
with gr.Column(scale=2):
gr.Markdown("### Oluşturulan Görevler")
output_tasks = gr.Textbox(label="Görev Listesi", lines=18, interactive=False, placeholder="Oluşturulan görevler burada listelenecek...")
with gr.Row():
download_format = gr.Radio(["TXT", "Markdown", "JSON"], label="İndirme Formatı", value="TXT")
download_button = gr.Button("Görevleri İndir")
download_file_output = gr.File(label="İndirilen Dosya", interactive=False)
with gr.Tab("Ayarlar"):
gr.Markdown("## API Anahtarları ve Modeller")
with gr.Row():
with gr.Column():
gr.Markdown("### Gemini")
gemini_api_key_input = gr.Textbox(label="Gemini API Anahtarı", type="password", placeholder="Gemini API anahtarınızı buraya girin")
gemini_status_display = gr.Textbox(label="API Durumu", value=initial_gemini_status, interactive=False)
with gr.Row():
save_gemini_button = gr.Button("Kaydet")
delete_gemini_button = gr.Button("Sil")
# Use the fetched list for choices
gemini_model_select = gr.Dropdown(label="Gemini Modeli", choices=initial_gemini_models, value=initial_gemini_models[0] if initial_gemini_models else None, interactive=True)
with gr.Column():
gr.Markdown("### OpenRouter")
openrouter_api_key_input = gr.Textbox(label="OpenRouter API Anahtarı", type="password", placeholder="OpenRouter API anahtarınızı buraya girin")
openrouter_status_display = gr.Textbox(label="API Durumu", value=initial_or_status, interactive=False)
with gr.Row():
save_or_button = gr.Button("Kaydet")
delete_or_button = gr.Button("Sil")
# Use the fetched list for choices
openrouter_model_select = gr.Dropdown(label="OpenRouter Modeli", choices=initial_or_models, value=initial_or_models[0] if initial_or_models else None, interactive=True)
refresh_or_models_button = gr.Button("OpenRouter Modellerini Yenile")
# --- Define Interactions --- #
# API Key Saving
save_gemini_button.click(
fn=save_api_key,
inputs=[gemini_api_key_input, gr.State("gemini")],
outputs=[gemini_key_state, gemini_status_display]
).then(
lambda: gr.Info("Gemini API anahtarı kaydedildi (oturum için)."), outputs=None
)
save_or_button.click(
fn=save_api_key,
inputs=[openrouter_api_key_input, gr.State("openrouter")],
outputs=[openrouter_key_state, openrouter_status_display]
).then(
lambda: gr.Info("OpenRouter API anahtarı kaydedildi (oturum için)."), outputs=None
)
# API Key Deletion
delete_gemini_button.click(
fn=delete_api_key,
inputs=[gr.State("gemini")],
outputs=[gemini_key_state, gemini_status_display, gemini_api_key_input]
).then(
lambda: gr.Info("Gemini API anahtarı silindi (oturum için)."), outputs=None
)
delete_or_button.click(
fn=delete_api_key,
inputs=[gr.State("openrouter")],
outputs=[openrouter_key_state, openrouter_status_display, openrouter_api_key_input]
).then(
lambda: gr.Info("OpenRouter API anahtarı silindi (oturum için)."), outputs=None
)
# Model List Refreshing
# Update the dropdown choices when refreshing
refresh_or_models_button.click(
fn=list_available_openrouter_models,
inputs=None,
outputs=None # Don't directly output to dropdown, use .then
).then(
lambda models: gr.Dropdown(choices=models, value=models[0] if models else None),
outputs=openrouter_model_select
).then(
lambda: gr.Info("OpenRouter model listesi yenilendi."),
outputs=None
)
# Task Generation - Added language_select to inputs
generate_button.click(
fn=generate_tasks_for_idea,
inputs=[
idea_input,
gemini_key_state,
openrouter_key_state,
target_tool,
gemini_model_select,
openrouter_model_select,
language_select # Added language input
],
outputs=[output_tasks]
)
# Update task state whenever output_tasks changes
output_tasks.change(lambda x: x, inputs=output_tasks, outputs=tasks_output_state)
# Task Downloading
download_button.click(
fn=format_tasks_for_download,
inputs=[tasks_output_state, download_format],
outputs=[download_file_output]
)
return iface
|