Compare commits

...

19 Commits

Author SHA1 Message Date
Jakub Adamski
a575c33eee gramatics-fix 2022-06-15 12:23:39 +02:00
Jakub Adamski
674464d994 commands-fix 2022-06-15 12:19:11 +02:00
Jakub Adamski
102957582f hello fix 2022-06-15 12:15:33 +02:00
Jakub Adamski
8f5bdc3f7e mini-fix 2022-06-15 12:13:03 +02:00
Jakub Adamski
79c10b98e6 fix 2022-06-15 12:12:07 +02:00
Jakub Adamski
a120a559dc api 2022-06-15 12:10:22 +02:00
Jakub Adamski
7e222fa47e remove-print 2022-06-15 12:09:36 +02:00
Jakub Adamski
a049585397 merge 2022-06-15 12:08:02 +02:00
Jakub Adamski
dd95fa65e8 Merge branch 'master' of https://git.wmi.amu.edu.pl/s444455/Systemy_dialogowe 2022-06-15 12:07:51 +02:00
Jakub Adamski
000d90bc49 fixes 2022-06-15 12:06:09 +02:00
f8dac90889 fix syntax error 2022-06-15 11:55:21 +02:00
karoel2
c360f9bc00 finalv1 2022-06-15 11:28:52 +02:00
karoel2
a6afe30b7f Resolve merges 2022-06-15 10:51:36 +02:00
karoel2
5a30aeded7 changes 2022-06-15 10:38:48 +02:00
karoel2
6263ac9d2b Change grammar arg to "repo" 2022-06-15 09:31:07 +02:00
karoel2
c2a9619ac7 Fixed merge conflict 2022-06-15 09:21:42 +02:00
karoel2
c5cbfebcef resolve merge conflict" 2022-06-15 09:04:47 +02:00
karoel2
a7cdae8859 merge 2022-06-15 09:02:26 +02:00
karoel2
57c1893a55 Remove short_thread 2022-06-15 08:48:04 +02:00
9 changed files with 145 additions and 73 deletions

View File

@ -4,7 +4,7 @@ grammar brefing;
public <brefing> = <action> {action} (<git> {git} | [repozytorium] <repo> {repo});
<repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<git> = gicie | githubie | githubie;

View File

