therayz1 commited on
Commit
c3e5767
·
verified ·
1 Parent(s): 30b4820

Upload 6 files

Browse files
Files changed (6) hide show
  1. .gitignore +30 -0
  2. README.md +32 -0
  3. app.py +149 -0
  4. llm_utils.py +203 -0
  5. project_types.py +56 -0
  6. requirements.txt +130 -0
.gitignore ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ env/
8
+ venv/
9
+ ENV/
10
+ VENV/
11
+ .env
12
+
13
+ # IDE
14
+ .vscode/
15
+ .idea/
16
+ *.swp
17
+ *.swo
18
+
19
+ # OS
20
+ .DS_Store
21
+ Thumbs.db
22
+
23
+ # Project specific
24
+ *.zip
25
+ context_structure.zip
26
+ *.log
27
+
28
+ # API Keys
29
+ api_keys.txt
30
+ .env.local
README.md ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Context Engineer Chatbot
3
+ emoji: 🤖
4
+ colorFrom: purple
5
+ colorTo: pink
6
+ sdk: gradio
7
+ sdk_version: 5.37.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ ---
12
+
13
+ # Context Engineer Chatbot
14
+
15
+ A dynamic and detailed context engineering structure generator for AI projects.
16
+
17
+ ## Features
18
+
19
+ - Support for multiple LLM providers (OpenAI, Anthropic, Google Gemini, OpenRouter)
20
+ - 50+ different project types
21
+ - Generates comprehensive context structures
22
+ - Downloads as ZIP file with organized markdown files
23
+
24
+ ## Usage
25
+
26
+ 1. Select your LLM provider
27
+ 2. Enter your API key
28
+ 3. Choose project type
29
+ 4. Describe your project idea
30
+ 5. Generate context structure
31
+
32
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from llm_utils import LLM_PROVIDERS, get_llm_models, validate_api_key, call_llm, parse_llm_output, create_zip_from_files
3
+ from project_types import PROJECT_TYPES
4
+
5
+ # LLM Prompt Şablonu
6
+ LLM_PROMPT_TEMPLATE = """
7
+ 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.
8
+
9
+ --- BAŞLANGIÇ ---
10
+
11
+ Kullanıcının Proje Türü: {project_type}
12
+
13
+ Kullanıcının Proje Fikri:
14
+ ```
15
+ {project_idea}
16
+ ```
17
+
18
+ --- GEREKLİ ÇIKTI FORMATI ---
19
+
20
+ Çı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:
21
+
22
+ # context/01_persona.md
23
+
24
+ ## Ajanın Kimliği ve Rolü
25
+
26
+ [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.]
27
+
28
+ # context/02_project_overview.md
29
+
30
+ ## Projeye Genel Bakış
31
+
32
+ [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.]
33
+
34
+ # context/03_rules.md
35
+
36
+ ## Genel Davranış Kuralları ve Kısıtlamalar
37
+
38
+ [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.]
39
+
40
+ # context/04_app_structure.md / context/04_site_structure.md / context/04_data_description.md (Proje türüne göre uygun olanı seç)
41
+
42
+ ## Uygulama/Site Yapısı veya Veri Seti Açıklaması
43
+
44
+ [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.]
45
+
46
+ # context/05_tech_stack.md
47
+
48
+ ## Proje Teknoloji Yığını (Tech Stack)
49
+
50
+ [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.]
51
+
52
+ # context/06_software_architecture.md / context/06_project_workflow.md (Proje türüne göre uygun olanı seç)
53
+
54
+ ## Yazılım Mimarisi ve Bileşen Yapısı / Proje İş Akışı ve Metodolojisi
55
+
56
+ [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.]
57
+
58
+ # context/07_testing_strategy.md / context/07_evaluation_metrics.md (Proje türüne göre uygun olanı seç)
59
+
60
+ ## Test Stratejisi ve Kalite Güvencesi / Model Değerlendirme Metrikleri
61
+
62
+ [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.]
63
+
64
+ # context/08_api_integration.md / context/08_reporting_guidelines.md (Proje türüne göre uygun olanı seç)
65
+
66
+ ## API Entegrasyonu ve Veri Akışı / Raporlama ve Sunum Kılavuzu
67
+
68
+ [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.]
69
+
70
+ # context/09_performance_optimization.md / context/09_deployment_guidelines.md (Proje türüne göre uygun olanı seç)
71
+
72
+ ## Performans Optimizasyonu Kılavuzu / Dağıtım (Deployment) ve Yayınlama Kılavuzu
73
+
74
+ [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.]
75
+
76
+ # context/10_security_guidelines.md / context/10_future_enhancements.md (Proje türüne göre uygun olanı seç)
77
+
78
+ ## Güvenlik Kılavuzu / Gelecek Geliştirmeler ve Yol Haritası
79
+
80
+ [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.]
81
+
82
+ --- SON ---
83
+
84
+ 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."""
85
+
86
+ def update_models_dropdown(provider):
87
+ if provider in LLM_PROVIDERS:
88
+ return gr.Dropdown(choices=LLM_PROVIDERS[provider].get("models", []), label=f"{provider} Modeli Seçin", interactive=True)
89
+ return gr.Dropdown(choices=[], label="Model Seçin", interactive=False)
90
+
91
+ def test_api_key(provider, api_key):
92
+ is_valid, message = validate_api_key(provider, api_key)
93
+ if is_valid:
94
+ models = get_llm_models(provider, api_key)
95
+ return gr.Markdown(f"<p style=\'color:green;\'>{message}</p>"), gr.Dropdown(choices=models, label=f"{provider} Modeli Seçin", interactive=True)
96
+ else:
97
+ return gr.Markdown(f"<p style=\'color:red;\'>{message}</p>"), gr.Dropdown(choices=[], label="Model Seçin", interactive=False)
98
+
99
+ def generate_context_structure(provider, model, api_key, project_type, project_idea):
100
+ if not all([provider, model, api_key, project_type, project_idea]):
101
+ return gr.Markdown("<p style=\'color:red;\'>Lütfen tüm alanları doldurun.</p>"), None
102
+
103
+ full_prompt = LLM_PROMPT_TEMPLATE.format(project_type=project_type, project_idea=project_idea)
104
+
105
+ try:
106
+ llm_response = call_llm(provider, model, api_key, full_prompt)
107
+
108
+ # LLM çıktısını ayrıştır
109
+ parsed_files = parse_llm_output(llm_response)
110
+
111
+ # ZIP dosyası oluştur
112
+ zip_data = create_zip_from_files(parsed_files)
113
+
114
+ # Geçici bir dosya olarak kaydet
115
+ zip_file_path = "./context_structure.zip"
116
+ with open(zip_file_path, "wb") as f:
117
+ f.write(zip_data)
118
+
119
+ return gr.Markdown(llm_response), gr.File(value=zip_file_path, label="Bağlam Yapısını İndir", visible=True)
120
+ except Exception as e:
121
+ return gr.Markdown(f"<p style=\'color:red;\'>Bağlam yapısı oluşturulurken hata oluştu: {e}</p>"), None
122
+
123
+ with gr.Blocks() as demo:
124
+ gr.Markdown("## 🤖 Context Engineer Chatbot")
125
+ gr.Markdown("Yapay zeka projeniz için dinamik ve detaylı bağlam mühendisliği yapıları oluşturun.")
126
+
127
+ with gr.Row():
128
+ llm_provider = gr.Dropdown(choices=list(LLM_PROVIDERS.keys()), label="LLM Sağlayıcısı Seçin")
129
+ llm_model = gr.Dropdown(choices=[], label="Model Seçin", interactive=False)
130
+
131
+ api_key_input = gr.Textbox(label="API Anahtarınızı Girin", type="password")
132
+ validate_button = gr.Button("API Anahtarını Doğrula")
133
+ validation_status = gr.Markdown()
134
+
135
+ gr.Markdown("### Proje Bilgileri")
136
+ project_type = gr.Dropdown(choices=PROJECT_TYPES, label="Proje Türünü Seçin")
137
+ project_idea_input = gr.Textbox(label="Proje Fikrinizi Detaylıca Anlatın", lines=10)
138
+
139
+ generate_button = gr.Button("Bağlam Yapısı Oluştur")
140
+ context_output_display = gr.Markdown()
141
+ download_button = gr.File(label="Bağlam Yapısını İndir", visible=False)
142
+
143
+ # Event Handlers
144
+ llm_provider.change(fn=update_models_dropdown, inputs=llm_provider, outputs=llm_model)
145
+ validate_button.click(fn=test_api_key, inputs=[llm_provider, api_key_input], outputs=[validation_status, llm_model])
146
+ 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])
147
+
148
+ demo.launch()
149
+
llm_utils.py ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import google.generativeai as genai
3
+ from openai import OpenAI
4
+ from anthropic import Anthropic
5
+ import httpx
6
+
7
+ # Desteklenen LLM Sağlayıcıları ve Modelleri
8
+ LLM_PROVIDERS = {
9
+ "Gemini": {
10
+ "models": [
11
+ "gemini-pro",
12
+ "gemini-1.5-pro-latest",
13
+ "gemini-1.5-flash-latest"
14
+ ],
15
+ "api_key_env": "GEMINI_API_KEY"
16
+ },
17
+ "OpenAI": {
18
+ "models": [], # Dinamik olarak çekilecek
19
+ "api_key_env": "OPENAI_API_KEY"
20
+ },
21
+ "Anthropic": {
22
+ "models": [], # Dinamik olarak çekilecek
23
+ "api_key_env": "ANTHROPIC_API_KEY"
24
+ },
25
+ "OpenRouter": {
26
+ "models": [], # Dinamik olarak çekilecek
27
+ "api_key_env": "OPENROUTER_API_KEY"
28
+ }
29
+ }
30
+
31
+ def get_llm_models(provider_name, api_key):
32
+ """Seçilen sağlayıcının modellerini dinamik olarak çeker."""
33
+ models = []
34
+ if provider_name == "Gemini":
35
+ # Gemini modelleri statik olarak tanımlanmıştır, API'den çekmeye gerek yok
36
+ models = LLM_PROVIDERS["Gemini"]["models"]
37
+ elif provider_name == "OpenAI":
38
+ try:
39
+ client = OpenAI(api_key=api_key)
40
+ response = client.models.list()
41
+ models = [model.id for model in response.data if "gpt" in model.id and "vision" not in model.id and "instruct" not in model.id]
42
+ models.sort()
43
+ except Exception as e:
44
+ print(f"OpenAI modelleri çekilirken hata oluştu: {e}")
45
+ models = []
46
+ elif provider_name == "Anthropic":
47
+ try:
48
+ client = Anthropic(api_key=api_key)
49
+ # Anthropic API'sinde modelleri listeleme endpoint'i yok, bilinenleri manuel ekle
50
+ models = [
51
+ "claude-3-opus-20240229",
52
+ "claude-3-sonnet-20240229",
53
+ "claude-3-haiku-20240307"
54
+ ]
55
+ except Exception as e:
56
+ print(f"Anthropic modelleri çekilirken hata oluştu: {e}")
57
+ models = []
58
+ elif provider_name == "OpenRouter":
59
+ try:
60
+ # OpenRouter API'sinden modelleri çek
61
+ headers = {"Authorization": f"Bearer {api_key}"}
62
+ response = httpx.get("https://openrouter.ai/api/v1/models", headers=headers)
63
+ response.raise_for_status()
64
+ data = response.json()
65
+ models = [model["id"] for model in data["data"]]
66
+ models.sort()
67
+ except Exception as e:
68
+ print(f"OpenRouter modelleri çekilirken hata oluştu: {e}")
69
+ models = []
70
+ return models
71
+
72
+ def validate_api_key(provider_name, api_key):
73
+ """Seçilen sağlayıcının API anahtarını doğrular."""
74
+ if not api_key:
75
+ return False, "API Anahtarı boş olamaz."
76
+
77
+ try:
78
+ if provider_name == "Gemini":
79
+ genai.configure(api_key=api_key)
80
+ # Küçük bir model çağrısı ile anahtarı doğrula
81
+ model = genai.GenerativeModel('gemini-pro')
82
+ model.generate_content("test")
83
+ return True, "API Anahtarı Geçerli!"
84
+ elif provider_name == "OpenAI":
85
+ client = OpenAI(api_key=api_key)
86
+ client.models.list() # Modelleri listelemek anahtarı doğrular
87
+ return True, "API Anahtarı Geçerli!"
88
+ elif provider_name == "Anthropic":
89
+ client = Anthropic(api_key=api_key)
90
+ client.messages.create(
91
+ model="claude-3-haiku-20240307", # En küçük model
92
+ max_tokens=1,
93
+ messages=[{"role": "user", "content": "hi"}]
94
+ )
95
+ return True, "API Anahtarı Geçerli!"
96
+ elif provider_name == "OpenRouter":
97
+ headers = {"Authorization": f"Bearer {api_key}"}
98
+ response = httpx.get("https://openrouter.ai/api/v1/models", headers=headers)
99
+ response.raise_for_status() # HTTP 2xx dışında bir durum kodu hata fırlatır
100
+ return True, "API Anahtarı Geçerli!"
101
+ else:
102
+ return False, "Bilinmeyen sağlayıcı."
103
+ except Exception as e:
104
+ return False, f"API Anahtarı Geçersiz veya Bir Hata Oluştu: {e}"
105
+
106
+
107
+
108
+
109
+
110
+ def call_llm(provider_name, model_name, api_key, prompt):
111
+ """Seçilen LLM sağlayıcısını kullanarak bir çağrı yapar."""
112
+ try:
113
+ if provider_name == "Gemini":
114
+ genai.configure(api_key=api_key)
115
+ model = genai.GenerativeModel(model_name)
116
+ response = model.generate_content(prompt)
117
+ return response.text
118
+ elif provider_name == "OpenAI":
119
+ client = OpenAI(api_key=api_key)
120
+ response = client.chat.completions.create(
121
+ model=model_name,
122
+ messages=[
123
+ {"role": "user", "content": prompt}
124
+ ]
125
+ )
126
+ return response.choices[0].message.content
127
+ elif provider_name == "Anthropic":
128
+ client = Anthropic(api_key=api_key)
129
+ response = client.messages.create(
130
+ model=model_name,
131
+ max_tokens=4000, # Yeterli token sağlamak için
132
+ messages=[
133
+ {"role": "user", "content": prompt}
134
+ ]
135
+ )
136
+ return response.content[0].text
137
+ elif provider_name == "OpenRouter":
138
+ headers = {
139
+ "Authorization": f"Bearer {api_key}",
140
+ "Content-Type": "application/json"
141
+ }
142
+ data = {
143
+ "model": model_name,
144
+ "messages": [
145
+ {"role": "user", "content": prompt}
146
+ ]
147
+ }
148
+ response = httpx.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=data)
149
+ response.raise_for_status()
150
+ return response.json()["choices"][0]["message"]["content"]
151
+ else:
152
+ return "Bilinmeyen LLM sağlayıcısı."
153
+ except Exception as e:
154
+ return f"LLM çağrısı sırasında hata oluştu: {e}"
155
+
156
+
157
+
158
+
159
+ import re
160
+ import zipfile
161
+ import io
162
+
163
+ def parse_llm_output(llm_output):
164
+ """LLM çıktısını dosya yolları ve içerikleri olarak ayrıştırır."""
165
+ files = {}
166
+ # Her bir dosya başlığını yakalamak için regex
167
+ # Başlıklar: # context/01_persona.md, # context/02_project_overview.md vb.
168
+ # İçerik, bir sonraki başlığa veya string'in sonuna kadar devam eder.
169
+ matches = re.finditer(r'^#\s*(context/[\w\d_\-]+\.md)\s*\n', llm_output, re.MULTILINE)
170
+
171
+ last_end = 0
172
+ last_file_path = None
173
+
174
+ for match in matches:
175
+ current_file_path = match.group(1).strip()
176
+ current_start = match.end()
177
+
178
+ if last_file_path:
179
+ # Önceki dosyanın içeriğini al
180
+ content = llm_output[last_end:match.start()].strip()
181
+ files[last_file_path] = content
182
+
183
+ last_file_path = current_file_path
184
+ last_end = current_start
185
+
186
+ # Son dosyanın içeriğini ekle
187
+ if last_file_path:
188
+ content = llm_output[last_end:].strip()
189
+ files[last_file_path] = content
190
+
191
+ return files
192
+
193
+ def create_zip_from_files(files_dict):
194
+ """Bir dosya sözlüğünden (yol:içerik) bir ZIP dosyası oluşturur ve baytlarını döndürür."""
195
+ zip_buffer = io.BytesIO()
196
+ with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED, False) as zip_file:
197
+ for file_path, content in files_dict.items():
198
+ # ZIP içinde klasör yapısını korumak için
199
+ zip_file.writestr(file_path, content.encode("utf-8"))
200
+ zip_buffer.seek(0)
201
+ return zip_buffer.getvalue()
202
+
203
+
project_types.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROJECT_TYPES = [
2
+ "Makine Öğrenmesi Projesi (Regresyon)",
3
+ "Makine Öğrenmesi Projesi (Sınıflandırma)",
4
+ "Makine Öğrenmesi Projesi (NLP)",
5
+ "Makine Öğrenmesi Projesi (Bilgisayar Görüsü)",
6
+ "Mobil Uygulama Geliştirme (iOS)",
7
+ "Mobil Uygulama Geliştirme (Android)",
8
+ "Mobil Uygulama Geliştirme (Cross-Platform - React Native)",
9
+ "Mobil Uygulama Geliştirme (Cross-Platform - Flutter)",
10
+ "Web Geliştirme (Frontend - React)",
11
+ "Web Geliştirme (Frontend - Angular)",
12
+ "Web Geliştirme (Frontend - Vue)",
13
+ "Web Geliştirme (Backend - Node.js)",
14
+ "Web Geliştirme (Backend - Python/Django/Flask)",
15
+ "Web Geliştirme (Backend - Go)",
16
+ "Web Geliştirme (Fullstack)",
17
+ "Oyun Geliştirme (Unity)",
18
+ "Oyun Geliştirme (Unreal Engine)",
19
+ "Oyun Geliştirme (2D)",
20
+ "Oyun Geliştirme (3D)",
21
+ "Veri Bilimi ve Analiz Projesi",
22
+ "Siber Güvenlik Projesi",
23
+ "DevOps ve Otomasyon Projesi",
24
+ "Blockchain ve Web3 Projesi",
25
+ "Gömülü Sistemler Projesi",
26
+ "Robotik Projesi",
27
+ "Donanım Geliştirme Projesi",
28
+ "UX/UI Tasarım Projesi",
29
+ "Veritabanı Tasarım Projesi",
30
+ "Bulut Bilişim Projesi (AWS)",
31
+ "Bulut Bilişim Projesi (Azure)",
32
+ "Bulut Bilişim Projesi (GCP)",
33
+ "Büyük Veri (Big Data) Projesi",
34
+ "Yapay Zeka Araştırma Projesi",
35
+ "Sistem Programlama Projesi",
36
+ "Test Otomasyon Projesi",
37
+ "E-ticaret Platformu",
38
+ "Sosyal Medya Uygulaması",
39
+ "Eğitim Platformu",
40
+ "Sağlık Uygulaması",
41
+ "Finans Uygulaması",
42
+ "IoT Projesi",
43
+ "API Geliştirme",
44
+ "Mikroservis Mimarisi",
45
+ "Veri Görselleştirme Projesi",
46
+ "NLP Uygulaması (Chatbot)",
47
+ "NLP Uygulaması (Duygu Analizi)",
48
+ "Bilgisayar Görüsü Uygulaması (Nesne Tanıma)",
49
+ "Bilgisayar Görüsü Uygulaması (Yüz Tanıma)",
50
+ "Pekiştirmeli Öğrenme Uygulaması",
51
+ "Otonom Sistemler Projesi",
52
+ "SaaS (Software as a Service) Ürünü",
53
+ "PaaS (Platform as a Service) Ürünü",
54
+ "IaaS (Infrastructure as a Service) Ürünü"
55
+ ]
56
+
requirements.txt ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aiofiles==24.1.0
2
+ annotated-types==0.7.0
3
+ anthropic==0.57.1
4
+ anyio==4.9.0
5
+ arabic-reshaper==3.0.0
6
+ asn1crypto==1.5.1
7
+ beautifulsoup4==4.13.4
8
+ blinker==1.9.0
9
+ Brotli==1.1.0
10
+ cachetools==5.5.2
11
+ certifi==2025.7.9
12
+ cffi==1.17.1
13
+ charset-normalizer==3.4.2
14
+ click==8.2.1
15
+ contourpy==1.3.2
16
+ cryptography==45.0.5
17
+ cssselect2==0.8.0
18
+ cycler==0.12.1
19
+ defusedxml==0.7.1
20
+ distro==1.7.0
21
+ et_xmlfile==2.0.0
22
+ fastapi==0.116.0
23
+ ffmpy==0.6.0
24
+ filelock==3.18.0
25
+ Flask==3.1.1
26
+ fonttools==4.58.5
27
+ fpdf==1.7.2
28
+ fpdf2==2.8.3
29
+ fsspec==2025.5.1
30
+ google-ai-generativelanguage==0.6.15
31
+ google-api-core==2.25.1
32
+ google-api-python-client==2.176.0
33
+ google-auth==2.40.3
34
+ google-auth-httplib2==0.2.0
35
+ google-generativeai==0.8.5
36
+ googleapis-common-protos==1.70.0
37
+ gradio==5.37.0
38
+ gradio_client==1.10.4
39
+ greenlet==3.2.3
40
+ groovy==0.1.2
41
+ grpcio==1.73.1
42
+ grpcio-status==1.71.2
43
+ h11==0.16.0
44
+ hf-xet==1.1.5
45
+ html5lib==1.1
46
+ httpcore==1.0.9
47
+ httplib2==0.22.0
48
+ httpx==0.28.1
49
+ huggingface-hub==0.33.4
50
+ idna==3.10
51
+ itsdangerous==2.2.0
52
+ Jinja2==3.1.6
53
+ jiter==0.10.0
54
+ kiwisolver==1.4.8
55
+ lxml==6.0.0
56
+ Markdown==3.8.2
57
+ markdown-it-py==3.0.0
58
+ MarkupSafe==3.0.2
59
+ matplotlib==3.10.3
60
+ mdurl==0.1.2
61
+ narwhals==1.46.0
62
+ numpy==2.3.1
63
+ openai==1.95.1
64
+ openpyxl==3.1.5
65
+ openrouter==1.0
66
+ orjson==3.10.18
67
+ oscrypto==1.3.0
68
+ packaging==25.0
69
+ pandas==2.3.1
70
+ pdf2image==1.17.0
71
+ pillow==11.3.0
72
+ playwright==1.53.0
73
+ plotly==6.2.0
74
+ proto-plus==1.26.1
75
+ protobuf==5.29.5
76
+ pyasn1==0.6.1
77
+ pyasn1_modules==0.4.2
78
+ pycparser==2.22
79
+ pydantic==2.11.7
80
+ pydantic_core==2.33.2
81
+ pydub==0.25.1
82
+ pydyf==0.11.0
83
+ pyee==13.0.0
84
+ Pygments==2.19.2
85
+ pyHanko==0.29.1
86
+ pyhanko-certvalidator==0.27.0
87
+ pyparsing==3.2.3
88
+ pypdf==5.7.0
89
+ pyphen==0.17.2
90
+ python-bidi==0.6.6
91
+ python-dateutil==2.9.0.post0
92
+ python-multipart==0.0.20
93
+ pytz==2025.2
94
+ PyYAML==6.0.2
95
+ reportlab==4.4.2
96
+ requests==2.32.4
97
+ rich==14.0.0
98
+ rsa==4.9.1
99
+ ruff==0.12.3
100
+ safehttpx==0.1.6
101
+ seaborn==0.13.2
102
+ semantic-version==2.10.0
103
+ shellingham==1.5.4
104
+ six==1.17.0
105
+ sniffio==1.3.1
106
+ soupsieve==2.7
107
+ ssh-import-id==5.11
108
+ starlette==0.46.2
109
+ supervisor==4.2.1
110
+ svglib==1.5.1
111
+ tabulate==0.9.0
112
+ tinycss2==1.4.0
113
+ tinyhtml5==2.0.0
114
+ tomlkit==0.13.3
115
+ tqdm==4.67.1
116
+ typer==0.16.0
117
+ typing-inspection==0.4.1
118
+ typing_extensions==4.14.1
119
+ tzdata==2025.2
120
+ tzhlocal==5.3.1
121
+ uritemplate==4.2.0
122
+ uritools==5.0.0
123
+ urllib3==2.5.0
124
+ uvicorn==0.35.0
125
+ weasyprint==65.1
126
+ webencodings==0.5.1
127
+ websockets==15.0.1
128
+ Werkzeug==3.1.3
129
+ xhtml2pdf==0.2.17
130
+ zopfli==0.2.3.post1