import gradio as gr import requests import os import json import pandas as pd import time from langchain.schema import SystemMessage from langchain_community.chat_models.gigachat import GigaChat from openpyxl import load_workbook import base64 from together import Together from mistralai import Mistral # Установка ключа API для OpenAI, GigaChat и Mistral openai_api_key = os.getenv('GPT_KEY') gc_key = os.getenv('GC_KEY') token = os.getenv('GITHUB_TOKEN') TOGETHER_API_KEY = os.getenv('TOGETHER_API_KEY') MISTRAL_API_KEY = os.getenv('MISTRAL_API_KEY') # Инициализация клиента для Together client = Together(api_key=TOGETHER_API_KEY) # Инициализация клиента для Mistral client_mistral = Mistral(api_key=MISTRAL_API_KEY) # Авторизация в сервисе GigaChat chat_pro = GigaChat(credentials=gc_key, model='GigaChat-Pro', max_tokens=68, verify_ssl_certs=False) chat_lite = GigaChat(credentials=gc_key, model='GigaChat', max_tokens=68, verify_ssl_certs=False) chat_plus = GigaChat(credentials=gc_key, model='GigaChat-Plus', max_tokens=68, verify_ssl_certs=False) # Загрузка данных из Excel-файла try: data = pd.read_excel('Признаки.xlsx', sheet_name=None) except Exception as e: print(f"Ошибка при загрузке Excel-файла: {e}") data = {} # Создание списка признаков и их значений features = {} for sheet_name, df in data.items(): try: if sheet_name == "Пол Поколение Психотип": # Создаем словарь, где ключи — это кортежи (Пол, Поколение, Психотип), а значения — инструкции features[sheet_name] = df.set_index(['Пол', 'Поколение', 'Психотип'])['Инструкция'].to_dict() else: features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]] except Exception as e: print(f"Ошибка при обработке данных листа {sheet_name}: {e}") features[sheet_name] = {} def save_user_request_to_github(description, advantages, personalization_params): # Собираем все данные в один словарь data_to_save = { "description": description, "advantages": advantages, "personalization_params": personalization_params, "timestamp": time.time() } # Преобразуем контент в JSON-строку и кодируем в base64 file_content_encoded = base64.b64encode(json.dumps(data_to_save).encode()).decode() # Параметры для GitHub API repo = "fruitpicker01/Storage_dev" path = f"user_request_{int(time.time())}.json" url = f"https://api.github.com/repos/{repo}/contents/{path}" headers = { "Authorization": f"token {token}", "Content-Type": "application/json" } data = { "message": f"Добавлен новый файл {path}", "content": file_content_encoded } # Отправка POST-запроса на GitHub API для создания файла в репозитории response = requests.put(url, headers=headers, data=json.dumps(data)) if response.status_code == 201: print("Данные успешно сохранены на GitHub") else: print(f"Ошибка при сохранении данных на GitHub: {response.status_code} {response.text}") def load_last_user_request_from_github(): repo = "fruitpicker01/Storage_dev" url = f"https://api.github.com/repos/{repo}/contents" headers = { "Authorization": f"token {token}", "Content-Type": "application/json" } # Получаем список файлов в репозитории response = requests.get(url, headers=headers) if response.status_code == 200: files = response.json() json_files = [file for file in files if file['name'].startswith("user_request_")] if not json_files: print("Нет сохраненных запросов.") return "", "", None, None, None, None, None, None # Находим последний файл (по времени создания) last_file = max(json_files, key=lambda x: x['name']) file_url = last_file['download_url'] # Загружаем и декодируем содержимое файла file_response = requests.get(file_url) if file_response.status_code == 200: data = json.loads(file_response.text) description = data.get('description', "") advantages = data.get('advantages', "") personalization_params = data.get('personalization_params', [None] * 6) # Убедитесь, что размер списка соответствует количеству полей # Возвращаем данные по отдельности для каждого компонента Gradio return description, advantages, *personalization_params else: print(f"Ошибка при загрузке файла: {file_response.status_code}") return "", "", None, None, None, None, None, None else: print(f"Ошибка при обращении к GitHub: {response.status_code}") return "", "", None, None, None, None, None, None # Функция для генерации стандартного промпта def generate_standard_prompt(description, advantages, *selected_values): prompt = ( "Сгенерируй смс-сообщение для клиента.\n" "Начни сообщение с призыва к действию с продуктом.\n" f"Описание предложения: {description}\n" f"Преимущества: {advantages}\n" "В тексте смс запрещено использование:\n" "- Запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, доступный, банкротство, долги, займ, срочно, сейчас, лучший, главный, номер 1, гарантия, успех, лидер;\n" "- Обращение к клиенту;\n" "- Приветствие клиента;\n" "- Обещания и гарантии;\n" "- Использовать составные конструкции из двух глаголов;\n" "- Причастия и причастные обороты;\n" "- Деепричастия и деепричастные обороты;\n" "- Превосходная степень прилагательных;\n" "- Страдательный залог;\n" "- Порядковые числительные от 10 прописью;\n" "- Цепочки с придаточными предложениями;\n" "- Разделительные повторяющиеся союзы;\n" "- Вводные конструкции;\n" "- Усилители;\n" "- Паразиты времени;\n" "- Несколько существительных подряд, в том числе отглагольных;\n" "- Производные предлоги;\n" "- Сложные предложения, в которых нет связи между частями;\n" "- Сложноподчинённые предложения;\n" "- Даты прописью;\n" "- Близкие по смыслу однородные члены предложения;\n" "- Шокирующие, экстравагантные, кликбейтные фразы;\n" "- Абстрактные заявления без поддержки фактами и отсутствие доказательства пользы для клиента;\n" "- Гарантирующие фразы;\n" "- Узкоспециализированные термины;\n" "- Фразы, способные создать двойственное ощущение, обидеть;\n" "- Речевые клише, рекламные штампы, канцеляризмы;\n" "Убедись, что в готовом тексте до 250 знаков с пробелами." ) return prompt # Функции для генерации сообщений def generate_message_gpt4o(prompt): try: headers = { "Content-Type": "application/json", "Authorization": f"Bearer {openai_api_key}" } data = { "model": "chatgpt-4o-latest", "messages": [{"role": "system", "content": prompt}], "max_tokens": 101 } response = requests.post("https://api.openai.com/v1/chat/completions", json=data, headers=headers) response_data = response.json() return response_data["choices"][0]["message"]["content"].strip() except Exception as e: return f"Ошибка при обращении к ChatGPT-4o-Latest: {e}" def clean_message(message): # Если сообщение не заканчивается на точку, восклицательный знак или вопросительный знак, обрезаем его до последнего такого знака if not message.endswith(('.', '!', '?')): last_period = max(message.rfind('.'), message.rfind('!'), message.rfind('?')) if last_period != -1: message = message[:last_period + 1] return message # Обновленные функции генерации сообщений с учетом обрезки незаконченных предложений def generate_message_gigachat_pro(prompt): try: messages = [SystemMessage(content=prompt)] res = chat_pro(messages) cleaned_message = clean_message(res.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к GigaChat-Pro: {e}" def generate_message_gigachat_lite(prompt): try: time.sleep(2) messages = [SystemMessage(content=prompt)] res = chat_lite(messages) cleaned_message = clean_message(res.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к GigaChat-Lite: {e}" def generate_message_gigachat_plus(prompt): try: time.sleep(2) messages = [SystemMessage(content=prompt)] res = chat_plus(messages) cleaned_message = clean_message(res.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к GigaChat-Plus: {e}" def generate_message_meta_llama_3_1_405b(prompt): try: response = client.chat.completions.create( model="meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", messages=[{"role": "user", "content": prompt}], max_tokens=74, temperature=0.7 ) cleaned_message = clean_message(response.choices[0].message.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к Meta-Llama-3.1-405B: {e}" def generate_message_meta_llama_3_1_70b(prompt): try: response = client.chat.completions.create( model="meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo", messages=[{"role": "user", "content": prompt}], max_tokens=74, temperature=0.7 ) cleaned_message = clean_message(response.choices[0].message.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к Meta-Llama-3.1-70B: {e}" def generate_message_meta_llama_3_1_8b(prompt): try: response = client.chat.completions.create( model="meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo", messages=[{"role": "user", "content": prompt}], max_tokens=74, temperature=0.7 ) cleaned_message = clean_message(response.choices[0].message.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к Meta-Llama-3.1-8B: {e}" def generate_message_gemma_2_27b_it(prompt): try: response = client.chat.completions.create( model="google/gemma-2-27b-it", messages=[{"role": "user", "content": prompt}], max_tokens=74, temperature=0.7 ) cleaned_message = clean_message(response.choices[0].message.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к Gemma-2-27b-it: {e}" def generate_message_gemma_2_9b_it(prompt): try: response = client.chat.completions.create( model="google/gemma-2-9b-it", messages=[{"role": "user", "content": prompt}], max_tokens=74, temperature=0.7 ) cleaned_message = clean_message(response.choices[0].message.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к Gemma-2-9b-it: {e}" def generate_message_mistral(prompt): try: chat_response = client_mistral.chat.complete( model="mistral-large-latest", messages=[ { "role": "user", "content": prompt, "max_tokens": 74 }, ] ) cleaned_message = clean_message(chat_response.choices[0].message.content.strip()) return cleaned_message except Exception as e: return f"Ошибка при обращении к Mistral: {e}" def generate_message_gpt4o_with_retry(prompt): for _ in range(10): # Максимум 10 попыток message = generate_message_gpt4o(prompt) if len(message) <= 250: return message return message # Возвращаем последнее сгенерированное сообщение, если все попытки не удались def generate_message_gigachat_pro_with_retry(prompt): for _ in range(10): message = generate_message_gigachat_pro(prompt) if len(message) <= 250: return message return message def generate_message_gigachat_lite_with_retry(prompt): for _ in range(10): message = generate_message_gigachat_lite(prompt) if len(message) <= 250: return message return message def generate_message_gigachat_plus_with_retry(prompt): for _ in range(10): message = generate_message_gigachat_plus(prompt) if len(message) <= 250: return message return message def generate_message_meta_llama_3_1_405b_with_retry(prompt): for _ in range(10): message = generate_message_meta_llama_3_1_405b(prompt) if len(message) <= 250: return message return message def generate_message_meta_llama_3_1_70b_with_retry(prompt): for _ in range(10): message = generate_message_meta_llama_3_1_70b(prompt) if len(message) <= 250: return message return message def generate_message_meta_llama_3_1_8b_with_retry(prompt): for _ in range(10): message = generate_message_meta_llama_3_1_8b(prompt) if len(message) <= 250: return message return message def generate_message_gemma_2_27b_it_with_retry(prompt): for _ in range(10): message = generate_message_gemma_2_27b_it(prompt) if len(message) <= 250: return message return message def generate_message_gemma_2_9b_it_with_retry(prompt): for _ in range(10): message = generate_message_gemma_2_9b_it(prompt) if len(message) <= 250: return message return message def generate_message_mistral_with_retry(prompt): for _ in range(10): message = generate_message_mistral(prompt) if len(message) <= 250: return message return message def generate_messages(description, advantages, *selected_values): save_user_request_to_github(description, advantages, selected_values) standard_prompt = generate_standard_prompt(description, advantages, *selected_values) results = { "prompt": standard_prompt, "gpt4o": None, "gigachat_pro": None, "gigachat_lite": None, "gigachat_plus": None, "meta_llama_3_1_405b": None, "meta_llama_3_1_70b": None, "meta_llama_3_1_8b": None, "gemma_2_27b_it": None, "gemma_2_9b_it": None, "mistral": None # Добавляем Mistral } yield results["prompt"], "", "", "", "", "", "", "", "", "", "" # Generating messages using existing models (as before) results["gpt4o"] = generate_message_gpt4o_with_retry(standard_prompt) gpt4o_length = len(results["gpt4o"]) gpt4o_display = f"{results['gpt4o']}\n\n------\nКоличество знаков: {gpt4o_length}" yield results["prompt"], gpt4o_display, "", "", "", "", "", "", "", "", "" results["gigachat_pro"] = generate_message_gigachat_pro_with_retry(standard_prompt) gigachat_pro_length = len(results["gigachat_pro"]) gigachat_pro_display = f"{results['gigachat_pro']}\n\n------\nКоличество знаков: {gigachat_pro_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, "", "", "", "", "", "", "", "" time.sleep(2) results["gigachat_lite"] = generate_message_gigachat_lite_with_retry(standard_prompt) gigachat_lite_length = len(results["gigachat_lite"]) gigachat_lite_display = f"{results['gigachat_lite']}\n\n------\nКоличество знаков: {gigachat_lite_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, "", "", "", "", "", "", "" time.sleep(2) results["gigachat_plus"] = generate_message_gigachat_plus_with_retry(standard_prompt) gigachat_plus_length = len(results["gigachat_plus"]) gigachat_plus_display = f"{results['gigachat_plus']}\n\n------\nКоличество знаков: {gigachat_plus_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, "", "", "", "", "", "" time.sleep(2) results["meta_llama_3_1_405b"] = generate_message_meta_llama_3_1_405b_with_retry(standard_prompt) meta_llama_405b_length = len(results["meta_llama_3_1_405b"]) meta_llama_405b_display = f"{results['meta_llama_3_1_405b']}\n\n------\nКоличество знаков: {meta_llama_405b_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, "", "", "", "", "" time.sleep(4) results["meta_llama_3_1_70b"] = generate_message_meta_llama_3_1_70b_with_retry(standard_prompt) meta_llama_70b_length = len(results["meta_llama_3_1_70b"]) meta_llama_70b_display = f"{results['meta_llama_3_1_70b']}\n\n------\nКоличество знаков: {meta_llama_70b_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, "", "", "", "" time.sleep(4) results["meta_llama_3_1_8b"] = generate_message_meta_llama_3_1_8b_with_retry(standard_prompt) meta_llama_8b_length = len(results["meta_llama_3_1_8b"]) meta_llama_8b_display = f"{results['meta_llama_3_1_8b']}\n\n------\nКоличество знаков: {meta_llama_8b_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, "", "", "" time.sleep(4) results["gemma_2_27b_it"] = generate_message_gemma_2_27b_it_with_retry(standard_prompt) gemma_27b_length = len(results["gemma_2_27b_it"]) gemma_27b_display = f"{results['gemma_2_27b_it']}\n\n------\nКоличество знаков: {gemma_27b_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, gemma_27b_display, "", "" time.sleep(4) results["gemma_2_9b_it"] = generate_message_gemma_2_9b_it_with_retry(standard_prompt) gemma_9b_length = len(results["gemma_2_9b_it"]) gemma_9b_display = f"{results['gemma_2_9b_it']}\n\n------\nКоличество знаков: {gemma_9b_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, gemma_27b_display, gemma_9b_display, "" time.sleep(4) # Добавляем Mistral results["mistral"] = generate_message_mistral_with_retry(standard_prompt) mistral_length = len(results["mistral"]) mistral_display = f"{results['mistral']}\n\n------\nКоличество знаков: {mistral_length}" yield results["prompt"], gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, gemma_27b_display, gemma_9b_display, mistral_display time.sleep(4) return results # Функция для генерации персонализированного промпта def generate_personalization_prompt(*selected_values): prompt = "Адаптируй, не превышая длину сообщения в 250 знаков с пробелами, текст с учетом следующих особенностей:\n" gender, generation, psychotype = selected_values[0], selected_values[1], selected_values[2] combined_instruction = "" additional_instructions = "" print(f"Выбранные значения: Пол={gender}, Поколение={generation}, Психотип={psychotype}") # Проверяем, выбраны ли все три параметра: Пол, Поколение, Психотип if gender and generation and psychotype: # Получаем данные с листа "Пол Поколение Психотип" sheet = features.get("Пол Поколение Психотип", {}) # Ищем ключ, соответствующий комбинации "Пол", "Поколение", "Психотип" key = (gender, generation, psychotype) if key in sheet: combined_instruction = sheet[key] print(f"Найдена комбинированная инструкция: {combined_instruction}") else: print(f"Комбинированная инструкция для ключа {key} не найдена.") # Если не найдена комбинированная инструкция, добавляем индивидуальные инструкции if not combined_instruction: print("Добавляем индивидуальные инструкции для Пол, Поколение, Психотип.") for i, feature in enumerate(["Пол", "Поколение", "Психотип"]): if selected_values[i]: try: instruction = features[feature][selected_values[i]] additional_instructions += f"{instruction}\n" print(f"Добавлена инструкция из {feature}: {instruction}") except KeyError: return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных." # Добавляем инструкции для остальных параметров (например, Отрасль) for i, feature in enumerate(features.keys()): if feature not in ["Пол", "Поколение", "Психотип", "Пол Поколение Психотип"]: if i < len(selected_values) and selected_values[i]: try: instruction = features[feature][selected_values[i]] additional_instructions += f"{instruction}\n" print(f"Добавлена инструкция из {feature}: {instruction}") except KeyError: return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных." # Формируем итоговый промпт if combined_instruction: prompt += combined_instruction # Добавляем комбинированную инструкцию, если она есть if additional_instructions: prompt += additional_instructions # Добавляем остальные инструкции prompt += "Убедись, что в готовом тексте до 250 знаков с пробелами." return prompt.strip() # Функция для выполнения персонализации на основе сгенерированного промпта и сообщения def perform_personalization(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_gpt4o_with_retry(full_prompt) # Также обновляем функции персонализации def perform_personalization_gigachat(standard_message, personalization_prompt, model): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" if model == "gigachat_pro": result = generate_message_gigachat_pro_with_retry(full_prompt) elif model == "gigachat_lite": result = generate_message_gigachat_lite_with_retry(full_prompt) elif model == "gigachat_plus": result = generate_message_gigachat_plus_with_retry(full_prompt) return clean_message(result) def perform_personalization_meta_llama_405b(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_meta_llama_3_1_405b_with_retry(full_prompt) def perform_personalization_meta_llama_70b(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_meta_llama_3_1_70b_with_retry(full_prompt) def perform_personalization_meta_llama_8b(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_meta_llama_3_1_8b_with_retry(full_prompt) def perform_personalization_gemma_27b_it(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_gemma_2_27b_it_with_retry(full_prompt) def perform_personalization_gemma_9b_it(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_gemma_2_9b_it_with_retry(full_prompt) def perform_personalization_mistral(standard_message, personalization_prompt): full_prompt = f"{personalization_prompt}\n\nТекст для адаптации:\n{standard_message}" return generate_message_mistral_with_retry(full_prompt) # Updated function to include additional models in personalization def personalize_messages_with_yield( gpt4o_message, gigachat_pro_message, gigachat_lite_message, gigachat_plus_message, meta_llama_405b_message, meta_llama_70b_message, meta_llama_8b_message, gemma_27b_message, gemma_9b_message, mistral_message, *selected_values ): save_user_request_to_github(description, advantages, selected_values) personalization_prompt = generate_personalization_prompt(*selected_values) yield personalization_prompt, "", "", "", "", "", "", "", "", "", "" personalized_message_gpt4o = perform_personalization(gpt4o_message, personalization_prompt) gpt4o_length = len(personalized_message_gpt4o) gpt4o_display = f"{personalized_message_gpt4o}\n\n------\nКоличество знаков: {gpt4o_length}" yield personalization_prompt, gpt4o_display, "", "", "", "", "", "", "", "", "" personalized_message_gigachat_pro = perform_personalization_gigachat(gigachat_pro_message, personalization_prompt, "gigachat_pro") gigachat_pro_length = len(personalized_message_gigachat_pro) gigachat_pro_display = f"{personalized_message_gigachat_pro}\n\n------\nКоличество знаков: {gigachat_pro_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, "", "", "", "", "", "", "", "" personalized_message_gigachat_lite = perform_personalization_gigachat(gigachat_lite_message, personalization_prompt, "gigachat_lite") gigachat_lite_length = len(personalized_message_gigachat_lite) gigachat_lite_display = f"{personalized_message_gigachat_lite}\n\n------\nКоличество знаков: {gigachat_lite_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, "", "", "", "", "", "", "" personalized_message_gigachat_plus = perform_personalization_gigachat(gigachat_plus_message, personalization_prompt, "gigachat_plus") gigachat_plus_length = len(personalized_message_gigachat_plus) gigachat_plus_display = f"{personalized_message_gigachat_plus}\n\n------\nКоличество знаков: {gigachat_plus_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, "", "", "", "", "", "" personalized_message_meta_llama_405b = perform_personalization_meta_llama_405b(meta_llama_405b_message, personalization_prompt) meta_llama_405b_length = len(personalized_message_meta_llama_405b) meta_llama_405b_display = f"{personalized_message_meta_llama_405b}\n\n------\nКоличество знаков: {meta_llama_405b_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, "", "", "", "", "" personalized_message_meta_llama_70b = perform_personalization_meta_llama_70b(meta_llama_70b_message, personalization_prompt) meta_llama_70b_length = len(personalized_message_meta_llama_70b) meta_llama_70b_display = f"{personalized_message_meta_llama_70b}\n\n------\nКоличество знаков: {meta_llama_70b_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, "", "", "", "" personalized_message_meta_llama_8b = perform_personalization_meta_llama_8b(meta_llama_8b_message, personalization_prompt) meta_llama_8b_length = len(personalized_message_meta_llama_8b) meta_llama_8b_display = f"{personalized_message_meta_llama_8b}\n\n------\nКоличество знаков: {meta_llama_8b_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, "", "", "" personalized_message_gemma_27b_it = perform_personalization_gemma_27b_it(gemma_27b_message, personalization_prompt) gemma_27b_length = len(personalized_message_gemma_27b_it) gemma_27b_display = f"{personalized_message_gemma_27b_it}\n\n------\nКоличество знаков: {gemma_27b_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, gemma_27b_display, "", "" personalized_message_gemma_9b_it = perform_personalization_gemma_9b_it(gemma_9b_message, personalization_prompt) gemma_9b_length = len(personalized_message_gemma_9b_it) gemma_9b_display = f"{personalized_message_gemma_9b_it}\n\n------\nКоличество знаков: {gemma_9b_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, gemma_27b_display, gemma_9b_display, "" personalized_message_mistral = perform_personalization_mistral(mistral_message, personalization_prompt) mistral_length = len(personalized_message_mistral) mistral_display = f"{personalized_message_mistral}\n\n------\nКоличество знаков: {mistral_length}" yield personalization_prompt, gpt4o_display, gigachat_pro_display, gigachat_lite_display, gigachat_plus_display, meta_llama_405b_display, meta_llama_70b_display, meta_llama_8b_display, gemma_27b_display, gemma_9b_display, mistral_display # Функция для генерации промпта проверки текста def generate_error_check_prompt(): prompt = ( "Проверь текст SMS-сообщения на соответствие установленным правилам и ограничениям, касающимся его формирования. На основе выявленных несоответствий предоставь рекомендации по исправлению текста. " "Особое внимание удели проверке: количества символов в тексте SMS-сообщения, орфографическим и пунктуационным ошибкам, определению частей речи (причастия, деепричастия, причастный оборот, деепричастный оборот). " "Анализируй только текст SMS-сообщения, ничего не придумывай и не добавляй лишнего. " "Правила и ограничения, которым должен соответствовать текст SMS-сообщения:\n" "1. Количество символов в SMS-сообщении должно быть до 250 знаков с учетом пробелов.\n" "2. В тексте должен быть призыв к действию с использованием глагола в повелительном наклонении (например: оформите, получите, разместите, размещайте, откройте, подключите, подайте заявку).\n" "3. Должно соблюдаться соответствие фактов о продукте.\n" "4. В генерациях смс запрещено использовать обещания и гарантии.\n" "5. В генерациях смс запрещено использовать составные конструкции из двух глаголов.\n" "6. В генерациях смс запрещено использовать причастия и причастные обороты.\n" "7. В генерациях смс запрещено использовать деепричастия и деепричастные обороты.\n" "8. В генерациях смс запрещено использовать превосходную степень прилагательных.\n" "9. В генерациях смс запрещено использовать страдательный залог.\n" "10. В генерациях смс запрещено использовать порядковые числительные от 10 прописью.\n" "11. В генерациях смс запрещено использовать цепочки с придаточными предложениями.\n" "12. В генерациях смс запрещено использовать разделительные повторяющиеся союзы.\n" "13. В генерациях смс запрещено использовать вводные конструкции.\n" "14. В генерациях смс запрещено использовать усилители.\n" "15. В генерациях смс запрещено использовать паразиты времени.\n" "16. В генерациях смс запрещено использовать несколько существительных подряд, в том числе отглагольных.\n" "17. В генерациях смс запрещено использовать производные предлоги.\n" "18. В генерациях смс запрещено использовать сложные предложения, в которых нет связи между частями.\n" "19. В генерациях смс запрещено использовать сложноподчинённые предложения.\n" "20. В генерациях смс запрещено использовать даты прописью.\n" "21. В генерациях смс запрещено использовать близкие по смыслу однородные члены.\n" "22. В генерациях смс запрещено использовать шокирующие, экстравагантные, кликбейтные фразы.\n" "23. В генерациях смс запрещено использовать абстрактные заявления без поддержки фактами и отсутствие доказательства пользы для клиента.\n" "24. В генерациях смс запрещено использовать гарантирующие фразы.\n" "25. В генерациях смс запрещено использовать узкоспециализированные термины.\n" "26. В генерациях смс запрещено использовать фразы, способные создать двойственное ощущение, обидеть.\n" "27. В генерациях смс запрещено использовать речевые клише, рекламные штампы, канцеляризмы.\n" "28. В генерациях смс запрещено использовать запрещенные слова: № один, номер один, № 1, вкусный, дешёвый, продукт, спам, банкротство, долги, займ, срочно, лучший, главный, номер 1, успех, лидер.\n" "29. Сообщение должно быть написано без орфографических и грамматических ошибок.\n" "30. Запрещены повторы слов.\n" "31. В тексте должны использоваться правильные знаки препинания.\n" "32. Если в тексте используются кавычки, они должны быть в форме «кавычки-ёлочки».\n" "33. В тексте SMS сообщения должны обязательно присутствовать: название продукта, условия использования продукта / Преимущества продукта / Шаги для подключения или начала использования / Условия акции (если предложение по продукту акционное).\n" "Форма ответа: [Ответ должен быть кратким, должен содержать только рекомендации по устранению найденных несоответствий, соответствия каждому пункту правил описывать категорически запрещено]." ) return prompt # Функция для выполнения проверки текста с использованием yield def check_errors_with_yield(*personalized_messages): if len(personalized_messages) < 10: # Adjusted for the inclusion of Mistral yield "", "", "", "", "", "", "", "", "", "", "Ошибка: недостаточно сообщений для проверки" return error_check_prompt = generate_error_check_prompt() yield error_check_prompt, "", "", "", "", "", "", "", "", "", "Промпт для проверки текста сгенерирован" error_message_gpt4o = perform_personalization(f"{error_check_prompt}\n\n{personalized_messages[0]}", "") yield error_check_prompt, error_message_gpt4o, "", "", "", "", "", "", "", "", "Результат проверки GPT-4o сгенерирован" error_message_gigachat_pro = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[1]}", "", "gigachat_pro") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, "", "", "", "", "", "", "", "Результат проверки GigaChat-Pro сгенерирован" error_message_gigachat_lite = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[2]}", "", "gigachat_lite") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, "", "", "", "", "", "", "Результат проверки GigaChat-Lite сгенерирован" error_message_gigachat_plus = perform_personalization_gigachat(f"{error_check_prompt}\n\n{personalized_messages[3]}", "", "gigachat_plus") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, "", "", "", "", "", "Результат проверки GigaChat-Plus сгенерирован" error_message_meta_llama_405b = perform_personalization(f"{error_check_prompt}\n\n{personalized_messages[4]}", "") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, error_message_meta_llama_405b, "", "", "", "", "Результат проверки Meta-Llama-3.1-405B сгенерирован" error_message_meta_llama_70b = perform_personalization_meta_llama_70b(f"{error_check_prompt}\n\n{personalized_messages[5]}", "") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, error_message_meta_llama_405b, error_message_meta_llama_70b, "", "", "", "Результат проверки Meta-Llama-3.1-70B сгенерирован" error_message_meta_llama_8b = perform_personalization_meta_llama_8b(f"{error_check_prompt}\n\n{personalized_messages[6]}", "") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, error_message_meta_llama_405b, error_message_meta_llama_70b, error_message_meta_llama_8b, "", "", "Результат проверки Meta-Llama-3.1-8B сгенерирован" error_message_gemma_27b_it = perform_personalization_gemma_27b_it(f"{error_check_prompt}\n\n{personalized_messages[7]}", "") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, error_message_meta_llama_405b, error_message_meta_llama_70b, error_message_meta_llama_8b, error_message_gemma_27b_it, "", "Результат проверки Gemma-2-27B-IT сгенерирован" error_message_gemma_9b_it = perform_personalization_gemma_9b_it(f"{error_check_prompt}\n\n{personalized_messages[8]}", "") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, error_message_meta_llama_405b, error_message_meta_llama_70b, error_message_meta_llama_8b, error_message_gemma_27b_it, error_message_gemma_9b_it, "", "Результат проверки Gemma-2-9B-IT сгенерирован" error_message_mistral = perform_personalization_mistral(f"{error_check_prompt}\n\n{personalized_messages[9]}", "") yield error_check_prompt, error_message_gpt4o, error_message_gigachat_pro, error_message_gigachat_lite, error_message_gigachat_plus, error_message_meta_llama_405b, error_message_meta_llama_70b, error_message_meta_llama_8b, error_message_gemma_27b_it, error_message_gemma_9b_it, error_message_mistral, "Все результаты проверки сгенерированы" def save_to_github(personalized_message, model_name, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form): # Собираем все данные в один словарь data_to_save = { "Модель": model_name, "Персонализированное сообщение": personalized_message, "Комментарий": comment, "Откорректированное сообщение": corrected_message, "Описание предложения": description, "Преимущества": advantages, "Неперсонализированный промпт": non_personalized_prompt, "Неперсонализированное сообщение": non_personalized_message, "Пол": gender, "Поколение": generation, "Психотип": psychotype, "Стадия бизнеса": business_stage, "Отрасль": industry, "ОПФ": legal_form } # Преобразуем контент в JSON-строку и кодируем в base64 file_content_encoded = base64.b64encode(json.dumps(data_to_save).encode()).decode() # Параметры для GitHub API repo = "fruitpicker01/Storage_dev" path = f"file_{int(time.time())}.json" url = f"https://api.github.com/repos/{repo}/contents/{path}" headers = { "Authorization": f"token {token}", "Content-Type": "application/json" } data = { "message": f"Добавлен новый файл {path}", "content": file_content_encoded } # Отправка POST-запроса на GitHub API для создания файла в репозитории response = requests.put(url, headers=headers, data=json.dumps(data)) # Создание интерфейса Gradio with gr.Blocks() as demo: gr.Markdown("# Генерация SMS-сообщений по заданным признакам") with gr.Row(): with gr.Column(scale=1): description_input = gr.Textbox( label="Описание предложения (предзаполненный пример можно поменять на свой)", lines=13, value=( "Необходимо предложить клиенту оформить дебетовую премиальную бизнес-карту Mastercard Preffered. " "Обслуживание карты стоит 700 рублей в месяц, но клиент может пользоваться ей бесплатно. " "Что необходимо сделать, чтобы воспользоваться предложением:\n" "1. Оформить премиальную бизнес-карту в офисе банка или онлайн в интернет-банке СберБизнес.\n" "2. Забрать карту.\n" "3. В течение календарного месяца совершить по ней покупки на сумму от 100 000 рублей.\n" "4. В течение следующего месяца пользоваться ей бесплатно." ) ) advantages_input = gr.Textbox( label="Преимущества (предзаполненный пример можно поменять на свой)", lines=6, value=( "Предложение по бесплатному обслуживанию — бессрочное.\n" "Оплата покупок без отчётов и платёжных поручений.\n" "Платёжные документы без комиссии.\n" "Лимиты на расходы сотрудников.\n" "Мгновенные переводы на карты любых банков." ) ) selections = [] for feature in features.keys(): if feature not in ["Пол Поколение Психотип"]: # Исключаем этот лист из выбора selections.append(gr.Dropdown(choices=[None] + list(features[feature].keys()), label=f"Выберите {feature}")) with gr.Column(scale=2): prompt_display = gr.Textbox(label="Неперсонализированный промпт", lines=25, interactive=False) personalization_prompt = gr.Textbox(label="Персонализированный промпт", lines=24, interactive=False) with gr.Row(): submit_btn = gr.Button("1. Создать неперсонализированное сообщение") personalize_btn = gr.Button("2. Выполнить персонализацию (нажимать только после кнопки 1)", elem_id="personalize_button") load_btn = gr.Button("Вернуть параметры последнего запроса") # Первый ряд with gr.Row(): output_text_gpt4o = gr.Textbox(label="Неперсонализированное сообщение GPT-4o", lines=3, interactive=False) personalized_output_text_gpt4o = gr.Textbox(label="Персонализированное сообщение GPT-4o", lines=3, interactive=False) comment_gpt4o = gr.Textbox(label="Комментарий к сообщению GPT-4o", lines=3) corrected_gpt4o = gr.Textbox(label="Откорректированное сообщение GPT-4o", lines=3) save_gpt4o_btn = gr.Button("👍 GPT-4o") # Второй ряд with gr.Row(): output_text_gigachat_pro = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Pro", lines=3, interactive=False) personalized_output_text_gigachat_pro = gr.Textbox(label="Персонализированное сообщение GigaChat-Pro", lines=3, interactive=False) comment_gigachat_pro = gr.Textbox(label="Комментарий к сообщению GigaChat-Pro", lines=3) corrected_gigachat_pro = gr.Textbox(label="Откорректированное сообщение GigaChat-Pro", lines=3) save_gigachat_pro_btn = gr.Button("👍 GigaChat-Pro") # Третий ряд with gr.Row(): output_text_gigachat_lite = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite", lines=3, interactive=False) personalized_output_text_gigachat_lite = gr.Textbox(label="Персонализированное сообщение GigaChat-Lite", lines=3, interactive=False) comment_gigachat_lite = gr.Textbox(label="Комментарий к сообщению GigaChat-Lite", lines=3) corrected_gigachat_lite = gr.Textbox(label="Откорректированное сообщение GigaChat-Lite", lines=3) save_gigachat_lite_btn = gr.Button("👍 GigaChat-Lite") # Четвертый ряд with gr.Row(): output_text_gigachat_plus = gr.Textbox(label="Неперсонализированное сообщение GigaChat-Lite+", lines=3, interactive=False) personalized_output_text_gigachat_plus = gr.Textbox(label="Персонализированное сообщение GigaChat-Lite+", lines=3, interactive=False) comment_gigachat_plus = gr.Textbox(label="Комментарий к сообщению GigaChat-Lite+", lines=3) corrected_gigachat_plus = gr.Textbox(label="Откорректированное сообщение GigaChat-Lite+", lines=3) save_gigachat_plus_btn = gr.Button("👍 GigaChat-Lite+") # Пятый ряд with gr.Row(): output_text_meta_llama_405b = gr.Textbox(label="Неперсонализированное сообщение Meta-Llama-3.1-405B", lines=3, interactive=False) personalized_output_text_meta_llama_405b = gr.Textbox(label="Персонализированное сообщение Meta-Llama-3.1-405B", lines=3, interactive=False) comment_meta_llama_405b = gr.Textbox(label="Комментарий к сообщению Meta-Llama-3.1-405B", lines=3) corrected_meta_llama_405b = gr.Textbox(label="Откорректированное сообщение Meta-Llama-3.1-405B", lines=3) save_meta_llama_405b_btn = gr.Button("👍 Meta-Llama-3.1-405B") # Шестой ряд with gr.Row(): output_text_meta_llama_70b = gr.Textbox(label="Неперсонализированное сообщение Meta-Llama-3.1-70B", lines=3, interactive=False) personalized_output_text_meta_llama_70b = gr.Textbox(label="Персонализированное сообщение Meta-Llama-3.1-70B", lines=3, interactive=False) comment_meta_llama_70b = gr.Textbox(label="Комментарий к сообщению Meta-Llama-3.1-70B", lines=3) corrected_meta_llama_70b = gr.Textbox(label="Откорректированное сообщение Meta-Llama-3.1-70B", lines=3) save_meta_llama_70b_btn = gr.Button("👍 Meta-Llama-3.1-70B") # Седьмой ряд with gr.Row(): output_text_meta_llama_8b = gr.Textbox(label="Неперсонализированное сообщение Meta-Llama-3.1-8B", lines=3, interactive=False) personalized_output_text_meta_llama_8b = gr.Textbox(label="Персонализированное сообщение Meta-Llama-3.1-8B", lines=3, interactive=False) comment_meta_llama_8b = gr.Textbox(label="Комментарий к сообщению Meta-Llama-3.1-8B", lines=3) corrected_meta_llama_8b = gr.Textbox(label="Откорректированное сообщение Meta-Llama-3.1-8B", lines=3) save_meta_llama_8b_btn = gr.Button("👍 Meta-Llama-3.1-8B") # Восьмой ряд with gr.Row(): output_text_gemma_27b = gr.Textbox(label="Неперсонализированное сообщение Gemma-2-27B-IT", lines=3, interactive=False) personalized_output_text_gemma_27b = gr.Textbox(label="Персонализированное сообщение Gemma-2-27B-IT", lines=3, interactive=False) comment_gemma_27b = gr.Textbox(label="Комментарий к сообщению Gemma-2-27B-IT", lines=3) corrected_gemma_27b = gr.Textbox(label="Откорректированное сообщение Gemma-2-27B-IT", lines=3) save_gemma_27b_btn = gr.Button("👍 Gemma-2-27B-IT") # Девятый ряд with gr.Row(): output_text_gemma_9b = gr.Textbox(label="Неперсонализированное сообщение Gemma-2-9B-IT", lines=3, interactive=False) personalized_output_text_gemma_9b = gr.Textbox(label="Персонализированное сообщение Gemma-2-9B-IT", lines=3, interactive=False) comment_gemma_9b = gr.Textbox(label="Комментарий к сообщению Gemma-2-9B-IT", lines=3) corrected_gemma_9b = gr.Textbox(label="Откорректированное сообщение Gemma-2-9B-IT", lines=3) save_gemma_9b_btn = gr.Button("👍 Gemma-2-9B-IT") # Десятый ряд with gr.Row(): output_text_mistral = gr.Textbox(label="Неперсонализированное сообщение Mistral-Large-2407", lines=3, interactive=False) personalized_output_text_mistral = gr.Textbox(label="Персонализированное сообщение Mistral-Large-2407", lines=3, interactive=False) comment_mistral = gr.Textbox(label="Комментарий к сообщению Mistral-Large-2407", lines=3) corrected_mistral = gr.Textbox(label="Откорректированное сообщение Mistral-Large-2407", lines=3) save_mistral_btn = gr.Button("👍 Mistral-Large-2407") # Добавление функционала для кнопок submit_btn.click( generate_messages, inputs=[description_input, advantages_input] + selections, outputs=[ prompt_display, output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus, output_text_meta_llama_405b, output_text_meta_llama_70b, output_text_meta_llama_8b, output_text_gemma_27b, output_text_gemma_9b, output_text_mistral # Добавляем Mistral ] ) personalize_btn.click( personalize_messages_with_yield, inputs=[ output_text_gpt4o, output_text_gigachat_pro, output_text_gigachat_lite, output_text_gigachat_plus, output_text_meta_llama_405b, output_text_meta_llama_70b, output_text_meta_llama_8b, output_text_gemma_27b, output_text_gemma_9b, output_text_mistral # Добавляем Mistral ] + selections, outputs=[ personalization_prompt, personalized_output_text_gpt4o, personalized_output_text_gigachat_pro, personalized_output_text_gigachat_lite, personalized_output_text_gigachat_plus, personalized_output_text_meta_llama_405b, personalized_output_text_meta_llama_70b, personalized_output_text_meta_llama_8b, personalized_output_text_gemma_27b, personalized_output_text_gemma_9b, personalized_output_text_mistral # Добавляем Mistral ] ) # Обработка клика по кнопке восстановления load_btn.click( fn=lambda: load_last_user_request_from_github(), inputs=[], outputs=[description_input, advantages_input, *selections] ) # Привязка кнопок к функциям сохранения save_gpt4o_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "GPT-4o", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_gpt4o, comment_gpt4o, corrected_gpt4o, description_input, advantages_input, prompt_display, output_text_gpt4o, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_gigachat_pro_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "GigaChat-Pro", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_gigachat_pro, comment_gigachat_pro, corrected_gigachat_pro, description_input, advantages_input, prompt_display, output_text_gigachat_pro, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_gigachat_lite_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "GigaChat-Lite", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_gigachat_lite, comment_gigachat_lite, corrected_gigachat_lite, description_input, advantages_input, prompt_display, output_text_gigachat_lite, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_gigachat_plus_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "GigaChat-Lite+", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_gigachat_plus, comment_gigachat_plus, corrected_gigachat_plus, description_input, advantages_input, prompt_display, output_text_gigachat_plus, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_meta_llama_405b_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "Meta-Llama-3.1-405B", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_meta_llama_405b, comment_meta_llama_405b, corrected_meta_llama_405b, description_input, advantages_input, prompt_display, output_text_meta_llama_405b, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_meta_llama_70b_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "Meta-Llama-3.1-70B", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_meta_llama_70b, comment_meta_llama_70b, corrected_meta_llama_70b, description_input, advantages_input, prompt_display, output_text_meta_llama_70b, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_meta_llama_8b_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "Meta-Llama-3.1-8B", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_meta_llama_8b, comment_meta_llama_8b, corrected_meta_llama_8b, description_input, advantages_input, prompt_display, output_text_meta_llama_8b, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_gemma_27b_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "Gemma-2-27B-IT", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_gemma_27b, comment_gemma_27b, corrected_gemma_27b, description_input, advantages_input, prompt_display, output_text_gemma_27b, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_gemma_9b_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "Gemma-2-9B-IT", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_gemma_9b, comment_gemma_9b, corrected_gemma_9b, description_input, advantages_input, prompt_display, output_text_gemma_9b, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) save_mistral_btn.click( fn=lambda personalized_message, comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form: save_to_github(personalized_message, "Mistral", comment, corrected_message, description, advantages, non_personalized_prompt, non_personalized_message, gender, generation, psychotype, business_stage, industry, legal_form), inputs=[ personalized_output_text_mistral, comment_mistral, corrected_mistral, description_input, advantages_input, prompt_display, output_text_mistral, selections[0], # Пол selections[1], # Поколение selections[2], # Психотип selections[3], # Стадия бизнеса selections[4], # Отрасль selections[5] # ОПФ ], outputs=None ) demo.launch()