aimevzulari commited on
Commit
14a898d
·
verified ·
1 Parent(s): 52f61d4

Delete chatbot_backend.py

Browse files
Files changed (1) hide show
  1. chatbot_backend.py +0 -335
chatbot_backend.py DELETED
@@ -1,335 +0,0 @@
1
- """
2
- Chatbot backend işlevselliği.
3
- Bu modül, kullanıcı girdisini işleyen ve dinamik promptlar oluşturan ana mantığı içerir.
4
- """
5
-
6
- import os
7
- import json
8
- from typing import Dict, Any, Tuple, List, Optional
9
- import openai
10
- from google import generativeai as genai
11
- import requests
12
- from dotenv import load_dotenv
13
-
14
- # Prompt şablonlarını içe aktar
15
- from prompt_templates import (
16
- PROMPT_CATEGORIES,
17
- predict_category,
18
- extract_parameters,
19
- create_prompt
20
- )
21
-
22
- # AI Prompt Generator'ı içe aktar
23
- from ai_prompt_generator import AIPromptGenerator
24
-
25
- # .env dosyasını yükle (varsa)
26
- load_dotenv()
27
-
28
- class PromptEngineerChatbot:
29
- """
30
- Prompt mühendisliği chatbot sınıfı.
31
- Bu sınıf, kullanıcı girdisini işleyerek dinamik promptlar oluşturur.
32
- """
33
-
34
- def __init__(self):
35
- """
36
- Chatbot'u başlat ve yapılandır.
37
- """
38
- self.conversation_history = []
39
- self.current_category = None
40
- self.current_params = None
41
- self.ai_generator = AIPromptGenerator()
42
-
43
- def process_input(self, user_input: str, use_ai_generation: bool = True, provider: str = "openai", model: Optional[str] = None) -> Tuple[str, str, Dict[str, Any]]:
44
- """
45
- Kullanıcı girdisini işler ve dinamik bir prompt oluşturur.
46
-
47
- Args:
48
- user_input (str): Kullanıcı girdisi
49
- use_ai_generation (bool): AI destekli prompt oluşturmayı kullan
50
- provider (str): AI sağlayıcısı ('openai', 'gemini', 'openrouter')
51
- model (str, optional): Kullanılacak model
52
-
53
- Returns:
54
- Tuple[str, str, Dict[str, Any]]: Oluşturulan prompt, kategori ve parametreler
55
- """
56
- # Kullanıcı girdisini kaydet
57
- self.conversation_history.append({"role": "user", "content": user_input})
58
-
59
- # Kategori tahmini
60
- category = predict_category(user_input)
61
-
62
- # Parametreleri çıkar
63
- params = extract_parameters(category, user_input)
64
-
65
- # Mevcut kategori ve parametreleri güncelle
66
- self.current_category = category
67
- self.current_params = params
68
-
69
- # AI destekli prompt oluşturma kullanılıyorsa
70
- if use_ai_generation:
71
- # Şablon tabanlı promptu oluştur (referans için)
72
- template_prompt = create_prompt(category, params)
73
-
74
- # Kategori bilgisini ve şablon promptu kullanarak daha spesifik bir AI prompt oluştur
75
- enhanced_user_input = f"""
76
- Kategori: {category}
77
-
78
- Kullanıcı İsteği: {user_input}
79
-
80
- Lütfen bu istek için çok detaylı ve spesifik bir prompt oluştur.
81
- Şablon olarak aşağıdaki yapıyı kullanabilirsin, ancak içeriği tamamen kullanıcının isteğine göre özelleştir ve çok daha detaylı hale getir:
82
-
83
- {template_prompt}
84
-
85
- Önemli: Yukarıdaki şablonu olduğu gibi kullanma, sadece yapı referansı olarak kullan.
86
- İçeriği tamamen kullanıcının isteğine özel olarak oluştur ve çok daha detaylı, spesifik bilgiler ekle.
87
- Örneğin, kullanıcı hava durumu uygulaması istiyorsa, hava durumu API'leri, hava verilerinin görselleştirilmesi,
88
- hava tahminleri, konum takibi gibi spesifik detaylar ekle.
89
- """
90
-
91
- # AI destekli prompt oluştur
92
- result = self.ai_generator.generate_prompt(enhanced_user_input, provider, model)
93
-
94
- if result["success"]:
95
- prompt = result["prompt"]
96
- else:
97
- # AI prompt oluşturma başarısız olursa şablon promptu kullan
98
- prompt = template_prompt
99
- else:
100
- # Şablon tabanlı prompt oluştur
101
- prompt = create_prompt(category, params)
102
-
103
- # Chatbot yanıtını kaydet
104
- self.conversation_history.append({"role": "assistant", "content": prompt})
105
-
106
- return prompt, category, params
107
-
108
- def get_conversation_history(self) -> List[Dict[str, str]]:
109
- """
110
- Konuşma geçmişini döndürür.
111
-
112
- Returns:
113
- List[Dict[str, str]]: Konuşma geçmişi
114
- """
115
- return self.conversation_history
116
-
117
- def clear_conversation_history(self) -> None:
118
- """
119
- Konuşma geçmişini temizler.
120
- """
121
- self.conversation_history = []
122
- self.current_category = None
123
- self.current_params = None
124
-
125
-
126
- class AIModelInterface:
127
- """
128
- Farklı AI API'leri için arayüz sınıfı.
129
- Bu sınıf, OpenAI, Google Gemini ve OpenRouter API'leri ile etkileşim sağlar.
130
- """
131
-
132
- def __init__(self):
133
- """
134
- AI model arayüzünü başlat.
135
- """
136
- self.api_keys = {
137
- "openai": os.getenv("OPENAI_API_KEY", ""),
138
- "gemini": os.getenv("GEMINI_API_KEY", ""),
139
- "openrouter": os.getenv("OPENROUTER_API_KEY", "")
140
- }
141
-
142
- def set_api_key(self, provider: str, api_key: str) -> None:
143
- """
144
- Belirli bir sağlayıcı için API anahtarını ayarlar.
145
-
146
- Args:
147
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
148
- api_key (str): API anahtarı
149
- """
150
- if provider in self.api_keys:
151
- self.api_keys[provider] = api_key
152
-
153
- def get_available_models(self, provider: str) -> List[str]:
154
- """
155
- Belirli bir sağlayıcı için kullanılabilir modelleri döndürür.
156
-
157
- Args:
158
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
159
-
160
- Returns:
161
- List[str]: Kullanılabilir modeller listesi
162
- """
163
- if provider == "openai":
164
- return ["gpt-4o", "gpt-4-turbo", "gpt-4", "gpt-3.5-turbo"]
165
- elif provider == "gemini":
166
- return ["gemini-1.5-pro", "gemini-1.5-flash", "gemini-1.0-pro"]
167
- elif provider == "openrouter":
168
- return [
169
- "openai/gpt-4o",
170
- "openai/gpt-4-turbo",
171
- "anthropic/claude-3-opus",
172
- "anthropic/claude-3-sonnet",
173
- "google/gemini-1.5-pro",
174
- "meta-llama/llama-3-70b-instruct"
175
- ]
176
- return []
177
-
178
- def generate_with_openai(self, prompt: str, model: str = "gpt-3.5-turbo", api_key: Optional[str] = None) -> str:
179
- """
180
- OpenAI API kullanarak yanıt oluşturur.
181
-
182
- Args:
183
- prompt (str): Gönderilecek prompt
184
- model (str): Kullanılacak model
185
- api_key (str, optional): Doğrudan kullanılacak API anahtarı
186
-
187
- Returns:
188
- str: Oluşturulan yanıt
189
- """
190
- # Doğrudan API anahtarı verilmişse onu kullan, yoksa saklanan anahtarı kullan
191
- current_api_key = api_key if api_key else self.api_keys["openai"]
192
-
193
- if not current_api_key:
194
- return "OpenAI API anahtarı ayarlanmamış."
195
-
196
- try:
197
- # Geçici olarak API anahtarını ayarla
198
- openai.api_key = current_api_key
199
-
200
- response = openai.chat.completions.create(
201
- model=model,
202
- messages=[{"role": "user", "content": prompt}],
203
- temperature=0.7,
204
- max_tokens=2000
205
- )
206
- return response.choices[0].message.content
207
- except Exception as e:
208
- return f"OpenAI API hatası: {str(e)}"
209
-
210
- def generate_with_gemini(self, prompt: str, model: str = "gemini-1.5-pro", api_key: Optional[str] = None) -> str:
211
- """
212
- Google Gemini API kullanarak yanıt oluşturur.
213
-
214
- Args:
215
- prompt (str): Gönderilecek prompt
216
- model (str): Kullanılacak model
217
- api_key (str, optional): Doğrudan kullanılacak API anahtarı
218
-
219
- Returns:
220
- str: Oluşturulan yanıt
221
- """
222
- # Doğrudan API anahtarı verilmişse onu kullan, yoksa saklanan anahtarı kullan
223
- current_api_key = api_key if api_key else self.api_keys["gemini"]
224
-
225
- if not current_api_key:
226
- return "Gemini API anahtarı ayarlanmamış."
227
-
228
- try:
229
- # Geçici olarak API anahtarını ayarla
230
- genai.configure(api_key=current_api_key)
231
-
232
- model_obj = genai.GenerativeModel(model)
233
- response = model_obj.generate_content(prompt)
234
- return response.text
235
- except Exception as e:
236
- return f"Gemini API hatası: {str(e)}"
237
-
238
- def generate_with_openrouter(self, prompt: str, model: str = "openai/gpt-4-turbo", api_key: Optional[str] = None) -> str:
239
- """
240
- OpenRouter API kullanarak yanıt oluşturur.
241
-
242
- Args:
243
- prompt (str): Gönderilecek prompt
244
- model (str): Kullanılacak model
245
- api_key (str, optional): Doğrudan kullanılacak API anahtarı
246
-
247
- Returns:
248
- str: Oluşturulan yanıt
249
- """
250
- # Doğrudan API anahtarı verilmişse onu kullan, yoksa saklanan anahtarı kullan
251
- current_api_key = api_key if api_key else self.api_keys["openrouter"]
252
-
253
- if not current_api_key:
254
- return "OpenRouter API anahtarı ayarlanmamış."
255
-
256
- try:
257
- headers = {
258
- "Content-Type": "application/json",
259
- "Authorization": f"Bearer {current_api_key}"
260
- }
261
-
262
- data = {
263
- "model": model,
264
- "messages": [{"role": "user", "content": prompt}],
265
- "temperature": 0.7,
266
- "max_tokens": 2000
267
- }
268
-
269
- response = requests.post(
270
- "https://openrouter.ai/api/v1/chat/completions",
271
- headers=headers,
272
- json=data
273
- )
274
-
275
- if response.status_code == 200:
276
- return response.json()["choices"][0]["message"]["content"]
277
- else:
278
- return f"OpenRouter API hatası: {response.status_code} - {response.text}"
279
- except Exception as e:
280
- return f"OpenRouter API hatası: {str(e)}"
281
-
282
- def generate_response(self, provider: str, prompt: str, model: Optional[str] = None, api_key: Optional[str] = None) -> str:
283
- """
284
- Belirli bir sağlayıcı ve model kullanarak yanıt oluşturur.
285
-
286
- Args:
287
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
288
- prompt (str): Gönderilecek prompt
289
- model (str, optional): Kullanılacak model
290
- api_key (str, optional): Doğrudan kullanılacak API anahtarı
291
-
292
- Returns:
293
- str: Oluşturulan yanıt
294
- """
295
- if provider == "openai":
296
- if model is None:
297
- model = "gpt-3.5-turbo"
298
- return self.generate_with_openai(prompt, model, api_key)
299
- elif provider == "gemini":
300
- if model is None:
301
- model = "gemini-1.5-pro"
302
- return self.generate_with_gemini(prompt, model, api_key)
303
- elif provider == "openrouter":
304
- if model is None:
305
- model = "openai/gpt-4-turbo"
306
- return self.generate_with_openrouter(prompt, model, api_key)
307
- else:
308
- return "Geçersiz sağlayıcı. Lütfen 'openai', 'gemini' veya 'openrouter' seçin."
309
-
310
-
311
- # Chatbot ve AI model arayüzü örneklerini oluştur
312
- chatbot = PromptEngineerChatbot()
313
- ai_interface = AIModelInterface()
314
-
315
- # Test fonksiyonu
316
- def test_chatbot():
317
- """
318
- Chatbot'u test eder.
319
- """
320
- test_input = "Bir e-ticaret web sitesi yapmak istiyorum. Ürünleri listeleyebilmeli, sepete ekleyebilmeli ve ödeme alabilmeliyim."
321
- prompt, category, params = chatbot.process_input(test_input, use_ai_generation=True)
322
-
323
- print(f"Kategori: {category}")
324
- print(f"Parametreler: {json.dumps(params, indent=2, ensure_ascii=False)}")
325
- print("\nOluşturulan Prompt:")
326
- print(prompt)
327
-
328
- # API yanıtı test (API anahtarı varsa)
329
- if ai_interface.api_keys["openai"]:
330
- print("\nOpenAI Yanıtı:")
331
- response = ai_interface.generate_response("openai", prompt)
332
- print(response)
333
-
334
- if __name__ == "__main__":
335
- test_chatbot()