aimevzulari commited on
Commit
9bc231c
·
verified ·
1 Parent(s): 23de6c5

Delete api_integrations.py

Browse files
Files changed (1) hide show
  1. api_integrations.py +0 -480
api_integrations.py DELETED
@@ -1,480 +0,0 @@
1
- """
2
- API entegrasyonları için yardımcı fonksiyonlar.
3
- Bu modül, OpenAI, Google Gemini ve OpenRouter API'leri ile etkileşim için gerekli fonksiyonları içerir.
4
- """
5
-
6
- import os
7
- from typing import Dict, Any, List, Optional
8
- import openai
9
- from google import generativeai as genai
10
- import requests
11
- from dotenv import load_dotenv
12
-
13
- # Prompt şablonlarından model listelerini içe aktar
14
- from prompt_templates import OPENAI_MODELS, GEMINI_MODELS, OPENROUTER_MODELS
15
-
16
- # .env dosyasını yükle (varsa)
17
- load_dotenv()
18
-
19
- class APIManager:
20
- """
21
- API yönetimi için sınıf.
22
- Bu sınıf, API anahtarlarını yönetir ve API'lerin durumunu kontrol eder.
23
- """
24
-
25
- def __init__(self):
26
- """
27
- API yöneticisini başlat.
28
- """
29
- self.api_keys = {
30
- "openai": os.getenv("OPENAI_API_KEY", ""),
31
- "gemini": os.getenv("GEMINI_API_KEY", ""),
32
- "openrouter": os.getenv("OPENROUTER_API_KEY", "")
33
- }
34
-
35
- def set_api_key(self, provider: str, api_key: str) -> None:
36
- """
37
- Belirli bir sağlayıcı için API anahtarını ayarlar.
38
-
39
- Args:
40
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
41
- api_key (str): API anahtarı
42
- """
43
- if provider in self.api_keys:
44
- self.api_keys[provider] = api_key
45
-
46
- # API anahtarını ilgili kütüphane için de ayarla
47
- if provider == "openai":
48
- openai.api_key = api_key
49
- elif provider == "gemini":
50
- genai.configure(api_key=api_key)
51
-
52
- def get_api_key(self, provider: str) -> str:
53
- """
54
- Belirli bir sağlayıcı için API anahtarını döndürür.
55
-
56
- Args:
57
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
58
-
59
- Returns:
60
- str: API anahtarı
61
- """
62
- return self.api_keys.get(provider, "")
63
-
64
- def check_api_key_validity(self, provider: str) -> bool:
65
- """
66
- Belirli bir sağlayıcı için API anahtarının geçerliliğini kontrol eder.
67
-
68
- Args:
69
- provider (str): API sağlayıcısı ('openai', 'gemini', 'openrouter')
70
-
71
- Returns:
72
- bool: API anahtarı geçerli ise True, değilse False
73
- """
74
- api_key = self.get_api_key(provider)
75
-
76
- if not api_key:
77
- return False
78
-
79
- try:
80
- if provider == "openai":
81
- openai.api_key = api_key
82
- # Basit bir model listesi isteği ile API anahtarının geçerliliğini kontrol et
83
- openai.models.list()
84
- return True
85
-
86
- elif provider == "gemini":
87
- genai.configure(api_key=api_key)
88
- # Kullanılabilir modelleri listeleyerek API anahtarının geçerliliğini kontrol et
89
- genai.list_models()
90
- return True
91
-
92
- elif provider == "openrouter":
93
- headers = {
94
- "Authorization": f"Bearer {api_key}"
95
- }
96
- response = requests.get(
97
- "https://openrouter.ai/api/v1/models",
98
- headers=headers
99
- )
100
- return response.status_code == 200
101
-
102
- return False
103
-
104
- except Exception:
105
- return False
106
-
107
-
108
- class OpenAIHandler:
109
- """
110
- OpenAI API ile etkileşim için sınıf.
111
- """
112
-
113
- def __init__(self, api_key: str = ""):
114
- """
115
- OpenAI işleyicisini başlat.
116
-
117
- Args:
118
- api_key (str, optional): OpenAI API anahtarı
119
- """
120
- self.api_key = api_key
121
- if api_key:
122
- openai.api_key = api_key
123
-
124
- def set_api_key(self, api_key: str) -> None:
125
- """
126
- OpenAI API anahtarını ayarlar.
127
-
128
- Args:
129
- api_key (str): OpenAI API anahtarı
130
- """
131
- self.api_key = api_key
132
- openai.api_key = api_key
133
-
134
- def get_available_models(self) -> List[str]:
135
- """
136
- Kullanılabilir OpenAI modellerini döndürür.
137
-
138
- Returns:
139
- List[str]: Kullanılabilir modeller listesi
140
- """
141
- if not self.api_key:
142
- return OPENAI_MODELS
143
-
144
- try:
145
- models = openai.models.list()
146
- # Sadece GPT modellerini filtrele
147
- gpt_models = [model.id for model in models.data if "gpt" in model.id.lower()]
148
-
149
- # Tüm OpenAI modellerini döndür, API'den alınamayanlar için varsayılan listeyi kullan
150
- all_models = list(set(gpt_models + OPENAI_MODELS))
151
-
152
- # Varsayılan modelleri önceliklendir
153
- sorted_models = sorted(
154
- all_models,
155
- key=lambda x: (
156
- 0 if x in OPENAI_MODELS else 1,
157
- OPENAI_MODELS.index(x) if x in OPENAI_MODELS else float('inf')
158
- )
159
- )
160
-
161
- return sorted_models
162
- except Exception:
163
- # API anahtarı geçersiz veya başka bir hata durumunda varsayılan modelleri döndür
164
- return OPENAI_MODELS
165
-
166
- def generate_response(self, prompt: str, model: str = "gpt-3.5-turbo", temperature: float = 0.7, max_tokens: int = 2000) -> Dict[str, Any]:
167
- """
168
- OpenAI API kullanarak yanıt oluşturur.
169
-
170
- Args:
171
- prompt (str): Gönderilecek prompt
172
- model (str): Kullanılacak model
173
- temperature (float): Sıcaklık değeri (0.0-1.0)
174
- max_tokens (int): Maksimum token sayısı
175
-
176
- Returns:
177
- Dict[str, Any]: Yanıt bilgilerini içeren sözlük
178
- """
179
- if not self.api_key:
180
- return {"success": False, "error": "OpenAI API anahtarı ayarlanmamış.", "content": ""}
181
-
182
- try:
183
- response = openai.chat.completions.create(
184
- model=model,
185
- messages=[{"role": "user", "content": prompt}],
186
- temperature=temperature,
187
- max_tokens=max_tokens
188
- )
189
-
190
- return {
191
- "success": True,
192
- "content": response.choices[0].message.content,
193
- "model": model,
194
- "usage": {
195
- "prompt_tokens": response.usage.prompt_tokens,
196
- "completion_tokens": response.usage.completion_tokens,
197
- "total_tokens": response.usage.total_tokens
198
- }
199
- }
200
- except Exception as e:
201
- return {"success": False, "error": str(e), "content": ""}
202
-
203
-
204
- class GeminiHandler:
205
- """
206
- Google Gemini API ile etkileşim için sınıf.
207
- """
208
-
209
- def __init__(self, api_key: str = ""):
210
- """
211
- Gemini işleyicisini başlat.
212
-
213
- Args:
214
- api_key (str, optional): Gemini API anahtarı
215
- """
216
- self.api_key = api_key
217
- if api_key:
218
- genai.configure(api_key=api_key)
219
-
220
- def set_api_key(self, api_key: str) -> None:
221
- """
222
- Gemini API anahtarını ayarlar.
223
-
224
- Args:
225
- api_key (str): Gemini API anahtarı
226
- """
227
- self.api_key = api_key
228
- genai.configure(api_key=api_key)
229
-
230
- def get_available_models(self) -> List[str]:
231
- """
232
- Kullanılabilir Gemini modellerini döndürür.
233
-
234
- Returns:
235
- List[str]: Kullanılabilir modeller listesi
236
- """
237
- if not self.api_key:
238
- return GEMINI_MODELS
239
-
240
- try:
241
- models = genai.list_models()
242
- api_models = []
243
-
244
- # Tüm model türlerini topla (gemini, imagen, veo, vb.)
245
- for model in models:
246
- model_name = model.name.split("/")[-1]
247
- if any(keyword in model_name.lower() for keyword in ["gemini", "imagen", "veo"]):
248
- api_models.append(model_name)
249
-
250
- # Tüm Gemini modellerini döndür, API'den alınamayanlar için varsayılan listeyi kullan
251
- all_models = list(set(api_models + GEMINI_MODELS))
252
-
253
- # Varsayılan modelleri önceliklendir
254
- sorted_models = sorted(
255
- all_models,
256
- key=lambda x: (
257
- 0 if x in GEMINI_MODELS else 1,
258
- GEMINI_MODELS.index(x) if x in GEMINI_MODELS else float('inf')
259
- )
260
- )
261
-
262
- return sorted_models
263
- except Exception:
264
- # API anahtarı geçersiz veya başka bir hata durumunda varsayılan modelleri döndür
265
- return GEMINI_MODELS
266
-
267
- def generate_response(self, prompt: str, model: str = "gemini-1.5-pro", temperature: float = 0.7) -> Dict[str, Any]:
268
- """
269
- Gemini API kullanarak yanıt oluşturur.
270
-
271
- Args:
272
- prompt (str): Gönderilecek prompt
273
- model (str): Kullanılacak model
274
- temperature (float): Sıcaklık değeri (0.0-1.0)
275
-
276
- Returns:
277
- Dict[str, Any]: Yanıt bilgilerini içeren sözlük
278
- """
279
- if not self.api_key:
280
- return {"success": False, "error": "Gemini API anahtarı ayarlanmamış.", "content": ""}
281
-
282
- try:
283
- model_obj = genai.GenerativeModel(model)
284
- response = model_obj.generate_content(
285
- prompt,
286
- generation_config=genai.types.GenerationConfig(
287
- temperature=temperature
288
- )
289
- )
290
-
291
- return {
292
- "success": True,
293
- "content": response.text,
294
- "model": model
295
- }
296
- except Exception as e:
297
- return {"success": False, "error": str(e), "content": ""}
298
-
299
-
300
- class OpenRouterHandler:
301
- """
302
- OpenRouter API ile etkileşim için sınıf.
303
- """
304
-
305
- def __init__(self, api_key: str = ""):
306
- """
307
- OpenRouter işleyicisini başlat.
308
-
309
- Args:
310
- api_key (str, optional): OpenRouter API anahtarı
311
- """
312
- self.api_key = api_key
313
- self.base_url = "https://openrouter.ai/api/v1"
314
-
315
- def set_api_key(self, api_key: str) -> None:
316
- """
317
- OpenRouter API anahtarını ayarlar.
318
-
319
- Args:
320
- api_key (str): OpenRouter API anahtarı
321
- """
322
- self.api_key = api_key
323
-
324
- def get_available_models(self) -> List[str]:
325
- """
326
- Kullanılabilir OpenRouter modellerini döndürür.
327
-
328
- Returns:
329
- List[str]: Kullanılabilir modeller listesi
330
- """
331
- if not self.api_key:
332
- return OPENROUTER_MODELS
333
-
334
- try:
335
- headers = {
336
- "Authorization": f"Bearer {self.api_key}"
337
- }
338
-
339
- response = requests.get(
340
- f"{self.base_url}/models",
341
- headers=headers
342
- )
343
-
344
- if response.status_code == 200:
345
- models_data = response.json()
346
- api_models = [model["id"] for model in models_data["data"]]
347
-
348
- # API'den alınan modeller ve varsayılan modelleri birleştir
349
- all_models = list(set(api_models + OPENROUTER_MODELS))
350
-
351
- return all_models
352
- else:
353
- return OPENROUTER_MODELS
354
- except Exception:
355
- # API anahtarı geçersiz veya başka bir hata durumunda varsayılan modelleri döndür
356
- return OPENROUTER_MODELS
357
-
358
- def generate_response(self, prompt: str, model: str = "openai/gpt-4-turbo", temperature: float = 0.7, max_tokens: int = 2000) -> Dict[str, Any]:
359
- """
360
- OpenRouter API kullanarak yanıt oluşturur.
361
-
362
- Args:
363
- prompt (str): Gönderilecek prompt
364
- model (str): Kullanılacak model
365
- temperature (float): Sıcaklık değeri (0.0-1.0)
366
- max_tokens (int): Maksimum token sayısı
367
-
368
- Returns:
369
- Dict[str, Any]: Yanıt bilgilerini içeren sözlük
370
- """
371
- if not self.api_key:
372
- return {"success": False, "error": "OpenRouter API anahtarı ayarlanmamış.", "content": ""}
373
-
374
- try:
375
- headers = {
376
- "Content-Type": "application/json",
377
- "Authorization": f"Bearer {self.api_key}"
378
- }
379
-
380
- data = {
381
- "model": model,
382
- "messages": [{"role": "user", "content": prompt}],
383
- "temperature": temperature,
384
- "max_tokens": max_tokens
385
- }
386
-
387
- response = requests.post(
388
- f"{self.base_url}/chat/completions",
389
- headers=headers,
390
- json=data
391
- )
392
-
393
- if response.status_code == 200:
394
- response_data = response.json()
395
- return {
396
- "success": True,
397
- "content": response_data["choices"][0]["message"]["content"],
398
- "model": model,
399
- "usage": response_data.get("usage", {})
400
- }
401
- else:
402
- return {
403
- "success": False,
404
- "error": f"HTTP {response.status_code}: {response.text}",
405
- "content": ""
406
- }
407
- except Exception as e:
408
- return {"success": False, "error": str(e), "content": ""}
409
-
410
-
411
- # API işleyicilerini oluştur
412
- api_manager = APIManager()
413
- openai_handler = OpenAIHandler()
414
- gemini_handler = GeminiHandler()
415
- openrouter_handler = OpenRouterHandler()
416
-
417
- # API anahtarlarını ayarla (varsa)
418
- openai_api_key = os.getenv("OPENAI_API_KEY", "")
419
- gemini_api_key = os.getenv("GEMINI_API_KEY", "")
420
- openrouter_api_key = os.getenv("OPENROUTER_API_KEY", "")
421
-
422
- if openai_api_key:
423
- openai_handler.set_api_key(openai_api_key)
424
-
425
- if gemini_api_key:
426
- gemini_handler.set_api_key(gemini_api_key)
427
-
428
- if openrouter_api_key:
429
- openrouter_handler.set_api_key(openrouter_api_key)
430
-
431
- # Test fonksiyonu
432
- def test_api_connections():
433
- """
434
- API bağlantılarını test eder.
435
- """
436
- print("API Bağlantı Testi:")
437
-
438
- # OpenAI API testi
439
- if openai_api_key:
440
- print("\nOpenAI API Testi:")
441
- try:
442
- models = openai_handler.get_available_models()
443
- print(f"Kullanılabilir modeller: {models[:5]}...")
444
- print("OpenAI API bağlantısı başarılı.")
445
- except Exception as e:
446
- print(f"OpenAI API hatası: {str(e)}")
447
- else:
448
- print("\nOpenAI API anahtarı ayarlanmamış.")
449
- print(f"Varsayılan modeller: {OPENAI_MODELS}")
450
-
451
- # Gemini API testi
452
- if gemini_api_key:
453
- print("\nGemini API Testi:")
454
- try:
455
- models = gemini_handler.get_available_models()
456
- print(f"Kullanılabilir modeller: {models}")
457
- print("Gemini API bağlantısı başarılı.")
458
- except Exception as e:
459
- print(f"Gemini API hatası: {str(e)}")
460
- else:
461
- print("\nGemini API anahtarı ayarlanmamış.")
462
- print(f"Varsayılan modeller: {GEMINI_MODELS}")
463
-
464
- # OpenRouter API testi
465
- if openrouter_api_key:
466
- print("\nOpenRouter API Testi:")
467
- try:
468
- models = openrouter_handler.get_available_models()
469
- print(f"Kullanılabilir modeller: {len(models)} model bulundu")
470
- print(f"İlk 10 model: {models[:10]}...")
471
- print("OpenRouter API bağlantısı başarılı.")
472
- except Exception as e:
473
- print(f"OpenRouter API hatası: {str(e)}")
474
- else:
475
- print("\nOpenRouter API anahtarı ayarlanmamış.")
476
- print(f"Varsayılan modeller: {len(OPENROUTER_MODELS)} model bulundu")
477
- print(f"İlk 10 model: {OPENROUTER_MODELS[:10]}...")
478
-
479
- if __name__ == "__main__":
480
- test_api_connections()