aimevzulari commited on
Commit
102f460
·
verified ·
1 Parent(s): 6038e47

Delete chatbot_backend.py

Browse files
Files changed (1) hide show
  1. chatbot_backend.py +0 -373
chatbot_backend.py DELETED
@@ -1,373 +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
- # AI prompt oluşturucuyu içe aktar
15
- from ai_prompt_generator import AIPromptGenerator
16
-
17
- # .env dosyasını yükle (varsa)
18
- load_dotenv()
19
-
20
- class PromptEngineerChatbot:
21
- """
22
- Prompt mühendisliği chatbot sınıfı.
23
- Bu sınıf, kullanıcı girdisini işleyerek dinamik promptlar oluşturur.
24
- """
25
-
26
- def __init__(self):
27
- """
28
- Chatbot'u başlat ve yapılandır.
29
- """
30
- self.conversation_history = []
31
- self.ai_prompt_generator = AIPromptGenerator()
32
-
33
- def process_input(self, user_input: str, provider: str = "openai", model: Optional[str] = None) -> Dict[str, Any]:
34
- """
35
- Kullanıcı girdisini işler ve dinamik bir prompt oluşturur.
36
-
37
- Args:
38
- user_input (str): Kullanıcı girdisi
39
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
40
- model (str, optional): Kullanılacak model
41
-
42
- Returns:
43
- Dict[str, Any]: Oluşturulan prompt ve ilgili bilgiler
44
- """
45
- # Kullanıcı girdisini kaydet
46
- self.conversation_history.append({"role": "user", "content": user_input})
47
-
48
- # AI ile dinamik prompt oluştur
49
- result = self.ai_prompt_generator.generate_prompt(user_input, provider, model)
50
-
51
- # Başarılı ise chatbot yanıtını kaydet
52
- if result["success"]:
53
- self.conversation_history.append({"role": "assistant", "content": result["prompt"]})
54
-
55
- return result
56
-
57
- def get_conversation_history(self) -> List[Dict[str, str]]:
58
- """
59
- Konuşma geçmişini döndürür.
60
-
61
- Returns:
62
- List[Dict[str, str]]: Konuşma geçmişi
63
- """
64
- return self.conversation_history
65
-
66
- def clear_conversation_history(self) -> None:
67
- """
68
- Konuşma geçmişini temizler.
69
- """
70
- self.conversation_history = []
71
-
72
- def set_api_key(self, provider: str, api_key: str) -> None:
73
- """
74
- Belirli bir sağlayıcı için API anahtarını ayarlar.
75
-
76
- Args:
77
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
78
- api_key (str): API anahtarı
79
- """
80
- self.ai_prompt_generator.set_api_key(provider, api_key)
81
-
82
-
83
- class AIModelInterface:
84
- """
85
- Farklı AI API'leri için arayüz sınıfı.
86
- Bu sınıf, OpenAI, Google Gemini ve OpenRouter API'leri ile etkileşim sağlar.
87
- """
88
-
89
- def __init__(self):
90
- """
91
- AI model arayüzünü başlat.
92
- """
93
- self.api_keys = {
94
- "openai": os.getenv("OPENAI_API_KEY", ""),
95
- "gemini": os.getenv("GEMINI_API_KEY", ""),
96
- "openrouter": os.getenv("OPENROUTER_API_KEY", "")
97
- }
98
-
99
-
100
- def set_api_key(self, provider: str, api_key: str) -> None:
101
- """
102
- Belirli bir sağlayıcı için API anahtarını ayarlar.
103
-
104
- Args:
105
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
106
- api_key (str): API anahtarı
107
- """
108
- if provider in self.api_keys:
109
- self.api_keys[provider] = api_key
110
-
111
- def get_available_models(self, provider: str) -> List[str]:
112
- """
113
- Belirli bir sağlayıcı için kullanılabilir modelleri döndürür.
114
-
115
- Args:
116
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
117
-
118
- Returns:
119
- List[str]: Kullanılabilir modeller listesi
120
- """
121
- if provider == "openai":
122
- return ["gpt-4o", "gpt-4-turbo", "gpt-4", "gpt-3.5-turbo"]
123
- elif provider == "gemini":
124
- return ["gemini-1.5-pro", "gemini-1.5-flash", "gemini-1.0-pro"]
125
- elif provider == "openrouter":
126
- return [
127
- "openai/gpt-4o",
128
- "openai/gpt-4-turbo",
129
- "anthropic/claude-3-opus",
130
- "anthropic/claude-3-sonnet",
131
- "google/gemini-1.5-pro",
132
- "meta-llama/llama-3-70b-instruct"
133
- ]
134
- return []
135
-
136
- def generate_with_openai(self, prompt: str, model: str = "gpt-3.5-turbo") -> str:
137
- """
138
- OpenAI API kullanarak yanıt oluşturur.
139
-
140
- Args:
141
- prompt (str): Gönderilecek prompt
142
- model (str): Kullanılacak model
143
-
144
- Returns:
145
- str: Oluşturulan yanıt
146
- """
147
- if not self.api_keys["openai"]:
148
- return "OpenAI API anahtarı ayarlanmamış."
149
-
150
- try:
151
- openai.api_key = self.api_keys["openai"]
152
- response = openai.chat.completions.create(
153
- model=model,
154
- messages=[{"role": "user", "content": prompt}],
155
- temperature=0.7,
156
- max_tokens=2000
157
- )
158
- return response.choices[0].message.content
159
- except Exception as e:
160
- return f"OpenAI API hatası: {str(e)}"
161
-
162
- def generate_with_gemini(self, prompt: str, model: str = "gemini-1.5-pro") -> str:
163
- """
164
- Google Gemini API kullanarak yanıt oluşturur.
165
-
166
- Args:
167
- prompt (str): Gönderilecek prompt
168
- model (str): Kullanılacak model
169
-
170
- Returns:
171
- str: Oluşturulan yanıt
172
- """
173
- if not self.api_keys["gemini"]:
174
- return "Gemini API anahtarı ayarlanmamış."
175
-
176
- try:
177
- genai.configure(api_key=self.api_keys["gemini"])
178
- model_obj = genai.GenerativeModel(model)
179
- response = model_obj.generate_content(prompt)
180
- return response.text
181
- except Exception as e:
182
- return f"Gemini API hatası: {str(e)}"
183
-
184
- def generate_with_openrouter(self, prompt: str, model: str = "openai/gpt-4-turbo") -> str:
185
- """
186
- OpenRouter API kullanarak yanıt oluşturur.
187
-
188
- Args:
189
- prompt (str): Gönderilecek prompt
190
- model (str): Kullanılacak model
191
-
192
- Returns:
193
- str: Oluşturulan yanıt
194
- """
195
- if not self.api_keys["openrouter"]:
196
- return "OpenRouter API anahtarı ayarlanmamış."
197
-
198
- try:
199
- headers = {
200
- "Content-Type": "application/json",
201
- "Authorization": f"Bearer {self.api_keys['openrouter']}"
202
- }
203
-
204
- data = {
205
- "model": model,
206
- "messages": [{"role": "user", "content": prompt}],
207
- "temperature": 0.7,
208
- "max_tokens": 2000
209
- }
210
-
211
- response = requests.post(
212
- "https://openrouter.ai/api/v1/chat/completions",
213
- headers=headers,
214
- json=data
215
- )
216
-
217
- if response.status_code == 200:
218
- return response.json()["choices"][0]["message"]["content"]
219
- else:
220
- return f"OpenRouter API hatası: {response.status_code} - {response.text}"
221
- except Exception as e:
222
- return f"OpenRouter API hatası: {str(e)}"
223
-
224
- def generate_response(self, provider: str, prompt: str, model: Optional[str] = None) -> str:
225
- """
226
- Belirli bir sağlayıcı ve model kullanarak yanıt oluşturur.
227
-
228
- Args:
229
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
230
- prompt (str): Gönderilecek prompt
231
- model (str, optional): Kullanılacak model
232
-
233
- Returns:
234
- str: Oluşturulan yanıt
235
- """
236
- if provider == "openai":
237
- if model is None:
238
- model = "gpt-3.5-turbo"
239
- return self.generate_with_openai(prompt, model)
240
- elif provider == "gemini":
241
- if model is None:
242
- model = "gemini-1.5-pro"
243
- return self.generate_with_gemini(prompt, model)
244
- elif provider == "openrouter":
245
- if model is None:
246
- model = "openai/gpt-4-turbo"
247
- return self.generate_with_openrouter(prompt, model)
248
- else:
249
- return "Geçersiz sağlayıcı. Lütfen 'openai', 'gemini' veya 'openrouter' seçin."
250
-
251
- def generate_lightweight_response(self, provider: str, prompt: str, model: Optional[str] = None, api_key: Optional[str] = None, max_tokens: int = 400) -> str:
252
- """
253
- Belirli bir sağlayıcı ve model kullanarak hafif bir yanıt oluşturur.
254
-
255
- Args:
256
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
257
- prompt (str): Gönderilecek prompt
258
- model (str, optional): Kullanılacak model
259
- api_key (str, optional): API anahtarı
260
- max_tokens (int, optional): Maksimum token sayısı
261
-
262
- Returns:
263
- str: Oluşturulan yanıt
264
- """
265
- try:
266
- if provider == "openai":
267
- if model is None:
268
- model = "gpt-3.5-turbo"
269
-
270
- # API anahtarını ayarla
271
- if api_key:
272
- openai.api_key = api_key
273
- else:
274
- return "OpenAI API anahtarı gereklidir."
275
-
276
- # API çağrısı yap
277
- response = openai.chat.completions.create(
278
- model=model,
279
- messages=[{"role": "user", "content": prompt}],
280
- temperature=0.7,
281
- max_tokens=max_tokens
282
- )
283
-
284
- return response.choices[0].message.content
285
-
286
- elif provider == "gemini":
287
- if model is None:
288
- model = "gemini-1.5-pro"
289
-
290
- # API anahtarını ayarla
291
- if api_key:
292
- genai.configure(api_key=api_key)
293
- else:
294
- return "Gemini API anahtarı gereklidir."
295
-
296
- # API çağrısı yap
297
- model_obj = genai.GenerativeModel(model)
298
- generation_config = {
299
- "temperature": 0.7,
300
- "max_output_tokens": max_tokens,
301
- "top_p": 0.95,
302
- "top_k": 40
303
- }
304
- response = model_obj.generate_content(
305
- prompt,
306
- generation_config=generation_config
307
- )
308
-
309
- return response.text
310
-
311
- elif provider == "openrouter":
312
- if model is None:
313
- model = "openai/gpt-4-turbo"
314
-
315
- # API anahtarını kontrol et
316
- if not api_key:
317
- return "OpenRouter API anahtarı gereklidir."
318
-
319
- # API çağrısı yap
320
- headers = {
321
- "Content-Type": "application/json",
322
- "Authorization": f"Bearer {api_key}"
323
- }
324
-
325
- data = {
326
- "model": model,
327
- "messages": [{"role": "user", "content": prompt}],
328
- "temperature": 0.7,
329
- "max_tokens": max_tokens
330
- }
331
-
332
- response = requests.post(
333
- "https://openrouter.ai/api/v1/chat/completions",
334
- headers=headers,
335
- json=data
336
- )
337
-
338
- if response.status_code == 200:
339
- return response.json()["choices"][0]["message"]["content"]
340
- else:
341
- return f"OpenRouter API hatası: {response.status_code} - {response.text}"
342
- else:
343
- return "Geçersiz sağlayıcı. Lütfen 'openai', 'gemini' veya 'openrouter' seçin."
344
- except Exception as e:
345
- return f"API hatası: {str(e)}"
346
-
347
-
348
- # Chatbot ve AI model arayüzü örneklerini oluştur
349
- chatbot = PromptEngineerChatbot()
350
- ai_interface = AIModelInterface()
351
-
352
- # Test fonksiyonu
353
- def test_chatbot():
354
- """
355
- Chatbot'u test eder.
356
- """
357
- test_input = "Bir e-ticaret web sitesi yapmak istiyorum. Ürünleri listeleyebilmeli, sepete ekleyebilmeli ve ödeme alabilmeliyim."
358
- result = chatbot.process_input(test_input)
359
-
360
- if result["success"]:
361
- print("\nOluşturulan Prompt:")
362
- print(result["prompt"])
363
- else:
364
- print(f"Hata: {result['error']}")
365
-
366
- # API yanıtı test (API anahtarı varsa)
367
- if ai_interface.api_keys["openai"]:
368
- print("\nOpenAI Yanıtı:")
369
- response = ai_interface.generate_response("openai", result["prompt"])
370
- print(response)
371
-
372
- if __name__ == "__main__":
373
- test_chatbot()