MrSimple07 commited on
Commit
d10024d
Β·
1 Parent(s): 613bf74

new version

Browse files
Files changed (1) hide show
  1. app.py +290 -54
app.py CHANGED
@@ -1,97 +1,333 @@
1
  import google.generativeai as genai
2
  import os
3
  import gradio as gr
 
4
 
5
  # Gemini AI ni sozlash
6
  genai.configure(api_key=os.environ.get('GOOGLE_API_KEY'))
7
  model = genai.GenerativeModel('gemini-2.5-flash')
8
 
9
- def get_counter_debuts(opponent_debuts):
10
  """Raqib debyutlariga qarshi eng yaxshi debyutlarni olish"""
11
 
12
  if not opponent_debuts or not opponent_debuts.strip():
13
  return "❌ Iltimos, kamida bitta debyt kiriting!"
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  prompt = f"""
16
- Siz professional shaxmat murabbiyisiz. Raqib quyidagi debyutlarni o'ynaydi:
17
 
 
18
  {opponent_debuts}
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
- Ushbu debyutlarga qarshi eng samarali qarshi debyutlarni tavsiya qiling.
21
- Har bir debyt uchun:
22
- 1. Qarshi debyt nomi
23
- 2. Qisqacha tushuntirish (2-3 jumla)
24
- 3. Asosiy g'oya va rejalar
25
 
26
- Javobni o'zbek tilida bering. Aniq va tushunarli yozing.
 
 
 
 
 
 
 
 
27
  """
28
 
29
  try:
30
  response = model.generate_content(prompt)
31
- return f"""
32
- πŸ“Š TAVSIYA ETILADIGAN QARSHI DEBYUTLAR
33
- {"=" * 60}
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
- {response.text}
36
 
37
- {"=" * 60}
38
- βœ… Omad tilaymiz! Yaxshi o'ynang! 🎯
39
- """
 
 
 
 
 
 
40
  except Exception as e:
41
  return f"❌ Xatolik yuz berdi: {str(e)}\n\nIltimos, GOOGLE_API_KEY to'g'ri o'rnatilganligini tekshiring."
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  # Gradio interfeysi
44
  def create_interface():
45
- with gr.Blocks(theme=gr.themes.Soft(), title="Shaxmat Debyut Maslahatchi") as demo:
 
 
 
 
 
46
  gr.Markdown("""
47
- # πŸ† SHAXMAT DEBYUT MASLAHATCHI πŸ†
48
 
49
- Raqibingiz o'ynaydigan debyutlarni kiriting va eng yaxshi qarshi strategiyalarni oling!
50
  """)
51
 
52
- with gr.Row():
53
- with gr.Column():
54
- debut_input = gr.Textbox(
55
- label="πŸ“‹ Raqib Debyutlari",
56
- placeholder="Misol: Italian oyini, Fransuz mudofaasi, Grunfeld",
57
- lines=3,
58
- info="Bir nechta debyutni vergul bilan ajratib kiriting"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  )
 
 
 
 
60
 
