-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo_ai.py
73 lines (57 loc) · 1.89 KB
/
demo_ai.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""Это демо-режим общения с YandexGPT через консоль
"""
import json
from typing import Any, Callable
import os
import ai.prompts
import ai.utils
import ai.session
from utils.botUtils import CommandsComparator
from utils.dotenvLoader import loadDotEnv
import difflib
loadDotEnv()
print(__doc__)
def action_prototype(f: Callable):
def wrapper():
print("Выполняю функцию", f.__name__, end=" ")
res = f()
print("выполнил")
return res
return wrapper
@action_prototype
def action_followMe():
pass
@action_prototype
def action_stop():
pass
# инициализация действий бота
BOT_ACTIONS = {
"стоп": lambda: action_stop(),
"за мной": lambda: action_followMe(),
}
# инициализация беседы с YandexGPT
yagpt = ai.session.YaGPTSession(
folder_id=os.environ.get("YAGPT_FOLDERID"), # type: ignore
iam_token=ai.utils.getIAMToken()["iamToken"],
temperature=0.1,
maxTokens=1000,
formatMapForSystemPrompt={
"name": "Alice",
"commands": ", ".join(list(BOT_ACTIONS.keys()))
}
)
# команды для выполнения методов YaGPTSession (кроме `.ask()`)
DEFAULT_COMMAND_PREFIX = "!"
DEFAULT_COMMANDS: dict[str, Callable[[], tuple[Any, str]]] = { # type: ignore
"clear": lambda: (yagpt.clearChatHistory(), "История очищена")
}
# создание компаратора бота с возможными командами
comparator = CommandsComparator(BOT_ACTIONS, aiSession=yagpt)
while True:
prompt = input(">>> ")
if (prompt[0] == DEFAULT_COMMAND_PREFIX) and (prompt[1:] in DEFAULT_COMMANDS.keys()):
print(DEFAULT_COMMANDS[prompt[1:]]()[1])
else:
result = comparator.compare(prompt)()
if type(result).__name__ == "str":
print(result)