add command and add its in ollama functions
This commit is contained in:
@@ -9,11 +9,21 @@
|
|||||||
- выгрузи себя из памяти
|
- выгрузи себя из памяти
|
||||||
- ты мне надоел
|
- ты мне надоел
|
||||||
- пора спать
|
- пора спать
|
||||||
|
- закончить сеанс
|
||||||
|
- выключи систему
|
||||||
|
- до завтра
|
||||||
|
- до встречи
|
||||||
|
- прощай
|
||||||
stupid:
|
stupid:
|
||||||
- ты дурак
|
- ты дурак
|
||||||
- ты дебил
|
- ты дебил
|
||||||
- ты глупый
|
- ты глупый
|
||||||
- ты тупой
|
- ты тупой
|
||||||
|
- тебе ещё учиться и учиться
|
||||||
|
- ты не в адеквате
|
||||||
|
- недоумок
|
||||||
|
- бесполезный
|
||||||
|
- работаешь как черепаха
|
||||||
thanks:
|
thanks:
|
||||||
- спасибо
|
- спасибо
|
||||||
- молодец
|
- молодец
|
||||||
@@ -24,3 +34,41 @@ thanks:
|
|||||||
- ты большой молодец
|
- ты большой молодец
|
||||||
- ты реально крут
|
- ты реально крут
|
||||||
- ты афигенный
|
- ты афигенный
|
||||||
|
- благодарю тебя
|
||||||
|
- супер работа
|
||||||
|
- вы мне помогли
|
||||||
|
- не знаю, что бы я без тебя делал
|
||||||
|
- ты моя правая рука
|
||||||
|
music_on:
|
||||||
|
- включи музыку
|
||||||
|
- продолжи музыку
|
||||||
|
- давай немного музыки
|
||||||
|
- хочу послушать музыку
|
||||||
|
- запусти плейлист
|
||||||
|
music_off:
|
||||||
|
- выключи музыку
|
||||||
|
- остановить музыку
|
||||||
|
- пауза музыки
|
||||||
|
- достаточно музыки
|
||||||
|
- заткнись
|
||||||
|
- молчать
|
||||||
|
music_next:
|
||||||
|
- следующая композиция
|
||||||
|
- скипни музыку
|
||||||
|
- дальше
|
||||||
|
- пропусти эту песню
|
||||||
|
- ещё одну песню
|
||||||
|
music_previous:
|
||||||
|
- предыдущая композиция
|
||||||
|
- откати музыку
|
||||||
|
- верни предыдущий трек
|
||||||
|
- ещё раз эту песню
|
||||||
|
- проиграй еще раз
|
||||||
|
weather:
|
||||||
|
- погода за окном
|
||||||
|
- какая погода
|
||||||
|
- какая температура снаружи?
|
||||||
|
- нужен зонт сегодня?
|
||||||
|
- возможен дождь сегодня?
|
||||||
|
- прогноз погоды на сегодня
|
||||||
|
- погода
|
||||||
|
|||||||
@@ -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__':
|
||||||
|
|||||||
Reference in New Issue
Block a user