Kgshop commited on
Commit
1b526a1
·
verified ·
1 Parent(s): 9768e46

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -55
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import os
3
  import io
4
  import base64
@@ -55,7 +54,11 @@ COLOR_SCHEMES = {
55
  'sunset': 'Закатный оранжевый',
56
  'lavender': 'Лавандовый',
57
  'vintage': 'Винтажный',
58
- 'dark': 'Полночь (тёмная)'
 
 
 
 
59
  }
60
 
61
 
@@ -285,7 +288,7 @@ def generate_ai_description_from_image(image_data, language):
285
  final_prompt = f"{base_prompt}{lang_suffix}"
286
 
287
  try:
288
- model = genai.GenerativeModel('gemma-3-27b-it')
289
 
290
  response = model.generate_content([final_prompt, image])
291
 
@@ -304,7 +307,7 @@ def generate_ai_description_from_image(image_data, language):
304
  elif " Billing account not found" in str(e):
305
  raise ValueError("Проблема с биллингом аккаунта Google Cloud. Проверьте ваш аккаунт.")
306
  elif "Could not find model" in str(e):
307
- raise ValueError(f"Модель 'learnlm-2.0-flash-experimental' не найдена или недоступна.")
308
  elif "resource has been exhausted" in str(e).lower():
309
  raise ValueError("Квота запросов исчерпана. Попробуйте позже.")
310
  elif "content has been blocked" in str(e).lower():
@@ -374,21 +377,24 @@ def generate_chat_response(message, chat_history_from_client, env_id):
374
  response = None
375
 
376
  try:
377
- model = genai.GenerativeModel('gemma-3-27b-it')
 
 
378
 
379
- model_chat_history_for_gemini = [
380
- {'role': 'user', 'parts': [{'text': system_instruction_content}]}
381
- ]
382
  for entry in chat_history_from_client:
383
  gemini_role = 'model' if entry['role'] == 'ai' else 'user'
384
  model_chat_history_for_gemini.append({
385
  'role': gemini_role,
386
  'parts': [{'text': entry['text']}]
387
  })
388
-
389
- chat = model.start_chat(history=model_chat_history_for_gemini)
390
-
391
- response = chat.send_message(message, generation_config={'max_output_tokens': 1000})
 
 
 
 
392
 
393
  if hasattr(response, 'text'):
394
  generated_text = response.text
@@ -418,6 +424,34 @@ def generate_chat_response(message, chat_history_from_client, env_id):
418
  else:
419
  return f"Извините, произошла ошибка: {e}"
420
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
  ADMHOSTO_TEMPLATE = '''
422
  <!DOCTYPE html>
423
  <html lang="ru">
@@ -563,33 +597,27 @@ CATALOG_TEMPLATE = '''
563
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/10.2.0/swiper-bundle.min.css">
564
  <style>
565
  {% if settings.color_scheme == 'forest' %}
566
- :root {
567
- --bg-dark: #2F4F4F; --bg-medium: #556B2F; --accent: #90EE90; --accent-hover: #98FB98; --text-light: #F5F5DC; --text-dark: #333; --danger: #CD5C5C; --danger-hover: #F08080;
568
- }
569
  {% elif settings.color_scheme == 'ocean' %}
570
- :root {
571
- --bg-dark: #000080; --bg-medium: #1E90FF; --accent: #87CEEB; --accent-hover: #ADD8E6; --text-light: #F0F8FF; --text-dark: #333; --danger: #FF6347; --danger-hover: #FF4500;
572
- }
573
  {% elif settings.color_scheme == 'sunset' %}
574
- :root {
575
- --bg-dark: #8B4513; --bg-medium: #D2691E; --accent: #FFA500; --accent-hover: #FFD700; --text-light: #FFF8DC; --text-dark: #333; --danger: #DC143C; --danger-hover: #FF0000;
576
- }
577
  {% elif settings.color_scheme == 'lavender' %}
