Spaces:
Running
Running
import gradio as gr | |
from llm_utils import LLM_PROVIDERS, get_llm_models, validate_api_key, call_llm, parse_llm_output, create_zip_from_files | |
from project_types import PROJECT_TYPES | |
# LLM Prompt Şablonu | |
LLM_PROMPT_TEMPLATE = """ | |
Sen, bir Context Engineer olarak, kullanıcının belirttiği proje türü ve fikri için kapsamlı ve detaylı bir bağlam mühendisliği yapısı oluşturacaksın. Oluşturduğun her bir dosyanın içeriğini Markdown formatında, ilgili başlıklar ve alt başlıklar halinde sunacaksın. Her bir dosya, projenin bağlamını, kurallarını, teknoloji yığınını, mimarisini, iş akışını ve diğer ilgili detayları içerecektir. Daha önce AI Researcher, Veri Bilimi ve Mobil Uygulama projeleri için oluşturduğumuz detay seviyesini ve dinamizmi koruyacaksın. | |
--- BAŞLANGIÇ --- | |
Kullanıcının Proje Türü: {project_type} | |
Kullanıcının Proje Fikri: | |
``` | |
{project_idea} | |
``` | |
--- GEREKLİ ÇIKTI FORMATI --- | |
Çıktın, aşağıdaki her bir dosyanın içeriğini ayrı ayrı Markdown başlıkları altında içermelidir. Her dosya içeriği, ilgili proje türüne özgü ve son derece detaylı olmalıdır. Dosya isimleri ve sıralaması aşağıdaki gibi olmalıdır: | |
# context/01_persona.md | |
## Ajanın Kimliği ve Rolü | |
[Proje türüne özel olarak ajanın rolünü, uzmanlık alanlarını, misyonunu, iletişim tonunu, davranış biçimini ve kısıtlamalarını detaylandır. Örneğin, mobil uygulama için mobil uygulama geliştiricisi persona'sı gibi.] | |
# context/02_project_overview.md | |
## Projeye Genel Bakış | |
[Kullanıcının proje fikrine ve türüne göre projenin misyonunu, vizyonunu, iş hedeflerini, hedef kitlesini, MVP (Minimum Viable Product) temel özelliklerini ve başarı kriterlerini (KPIs) detaylandır.] | |
# context/03_rules.md | |
## Genel Davranış Kuralları ve Kısıtlamalar | |
[Proje türüne özel olarak genel prensipleri, kod kalitesi ve sürdürülebilirlik kurallarını (Clean Code, TypeScript/Python/C# kullanımı vb.), güvenlik protokollerini (API anahtarı yönetimi, veri güvenliği, XSS/SQL Injection önleme), performans optimizasyonu prensiplerini (bellek yönetimi, hız optimizasyonu) ve etik/yasal hususları son derece detaylı bir şekilde açıkla. Yapılmaması gerekenleri (hardcoded değerler, gereksiz loglar vb.) net bir şekilde belirt.] | |
# context/04_app_structure.md / context/04_site_structure.md / context/04_data_description.md (Proje türüne göre uygun olanı seç) | |
## Uygulama/Site Yapısı veya Veri Seti Açıklaması | |
[Proje türüne göre uygun olan başlığı seç. Eğer mobil/web uygulaması ise ekran/site yapısını, gezinme akışını ve her ekranın/sayfanın temel işlevlerini detaylandır. Eğer veri bilimi/ML projesi ise veri setinin yapısını, özelliklerini ve her bir özelliğin anlamını (veri sözlüğü) detaylandır.] | |
# context/05_tech_stack.md | |
## Proje Teknoloji Yığını (Tech Stack) | |
[Proje türüne ve kullanıcının proje fikrine göre kullanılacak programlama dillerini, frameworkleri, kütüphaneleri, araçları ve platformları (örn: React Native, Expo, Python, Gradio, Scikit-learn, Unity, Unreal Engine, AWS, Azure, Docker, Kubernetes vb.) detaylı bir şekilde listele. Her bir seçimin nedenini ve alternatiflerini açıkla.] | |
# context/06_software_architecture.md / context/06_project_workflow.md (Proje türüne göre uygun olanı seç) | |
## Yazılım Mimarisi ve Bileşen Yapısı / Proje İş Akışı ve Metodolojisi | |
[Proje türüne göre uygun olan başlığı seç. Eğer yazılım geliştirme projesi ise yazılım mimarisini (örn: Katmanlı Mimari, Mikroservisler, Monolit), bileşen yapısını (örn: Atomic Design), durum yönetimi akışını, veri akışını ve hata yönetimi prensiplerini detaylandır. Eğer veri bilimi/ML projesi ise veri bilimi yaşam döngüsünü (veri toplama, EDA, ön işleme, modelleme, değerlendirme, dağıtım) adım adım detaylandır.] | |
# context/07_testing_strategy.md / context/07_evaluation_metrics.md (Proje türüne göre uygun olanı seç) | |
## Test Stratejisi ve Kalite Güvencesi / Model Değerlendirme Metrikleri | |
[Proje türüne göre uygun olan başlığı seç. Eğer yazılım geliştirme projesi ise test piramidi yaklaşımını, birim, entegrasyon ve E2E testlerini, kullanılacak araçları ve test süreçlerini detaylandır. Eğer veri bilimi/ML projesi ise modelin başarısını ölçmek için kullanılacak metrikleri (RMSE, MAE, R², F1-Score, Precision, Recall vb.) ve bunların önemini açıkla.] | |
# context/08_api_integration.md / context/08_reporting_guidelines.md (Proje türüne göre uygun olanı seç) | |
## API Entegrasyonu ve Veri Akışı / Raporlama ve Sunum Kılavuzu | |
[Proje türüne göre uygun olan başlığı seç. Eğer uygulama geliştirme projesi ise backend API ile nasıl iletişim kurulacağını, veri alışverişi prensiplerini, kimlik doğrulama mekanizmalarını (JWT, OAuth) ve hata yönetimini detaylandır. Eğer veri bilimi/ML projesi ise projenin tüm aşamalarının, bulgularının, model performansının ve içgörülerinin nasıl raporlanacağına ve sunulacağına dair standartları belirle.] | |
# context/09_performance_optimization.md / context/09_deployment_guidelines.md (Proje türüne göre uygun olanı seç) | |
## Performans Optimizasyonu Kılavuzu / Dağıtım (Deployment) ve Yayınlama Kılavuzu | |
[Proje türüne göre uygun olan başlığı seç. Eğer uygulama geliştirme projesi ise uygulamanın performansını en üst düzeye çıkarmak için uygulanacak stratejileri (bileşen optimizasyonu, bellek yönetimi, ağ istekleri) detaylandır. Eğer dağıtım kılavuzu ise uygulamanın veya modelin nasıl deploy edileceğini, CI/CD süreçlerini, bulut platformlarını ve mağaza yayınlama adımlarını detaylandır.] | |
# context/10_security_guidelines.md / context/10_future_enhancements.md (Proje türüne göre uygun olanı seç) | |
## Güvenlik Kılavuzu / Gelecek Geliştirmeler ve Yol Haritası | |
[Proje türüne göre uygun olan başlığı seç. Eğer güvenlik kılavuzu ise projenin güvenlik duruşunu güçlendirmek için alınacak ek önlemleri, güvenlik denetimlerini ve zafiyet yönetimini detaylandır. Eğer gelecek geliştirmeler ise projenin potansiyel büyüme alanlarını, yeni özellik fikirlerini ve uzun vadeli yol haritasını açıkla.] | |
--- SON --- | |
Bu formatı ve detay seviyesini koruyarak, kullanıcının proje fikrine özel bir bağlam mühendisliği yapısı oluştur. Her bir dosya içeriği, ilgili proje türünün en iyi pratiklerini ve özel gereksinimlerini yansıtmalıdır. Çıktı sadece istenen Markdown formatında olmalı, ek açıklama veya giriş/çıkış metni içermemelidir.""" | |
def update_models_dropdown(provider): | |
if provider in LLM_PROVIDERS: | |
return gr.Dropdown(choices=LLM_PROVIDERS[provider].get("models", []), label=f"{provider} Modeli Seçin", interactive=True) | |
return gr.Dropdown(choices=[], label="Model Seçin", interactive=False) | |
def test_api_key(provider, api_key): | |
is_valid, message = validate_api_key(provider, api_key) | |
if is_valid: | |
models = get_llm_models(provider, api_key) | |
return gr.Markdown(f"<p style=\'color:green;\'>{message}</p>"), gr.Dropdown(choices=models, label=f"{provider} Modeli Seçin", interactive=True) | |
else: | |
return gr.Markdown(f"<p style=\'color:red;\'>{message}</p>"), gr.Dropdown(choices=[], label="Model Seçin", interactive=False) | |
def generate_context_structure(provider, model, api_key, project_type, project_idea): | |
if not all([provider, model, api_key, project_type, project_idea]): | |
return gr.Markdown("<p style=\'color:red;\'>Lütfen tüm alanları doldurun.</p>"), None | |
full_prompt = LLM_PROMPT_TEMPLATE.format(project_type=project_type, project_idea=project_idea) | |
try: | |
llm_response = call_llm(provider, model, api_key, full_prompt) | |
# LLM çıktısını ayrıştır | |
parsed_files = parse_llm_output(llm_response) | |
# ZIP dosyası oluştur | |
zip_data = create_zip_from_files(parsed_files) | |
# Geçici bir dosya olarak kaydet | |
zip_file_path = "./context_structure.zip" | |
with open(zip_file_path, "wb") as f: | |
f.write(zip_data) | |
return gr.Markdown(llm_response), gr.File(value=zip_file_path, label="Bağlam Yapısını İndir", visible=True) | |
except Exception as e: | |
return gr.Markdown(f"<p style=\'color:red;\'>Bağlam yapısı oluşturulurken hata oluştu: {e}</p>"), None | |
with gr.Blocks() as demo: | |
gr.Markdown("## 🤖 Context Engineer Chatbot") | |
gr.Markdown("Yapay zeka projeniz için dinamik ve detaylı bağlam mühendisliği yapıları oluşturun.") | |
with gr.Row(): | |
llm_provider = gr.Dropdown(choices=list(LLM_PROVIDERS.keys()), label="LLM Sağlayıcısı Seçin") | |
llm_model = gr.Dropdown(choices=[], label="Model Seçin", interactive=False) | |
api_key_input = gr.Textbox(label="API Anahtarınızı Girin", type="password") | |
validate_button = gr.Button("API Anahtarını Doğrula") | |
validation_status = gr.Markdown() | |
gr.Markdown("### Proje Bilgileri") | |
project_type = gr.Dropdown(choices=PROJECT_TYPES, label="Proje Türünü Seçin") | |
project_idea_input = gr.Textbox(label="Proje Fikrinizi Detaylıca Anlatın", lines=10) | |
generate_button = gr.Button("Bağlam Yapısı Oluştur") | |
context_output_display = gr.Markdown() | |
download_button = gr.File(label="Bağlam Yapısını İndir", visible=False) | |
# Event Handlers | |
llm_provider.change(fn=update_models_dropdown, inputs=llm_provider, outputs=llm_model) | |
validate_button.click(fn=test_api_key, inputs=[llm_provider, api_key_input], outputs=[validation_status, llm_model]) | |
generate_button.click(fn=generate_context_structure, inputs=[llm_provider, llm_model, api_key_input, project_type, project_idea_input], outputs=[context_output_display, download_button]) | |
demo.launch() | |