@ -4,7 +4,7 @@ grammar issues;
public <issue> = (pokaz [mi] [moje] | wyswietl [mi] [moje] | powiedz mi o| przedstaw [mi] [moje]) [nowe | nowych] <issues> [<time>] w <repo>;
<repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<time> = <time_when> {time_when} [ostatniego | ostatnich] [<liczba> {liczba}] <timeunit> {timeunit};
@ -16,7 +16,7 @@ public <issue> = (pokaz [mi] [moje] | wyswietl [mi] [moje] | powiedz mi o| przed
<new> = [nowe] | [nowych];
<repo> = <repozytoria> {repozytoria};
<repo> = <repozytoria> {repo};
<liczba> = (dwa | dwoch | dwojki) | (trzy | trzech | trojki ) | (cztery | czterech) | (piec | pieciu ) | (szesc | szesciu ) | (siedem| siedmiu) | (osiem | osmiu) | (dziewiec | dziewieciu );

View File

@ -2,12 +2,16 @@
grammar notifications;
public <notifications> = (pokaz [mi] | wyświetl [mi] | przedstaw [mi]) [<liczba> {liczba}] [nowe] <powiadomienia> [<time>];
public <notifications> = (pokaz [mi] | wyświetl [mi] | przedstaw [mi]) [<liczba> {liczba}] [nowe] <powiadomienia> w <repo> [<time>];
<time> = <time_when> {time_when} <timeunit> {timeunit};
<time_when> = z | od | ze | w;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<repo> = <repozytoria> {repo};
<timeunit> = (miesiaca | miesiecy | <miesiac>) | tygodni | miesiecy | dni;
<liczba> = (dwa | dwoch | dwojki | dwojki) | (trzy | trzech | trojki ) | (cztery | czterech) | (piec | pieciu ) | (szesc | szesciu ) | (siedem | siedmiu) | (osiem | osmiu) | (dziewiec | dziewieciu );

View File

@ -4,11 +4,11 @@ grammar pullrequest;
public <pull_request_zapytanie> = <action> {action} <new> <pullrequest> [w <repo> {repo}];
<repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<new> = [nowe] | [nowych];
<repo> = <repozytoria> {repozytoria};
<repo> = <repozytoria> {repo};
<pullrequest> = pull requesty | pull requestow;

View File

@ -4,7 +4,7 @@ grammar tests;
public <tests> = (pokaz mi | wyswietl mi | powiedz mi o | przedstaw mi) [<new>] <test> {test} [<time>] w <repo>;
<repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<time> = <time_when> {time_when} [ostatniego | ostatnich] [<liczba> {liczba}] <timeunit> {timeunit};
@ -18,7 +18,7 @@ public <tests> = (pokaz mi | wyswietl mi | powiedz mi o | przedstaw mi) [<new>]
<new> = [nowe] | [nowych];
<repo> = <repozytoria> {repozytoria};
<repo> = <repozytoria> {repo};
<test> = testy | testach | test;

View File

@ -1,4 +1,5 @@
repositoriesMock = ["repo1", "repo2", "repo3"]
repositoriesMock = ["repo1", "repo2", "repo3", "repo4"]
repositoriesPublicMock = ["repo1", "repo2", "repo3"]
issuesMock = [
{
"name": "Issue 1",
@ -46,6 +47,17 @@ testMock = [
},
]
brefingMock = [
{
"name": "brefing1",
"description": "brefing1 description"
},
{
"name": "brefing2",
"description": "brefing2 description"
}
]
def createRepository(repositoryName):
pass
@ -56,7 +68,7 @@ def listRepositories():
return repositoriesMock
def listPublicRepositories():
return repositoriesMock
return repositoriesPublicMock
def listRepositoryIssues(repositoryName):
return issuesMock
@ -64,8 +76,11 @@ def listRepositoryIssues(repositoryName):
def listRepositoryPullRequests(repositoryName):
return pullRequestMock
def listNotifications():
def listNotifications(repositoryName):
return notificationsMock
def listRepositoryTests(repositoryName):
return testMock
def getBrefing():
return brefingMock

View File

@ -5,10 +5,10 @@ import sys
commands = [
'pomoc',
'powiedz co nowego na moim gicie',
'powiedz co nowego na moim repozytorium nazwa',
'do widzenia',
'pokaz issue w',
'pokaz mi powiadomienia',
'pokaz mi powiadomienia w',
'jakie sa pull requesty',
'pokaz mi testy w'
]
@ -34,8 +34,8 @@ other = [
]
bye = [
"Żegnaj!",
"Do zobaczenia",
"Żegnaj!",
"Do zobaczenia",
"Do widzenia",
"Miłego dnia",
"Do widzenia i miłego dnia",
@ -46,9 +46,9 @@ help = ["Obsługuję przekazywanie informacji z systemu GitHub - repozytoria, pu
time = ["Z jakiego czasu?", "Z jakiego okresu?", "Podaj z jakiego przedziału czasowego"]
repo = [
"Z jakiego repozytorium",
"Wskaż repozytorium",
"Podaj z jakiego repozytorium chciałbyć otrzymać informacje",
"Z jakiego repozytorium",
"Wskaż repozytorium",
"Podaj z jakiego repozytorium chciałbyć otrzymać informacje",
"Określ repozytorium"
]
@ -56,49 +56,98 @@ howmany = ["Ile ostatnich elemntów chcesz zobaczyć?", "Ile ostatnich elmentów
error_time = ["Podano nie prawidłowy czas, popraw ramy czasowe", "Czas jest nie prawidłowy, podaj ponownie", "Podaj przedział czasowy jeszcze raz"]
error_repo = ["Podano nieprawidłową nazwę repozytorium", "Podaj ponownie nazwę repozytorium, ponieważ podania nie prawidłową"]
def find(args, key):
#print(args, key)
for item in args:
if item[0] == key:
return item
def generator_jezyka_nautalnego(frame, tactic, state, text):
#print(tactic)
if tactic == 'null':
beastMatch = dl.get_close_matches(text, commands)
print(random.choice(unknown))
if len(beastMatch) > 0:
print(random.choice(other) + ', '.join(beastMatch))
elif tactic[1] == 'help':
print(random.choice(help))
print("Dostępne komendy: \n - " + '\n - '.join(commands))
elif tactic == 'bye':
print(random.choice(bye))
print()
sys.exit(0)
elif tactic[0] == 'ANSWER' and tactic[1] == 'issues':
print("Lista issues w repozytorium " + tactic[2][0][1] + ":")
issues = listRepositoryIssues(tactic[2][0][1])
for issue in issues:
print(issue['name'])
print(issue['description'])
print(issue['status'])
elif tactic[0] == False: #ASK
_, required_empty, act, req_args, opt_args = tactic
# print('DEBUG: ', act, 'req', req_args, opt_args,sep = '\n')
if required_empty[0] == 'repo':
print("Dodaj nazwę repozytorium na końcu komendy")
print("np. w nazwarepozytorium")
else:
print(f'Proszę podaj {required_empty[0]}')
print()
elif tactic[0] == 'ANSWER' and tactic[1] == 'pullrequest':
print("Lista pull requestów w repozytorium " + tactic[2][0][1] + ":")
prs = listRepositoryPullRequests(tactic[2][0][1])
for pr in prs:
print(pr['name'])
print(pr['description'])
print(pr['state'])
elif tactic[0] == True:
_, act, req_args, opt_args = tactic
# print('DEBUG: ', act, 'req', req_args, opt_args,sep = '\n')
if act == 'help':
print(random.choice(help))
print("Dostępne komendy: \n - " + '\n - '.join(commands))
elif act == 'bye':
print(random.choice(bye))
print()
sys.exit(0)
elif tactic == 'hello':
print(random.choice(welcome))
elif act == 'hello':
print(random.choice(welcome))
elif tactic[0] == 'QUESTION' and tactic[1][0] == 'repo':
print("Dodaj nazwę repozytorium na końcu komendy")
print("np. w nazwarepozytorium")
elif act == 'issues':
print("Lista issues w repozytorium " + find(req_args, 'repo')[0] + ":")
issues = listRepositoryIssues(find(req_args, 'repo'))
for issue in issues:
print(issue['name'])
print(issue['description'])
print(issue['status'])
print()
elif act == 'pullrequest':
print("Lista pull requestów w repozytorium " + find(req_args, 'repo')[0] + ":")
prs = listRepositoryPullRequests(find(req_args, repo))
for pr in prs:
print(pr['name'])
print(pr['description'])
print(pr['state'])
print()
elif act == 'brefing':
print("Podsumowanie w repozytorium " + find(req_args, 'repo')[0] + ":")
brefings = getBrefing()
for brefing in brefings:
print(brefing['name'])
print(brefing['description'])
print()
elif act == 'tests':
print("Lista testów w repozytorium " + find(req_args, 'repo')[0] + ":")
tests = listRepositoryTests(find(req_args, 'repo')[0])
for test in tests:
print(test['name'])
print(test['description'])
print(test['status'])
print()
elif act == 'notifications':
print("Lista powidomień w repozytorium " + find(req_args, 'repo')[0] + ":")
notifications = listNotifications(find(req_args, 'repo')[0])
for notification in notifications:
print(notification['name'])
print(notification['description'])
print()
#
# elif tactic[0] == 'QUESTION' and act[0] == 'repo':
# print("Dodaj nazwę repozytorium na końcu komendy")
# print("np. w nazwarepozytorium")
else:
print(tactic)
else:
print(tactic)
print('ERROR')
print()

View File

@ -12,6 +12,10 @@ dialogue_state = {
'counter': 0
}
def add_fact(key, value):
global dialogue_state
dialogue_state['facts'][key] = value
def monitor_stanu_dialogowego(frame):
not_pivot_acts = ['time',
@ -36,7 +40,6 @@ def monitor_stanu_dialogowego(frame):
def append_or_merge_frame(frame, dialogue_state):
act = frame['act']
act_from_state = list(filter(lambda x: x['act'] == act, dialogue_state['topics']))
if len(act_from_state) > 0:
append_or_merge_slots(frame['slots'], act_from_state[0]['slots'])

View File

@ -1,4 +1,5 @@
from apimock import *
from monitor_stanu_dialogowego import add_fact
gramar_slots = {
'pullrequest': (('action', 'optional'),
@ -20,14 +21,14 @@ gramar_slots = {
'issues': (('time_when','optional'),
('liczba','optional'),
('timeunit','optional'),
('repozytoria', 'required')
('repo', 'required')
),
'number': (('liczba', 'required')
),
'help': (('functions', 'optional'),
('help', 'optional')
),
'repo': (('repozytoria', 'required')
'repo': (('repo', 'required')
),
'hello': (),
'bye': (),
@ -37,23 +38,23 @@ gramar_slots = {
def taktyka_dialogu(state, frame):
if frame['act'] == 'null':
return 'null'
if state['current_context'] in ['hello', 'pomoc', 'bye']:
return short_thread(state)
else:
return long_thread(state)
# if state['current_context'] in ['hello', 'pomoc', 'bye']:
# return short_thread(state)
# else:
return long_thread(state)
def short_thread(state):
if state['current_context'] == 'pomoc':
return state['current_context']
else:
return state['current_context']
# def short_thread(state):
# if state['current_context'] == 'pomoc':
# return state['current_context']
# else:
# return state['current_context']
def validate_repo(repo):
if repo not in listRepositories():
return 'repo not in listRepositories'
print('repo not in listRepositories')
if repo not in listPublicRepositories():
return 'repo not in listPublicRepositories'
print('repo not in listPublicRepositories')
def long_thread(state):
act = state['current_context']
if act == None:
@ -63,13 +64,13 @@ def long_thread(state):
slots = topic['slots']
required = gramar_slots[act]
req_args, opt_args = agregate(required, slots)
facts = state['facts']# osobno validuj repo z req i z facts
facts = state['facts']
req_args = add_facts(req_args, facts)
opt_args = add_facts(opt_args, facts)
required_empty = check_req(req_args)
if required_empty:
return "QUESTION", required_empty[0] #slot do uzupełnienia
return "ANSWER", act, req_args, opt_args #wyświetl użytkownikowi
return False, required_empty[0], act, req_args, opt_args #slot do uzupełnienia
return True, act, req_args, opt_args #wyświetl użytkownikowi
def check_req(req_args):
req = []
@ -81,12 +82,13 @@ def check_req(req_args):
def add_facts(args, facts):
for key, value in facts.items():
for idx, item in enumerate(args):
if key == item[0] and value != None and item[1] == None:
args[idx] = value
if key == 'repo':
validate_repo(value)
if key == item[0]:
if value != None and item[1] == None:
args[idx][1] = value
if key == 'repo':
validate_repo(value)
if value == None and item[1] != None:
add_fact(key, item[1])
return args
def agregate(grammar, slots):
@ -101,4 +103,3 @@ def agregate(grammar, slots):
elif item[1] == 'optional':
opt_args.append([item[0], value])
return req_args, opt_args