From 5f1e2e67a42c576e00d6131a9915b98d61efb905 Mon Sep 17 00:00:00 2001 From: Dmitrium12 Date: Mon, 29 Apr 2024 17:58:53 +0700 Subject: [PATCH] add command and add its in ollama functions --- commands.yaml | 94 ++++++++++++++++++++++++++++++++++++++------------- test.py | 43 +++++++++++++---------- 2 files changed, 97 insertions(+), 40 deletions(-) diff --git a/commands.yaml b/commands.yaml index aae4bf2..a8ea551 100755 --- a/commands.yaml +++ b/commands.yaml @@ -1,26 +1,74 @@ 'off': -- выключись -- вырубись -- завершить работу -- закройся -- отключись -- заверши свою работу -- на сегодня хватит -- выгрузи себя из памяти -- ты мне надоел -- пора спать + - выключись + - вырубись + - завершить работу + - закройся + - отключись + - заверши свою работу + - на сегодня хватит + - выгрузи себя из памяти + - ты мне надоел + - пора спать + - закончить сеанс + - выключи систему + - до завтра + - до встречи + - прощай stupid: -- ты дурак -- ты дебил -- ты глупый -- ты тупой + - ты дурак + - ты дебил + - ты глупый + - ты тупой + - тебе ещё учиться и учиться + - ты не в адеквате + - недоумок + - бесполезный + - работаешь как черепаха thanks: -- спасибо -- молодец -- респект -- ты супер -- отличная работа -- ты крут -- ты большой молодец -- ты реально крут -- ты афигенный \ No newline at end of file + - спасибо + - молодец + - респект + - ты супер + - отличная работа + - ты крут + - ты большой молодец + - ты реально крут + - ты афигенный + - благодарю тебя + - супер работа + - вы мне помогли + - не знаю, что бы я без тебя делал + - ты моя правая рука +music_on: + - включи музыку + - продолжи музыку + - давай немного музыки + - хочу послушать музыку + - запусти плейлист +music_off: + - выключи музыку + - остановить музыку + - пауза музыки + - достаточно музыки + - заткнись + - молчать +music_next: + - следующая композиция + - скипни музыку + - дальше + - пропусти эту песню + - ещё одну песню +music_previous: + - предыдущая композиция + - откати музыку + - верни предыдущий трек + - ещё раз эту песню + - проиграй еще раз +weather: + - погода за окном + - какая погода + - какая температура снаружи? + - нужен зонт сегодня? + - возможен дождь сегодня? + - прогноз погоды на сегодня + - погода diff --git a/test.py b/test.py index 7306e50..70dc150 100644 --- a/test.py +++ b/test.py @@ -2,17 +2,32 @@ import asyncio import re import ollama +import yaml + + +def load_commands(file_path): + with open(file_path) as file: + data = yaml.safe_load(file) + answers = {} + command_mapping = {} + idx = 1 + for category, items in data.items(): + answers[idx] = items + command_mapping[idx] = category + idx += 1 + return answers, command_mapping async def chat(answers: dict[int, str], request: str = 'музычку пожалуйста') -> str: - answers_str = ''.join([f'{key}. {value}\n' for key, value in answers.items()]) + answers_str = ''.join([f'{key}. {", ".join(value)}\n' for key, value in answers.items()]) messages = [ { 'role': 'system', - 'content': 'Ты должен ответить на вопрос пользователя числом или набором чисел.' - 'Пример твоего ответа: 1.' - 'Ещё один пример: 4 и 3' - ' Вот список:\n' + answers_str + 'content': 'Пожалуйста, просмотрите список доступных команд и ' + 'выберите подходящую команду, указав ее номер. ' + 'Вы можете выбрать одну команду или несколько команд одновременно. ' + 'В ответе укажите только номер или номера команд, ' + 'например: "1" или "1, 3, 5". Вот список доступных команд:\n' + answers_str }, { 'role': 'user', @@ -25,32 +40,26 @@ async def chat(answers: dict[int, str], request: str = 'музычку пожа messages=messages, options={ 'temperature': 0.5, + 'mirostat_tau': 100.0, + 'repeat_last_n': 2, + 'num_predict': 20 } ) return response.get("message").get("content") async def main(): - answers = { - 1: "включить музыку", - 2: "остановить музыку", - 3: "следующая композиция", - 4: "предыдущая композиция", - 5: 'погода', - 99: "ничего из этого" - } + answers, command_mapping = load_commands('commands.yaml') number = None while not number: response_content = await chat(answers, "останови музыку и скажи погоду") - print(response_content) number = [ int(i) for i in re.findall(r'\d+', response_content) if int(i) in answers.keys() ] - if not number: - print("Не удалось определить номер. Пожалуйста, попробуйте снова.") - print(f"Выбранный номер: {number}") + command_names = [command_mapping[n] for n in number] + print(f"Выбранный номер: {command_names}") if __name__ == '__main__':