AnesKAM commited on
Commit
87ebc19
·
verified ·
1 Parent(s): 3df5f14

Create services.py

Browse files
Files changed (1) hide show
  1. backend/services.py +102 -0
backend/services.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from google import genai
3
+ from google.genai import types
4
+
5
+ class GeminiService:
6
+ def __init__(self, api_key: str):
7
+ self.client = genai.Client(api_key=api_key)
8
+ self.model = "gemma-4-31b-it"
9
+
10
+ def generate_stream(self, message: str, context: list, language: str = 'en') -> str:
11
+ """توليد الرد مع الستريمينج"""
12
+
13
+ # بناء السياق
14
+ contents = self._build_contents(message, context)
15
+
16
+ # تحديد اللغة في التعليمات
17
+ system_instruction = self._get_system_instruction(language)
18
+
19
+ try:
20
+ full_response = ""
21
+ for chunk in self.client.models.generate_content_stream(
22
+ model=self.model,
23
+ contents=contents,
24
+ config=types.GenerateContentConfig(
25
+ temperature=1.0,
26
+ thinking_config=types.ThinkingConfig(
27
+ thinking_level="MINIMAL",
28
+ ),
29
+ media_resolution="MEDIA_RESOLUTION_HIGH",
30
+ tools=[
31
+ types.Tool(googleSearch=types.GoogleSearch())
32
+ ],
33
+ system_instruction=[
34
+ types.Part.from_text(text=system_instruction),
35
+ ],
36
+ ),
37
+ ):
38
+ if text := chunk.text:
39
+ full_response += text
40
+
41
+ return full_response
42
+ except Exception as e:
43
+ raise Exception(f"خطأ في توليد الرد: {str(e)}")
44
+
45
+ def _build_contents(self, message: str, context: list) -> list:
46
+ """بناء محتوى الرسائل مع السياق"""
47
+ contents = []
48
+
49
+ # إضافة الرسائل السابقة كسياق
50
+ for msg in context:
51
+ contents.append(
52
+ types.Content(
53
+ role="user" if msg['role'] == 'user' else "model",
54
+ parts=[types.Part.from_text(text=msg['content'])],
55
+ )
56
+ )
57
+
58
+ # إضافة الرسالة الحالية
59
+ contents.append(
60
+ types.Content(
61
+ role="user",
62
+ parts=[types.Part.from_text(text=message)],
63
+ )
64
+ )
65
+
66
+ return contents
67
+
68
+ def _get_system_instruction(self, language: str) -> str:
69
+ """الحصول على تعليمات النظام بناءً على اللغة"""
70
+ instructions = {
71
+ 'en': """You are Genisi, an advanced AI model developed by AnesNT.
72
+
73
+ AnesNT is an Algerian initiative from the city of Batna created by Anes Kameche. It is currently the only member of this technological initiative.
74
+
75
+ Be helpful and friendly to the user. Always respond in the user's language. Provide clear, concise, and accurate information.""",
76
+
77
+ 'ar': """أنت Genisi نموذج ذكاء اصطناعي متطور من قبل AnesNT.
78
+
79
+ AnesNT مبادرة جزائرية من ولاية باتنة صاحبها انس كامش. وهو حاليا العضو الوحيد في هذي المبادرة وهي مبادرة ت��نولوجية.
80
+
81
+ كن مفيدا وصديقا للمستخدم. تحدث باللغة التي يتحدثها المستخدم. قدم معلومات واضحة ودقيقة.""",
82
+
83
+ 'fr': """Vous êtes Genisi, un modèle d'IA avancé développé par AnesNT.
84
+
85
+ AnesNT est une initiative algérienne de la ville de Batna créée par Anes Kameche. C'est actuellement le seul membre de cette initiative technologique.
86
+
87
+ Soyez utile et amical envers l'utilisateur. Répondez toujours dans la langue de l'utilisateur. Fournissez des informations claires et précises.""",
88
+
89
+ 'es': """Eres Genisi, un modelo de IA avanzado desarrollado por AnesNT.
90
+
91
+ AnesNT es una iniciativa argelina de la ciudad de Batna creada por Anes Kameche. Actualmente es el único miembro de esta iniciativa tecnológica.
92
+
93
+ Sea útil y amable con el usuario. Responda siempre en el idioma del usuario. Proporcione información clara y precisa.""",
94
+
95
+ 'de': """Sie sind Genisi, ein fortschrittliches KI-Modell, das von AnesNT entwickelt wurde.
96
+
97
+ AnesNT ist eine algerische Initiative aus der Stadt Batna, die von Anes Kameche ins Leben gerufen wurde. Es ist derzeit das einzige Mitglied dieser technologischen Initiative.
98
+
99
+ Seien Sie hilfreich und freundlich zum Benutzer. Antworten Sie immer in der Sprache des Benutzers. Geben Sie klare und genaue Informationen."""
100
+ }
101
+
102
+ return instructions.get(language, instructions['en'])