Skip to content

Commit

Permalink
Правки функциональности
Browse files Browse the repository at this point in the history
Добавил ввод с помощью Enter
Теперь если возвращается пустой ответ сообщение пытается отправится ещё раз (до трёх попыток), код теперь обрабатывается иначе, чтобы всё могло работать после pyinstaller
  • Loading branch information
SVS696 committed Oct 25, 2024
1 parent d97d59e commit 41dd377
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 40 deletions.
1 change: 1 addition & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

# Кнопка отправки
Expand Down
101 changes: 61 additions & 40 deletions mind.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ def answer():
!!!пиши код, когда это необходимо и не забывай писать его в <python>...</python>!!!
!!!без функции answer() ты не сможешь выполнить код!!!
!!!Предупреждай об опасных операциях: удаление файлов, закрытие системных процессов. Будь осторожнее!!!
Отвечай всегда на том языке на котором был задан вопрос
{code_snippets}
Expand All @@ -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 "<python>" in input and "</python>" in input:
print("pt1 is ok")
match = re.search(pattern_code, input, re.DOTALL)
if "<python>" in input_str and "</python>" 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
Expand Down

0 comments on commit 41dd377

Please sign in to comment.