Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	| """ | |
| AI destekli dinamik prompt oluşturucu. | |
| Bu modül, kullanıcı girdisine göre tamamen dinamik promptlar oluşturur. | |
| """ | |
| import os | |
| from typing import Dict, Any, Tuple, List, Optional | |
| import openai | |
| from google import generativeai as genai | |
| import requests | |
| from dotenv import load_dotenv, find_dotenv | |
| # Özel .env dosyası yükleme fonksiyonu | |
| def load_env_safely(): | |
| """ | |
| .env dosyasını güvenli bir şekilde yükler, farklı karakter kodlamalarını deneyerek. | |
| """ | |
| try: | |
| # .env dosyasının yolunu bul | |
| dotenv_path = find_dotenv() | |
| # .env dosyası yoksa hemen çık | |
| if not dotenv_path or not os.path.exists(dotenv_path): | |
| return | |
| # Çevre değişkenleri | |
| env_vars = {} | |
| try: | |
| # Önce UTF-8 ile dene | |
| with open(dotenv_path, "r", encoding="utf-8") as f: | |
| lines = f.readlines() | |
| except UnicodeDecodeError: | |
| try: | |
| # UTF-8 başarısız olursa Latin-1 ile dene | |
| with open(dotenv_path, "r", encoding="latin-1") as f: | |
| lines = f.readlines() | |
| except Exception: | |
| # Her şey başarısız olursa, .env'yi yüklemeyi atla | |
| print("Uyarı: .env dosyası okunamadı, API anahtarları yüklenemedi.") | |
| return | |
| # Dosya içeriğini işle | |
| for line in lines: | |
| line = line.strip() | |
| if line and not line.startswith("#") and "=" in line: | |
| key, value = line.split("=", 1) | |
| key = key.strip() | |
| value = value.strip().strip('"\'') | |
| # Değişkeni ortam değişkenlerine ekle | |
| os.environ[key] = value | |
| except Exception as e: | |
| print(f"Uyarı: .env dosyası yüklenirken hata oluştu: {str(e)}") | |
| # .env dosyasını güvenli bir şekilde yükle | |
| load_env_safely() | |
| class AIPromptGenerator: | |
| """ | |
| AI destekli dinamik prompt oluşturucu sınıfı. | |
| Bu sınıf, kullanıcı girdisine göre yapay zeka kullanarak dinamik promptlar oluşturur. | |
| """ | |
| def __init__(self, openai_api_key=None, gemini_api_key=None, openrouter_api_key=None): | |
| """AI tabanlı prompt oluşturucu sınıfı. | |
| Args: | |
| openai_api_key (str, optional): OpenAI API anahtarı. Defaults to None. | |
| gemini_api_key (str, optional): Google Gemini API anahtarı. Defaults to None. | |
| openrouter_api_key (str, optional): OpenRouter API anahtarı. Defaults to None. | |
| """ | |
| self.openai_api_key = openai_api_key | |
| self.gemini_api_key = gemini_api_key | |
| self.openrouter_api_key = openrouter_api_key | |
| # API anahtarlarını ayarla (varsa) | |
| if self.openai_api_key: | |
| openai.api_key = self.openai_api_key | |
| if self.gemini_api_key: | |
| genai.configure(api_key=self.gemini_api_key) | |
| def set_api_key(self, provider: str, api_key: str) -> None: | |
| """ | |
| Belirli bir sağlayıcı için API anahtarını ayarlar. | |
| Args: | |
| provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter') | |
| api_key (str): API anahtarı | |
| """ | |
| if provider == "openai": | |
| self.openai_api_key = api_key | |
| openai.api_key = api_key | |
| elif provider == "gemini": | |
| self.gemini_api_key = api_key | |
| genai.configure(api_key=api_key) | |
| elif provider == "openrouter": | |
| self.openrouter_api_key = api_key | |
| def generate_with_openai(self, user_input: str, model: str = "gpt-3.5-turbo") -> Dict[str, Any]: | |
| """ | |
| OpenAI API kullanarak dinamik prompt oluşturur. | |
| Args: | |
| user_input (str): Kullanıcı girdisi | |
| model (str): Kullanılacak model | |
| Returns: | |
| Dict[str, Any]: Oluşturulan prompt ve ilgili bilgiler | |
| """ | |
| if not self.openai_api_key: | |
| return {"success": False, "error": "OpenAI API anahtarı ayarlanmamış.", "prompt": ""} | |
| try: | |
| system_message = """ | |
| Sen uzman bir prompt mühendisisin. Görevin, kullanıcının isteklerini son derece detaylı, spesifik ve kapsamlı bir prompta dönüştürmektir. | |
| Kullanıcı sana ne yapmak istediğini anlatacak (örneğin bir web sitesi, mobil uygulama, oyun, veri analizi, görsel üretimi, video üretimi vb.). | |
| Sen de bunu yapay zeka modellerine verilebilecek detaylı bir prompta dönüştüreceksin. | |
| Oluşturduğun prompt şunları içermeli: | |
| 1. Projenin/görevin çok net ve spesifik bir tanımı | |
| 2. Teknik gereksinimler ve kısıtlamalar (programlama dilleri, framework'ler, API'ler, vb.) | |
| 3. Kullanıcı deneyimi ve arayüz gereksinimleri | |
| 4. Özel özellikler ve işlevsellikler (domain'e özgü detaylarla) | |
| 5. Adım adım uygulama talimatları | |
| 6. Beklenen çıktının detaylı açıklaması | |
| 7. Kalite kriterleri ve test gereksinimleri | |
| 8. Referans olabilecek örnekler veya kaynaklar | |
| Önemli kurallar: | |
| - Asla genel şablonlar kullanma, her prompt tamamen kullanıcının spesifik isteğine göre özelleştirilmiş olmalı | |
| - Kullanıcının belirttiği alana özgü teknik detaylar ve terminoloji kullan | |
| - Prompt içeriğini zenginleştirmek için kendi teknik bilgini kullan | |
| - Örneğin, hava durumu uygulaması için OpenWeatherMap API, geolocation, hava tahmin algoritmaları, sıcaklık/nem/basınç göstergeleri gibi spesifik detaylar ekle | |
| - E-ticaret için ödeme işleme API'leri, sepet yönetimi, ürün filtreleme, kullanıcı yorumları gibi spesifik özellikler belirt | |
| - Veri analizi için veri temizleme teknikleri, istatistiksel modeller, görselleştirme kütüphaneleri gibi spesifik araçlar öner | |
| Promptu yapılandırırken bölümlere ayır, başlıklar kullan ve numaralandırılmış listeler oluştur. | |
| """ | |
| try: | |
| openai.api_key = self.openai_api_key | |
| response = openai.chat.completions.create( | |
| model=model, | |
| messages=[ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": f"Şu konuda çok detaylı ve spesifik bir prompt oluştur: {user_input}"} | |
| ], | |
| temperature=0.7, | |
| max_tokens=3000 | |
| ) | |
| return { | |
| "success": True, | |
| "prompt": response.choices[0].message.content, | |
| "model": model | |
| } | |
| except openai.OpenAIError as e: | |
| return {"success": False, "error": f"OpenAI API hatası: {str(e)}", "prompt": ""} | |
| except Exception as e: | |
| return {"success": False, "error": f"Beklenmeyen hata: {str(e)}", "prompt": ""} | |
| def generate_with_gemini(self, user_input: str, model: str = "gemini-1.5-pro") -> Dict[str, Any]: | |
| """ | |
| Google Gemini API kullanarak dinamik prompt oluşturur. | |
| Args: | |
| user_input (str): Kullanıcı girdisi | |
| model (str): Kullanılacak model | |
| Returns: | |
| Dict[str, Any]: Oluşturulan prompt ve ilgili bilgiler | |
| """ | |
| if not self.gemini_api_key: | |
| return {"success": False, "error": "Gemini API anahtarı ayarlanmamış.", "prompt": ""} | |
| try: | |
| system_prompt = """ | |
| Sen uzman bir prompt mühendisisin. Görevin, kullanıcının isteklerini son derece detaylı, spesifik ve kapsamlı bir prompta dönüştürmektir. | |
| Kullanıcı sana ne yapmak istediğini anlatacak (örneğin bir web sitesi, mobil uygulama, oyun, veri analizi, görsel üretimi, video üretimi vb.). | |
| Sen de bunu yapay zeka modellerine verilebilecek detaylı bir prompta dönüştüreceksin. | |
| Oluşturduğun prompt şunları içermeli: | |
| 1. Projenin/görevin çok net ve spesifik bir tanımı | |
| 2. Teknik gereksinimler ve kısıtlamalar (programlama dilleri, framework'ler, API'ler, vb.) | |
| 3. Kullanıcı deneyimi ve arayüz gereksinimleri | |
| 4. Özel özellikler ve işlevsellikler (domain'e özgü detaylarla) | |
| 5. Adım adım uygulama talimatları | |
| 6. Beklenen çıktının detaylı açıklaması | |
| 7. Kalite kriterleri ve test gereksinimleri | |
| 8. Referans olabilecek örnekler veya kaynaklar | |
| Önemli kurallar: | |
| - Asla genel şablonlar kullanma, her prompt tamamen kullanıcının spesifik isteğine göre özelleştirilmiş olmalı | |
| - Kullanıcının belirttiği alana özgü teknik detaylar ve terminoloji kullan | |
| - Prompt içeriğini zenginleştirmek için kendi teknik bilgini kullan | |
| - Örneğin, hava durumu uygulaması için OpenWeatherMap API, geolocation, hava tahmin algoritmaları, sıcaklık/nem/basınç göstergeleri gibi spesifik detaylar ekle | |
| - E-ticaret için ödeme işleme API'leri, sepet yönetimi, ürün filtreleme, kullanıcı yorumları gibi spesifik özellikler belirt | |
| - Veri analizi için veri temizleme teknikleri, istatistiksel modeller, görselleştirme kütüphaneleri gibi spesifik araçlar öner | |
| Promptu yapılandırırken bölümlere ayır, başlıklar kullan ve numaralandırılmış listeler oluştur. | |
| """ | |
| try: | |
| genai.configure(api_key=self.gemini_api_key) | |
| model_obj = genai.GenerativeModel(model) | |
| response = model_obj.generate_content([ | |
| system_prompt, | |
| f"Şu konuda çok detaylı ve spesifik bir prompt oluştur: {user_input}" | |
| ], | |
| generation_config=genai.types.GenerationConfig( | |
| temperature=0.7, | |
| max_output_tokens=3000 | |
| )) | |
| return { | |
| "success": True, | |
| "prompt": response.text, | |
| "model": model | |
| } | |
| except Exception as e: | |
| return {"success": False, "error": f"Gemini API hatası: {str(e)}", "prompt": ""} | |
| except Exception as e: | |
| return {"success": False, "error": f"Beklenmeyen hata: {str(e)}", "prompt": ""} | |
| def generate_with_openrouter(self, user_input: str, model: str = "openai/gpt-4-turbo") -> Dict[str, Any]: | |
| """ | |
| OpenRouter API kullanarak dinamik prompt oluşturur. | |
| Args: | |
| user_input (str): Kullanıcı girdisi | |
| model (str): Kullanılacak model | |
| Returns: | |
| Dict[str, Any]: Oluşturulan prompt ve ilgili bilgiler | |
| """ | |
| if not self.openrouter_api_key: | |
| return {"success": False, "error": "OpenRouter API anahtarı ayarlanmamış.", "prompt": ""} | |
| try: | |
| system_message = """ | |
| Sen uzman bir prompt mühendisisin. Görevin, kullanıcının isteklerini son derece detaylı, spesifik ve kapsamlı bir prompta dönüştürmektir. | |
| Kullanıcı sana ne yapmak istediğini anlatacak (örneğin bir web sitesi, mobil uygulama, oyun, veri analizi, görsel üretimi, video üretimi vb.). | |
| Sen de bunu yapay zeka modellerine verilebilecek detaylı bir prompta dönüştüreceksin. | |
| Oluşturduğun prompt şunları içermeli: | |
| 1. Projenin/görevin çok net ve spesifik bir tanımı | |
| 2. Teknik gereksinimler ve kısıtlamalar (programlama dilleri, framework'ler, API'ler, vb.) | |
| 3. Kullanıcı deneyimi ve arayüz gereksinimleri | |
| 4. Özel özellikler ve işlevsellikler (domain'e özgü detaylarla) | |
| 5. Adım adım uygulama talimatları | |
| 6. Beklenen çıktının detaylı açıklaması | |
| 7. Kalite kriterleri ve test gereksinimleri | |
| 8. Referans olabilecek örnekler veya kaynaklar | |
| Önemli kurallar: | |
| - Asla genel şablonlar kullanma, her prompt tamamen kullanıcının spesifik isteğine göre özelleştirilmiş olmalı | |
| - Kullanıcının belirttiği alana özgü teknik detaylar ve terminoloji kullan | |
| - Prompt içeriğini zenginleştirmek için kendi teknik bilgini kullan | |
| - Örneğin, hava durumu uygulaması için OpenWeatherMap API, geolocation, hava tahmin algoritmaları, sıcaklık/nem/basınç göstergeleri gibi spesifik detaylar ekle | |
| - E-ticaret için ödeme işleme API'leri, sepet yönetimi, ürün filtreleme, kullanıcı yorumları gibi spesifik özellikler belirt | |
| - Veri analizi için veri temizleme teknikleri, istatistiksel modeller, görselleştirme kütüphaneleri gibi spesifik araçlar öner | |
| Promptu yapılandırırken bölümlere ayır, başlıklar kullan ve numaralandırılmış listeler oluştur. | |
| """ | |
| headers = { | |
| "Content-Type": "application/json", | |
| "Authorization": f"Bearer {self.openrouter_api_key}" | |
| } | |
| data = { | |
| "model": model, | |
| "messages": [ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": f"Şu konuda çok detaylı ve spesifik bir prompt oluştur: {user_input}"} | |
| ], | |
| "temperature": 0.7, | |
| "max_tokens": 3000 | |
| } | |
| response = requests.post( | |
| "https://openrouter.ai/api/v1/chat/completions", | |
| headers=headers, | |
| json=data | |
| ) | |
| if response.status_code == 200: | |
| response_data = response.json() | |
| return { | |
| "success": True, | |
| "prompt": response_data["choices"][0]["message"]["content"], | |
| "model": model | |
| } | |
| else: | |
| return { | |
| "success": False, | |
| "error": f"HTTP {response.status_code}: {response.text}", | |
| "prompt": "" | |
| } | |
| except Exception as e: | |
| return {"success": False, "error": str(e), "prompt": ""} | |
| def generate_prompt(self, user_input: str, provider: str, model: Optional[str] = None) -> Dict[str, Any]: | |
| """ | |
| Belirli bir sağlayıcı ve model kullanarak dinamik prompt oluşturur. | |
| Args: | |
| user_input (str): Kullanıcı girdisi | |
| provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter') | |
| model (str, optional): Kullanılacak model | |
| Returns: | |
| Dict[str, Any]: Oluşturulan prompt ve ilgili bilgiler | |
| """ | |
| try: | |
| # Kullanıcının belirttiği özel teknolojilere vurgu yapalım | |
| user_input_lower = user_input.lower() | |
| enhanced_user_input = user_input | |
| # Frontend teknolojileri için vurgu | |
| if "bootstrap" in user_input_lower: | |
| enhanced_user_input += "\n\nNOT: Bootstrap framework'ü mutlaka kullanılmalıdır. Tasarım Bootstrap bileşenlerini içermelidir." | |
| if "react" in user_input_lower: | |
| enhanced_user_input += "\n\nNOT: React kütüphanesi mutlaka kullanılmalıdır. JSX ve React bileşenleri ile uygulama oluşturulmalıdır." | |
| if "vue" in user_input_lower: | |
| enhanced_user_input += "\n\nNOT: Vue.js framework'ü mutlaka kullanılmalıdır. Vue bileşenleri ve direktifleri ile uygulama oluşturulmalıdır." | |
| if "angular" in user_input_lower: | |
| enhanced_user_input += "\n\nNOT: Angular framework'ü mutlaka kullanılmalıdır. Angular bileşenleri, modülleri ve servisleri ile uygulama oluşturulmalıdır." | |
| if "tailwind" in user_input_lower: | |
| enhanced_user_input += "\n\nNOT: Tailwind CSS mutlaka kullanılmalıdır. Tasarım Tailwind utility sınıfları ile oluşturulmalıdır." | |
| # API anahtarını kontrol et | |
| if provider == "openai" and not self.openai_api_key: | |
| return { | |
| "success": False, | |
| "error": "OpenAI API anahtarı ayarlanmamış." | |
| } | |
| elif provider == "gemini" and not self.gemini_api_key: | |
| return { | |
| "success": False, | |
| "error": "Google Gemini API anahtarı ayarlanmamış." | |
| } | |
| elif provider == "openrouter" and not self.openrouter_api_key: | |
| return { | |
| "success": False, | |
| "error": "OpenRouter API anahtarı ayarlanmamış." | |
| } | |
| # OpenAI ile prompt oluştur | |
| if provider == "openai": | |
| if model is None: | |
| model = "gpt-3.5-turbo" | |
| return self.generate_with_openai(enhanced_user_input, model) | |
| elif provider == "gemini": | |
| if model is None: | |
| model = "gemini-1.5-pro" | |
| return self.generate_with_gemini(enhanced_user_input, model) | |
| elif provider == "openrouter": | |
| if model is None: | |
| model = "anthropic/claude-3-opus" if self.openrouter_api_key else "openai/gpt-4-turbo" | |
| return self.generate_with_openrouter(enhanced_user_input, model) | |
| else: | |
| return {"success": False, "error": "Geçersiz sağlayıcı. Lütfen 'openai', 'gemini' veya 'openrouter' seçin.", "prompt": ""} | |
| except Exception as e: | |
| return {"success": False, "error": f"Prompt oluşturma hatası: {str(e)}", "prompt": ""} | |
| # Test fonksiyonu | |
| def test_ai_prompt_generator(): | |
| """ | |
| AI prompt oluşturucuyu test eder. | |
| """ | |
| generator = AIPromptGenerator() | |
| # Test girdileri | |
| test_inputs = [ | |
| "Bir hava durumu uygulaması yapmak istiyorum", | |
| "Bir e-ticaret web sitesi geliştirmek istiyorum", | |
| "Veri analizi için bir dashboard oluşturmak istiyorum" | |
| ] | |
| # OpenAI API anahtarı varsa test et | |
| if generator.openai_api_key: | |
| print("OpenAI ile test:") | |
| for input_text in test_inputs: | |
| print(f"\nTest girdisi: {input_text}") | |
| result = generator.generate_prompt(input_text, "openai", "gpt-4o") | |
| if result["success"]: | |
| print(f"Oluşturulan prompt (ilk 300 karakter):\n{result['prompt'][:300]}...") | |
| else: | |
| print(f"Hata: {result['error']}") | |
| # Gemini API anahtarı varsa test et | |
| if generator.gemini_api_key: | |
| print("\nGemini ile test:") | |
| for input_text in test_inputs: | |
| print(f"\nTest girdisi: {input_text}") | |
| result = generator.generate_prompt(input_text, "gemini") | |
| if result["success"]: | |
| print(f"Oluşturulan prompt (ilk 300 karakter):\n{result['prompt'][:300]}...") | |
| else: | |
| print(f"Hata: {result['error']}") | |
| # OpenRouter API anahtarı varsa test et | |
| if generator.openrouter_api_key: | |
| print("\nOpenRouter ile test:") | |
| for input_text in test_inputs: | |
| print(f"\nTest girdisi: {input_text}") | |
| result = generator.generate_prompt(input_text, "openrouter") | |
| if result["success"]: | |
| print(f"Oluşturulan prompt (ilk 300 karakter):\n{result['prompt'][:300]}...") | |
| else: | |
| print(f"Hata: {result['error']}") | |
| if __name__ == "__main__": | |
| test_ai_prompt_generator() | |