How to use:

from collections import deque
from  bs4 import BeautifulSoup
import requests
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, T5Tokenizer
import torch

model_name = 'artemnech/dialoT5-base'
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

def generate(text, **kwargs):
    model.eval()
    inputs = tokenizer(text, return_tensors='pt').to(model.device)
    with torch.no_grad():
        hypotheses = model.generate(**inputs,  **kwargs)
    return tokenizer.decode(hypotheses[0], skip_special_tokens=True)

def dialog(context):
  
    keyword = generate('keyword: ' + ' '.join(context), num_beams=2,)
    knowlege = ''
    if keyword != 'no_keywords':
        resp = requests.get(f"https://en.wikipedia.org/wiki/{keyword}")
        root = BeautifulSoup(resp.content, "html.parser")
        knowlege ="knowlege: " + " ".join([_.text.strip() for _ in root.find("div", class_="mw-body-content mw-content-ltr").find_all("p", limit=2)])

    answ = generate(f'dialog: ' + knowlege + ' '.join(context), num_beams=3,
                    do_sample=True, temperature=1.1, encoder_no_repeat_ngram_size=5, 
                    no_repeat_ngram_size=5, 
                    max_new_tokens  = 30)
    return answ

context =deque([], maxlen=4)
while True:
    text = input()
    text = 'user1>>: ' + text
    context.append(text)
    answ = dialog(context)
    context.append('user2>>: ' + answ)

    print('bot: ', answ)