578
- :root {
579
- --bg-dark: #483D8B; --bg-medium: #9370DB; --accent: #E6E6FA; --accent-hover: #D8BFD8; --text-light: #F0F8FF; --text-dark: #333; --danger: #DB7093; --danger-hover: #FFC0CB;
580
- }
581
  {% elif settings.color_scheme == 'vintage' %}
582
- :root {
583
- --bg-dark: #5D4037; --bg-medium: #A1887F; --accent: #D7CCC8; --accent-hover: #EFEBE9; --text-light: #F5F5F5; --text-dark: #3E2723; --danger: #BF360C; --danger-hover: #F4511E;
584
- }
585
  {% elif settings.color_scheme == 'dark' %}
586
- :root {
587
- --bg-dark: #121212; --bg-medium: #1E1E1E; --accent: #BB86FC; --accent-hover: #A764FC; --text-light: #E1E1E1; --text-dark: #FFFFFF; --danger: #CF6679; --danger-hover: #D98899;
588
- }
 
 
 
 
 
 
589
  {% else %}
590
- :root {
591
- --bg-dark: #003C43; --bg-medium: #135D66; --accent: #48D1CC; --accent-hover: #77E4D8; --text-light: #E3FEF7; --text-dark: #333; --danger: #E57373; --danger-hover: #EF5350;
592
- }
593
  {% endif %}
594
 
595
  * { margin: 0; padding: 0; box-sizing: border-box; }
@@ -1291,33 +1319,27 @@ CHAT_TEMPLATE = '''
1291
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/10.2.0/swiper-bundle.min.css">
1292
  <style>
1293
  {% if settings.color_scheme == 'forest' %}
1294
- :root {
1295
- --bg-dark: #2F4F4F; --bg-medium: #556B2F; --accent: #90EE90; --accent-hover: #98FB98; --text-light: #F5F5DC; --text-dark: #333; --danger: #CD5C5C; --danger-hover: #F08080; --chat-bg: #F5F5DC;
1296
- }
1297
  {% elif settings.color_scheme == 'ocean' %}
1298
- :root {
1299
- --bg-dark: #000080; --bg-medium: #1E90FF; --accent: #87CEEB; --accent-hover: #ADD8E6; --text-light: #F0F8FF; --text-dark: #333; --danger: #FF6347; --danger-hover: #FF4500; --chat-bg: #F0F8FF;
1300
- }
1301
  {% elif settings.color_scheme == 'sunset' %}
1302
- :root {
1303
- --bg-dark: #8B4513; --bg-medium: #D2691E; --accent: #FFA500; --accent-hover: #FFD700; --text-light: #FFF8DC; --text-dark: #333; --danger: #DC143C; --danger-hover: #FF0000; --chat-bg: #FFF8DC;
1304
- }
1305
  {% elif settings.color_scheme == 'lavender' %}
1306
- :root {
1307
- --bg-dark: #483D8B; --bg-medium: #9370DB; --accent: #E6E6FA; --accent-hover: #D8BFD8; --text-light: #F0F8FF; --text-dark: #333; --danger: #DB7093; --danger-hover: #FFC0CB; --chat-bg: #F8F8FF;
1308
- }
1309
  {% elif settings.color_scheme == 'vintage' %}
1310
- :root {
1311
- --bg-dark: #5D4037; --bg-medium: #A1887F; --accent: #D7CCC8; --accent-hover: #EFEBE9; --text-light: #F5F5F5; --text-dark: #3E2723; --danger: #BF360C; --danger-hover: #F4511E; --chat-bg: #EFEBE9;
1312
- }
1313
  {% elif settings.color_scheme == 'dark' %}
1314
- :root {
1315
- --bg-dark: #1F1F1F; --bg-medium: #333333; --accent: #BB86FC; --accent-hover: #A764FC; --text-light: #E1E1E1; --text-dark: #FFFFFF; --danger: #CF6679; --danger-hover: #D98899; --chat-bg: #121212;
1316
- }
 
 
 
 
 
 
1317
  {% else %}
1318
- :root {
1319
- --bg-dark: #003C43; --bg-medium: #135D66; --accent: #48D1CC; --accent-hover: #77E4D8; --text-light: #E3FEF7; --text-dark: #333; --danger: #E57373; --danger-hover: #EF5350; --chat-bg: #f0f2f5;
1320
- }
1321
  {% endif %}
1322
 
1323
  * { margin: 0; padding: 0; box-sizing: border-box; }
@@ -2631,7 +2653,7 @@ ADMIN_TEMPLATE = '''
2631
 