61
- analyze_btn = gr.Button("⚑ Tahlil Qilish", variant="primary", size="lg")
62
-
63
- with gr.Row():
64
- output = gr.Textbox(
65
- label="πŸ“Š Tahlil Natijasi",
66
- lines=15,
67
- show_copy_button=True
68
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
- # Misollar
71
- gr.Examples(
72
- examples=[
73
- ["Italiancha partiya, Ispancha partiya"],
74
- ["Fransuzcha himoya, Karo-Kann himoyasi"],
75
- ["Siciliancha himoya, Grunfeld himoyasi"],
76
- ],
77
- inputs=debut_input,
78
- label="πŸ’‘ Misollar"
79
  )
80
 
81
- analyze_btn.click(
82
- fn=get_counter_debuts,
83
- inputs=debut_input,
84
- outputs=output
85
  )
86
 
87
- gr.Markdown("""
88
- ---
89
- **Qo'llanma:**
90
- - Raqibingiz o'ynaydigan debyutlarni kiriting
91
- - Bir nechta debyut uchun vergul (,) dan foydalaning
92
- - "Tahlil Qilish" tugmasini bosing
93
- - Professional tavsiyalarni oling!
94
- """)
95
 
96
  return demo
97
 
 
1
  import google.generativeai as genai
2
  import os
3
  import gradio as gr
4
+ from datetime import datetime
5
 
6
  # Gemini AI ni sozlash
7
  genai.configure(api_key=os.environ.get('GOOGLE_API_KEY'))
8
  model = genai.GenerativeModel('gemini-2.5-flash')
9
 
10
+ def get_counter_debuts(opponent_debuts, user_color, user_repertoire, analysis_depth):
11
  """Raqib debyutlariga qarshi eng yaxshi debyutlarni olish"""
12
 
13
  if not opponent_debuts or not opponent_debuts.strip():
14
  return "❌ Iltimos, kamida bitta debyt kiriting!"
15
 
16
+ # Rangga mos prompt yaratish
17
+ color_context = "Siz oq rangli o'ynaysiz." if user_color == "Oq" else "Siz qora rangli o'ynaysiz."
18
+
19
+ # Foydalanuvchi repertuarini qo'shish
20
+ repertoire_context = ""
21
+ if user_repertoire and user_repertoire.strip():
22
+ repertoire_context = f"\n\nFOYDALANUVCHI REPERTUARI:\n{user_repertoire}\n\nIltimos, bu repertuarni hisobga olib tavsiyalar bering."
23
+
24
+ # Tahlil chuqurligiga qarab detalizatsiya
25
+ depth_instruction = ""
26
+ if analysis_depth == "Tez":
27
+ depth_instruction = "Qisqa va aniq javob bering (3-4 jumla har bir debyt uchun)."
28
+ elif analysis_depth == "O'rtacha":
29
+ depth_instruction = "O'rtacha batafsil javob bering (1 paragraf har bir debyt uchun)."
30
+ else: # Batafsil
31
+ depth_instruction = "Juda batafsil javob bering: variantlar, rejalar, tuzoqlar va misollar bilan."
32
+
33
  prompt = f"""
34
+ Siz professional shaxmat murabbiyisiz. {color_context}
35
 
36
+ Raqib quyidagi debyutlarni o'ynaydi:
37
  {opponent_debuts}
38
+ {repertoire_context}
39
+
40
+ {depth_instruction}
41
+
42
+ Har bir raqib debyuti uchun quyidagilarni bering:
43
+
44
+ ## DEBYT NOMI
45
+
46
+ **Qarshi Debyt:** [Eng yaxshi qarshi debyt]
47
+
48
+ **Asosiy G'oya:**
49
+ [2-3 jumlada tushuntirish]
50
 
51
+ **Strategik Rejalar:**
52
+ - [Reja 1]
53
+ - [Reja 2]
54
+ - [Reja 3]
 
55
 
56
+ **Muhim Yurishlar:**
57
+ [Boshlanish yurishlari ketma-ketligi]
58
+
59
+ **Tuzoqlar va Ehtiyot Choralari:**
60
+ [Diqqat qilish kerak bo'lgan narsalar]
61
+
62
+ ---
63
+
64
+ Javobni o'zbek tilida, toza markdown formatida bering.
65
  """
66
 
67
  try:
68
  response = model.generate_content(prompt)
69
+ # Markdown xatolarini tuzatish
70
+ fixed_response = response.text.strip()
71
+
72
+ # Natijani formatlash
73
+ result = f"""# πŸ† SHAXMAT TAHLILI NATIJALARI
74
+
75
+ **Sana:** {datetime.now().strftime("%Y-%m-%d %H:%M")}
76
+ **Sizning Rangingiz:** {user_color}
77
+ **Tahlil Darajasi:** {analysis_depth}
78
+
79
+ ---
80
+
81
+ {fixed_response}
82
+
83
+ ---
84
 
85
+ ## πŸ’‘ QO'SHIMCHA MASLAHATLAR
86
 
87
+ 1. **O'rganish:** Har bir debyutni lichess.org/learn yoki chess.com da mashq qiling
88
+ 2. **Tahlil:** O'yinlaringizni tahlil qiling va xatolarni toping
89
+ 3. **Mashq:** Turli holatlarni mashq qiling
90
+ 4. **Vaqt:** Har bir debyutga kamida 30 daqiqa ajrating
91
+
92
+ βœ… **Omad tilaymiz! Yaxshi o'ynang!** β™ŸοΈ
93
+ """
94
+ return result
95
+
96
  except Exception as e:
97
  return f"❌ Xatolik yuz berdi: {str(e)}\n\nIltimos, GOOGLE_API_KEY to'g'ri o'rnatilganligini tekshiring."
98
 
99
+ def analyze_game(pgn_input):
100
+ """O'yin PGN ni tahlil qilish"""
101
+ if not pgn_input or not pgn_input.strip():
102
+ return "❌ Iltimos, PGN ni kiriting!"
103
+
104
+ prompt = f"""
105
+ Quyidagi shaxmat o'yinini tahlil qiling:
106
+
107
+ {pgn_input}
108
+
109
+ Tahlilda quyidagilarni bering:
110
+ 1. O'yin haqida umumiy fikr
111
+ 2. Asosiy yurishlar va tanqidiy momentlar
112
+ 3. Har bir tomon uchun xatolar
113
+ 4. Yaxshilanish bo'yicha tavsiyalar
114
+
115
+ Javobni o'zbek tilida, toza markdown formatida bering.
116
+ """
117
+
118
+ try:
119
+ response = model.generate_content(prompt)
120
+ return f"""# πŸ“Š O'YIN TAHLILI
121
+
122
+ {response.text.strip()}
123
+
124
+ ---
125
+ βœ… Tahlil tugallandi!
126
+ """
127
+ except Exception as e:
128
+ return f"❌ Xatolik: {str(e)}"
129
+
130
+ def get_training_plan(skill_level, time_available, weak_points):
131
+ """Mashq rejasini yaratish"""
132
+ if not skill_level or not time_available:
133
+ return "❌ Iltimos, barcha maydonlarni to'ldiring!"
134
+
135
+ prompt = f"""
136
+ Shaxmat o'yinchisi uchun mashq rejasi tuzing:
137
+
138
+ **Daraja:** {skill_level}
139
+ **Mavjud Vaqt:** {time_available}
140
+ **Zaif Tomonlar:** {weak_points if weak_points else "Ko'rsatilmagan"}
141
+
142
+ Haftalik mashq rejasini tuzing:
143
+ - Har kun nima ustida ishlash kerak
144
+ - Qanday mashqlar bajarish kerak
145
+ - Qaysi resurslardan foydalanish kerak
146
+ - Qanday natijalarni kutish mumkin
147
+
148
+ Javobni o'zbek tilida, aniq va amaliy ko'rsatmalar bilan bering.
149
+ """
150
+
151
+ try:
152
+ response = model.generate_content(prompt)
153
+ return f"""# πŸ“š SHAXSIY MASHQ REJASI
154
+
155
+ {response.text.strip()}
156
+
157
+ ---
158
+ βœ… Muvaffaqiyatlar tilaymiz!
159
+ """
160
+ except Exception as e:
161
+ return f"❌ Xatolik: {str(e)}"
162
+
163
  # Gradio interfeysi
164
  def create_interface():
165
+ with gr.Blocks(theme=gr.themes.Soft(), title="Shaxmat AI Maslahatchi", css="""
166
+ .gradio-container {font-family: 'Arial', sans-serif;}
167
+ .gr-button-primary {background: linear-gradient(90deg, #667eea 0%, #764ba2 100%) !important;}
168
+ h1 {text-align: center; color: #667eea;}
169
+ """) as demo:
170
+
171
  gr.Markdown("""
172
+ # β™ŸοΈ SHAXMAT AI MASLAHATCHI β™ŸοΈ
173
 
174
+ Professional darajadagi shaxmat tahlili va maslahatlar
175
  """)
176
 
177
+ with gr.Tabs():
178
+ # Tab 1: Debyut Tahlili
179
+ with gr.Tab("🎯 Debyut Tahlili"):
180
+ gr.Markdown("### Raqibingiz debyutlariga qarshi strategiyalarni aniqlang")
181
+
182
+ with gr.Row():
183
+ with gr.Column(scale=1):
184
+ user_color = gr.Radio(
185
+ choices=["Oq", "Qora"],
186
+ value="Oq",
187
+ label="🎨 Sizning Rangingiz",
188
+ info="Qaysi rang bilan o'ynaysiz?"
189
+ )
190
+
191
+ opponent_debuts = gr.Textbox(
192
+ label="πŸ“‹ Raqib Debyutlari",
193
+ placeholder="Misol: e4, d4, London tizimi",
194
+ lines=3,
195
+ info="Raqib qanday debyutlar o'ynaydi?"
196
+ )
197
+
198
+ user_repertoire = gr.Textbox(
199
+ label="πŸ“š Sizning Repertuaringiz (ixtiyoriy)",
200
+ placeholder="Misol: e4 ga qarshi men Siciliya o'ynayman, d4 ga qarshi Grunfeld",
201
+ lines=4,
202
+ info="Sizning afzal ko'rgan debyutlaringiz"
203
+ )
204
+
205
+ analysis_depth = gr.Radio(
206
+ choices=["Tez", "O'rtacha", "Batafsil"],
207
+ value="O'rtacha",
208
+ label="πŸ” Tahlil Chuqurligi"
209
+ )
210
+
211
+ analyze_btn1 = gr.Button("⚑ Tahlil Qilish", variant="primary", size="lg")
212
+
213
+ with gr.Column(scale=2):
214
+ output1 = gr.Markdown(label="πŸ“Š Tahlil Natijasi")
215
+
216
+ gr.Examples(
217
+ examples=[
218
+ ["Oq", "e4, London tizimi", "e4 ga qarshi Siciliya, d4 ga qarshi Kings Indian", "O'rtacha"],
219
+ ["Qora", "d4, c4", "d4 ga qarshi Grunfeld, e4 ga qarshi Karo-Kann", "Batafsil"],
220
+ ["Oq", "e4, Ispancha partiya", "", "Tez"],
221
+ ],
222
+ inputs=[user_color, opponent_debuts, user_repertoire, analysis_depth],
223
+ label="πŸ’‘ Misollar"
224
  )
225
+
226
+ # Tab 2: O'yin Tahlili
227
+ with gr.Tab("🎲 O'yin Tahlili"):
228
+ gr.Markdown("### O'yinlaringizni tahlil qiling va xatolaringizni toping")
229
 
230
+ with gr.Row():
231
+ with gr.Column():
232
+ pgn_input = gr.Textbox(
233
+ label="πŸ“ PGN (o'yin yozuvi)",
234
+ placeholder="1. e4 e5 2. Nf3 Nc6 ...",
235
+ lines=8,
236
+ info="Chess.com yoki Lichess dan PGN ni ko'chiring"
237
+ )
238
+ analyze_btn2 = gr.Button("πŸ” Tahlil Qilish", variant="primary", size="lg")
239
+
240
+ with gr.Column():
241
+ output2 = gr.Markdown(label="πŸ“Š Tahlil Natijasi")
242
+
243
+ # Tab 3: Mashq Rejasi
244
+ with gr.Tab("πŸ“š Mashq Rejasi"):
245
+ gr.Markdown("### Shaxsiy mashq rejangizni yarating")
246
+
247
+ with gr.Row():
248
+ with gr.Column():
249
+ skill_level = gr.Dropdown(
250
+ choices=["Boshlang'ich", "O'rta", "Yuqori", "Master"],
251
+ value="O'rta",
252
+ label="🎯 Sizning Darajangiz"
253
+ )
254
+
255
+ time_available = gr.Dropdown(
256
+ choices=["Kuniga 30 daqiqa", "Kuniga 1 soat", "Kuniga 2 soat", "3+ soat"],
257
+ value="Kuniga 1 soat",
258
+ label="⏰ Mavjud Vaqt"
259
+ )
260
+
261
+ weak_points = gr.Textbox(
262
+ label="⚠️ Zaif Tomonlar (ixtiyoriy)",
263
+ placeholder="Misol: Endshpil, taktika, vaqt boshqaruvi",
264
+ lines=3
265
+ )
266
+
267
+ analyze_btn3 = gr.Button("πŸ“‹ Reja Yaratish", variant="primary", size="lg")
268
+
269
+ with gr.Column():
270
+ output3 = gr.Markdown(label="πŸ“š Mashq Rejasi")
271
+
272
+ # Tab 4: Qo'llanma
273
+ with gr.Tab("ℹ️ Qo'llanma"):
274
+ gr.Markdown("""
275
+ ## πŸ“– Foydalanish Qo'llanmasi
276
+
277
+ ### 🎯 Debyut Tahlili
278
+ 1. Sizning rangingizni tanlang (Oq yoki Qora)
279
+ 2. Raqibingiz o'ynaydigan debyutlarni kiriting
280
+ 3. (Ixtiyoriy) O'zingizning repertuaringizni kiriting
281
+ 4. Tahlil chuqurligini tanlang
282
+ 5. "Tahlil Qilish" tugmasini bosing
283
+
284
+ ### 🎲 O'yin Tahlili
285
+ 1. O'yinning PGN formatini kiriting
286
+ 2. Chess.com yoki Lichess dan PGN ni ko'chirib olishingiz mumkin
287
+ 3. Tahlil natijasini o'qing va xatolaringizni o'rganing
288
+
289
+ ### πŸ“š Mashq Rejasi
290
+ 1. O'z darajangizni tanlang
291
+ 2. Qancha vaqtingiz borligini ko'rsating
292
+ 3. Zaif tomonlaringizni yozing (agar bilsangiz)
293
+ 4. Shaxsiy mashq rejangizni oling
294
+
295
+ ### πŸ’‘ Maslahatlar
296
+ - **Muntazam mashq qiling**: Har kuni kamida 15-30 daqiqa
297
+ - **O'yinlaringizni tahlil qiling**: Har bir o'yindan saboq oling
298
+ - **Debyutlarni o'rganing**: 2-3 ta ishonchli debyutga ega bo'ling
299
+ - **Taktika yechish**: Kuniga 10-15 ta masala
300
+ - **Endshpilni o'rganing**: Bu juda muhim!
301
+
302
+ ### πŸ”— Foydali Resurslar
303
+ - **Lichess.org**: Bepul mashq va o'rganish
304
+ - **Chess.com**: Darslar va turnirlar
305
+ - **YouTube**: "GothamChess", "Daniel Naroditsky" kanallari
306
+ - **Kitoblar**: "Shaxmat maktabi" kitoblar seriyasi
307
+
308
+ ---
309
+
310
+ **Muammo bormi?** GOOGLE_API_KEY ni to'g'ri sozlaganingizni tekshiring.
311
+ """)
312
 
313
+ # Event handlers
314
+ analyze_btn1.click(
315
+ fn=get_counter_debuts,
316
+ inputs=[opponent_debuts, user_color, user_repertoire, analysis_depth],
317
+ outputs=output1
 
 
 
 
318
  )
319
 
320
+ analyze_btn2.click(
321
+ fn=analyze_game,
322
+ inputs=pgn_input,
323
+ outputs=output2
324
  )
325
 
326
+ analyze_btn3.click(
327
+ fn=get_training_plan,
328
+ inputs=[skill_level, time_available, weak_points],
329
+ outputs=output3
330
+ )
 
 
 
331
 
332
  return demo
333