Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -55,13 +55,14 @@ COLOR_SCHEMES = {
|
|
| 55 |
'lavender': 'Лавандовый',
|
| 56 |
'vintage': 'Винтажный',
|
| 57 |
'dark': 'Полночь (тёмная)',
|
| 58 |
-
'
|
| 59 |
-
'
|
| 60 |
-
'
|
| 61 |
-
'
|
|
|
|
|
|
|
| 62 |
}
|
| 63 |
|
| 64 |
-
|
| 65 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 66 |
|
| 67 |
def download_db_from_hf(specific_file=None, retries=DOWNLOAD_RETRIES, delay=DOWNLOAD_DELAY):
|
|
@@ -288,7 +289,7 @@ def generate_ai_description_from_image(image_data, language):
|
|
| 288 |
final_prompt = f"{base_prompt}{lang_suffix}"
|
| 289 |
|
| 290 |
try:
|
| 291 |
-
model = genai.GenerativeModel('
|
| 292 |
|
| 293 |
response = model.generate_content([final_prompt, image])
|
| 294 |
|
|
@@ -307,7 +308,7 @@ def generate_ai_description_from_image(image_data, language):
|
|
| 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"Модель '
|
| 311 |
elif "resource has been exhausted" in str(e).lower():
|
| 312 |
raise ValueError("Квота запросов исчерпана. Попробуйте позже.")
|
| 313 |
elif "content has been blocked" in str(e).lower():
|
|
@@ -377,24 +378,21 @@ def generate_chat_response(message, chat_history_from_client, env_id):
|
|
| 377 |
response = None
|
| 378 |
|
| 379 |
try:
|
| 380 |
-
model = genai.GenerativeModel('
|
| 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 |
-
|
| 392 |
-
|
| 393 |
-
|
| 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,20 +422,19 @@ def generate_chat_response(message, chat_history_from_client, env_id):
|
|
| 424 |
else:
|
| 425 |
return f"Извините, произошла ошибка: {e}"
|
| 426 |
|
| 427 |
-
|
| 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
|
| 434 |
<style>
|
| 435 |
body, html {
|
| 436 |
margin: 0;
|
| 437 |
padding: 0;
|
| 438 |
-
overflow: hidden;
|
| 439 |
height: 100%;
|
| 440 |
-
|
| 441 |
}
|
| 442 |
iframe {
|
| 443 |
border: none;
|
|
@@ -608,14 +605,18 @@ CATALOG_TEMPLATE = '''
|
|
| 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: #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 %}
|
|
@@ -1330,14 +1331,18 @@ CHAT_TEMPLATE = '''
|
|
| 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: #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 %}
|
|
@@ -2653,7 +2658,7 @@ ADMIN_TEMPLATE = '''
|
|
| 2653 |
|
| 2654 |
@app.route('/')
|
| 2655 |
def index():
|
| 2656 |
-
return render_template_string(
|
| 2657 |
|
| 2658 |
@app.route('/admhosto', methods=['GET'])
|
| 2659 |
def admhosto():
|
|
|
|
| 55 |
'lavender': 'Лавандовый',
|
| 56 |
'vintage': 'Винтажный',
|
| 57 |
'dark': 'Полночь (тёмная)',
|
| 58 |
+
'cosmic': 'Космическая ночь',
|
| 59 |
+
'minty': 'Свежая мята',
|
| 60 |
+
'mocha': 'Кофейный мокко',
|
| 61 |
+
'crimson': 'Багровый рассвет',
|
| 62 |
+
'solar': 'Солнечная вспышка',
|
| 63 |
+
'cyberpunk': 'Киберпанк неон'
|
| 64 |
}
|
| 65 |
|
|
|
|
| 66 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 67 |
|
| 68 |
def download_db_from_hf(specific_file=None, retries=DOWNLOAD_RETRIES, delay=DOWNLOAD_DELAY):
|
|
|
|
| 289 |
final_prompt = f"{base_prompt}{lang_suffix}"
|
| 290 |
|
| 291 |
try:
|
| 292 |
+
model = genai.GenerativeModel('gemma-3-27b-it')
|
| 293 |
|
| 294 |
response = model.generate_content([final_prompt, image])
|
| 295 |
|
|
|
|
| 308 |
elif " Billing account not found" in str(e):
|
| 309 |
raise ValueError("Проблема с биллингом аккаунта Google Cloud. Проверьте ваш аккаунт.")
|
| 310 |
elif "Could not find model" in str(e):
|
| 311 |
+
raise ValueError(f"Модель 'learnlm-2.0-flash-experimental' не найдена или недоступна.")
|
| 312 |
elif "resource has been exhausted" in str(e).lower():
|
| 313 |
raise ValueError("Квота запросов исчерпана. Попробуйте позже.")
|
| 314 |
elif "content has been blocked" in str(e).lower():
|
|
|
|
| 378 |
response = None
|
| 379 |
|
| 380 |
try:
|
| 381 |
+
model = genai.GenerativeModel('gemma-3-27b-it')
|
|
|
|
|
|
|
| 382 |
|
| 383 |
+
model_chat_history_for_gemini = [
|
| 384 |
+
{'role': 'user', 'parts': [{'text': system_instruction_content}]}
|
| 385 |
+
]
|
| 386 |
for entry in chat_history_from_client:
|
| 387 |
gemini_role = 'model' if entry['role'] == 'ai' else 'user'
|
| 388 |
model_chat_history_for_gemini.append({
|
| 389 |
'role': gemini_role,
|
| 390 |
'parts': [{'text': entry['text']}]
|
| 391 |
})
|
| 392 |
+
|
| 393 |
+
chat = model.start_chat(history=model_chat_history_for_gemini)
|
| 394 |
+
|
| 395 |
+
response = chat.send_message(message, generation_config={'max_output_tokens': 1000})
|
|
|
|
|
|
|
|
|
|
|
|
|
| 396 |
|
| 397 |
if hasattr(response, 'text'):
|
| 398 |
generated_text = response.text
|
|
|
|
| 422 |
else:
|
| 423 |
return f"Извините, произошла ошибка: {e}"
|
| 424 |
|
| 425 |
+
LANDING_PAGE_TEMPLATE = '''
|
| 426 |
<!DOCTYPE html>
|
| 427 |
<html lang="ru">
|
| 428 |
<head>
|
| 429 |
<meta charset="UTF-8">
|
| 430 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 431 |
+
<title>Gippo312 - AI Ассистент для Вашего Бизнеса</title>
|
| 432 |
<style>
|
| 433 |
body, html {
|
| 434 |
margin: 0;
|
| 435 |
padding: 0;
|
|
|
|
| 436 |
height: 100%;
|
| 437 |
+
overflow: hidden;
|
| 438 |
}
|
| 439 |
iframe {
|
| 440 |
border: none;
|
|
|
|
| 605 |
:root { --bg-dark: #5D4037; --bg-medium: #A1887F; --accent: #D7CCC8; --accent-hover: #EFEBE9; --text-light: #F5F5F5; --text-dark: #3E2723; --danger: #BF360C; --danger-hover: #F4511E; }
|
| 606 |
{% elif settings.color_scheme == 'dark' %}
|
| 607 |
:root { --bg-dark: #121212; --bg-medium: #1E1E1E; --accent: #BB86FC; --accent-hover: #A764FC; --text-light: #E1E1E1; --text-dark: #FFFFFF; --danger: #CF6679; --danger-hover: #D98899; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 608 |
{% elif settings.color_scheme == 'cosmic' %}
|
| 609 |
+
:root { --bg-dark: #2c003e; --bg-medium: #4a0072; --accent: #ff00c1; --accent-hover: #ff5fd8; --text-light: #f3e5f5; --text-dark: #ffffff; --danger: #e91e63; --danger-hover: #f06292; }
|
| 610 |
+
{% elif settings.color_scheme == 'minty' %}
|
| 611 |
+
:root { --bg-dark: #64B5F6; --bg-medium: #81D4FA; --accent: #B2EBF2; --accent-hover: #E0F7FA; --text-light: #000000; --text-dark: #000000; --danger: #ef5350; --danger-hover: #e57373; }
|
| 612 |
+
{% elif settings.color_scheme == 'mocha' %}
|
| 613 |
+
:root { --bg-dark: #3e2723; --bg-medium: #5d4037; --accent: #a1887f; --accent-hover: #bcaaa4; --text-light: #efebe9; --text-dark: #ffffff; --danger: #d32f2f; --danger-hover: #e57373; }
|
| 614 |
+
{% elif settings.color_scheme == 'crimson' %}
|
| 615 |
+
:root { --bg-dark: #121212; --bg-medium: #b71c1c; --accent: #f44336; --accent-hover: #ef5350; --text-light: #ffffff; --text-dark: #ffffff; --danger: #ff5252; --danger-hover: #ff8a80; }
|
| 616 |
+
{% elif settings.color_scheme == 'solar' %}
|
| 617 |
+
:root { --bg-dark: #ff6f00; --bg-medium: #ff8f00; --accent: #ffca28; --accent-hover: #ffd54f; --text-light: #212121; --text-dark: #212121; --danger: #d32f2f; --danger-hover: #e57373; }
|
| 618 |
+
{% elif settings.color_scheme == 'cyberpunk' %}
|
| 619 |
+
:root { --bg-dark: #000000; --bg-medium: #0d0221; --accent: #00f0ff; --accent-hover: #81f5ff; --text-light: #ffffff; --text-dark: #ffffff; --danger: #f50057; --danger-hover: #ff4081; }
|
| 620 |
{% else %}
|
| 621 |
:root { --bg-dark: #003C43; --bg-medium: #135D66; --accent: #48D1CC; --accent-hover: #77E4D8; --text-light: #E3FEF7; --text-dark: #333; --danger: #E57373; --danger-hover: #EF5350; }
|
| 622 |
{% endif %}
|
|
|
|
| 1331 |
: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; }
|
| 1332 |
{% elif settings.color_scheme == 'dark' %}
|
| 1333 |
: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; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1334 |
{% elif settings.color_scheme == 'cosmic' %}
|
| 1335 |
+
:root { --bg-dark: #2c003e; --bg-medium: #4a0072; --accent: #ff00c1; --accent-hover: #ff5fd8; --text-light: #f3e5f5; --text-dark: #ffffff; --danger: #e91e63; --danger-hover: #f06292; --chat-bg: #1a0024; }
|
| 1336 |
+
{% elif settings.color_scheme == 'minty' %}
|
| 1337 |
+
:root { --bg-dark: #64B5F6; --bg-medium: #81D4FA; --accent: #B2EBF2; --accent-hover: #E0F7FA; --text-light: #000000; --text-dark: #000000; --danger: #ef5350; --danger-hover: #e57373; --chat-bg: #f1f8e9; }
|
| 1338 |
+
{% elif settings.color_scheme == 'mocha' %}
|
| 1339 |
+
:root { --bg-dark: #3e2723; --bg-medium: #5d4037; --accent: #a1887f; --accent-hover: #bcaaa4; --text-light: #efebe9; --text-dark: #ffffff; --danger: #d32f2f; --danger-hover: #e57373; --chat-bg: #d7ccc8; }
|
| 1340 |
+
{% elif settings.color_scheme == 'crimson' %}
|
| 1341 |
+
:root { --bg-dark: #121212; --bg-medium: #b71c1c; --accent: #f44336; --accent-hover: #ef5350; --text-light: #ffffff; --text-dark: #ffffff; --danger: #ff5252; --danger-hover: #ff8a80; --chat-bg: #212121; }
|
| 1342 |
+
{% elif settings.color_scheme == 'solar' %}
|
| 1343 |
+
:root { --bg-dark: #ff6f00; --bg-medium: #ff8f00; --accent: #ffca28; --accent-hover: #ffd54f; --text-light: #212121; --text-dark: #212121; --danger: #d32f2f; --danger-hover: #e57373; --chat-bg: #fff8e1; }
|
| 1344 |
+
{% elif settings.color_scheme == 'cyberpunk' %}
|
| 1345 |
+
:root { --bg-dark: #000000; --bg-medium: #0d0221; --accent: #00f0ff; --accent-hover: #81f5ff; --text-light: #ffffff; --text-dark: #ffffff; --danger: #f50057; --danger-hover: #ff4081; --chat-bg: #0a0116; }
|
| 1346 |
{% else %}
|
| 1347 |
: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; }
|
| 1348 |
{% endif %}
|
|
|
|
| 2658 |
|
| 2659 |
@app.route('/')
|
| 2660 |
def index():
|
| 2661 |
+
return render_template_string(LANDING_PAGE_TEMPLATE)
|
| 2662 |
|
| 2663 |
@app.route('/admhosto', methods=['GET'])
|
| 2664 |
def admhosto():
|