Tran Xuan Huy
Update app.py
d3b3fb2
raw
history blame
15.5 kB
import gradio as gr
import json
import torch
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
from collections import namedtuple
import datetime
import calendar
from dateutil.relativedelta import relativedelta
def time2date(input):
chu_ky_thoi_gian = input['CHU KỲ THỜI GIAN']
thu = input['THỨ']
ngay = input['NGÀY']
tuan = input['TUẦN']
thang = input['THÁNG']
quy = input['QUÝ']
nam = input['NĂM']
current_date = datetime.date.today()
output = 'error'
if chu_ky_thoi_gian=='ngày':
# hôm kia
if ngay=='hôm kia':
output = current_date - datetime.timedelta(days=2)
# hôm qua
elif ngay=='hôm qua':
output = current_date - datetime.timedelta(days=1)
# hôm nay
elif ngay=='hôm nay':
output = current_date
# ngày mai
elif ngay=='mai':
output = current_date + datetime.timedelta(days=1)
# ngày kia
elif ngay=='kia':
output = current_date + datetime.timedelta(days=2)
# đầu
elif ngay=='đầu':
if thang=='trước':
needed_thang = 12 if current_date.month==1 else current_date.month-1
needed_nam = current_date.year-1 if current_date.month==1 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
1
)
elif thang=='này':
needed_thang = current_date.month
needed_nam = current_date.year
output = datetime.date(
needed_nam,
needed_thang,
1
)
elif thang=='sau':
needed_thang = 1 if current_date.month==12 else current_date.month+1
needed_nam = current_date.year+1 if current_date.month==12 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
1
)
else:
print('ngày đầu')
output = current_date
# cuối
elif ngay=='cuối':
if thang=='trước':
needed_thang = 12 if current_date.month==1 else current_date.month-1
needed_nam = current_date.year-1 if current_date.month==1 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
elif thang=='này':
needed_thang = current_date.month
needed_nam = current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
elif thang=='sau':
needed_thang = 1 if current_date.month==12 else current_date.month+1
needed_nam = current_date.year+1 if current_date.month==12 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
else:
print('ngày cuối')
output = current_date
# xxx
elif ngay.isdigit():
ngay = int(ngay)
if thang.isdigit():
thang = int(thang)
if nam.isdigit():
nam = int(nam)
try:
output = datetime.date(nam, thang, ngay)
except ValueError:
print("ngày xxx tháng yyy nam xxx")
output = current_date
else:
try:
output = datetime.date(current_date.year, thang, ngay)
except ValueError:
print("ngày xxx tháng yyy nam xxx")
output = current_date
else:
try:
output = datetime.date(current_date.year, current_date.month, ngay)
except ValueError:
print('ngày xxx')
output = current_date
elif ngay=='khác':
# thứ hai tuần sau
# thứ hai tuần này
# thứ hai tuần trước
# thứ hai tuần gần nhất
# thứ hai
if thu != "khác":
if tuan=='khác' or tuan=='gần nhất':
current_thu = current_date.weekday()+2
input_thu = 8 if thu=='chủ nhật' else int(thu)
if input_thu < current_thu:
daydelta = current_thu - input_thu
output = current_date - datetime.timedelta(days=daydelta)
elif input_thu == current_thu:
output = current_date - datetime.timedelta(days=7)
else:
daydelta = input_thu - current_thu
output = current_date - datetime.timedelta(days=7-daydelta)
elif tuan=='này':
current_thu = current_date.weekday()+2
input_thu = 8 if thu=='chủ nhật' else int(thu)
if input_thu < current_thu:
daydelta = current_thu - input_thu
output = current_date - datetime.timedelta(days=daydelta)
elif input_thu == current_thu:
output = current_date
else:
daydelta = input_thu - current_thu
output = current_date + datetime.timedelta(days=daydelta)
elif tuan=='trước':
current_thu = current_date.weekday()+2
input_thu = 8 if thu=='chủ nhật' else int(thu)
if input_thu < current_thu:
daydelta = current_thu - input_thu + 7
output = current_date - datetime.timedelta(days=daydelta)
elif input_thu == current_thu:
output = current_date - datetime.timedelta(days=7)
else:
daydelta = input_thu - current_thu
output = current_date - datetime.timedelta(days=7-daydelta)
elif tuan=='sau':
current_thu = current_date.weekday()+2
input_thu = 8 if thu=='chủ nhật' else int(thu)
if input_thu < current_thu:
daydelta = 7 - (current_thu - input_thu)
output = current_date + datetime.timedelta(days=daydelta)
elif input_thu == current_thu:
output = current_date + datetime.timedelta(days=7)
else:
daydelta = input_thu - current_thu
output = current_date + datetime.timedelta(days=7+daydelta)
elif thu=='khác':
current_thu = current_date.weekday()
if tuan=='trước' or tuan=='gần nhất': # ngày cuối tuần
daydelta = current_thu+1
output = current_date - datetime.timedelta(days=daydelta)
elif tuan=='này':
daydelta = 6 - current_thu
if daydelta > 0:
output = current_date + datetime.timedelta(days=daydelta)
else:
output = current_date
elif tuan=='sau':
daydelta = 13 - current_thu
output = current_date + datetime.timedelta(days=daydelta)
else:
print('ngày khác thứ khác tuần khác')
output = current_date
else: # return default for ngay
output = current_date
print('Error chu ky thoi gian: ngay')
elif chu_ky_thoi_gian=='tháng': # ngày cuối tháng
if thu != 'khác' or ngay != 'khác' or tuan != 'khác':
print('Invalid')
needed_thang = 12 if current_date.month==1 else current_date.month-1
needed_nam = current_date.year-1 if current_date.month==1 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
elif thang=='trước':
needed_thang = 12 if current_date.month==1 else current_date.month-1
needed_nam = current_date.year-1 if current_date.month==1 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
elif thang=='này':
needed_thang = current_date.month
needed_nam = current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
elif thang=='sau':
needed_thang = 1 if current_date.month==12 else current_date.month+1
needed_nam = current_date.year+1 if current_date.month==12 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
elif thang.isdigit():
thang = int(thang)
if nam.isdigit():
nam = int(nam)
output = datetime.date(
int(nam),
int(thang),
calendar.monthrange(int(nam), int(thang))[1]
)
else:
if thang > current_date.month:
output = datetime.date(
current_date.year-1,
thang,
calendar.monthrange(current_date.year-1, thang)[1]
)
else:
output = datetime.date(
current_date.year,
thang,
calendar.monthrange(current_date.year, thang)[1]
)
elif thang=='khác':
needed_thang = 12 if current_date.month==1 else current_date.month-1
needed_nam = current_date.year-1 if current_date.month==1 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
else: # ngay cuoi thang truoc
needed_thang = 12 if current_date.month==1 else current_date.month-1
needed_nam = current_date.year-1 if current_date.month==1 else current_date.year
output = datetime.date(
needed_nam,
needed_thang,
calendar.monthrange(needed_nam, needed_thang)[1]
)
print('Error chu ky thoi gian: thang')
elif chu_ky_thoi_gian=='quý':
if quy in ['1', '2', '3', '4', 'I', 'II', 'III', 'IV']:
output = "Valid"
output = current_date
# print('Chu ky thoi gian: quy ' + quy)
else:
output = "Invalid"
output = current_date
# print('Error chu ky thoi gian: quy')
elif chu_ky_thoi_gian=='năm':
if nam.isdigit():
output = "Valid"
output = current_date
# print("Chu ky thoi gian: nam " + nam)
else:
output = "Invalid"
output = current_date
# print('Error chu ky thoi gian: năm')
elif chu_ky_thoi_gian=='khác':
output = "Valid"
output = current_date
else:
output = current_date
return output
fields = ['device', 'model_name', 'max_source_length', 'max_target_length', 'beam_size']
params = namedtuple('params', field_names=fields)
args = params(
device="cuda" if torch.cuda.is_available() else "cpu",
model_name='facebook/mbart-large-50-many-to-many-mmt',
max_source_length=256,
max_target_length=256,
beam_size=1
)
model = AutoModelForSeq2SeqLM.from_pretrained(
"Huy1432884/db_retrieval",
use_auth_token="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"
)
model.to(args.device)
model.eval()
if "mbart" in args.model_name.lower():
tokenizer = AutoTokenizer.from_pretrained(
args.model_name, src_lang="vi_VN", tgt_lang="vi_VN"
)
else:
tokenizer = AutoTokenizer.from_pretrained(args.model_name)
with open("output2url.json") as f:
output2url = json.loads(list(f)[0])
def text_analysis(text):
text = text.lower()
inputs = tokenizer(
[text],
text_target=None,
padding="longest",
max_length=args.max_source_length,
truncation=True,
return_tensors="pt",
)
for k, v in inputs.items():
inputs[k] = v.to(args.device)
if "mbart" in args.model_name:
inputs["forced_bos_token_id"] = tokenizer.lang_code_to_id["vi_VN"]
outputs = model.generate(
**inputs,
max_length=args.max_target_length,
num_beams=args.beam_size,
early_stopping=True,
)
output_sentences = tokenizer.batch_decode(
outputs, skip_special_tokens=True, clean_up_tokenization_spaces=True
)
out = json.loads("{" + output_sentences[0] + "}")
if out['LOẠI BIỂU ĐỒ']=='dashboard':
if out['CHU KỲ THỜI GIAN']!='tháng':
chu_ky_in = 'ngày'
else:
chu_ky_in = 'tháng'
out['CHU KỲ THỜI GIAN']='ngày' if out['CHU KỲ THỜI GIAN'] not in ['ngày', 'tháng'] else out['CHU KỲ THỜI GIAN']
check_dashboard = out['ĐƠN VỊ']+"_"+chu_ky_in
out['DB URL'] = output2url[check_dashboard]
out['DATE'] = time2date(out)
out['FINAL URL'] = "https://vsds.viettel.vn"+ out['DB URL'] + "?toDate=" + str(out['DATE']).replace("-", "").replace("-", "")
show = {i: out[i] for i in ['LOẠI BIỂU ĐỒ', 'ĐƠN VỊ', 'CHU KỲ THỜI GIAN', 'DB URL', 'DATE', 'FINAL URL']}
elif out['LOẠI BIỂU ĐỒ']=='biểu đồ':
show = {i: out[i] for i in ['LOẠI BIỂU ĐỒ', 'ĐƠN VỊ', 'CHU KỲ THỜI GIAN']}
else:
show = out
return show
demo = gr.Interface(
text_analysis,
gr.Textbox(placeholder="Enter sentence here..."),
["json"],
examples=[
["Mở dashboard vtc ngày hôm qua"],
["Mở biểu đồ cột td ngày này"],
["Hãy mở biểu đồ cơ cấu của tập đoàn trong ngày hôm nay"],
["Tháng này, vtc cần tôi mở biểu đồ rank để cập nhật danh sách khách hàng"],
["Các thông số NAT ngày hôm qua đã được ghi nhận trên đát bọt"],
["Hôm nay hãy mở của Viettel tt không gian mạng Viettel vtcc để kiểm tra"],
["Mở DB CTM ngày gốc"],
["Tôi đã sử dụng Dashboard để truy cập thông tin qti vào ngày hôm nay"],
["Trưởng phòng đã ra lệnh mở biểu đồ kết hợp đường và cột cho toàn tập đoàn vào hôm nay"]
],
)
demo.launch()