Spaces:
Sleeping
Sleeping
Commit
Β·
1849320
1
Parent(s):
d10024d
removed unnecessary parts
Browse files
app.py
CHANGED
|
@@ -8,7 +8,6 @@ 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!"
|
|
@@ -96,70 +95,6 @@ def get_counter_debuts(opponent_debuts, user_color, user_repertoire, analysis_de
|
|
| 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="""
|
|
@@ -202,12 +137,6 @@ def create_interface():
|
|
| 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):
|
|
@@ -219,116 +148,18 @@ def create_interface():
|
|
| 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
|
| 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
|
| 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 |
|
| 334 |
if __name__ == "__main__":
|
|
|
|
| 8 |
model = genai.GenerativeModel('gemini-2.5-flash')
|
| 9 |
|
| 10 |
def get_counter_debuts(opponent_debuts, user_color, user_repertoire, analysis_depth):
|
|
|
|
| 11 |
|
| 12 |
if not opponent_debuts or not opponent_debuts.strip():
|
| 13 |
return "β Iltimos, kamida bitta debyt kiriting!"
|
|
|
|
| 95 |
except Exception as e:
|
| 96 |
return f"β Xatolik yuz berdi: {str(e)}\n\nIltimos, GOOGLE_API_KEY to'g'ri o'rnatilganligini tekshiring."
|
| 97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
# Gradio interfeysi
|
| 99 |
def create_interface():
|
| 100 |
with gr.Blocks(theme=gr.themes.Soft(), title="Shaxmat AI Maslahatchi", css="""
|
|
|
|
| 137 |
info="Sizning afzal ko'rgan debyutlaringiz"
|
| 138 |
)
|
| 139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
analyze_btn1 = gr.Button("β‘ Tahlil Qilish", variant="primary", size="lg")
|
| 141 |
|
| 142 |
with gr.Column(scale=2):
|
|
|
|
| 148 |
["Qora", "d4, c4", "d4 ga qarshi Grunfeld, e4 ga qarshi Karo-Kann", "Batafsil"],
|
| 149 |
["Oq", "e4, Ispancha partiya", "", "Tez"],
|
| 150 |
],
|
| 151 |
+
inputs=[user_color, opponent_debuts, user_repertoire],
|
| 152 |
label="π‘ Misollar"
|
| 153 |
)
|
| 154 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
|
| 156 |
# Event handlers
|
| 157 |
analyze_btn1.click(
|
| 158 |
fn=get_counter_debuts,
|
| 159 |
+
inputs=[opponent_debuts, user_color, user_repertoire],
|
| 160 |
outputs=output1
|
| 161 |
)
|
| 162 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
return demo
|
| 164 |
|
| 165 |
if __name__ == "__main__":
|