2632
  @app.route('/')
2633
  def index():
2634
- return redirect(url_for('admhosto'))
2635
 
2636
  @app.route('/admhosto', methods=['GET'])
2637
  def admhosto():
 
 
1
  import os
2
  import io
3
  import base64
 
54
  'sunset': 'Закатный оранжевый',
55
  'lavender': 'Лавандовый',
56
  'vintage': 'Винтажный',
57
+ 'dark': 'Полночь (тёмная)',
58
+ 'mint': 'Свежая мята',
59
+ 'rose_gold': 'Розовое золото',
60
+ 'graphite': 'Графитовый',
61
+ 'cosmic': 'Космическая ночь'
62
  }
63
 
64
 
 
288
  final_prompt = f"{base_prompt}{lang_suffix}"
289
 
290
  try:
291
+ model = genai.GenerativeModel('gemini-1.5-flash')
292
 
293
  response = model.generate_content([final_prompt, image])
294
 
 
307
  elif " Billing account not found" in str(e):
308
  raise ValueError("Проблема с биллингом аккаунта Google Cloud. Проверьте ваш аккаунт.")
309
  elif "Could not find model" in str(e):
310
+ raise ValueError(f"Модель 'gemini-1.5-flash' не найдена или недоступна.")
311
  elif "resource has been exhausted" in str(e).lower():
312
  raise ValueError("Квота запросов исчерпана. Попробуйте позже.")
313
  elif "content has been blocked" in str(e).lower():
 
377
  response = None
378
 
379
  try:
380
+ model = genai.GenerativeModel('gemini-1.5-flash')
381
+
382
+ model_chat_history_for_gemini = []
383
 
 
 
 
384
  for entry in chat_history_from_client:
385
  gemini_role = 'model' if entry['role'] == 'ai' else 'user'
386
  model_chat_history_for_gemini.append({
387
  'role': gemini_role,
388
  'parts': [{'text': entry['text']}]
389
  })
390
+
391
+ full_prompt = [
392
+ {'role': 'user', 'parts': [{'text': system_instruction_content}]},
393
+ *model_chat_history_for_gemini,
394
+ {'role': 'user', 'parts': [{'text': message}]}
395
+ ]
396
+
397
+ response = model.generate_content(full_prompt, generation_config={'max_output_tokens': 1000})
398
 
399
  if hasattr(response, 'text'):
400
  generated_text = response.text
 
424
  else:
425
  return f"Извините, произошла ошибка: {e}"
426
 
