From bf8f8ecef7021095e487025dc1072555251d6a23 Mon Sep 17 00:00:00 2001 From: Vladislav Samorodov Date: Sat, 26 Oct 2024 01:01:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавил ввод с помощью Enter Теперь если возвращается пустой ответ сообщение пытается отправится ещё раз (до трёх попыток), код теперь обрабатывается иначе, чтобы всё могло работать после pyinstaller --- main.py | 1 + mind.py | 101 ++++++++++++++++++++++++++++++++++---------------------- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/main.py b/main.py index 3225943..cbdf40f 100644 --- a/main.py +++ b/main.py @@ -84,6 +84,7 @@ def __init__(self, parent=None): # Поле ввода текста self.text_input = LineEdit(self) + self.text_input.returnPressed.connect(self.send_message) self.input_layout.addWidget(self.text_input) # Кнопка отправки diff --git a/mind.py b/mind.py index a810fa2..6f20379 100644 --- a/mind.py +++ b/mind.py @@ -95,6 +95,7 @@ def answer(): !!!пиши код, когда это необходимо и не забывай писать его в ...!!! !!!без функции answer() ты не сможешь выполнить код!!! !!!Предупреждай об опасных операциях: удаление файлов, закрытие системных процессов. Будь осторожнее!!! +Отвечай всегда на том языке на котором был задан вопрос {code_snippets} @@ -119,55 +120,75 @@ def init_new_chat(self): def get_ai_response(self, input_string, card): self.titleBar.set_animation(1) self.messages_array.append({"role": "user", "content": input_string}) - self.thread = threading.Thread(target=self.response_thread, args=[card]) + self.thread = threading.Thread(target=self.response_thread, args=(card, input_string)) self.thread.start() - def response_thread(self, card): - try: - response = g4f.ChatCompletion.create(model="gpt-4o", - messages=self.messages_array, - stream=True) - #response = self.localClient.chat.completions.create(model = 'orca-mini-3b', messages = [self.messages_array],stream = True) - result = Message() - ress = "" - for part in response: - ress += part - result.from_string(ress) - card.set_content(result) - - card.set_content(result) - self.messages_array.append({"role": "assistant", "content": ress}) - code_result = self.code_exec_result(ress) - if code_result is not None: - result.text = code_result - card.set_content(result) - else: - card.set_content(result) - self.titleBar.set_animation(0) - print(result) - return result - except Exception as e: - return str(e) + def response_thread(self, card, input_string): + max_retries = 3 # Максимальное количество повторных попыток + retry_count = 0 + + while retry_count < max_retries: + try: + # Ваш код для обращения к модели и обработки ответа + + response = g4f.ChatCompletion.create( + model="gpt-4o", + messages=self.messages_array, + stream=True + ) + + result = Message() + ress = "" + for part in response: + ress += part + result.from_string(ress) + card.set_content(result) + + # Проверяем, пустой ли ответ + if ress.strip() == "": + retry_count += 1 + print(f"Пустой ответ получен. Повторная попытка {retry_count} из {max_retries}.") + continue # Повторяем цикл для повторной попытки + else: + self.messages_array.append({"role": "assistant", "content": ress}) + + code_result = self.code_exec_result(ress) + if code_result is not None: + result.text = code_result + card.set_content(result) + else: + card.set_content(result) + break # Выходим из цикла после успешного ответа - def code_exec_result(self, input): + except Exception as e: + retry_count += 1 + print(f"Ошибка при получении ответа: {e}. Попытка {retry_count} из {max_retries}.") + continue # Повторяем цикл для повторной попытки + + if retry_count == max_retries: + print("Не удалось получить ответ от модели после нескольких попыток.") + card.set_content(Message(text="Извините, не удалось получить ответ. Попробуйте ещё раз.")) + + self.titleBar.set_animation(0) + + def code_exec_result(self, input_str): try: - if "" in input and "" in input: - print("pt1 is ok") - match = re.search(pattern_code, input, re.DOTALL) + if "" in input_str and "" in input_str: + match = re.search(pattern_code, input_str, re.DOTALL) if match: code_inside_tags = match.group(1) code = code_inside_tags - with open("execute.py", "w", encoding='utf-8') as file: - file.write(code) - else: - return None + local_vars = {} + exec(code, {}, local_vars) + if 'answer' in local_vars: + result = local_vars['answer']() + return result + else: + return "Ошибка: функция 'answer' не найдена." else: return None - importlib.reload(execute) - result = execute.answer() - return result - except: - return None + except Exception as e: + return f"Ошибка выполнения кода: {e}" @dataclass