add command and add its in ollama functions

This commit is contained in:
2024-04-29 17:58:53 +07:00
parent c23b1d42bf
commit 5f1e2e67a4
2 changed files with 97 additions and 40 deletions
+71 -23
View File
@@ -1,26 +1,74 @@
'off': 'off':
- выключись - выключись
- вырубись - вырубись
- завершить работу - завершить работу
- закройся - закройся
- отключись - отключись
- заверши свою работу - заверши свою работу
- на сегодня хватит - на сегодня хватит
- выгрузи себя из памяти - выгрузи себя из памяти
- ты мне надоел - ты мне надоел
- пора спать - пора спать
- закончить сеанс
- выключи систему
- до завтра
- до встречи
- прощай
stupid: stupid:
- ты дурак - ты дурак
- ты дебил - ты дебил
- ты глупый - ты глупый
- ты тупой - ты тупой
- тебе ещё учиться и учиться
- ты не в адеквате
- недоумок
- бесполезный
- работаешь как черепаха
thanks: thanks:
- спасибо - спасибо
- молодец - молодец
- респект - респект
- ты супер - ты супер
- отличная работа - отличная работа
- ты крут - ты крут
- ты большой молодец - ты большой молодец
- ты реально крут - ты реально крут
- ты афигенный - ты афигенный
- благодарю тебя
- супер работа
- вы мне помогли
- не знаю, что бы я без тебя делал
- ты моя правая рука
music_on:
- включи музыку
- продолжи музыку
- давай немного музыки
- хочу послушать музыку
- запусти плейлист
music_off:
- выключи музыку
- остановить музыку
- пауза музыки
- достаточно музыки
- заткнись
- молчать
music_next:
- следующая композиция
- скипни музыку
- дальше
- пропусти эту песню
- ещё одну песню
music_previous:
- предыдущая композиция
- откати музыку
- верни предыдущий трек
- ещё раз эту песню
- проиграй еще раз
weather:
- погода за окном
- какая погода
- какая температура снаружи?
- нужен зонт сегодня?
- возможен дождь сегодня?
- прогноз погоды на сегодня
- погода
+26 -17
View File
@@ -2,17 +2,32 @@ import asyncio
import re import re
import ollama 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: 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 = [ messages = [
{ {
'role': 'system', 'role': 'system',
'content': 'Ты должен ответить на вопрос пользователя числом или набором чисел.' 'content': 'Пожалуйста, просмотрите список доступных команд и '
'Пример твоего ответа: 1.' 'выберите подходящую команду, указав ее номер. '
'Ещё один пример: 4 и 3' 'Вы можете выбрать одну команду или несколько команд одновременно. '
' Вот список:\n' + answers_str 'В ответе укажите только номер или номера команд, '
'например: "1" или "1, 3, 5". Вот список доступных команд:\n' + answers_str
}, },
{ {
'role': 'user', 'role': 'user',
@@ -25,32 +40,26 @@ async def chat(answers: dict[int, str], request: str = 'музычку пожа
messages=messages, messages=messages,
options={ options={
'temperature': 0.5, 'temperature': 0.5,
'mirostat_tau': 100.0,
'repeat_last_n': 2,
'num_predict': 20
} }
) )
return response.get("message").get("content") return response.get("message").get("content")
async def main(): async def main():
answers = { answers, command_mapping = load_commands('commands.yaml')
1: "включить музыку",
2: "остановить музыку",
3: "следующая композиция",
4: "предыдущая композиция",
5: 'погода',
99: "ничего из этого"
}
number = None number = None
while not number: while not number:
response_content = await chat(answers, "останови музыку и скажи погоду") response_content = await chat(answers, "останови музыку и скажи погоду")
print(response_content)
number = [ number = [
int(i) int(i)
for i in re.findall(r'\d+', response_content) for i in re.findall(r'\d+', response_content)
if int(i) in answers.keys() if int(i) in answers.keys()
] ]
if not number: command_names = [command_mapping[n] for n in number]
print("Не удалось определить номер. Пожалуйста, попробуйте снова.") print(f"Выбранный номер: {command_names}")
print(f"Выбранный номер: {number}")
if __name__ == '__main__': if __name__ == '__main__':