427
+ LANDING_TEMPLATE = '''
428
+ <!DOCTYPE html>
429
+ <html lang="ru">
430
+ <head>
431
+ <meta charset="UTF-8">
432
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
433
+ <title>AI Agent</title>
434
+ <style>
435
+ body, html {
436
+ margin: 0;
437
+ padding: 0;
438
+ overflow: hidden;
439
+ height: 100%;
440
+ width: 100%;
441
+ }
442
+ iframe {
443
+ border: none;
444
+ width: 100%;
445
+ height: 100%;
446
+ }
447
+ </style>
448
+ </head>
449
+ <body>
450
+ <iframe src="https://v0-ai-agent-landing-page-smoky-six.vercel.app/"></iframe>
451
+ </body>
452
+ </html>
453
+ '''
454
+
455
  ADMHOSTO_TEMPLATE = '''
456
  <!DOCTYPE html>
457
  <html lang="ru">
 
597
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/10.2.0/swiper-bundle.min.css">
598
  <style>
599
  {% if settings.color_scheme == 'forest' %}
600
+ :root { --bg-dark: #2F4F4F; --bg-medium: #556B2F; --accent: #90EE90; --accent-hover: #98FB98; --text-light: #F5F5DC; --text-dark: #333; --danger: #CD5C5C; --danger-hover: #F08080; }
 
 
601
  {% elif settings.color_scheme == 'ocean' %}
602
+ :root { --bg-dark: #000080; --bg-medium: #1E90FF; --accent: #87CEEB; --accent-hover: #ADD8E6; --text-light: #F0F8FF; --text-dark: #333; --danger: #FF6347; --danger-hover: #FF4500; }
 
 
603
  {% elif settings.color_scheme == 'sunset' %}
604
+ :root { --bg-dark: #8B4513; --bg-medium: #D2691E; --accent: #FFA500; --accent-hover: #FFD700; --text-light: #FFF8DC; --text-dark: #333; --danger: #DC143C; --danger-hover: #FF0000; }
 
 
605
  {% elif settings.color_scheme == 'lavender' %}
606
+ :root { --bg-dark: #483D8B; --bg-medium: #9370DB; --accent: #E6E6FA; --accent-hover: #D8BFD8; --text-light: #F0F8FF; --text-dark: #333; --danger: #DB7093; --danger-hover: #FFC0CB; }
 
 
607
  {% elif settings.color_scheme == 'vintage' %}
608
+ :root { --bg-dark: #5D4037; --bg-medium: #A1887F; --accent: #D7CCC8; --accent-hover: #EFEBE9; --text-light: #F5F5F5; --text-dark: #3E2723; --danger: #BF360C; --danger-hover: #F4511E; }
 
 
609
  {% elif settings.color_scheme == 'dark' %}
610
+ :root { --bg-dark: #121212; --bg-medium: #1E1E1E; --accent: #BB86FC; --accent-hover: #A764FC; --text-light: #E1E1E1; --text-dark: #FFFFFF; --danger: #CF6679; --danger-hover: #D98899; }
611
+ {% elif settings.color_scheme == 'mint' %}
612
+ :root { --bg-dark: #006A4E; --bg-medium: #50C878; --accent: #98FF98; --accent-hover: #B9FFB9; --text-light: #F0FFF0; --text-dark: #003322; --danger: #E34234; --danger-hover: #FF5733; }
613
+ {% elif settings.color_scheme == 'rose_gold' %}
614
+ :root { --bg-dark: #B76E79; --bg-medium: #D9A7A0; --accent: #FADCD9; --accent-hover: #FDEFEA; --text-light: #FFF8F7; --text-dark: #5C373C; --danger: #C3447A; --danger-hover: #D96291; }
615
+ {% elif settings.color_scheme == 'graphite' %}
616
+ :root { --bg-dark: #2C3E50; --bg-medium: #5D6D7E; --accent: #BDC3C7; --accent-hover: #D6DBDF; --text-light: #ECF0F1; --text-dark: #212F3D; --danger: #E74C3C; --danger-hover: #EC7063; }
617
+ {% elif settings.color_scheme == 'cosmic' %}
618
+ :root { --bg-dark: #0F0C29; --bg-medium: #302B63; --accent: #A770EF; --accent-hover: #D1A7FF; --text-light: #F3EFFF; --text-dark: #FFFFFF; --danger: #F83D5C; --danger-hover: #FA6079; }
619
  {% else %}
620
+ :root { --bg-dark: #003C43; --bg-medium: #135D66; --accent: #48D1CC; --accent-hover: #77E4D8; --text-light: #E3FEF7; --text-dark: #333; --danger: #E57373; --danger-hover: #EF5350; }
 
 
621
  {% endif %}
622
 
623
  * { margin: 0; padding: 0; box-sizing: border-box; }
 
1319
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/10.2.0/swiper-bundle.min.css">
1320
  <style>
1321
  {% if settings.color_scheme == 'forest' %}
1322
+ :root { --bg-dark: #2F4F4F; --bg-medium: #556B2F; --accent: #90EE90; --accent-hover: #98FB98; --text-light: #F5F5DC; --text-dark: #333; --danger: #CD5C5C; --danger-hover: #F08080; --chat-bg: #F5F5DC; }
 
 
1323
  {% elif settings.color_scheme == 'ocean' %}
1324
+ :root { --bg-dark: #000080; --bg-medium: #1E90FF; --accent: #87CEEB; --accent-hover: #ADD8E6; --text-light: #F0F8FF; --text-dark: #333; --danger: #FF6347; --danger-hover: #FF4500; --chat-bg: #F0F8FF; }
 
 
1325
  {% elif settings.color_scheme == 'sunset' %}
1326
+ :root { --bg-dark: #8B4513; --bg-medium: #D2691E; --accent: #FFA500; --accent-hover: #FFD700; --text-light: #FFF8DC; --text-dark: #333; --danger: #DC143C; --danger-hover: #FF0000; --chat-bg: #FFF8DC; }
 
 
1327
  {% elif settings.color_scheme == 'lavender' %}
1328
+ :root { --bg-dark: #483D8B; --bg-medium: #9370DB; --accent: #E6E6FA; --accent-hover: #D8BFD8; --text-light: #F0F8FF; --text-dark: #333; --danger: #DB7093; --danger-hover: #FFC0CB; --chat-bg: #F8F8FF; }
 
 
1329
  {% elif settings.color_scheme == 'vintage' %}
1330
+ :root { --bg-dark: #5D4037; --bg-medium: #A1887F; --accent: #D7CCC8; --accent-hover: #EFEBE9; --text-light: #F5F5F5; --text-dark: #3E2723; --danger: #BF360C; --danger-hover: #F4511E; --chat-bg: #EFEBE9; }
 
 
1331
  {% elif settings.color_scheme == 'dark' %}
1332
+ :root { --bg-dark: #1F1F1F; --bg-medium: #333333; --accent: #BB86FC; --accent-hover: #A764FC; --text-light: #E1E1E1; --text-dark: #FFFFFF; --danger: #CF6679; --danger-hover: #D98899; --chat-bg: #121212; }
1333
+ {% elif settings.color_scheme == 'mint' %}
1334
+ :root { --bg-dark: #006A4E; --bg-medium: #50C878; --accent: #98FF98; --accent-hover: #B9FFB9; --text-light: #F0FFF0; --text-dark: #003322; --danger: #E34234; --danger-hover: #FF5733; --chat-bg: #F0FFF0; }
1335
+ {% elif settings.color_scheme == 'rose_gold' %}
1336
+ :root { --bg-dark: #B76E79; --bg-medium: #D9A7A0; --accent: #FADCD9; --accent-hover: #FDEFEA; --text-light: #FFF8F7; --text-dark: #5C373C; --danger: #C3447A; --danger-hover: #D96291; --chat-bg: #FFF8F7; }
1337
+ {% elif settings.color_scheme == 'graphite' %}
1338
+ :root { --bg-dark: #2C3E50; --bg-medium: #5D6D7E; --accent: #BDC3C7; --accent-hover: #D6DBDF; --text-light: #ECF0F1; --text-dark: #212F3D; --danger: #E74C3C; --danger-hover: #EC7063; --chat-bg: #ECF0F1; }
1339
+ {% elif settings.color_scheme == 'cosmic' %}
1340
+ :root { --bg-dark: #0F0C29; --bg-medium: #302B63; --accent: #A770EF; --accent-hover: #D1A7FF; --text-light: #F3EFFF; --text-dark: #FFFFFF; --danger: #F83D5C; --danger-hover: #FA6079; --chat-bg: #1a163a; }
1341
  {% else %}
1342
+ :root { --bg-dark: #003C43; --bg-medium: #135D66; --accent: #48D1CC; --accent-hover: #77E4D8; --text-light: #E3FEF7; --text-dark: #333; --danger: #E57373; --danger-hover: #EF5350; --chat-bg: #f0f2f5; }
 
 
1343
  {% endif %}
1344
 
1345
  * { margin: 0; padding: 0; box-sizing: border-box; }
 
2653
 
2654
  @app.route('/')
2655
  def index():
2656
+ return render_template_string(LANDING_TEMPLATE)
2657
 
2658
  @app.route('/admhosto', methods=['GET'])
2659
  def admhosto():