2022-04-11 13:09:01 +02:00

82 lines
2.2 KiB
Python

from aitextgen import aitextgen
import utterance.utils
import gensim, regex, string, time
UTTERANCE_MEMORY_LEN = 15
UTTERANCE_MEMORY_MIN_DIST = 0.85
class Voice:
def __init__(self, name: str, model: str, tokenizer: str, temp: int, length: int):
self.name = name
self.temp = temp
self.length = length
self.v = aitextgen(model_folder=model, tokenizer_file=tokenizer)
self.utterances = []
def utter_n(self, n: int, temp: float = None, length: int = None):
t = self.temp if temp == None else temp
l = self.length if length == None else length
return self.v.generate(n=n, max_length=l, temperature=t, seed=int(time.time()), return_as_list=True)
def utter_one(self, temp: float = None, length: int = None) -> str:
t = self.temp if temp == None else temp
l = self.length if length == None else length
return self.utter_n(n=1, temp=temp, length=length)[0]
def prompt(self, pinput: str, temp: float = None, length: int = None) -> str:
t = self.temp if temp == None else temp
l = self.length if length == None else length
return self.v.generate(prompt=pinput, n=1, max_length=l, temperature=t, seed=int(time.time()), return_as_list=True)[0]
def select(self, utterance: str) -> bool:
# fuction making sure to not say the same thing
toks = set(gensim.utils.tokenize(utterance))
i = 0
for u in self.utterances:
d = gensim.matutils.jaccard_distance(toks, u)
print(f"{i} - d: {d}")
if d < UTTERANCE_MEMORY_MIN_DIST:
return False
self.utterances.append(toks)
if len(self.utterances) > UTTERANCE_MEMORY_LEN:
self.utterances.pop(0)
return True
def remember(self, utterance: str):
toks = set(gensim.utils.tokenize(utterance))
self.utterances.append(toks)
def set_channel(self, root: str, endpoint: str):
self.channel = root + endpoint
def channel(self):
return self.channel
def set_calculate(self, root: str, endpoint: str):
self.calculate = root + endpoint
def calculate(self):
return self.calculate
def set_temperature(self, root: str, endpoint: str):
self.temperature = root + endpoint
def calculate(self):
return self.temperature
def fragments(self, utt: str):
self.utterance = utt
self.utterance_fragments = utterance.utils.fragments(utt)
return self.utterance_fragments