Spaces:
Build error
Build error
| """ | |
| 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 | |
| # .env dosyasını yükle (varsa) | |
| load_dotenv() | |
| 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): | |
| """ | |
| AI prompt oluşturucuyu başlat. | |
| """ | |
| self.openai_api_key = os.getenv("OPENAI_API_KEY", "") | |
| self.gemini_api_key = os.getenv("GEMINI_API_KEY", "") | |
| self.openrouter_api_key = os.getenv("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. | |
| """ | |
| 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 Exception as e: | |
| return {"success": False, "error": 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. | |
| """ | |
| 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": 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 | |
| """ | |
| if provider == "openai": | |
| if model is None: | |
| model = "gpt-4o" if self.openai_api_key else "gpt-3.5-turbo" | |
| return self.generate_with_openai(user_input, model) | |
| elif provider == "gemini": | |
| if model is None: | |
| model = "gemini-1.5-pro" | |
| return self.generate_with_gemini(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(user_input, model) | |
| else: | |
| return {"success": False, "error": "Geçersiz sağlayıcı. Lütfen 'openai', 'gemini' veya 'openrouter' seçin.", "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() | |