import os import random import gradio as gr import sentencepiece as spm import numpy as np import pandas as pd import tensorflow as tf from valx import detect_profanity, detect_hate_speech def custom_pad_sequences(sequences, maxlen, padding='pre', value=0): """ Pads sequences to the same length. :param sequences: List of lists, where each element is a sequence. :param maxlen: Maximum length of all sequences. :param padding: 'pre' or 'post', pad either before or after each sequence. :param value: Float, padding value. :return: Numpy array with dimensions (number_of_sequences, maxlen) """ padded_sequences = np.full((len(sequences), maxlen), value) for i, seq in enumerate(sequences): if padding == 'pre': if len(seq) <= maxlen: padded_sequences[i, -len(seq):] = seq else: padded_sequences[i, :] = seq[-maxlen:] elif padding == 'post': if len(seq) <= maxlen: padded_sequences[i, :len(seq)] = seq else: padded_sequences[i, :] = seq[:maxlen] return padded_sequences def generate_random_name(interpreter, vocab_size, sp, max_length=10, temperature=0.5, seed_text="", max_seq_len=12): # Get input and output tensors input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() decoded_name = '' if seed_text: generated_name = seed_text else: random_index = np.random.randint(1, vocab_size) random_token = sp.id_to_piece(random_index) generated_name = random_token for _ in range(max_length - 1): token_list = sp.encode_as_ids(generated_name) # Handle empty token list case if len(token_list) == 0: continue # Skip the current iteration if the token list is empty # Pad to the correct length expected by the model token_list = custom_pad_sequences([token_list], maxlen=max_seq_len, padding='pre') # Convert token_list to FLOAT32 before setting the tensor token_list = token_list.astype(np.float32) # Set the input tensor interpreter.set_tensor(input_details[0]['index'], token_list) # Run inference interpreter.invoke() # Get the output tensor predicted = interpreter.get_tensor(output_details[0]['index'])[0] # Apply temperature to predictions predicted = np.log(predicted + 1e-8) / temperature predicted = np.exp(predicted) / np.sum(np.exp(predicted)) # Sample from the distribution next_index = np.random.choice(range(vocab_size), p=predicted) next_index = int(next_index) next_token = sp.id_to_piece(next_index) generated_name = sp.decode_pieces(sp.encode_as_pieces(generated_name) + [next_token]) # Decode the generated subword tokens into a string decoded_name = sp.decode_pieces(sp.encode_as_pieces(generated_name)) # Stop if end token is predicted (optional) if next_token == '' or len(decoded_name) > max_length: break decoded_name = decoded_name.replace("▁", " ") decoded_name = decoded_name.replace("", "") decoded_name = decoded_name.replace("", "") decoded_name = decoded_name.replace("", "") generated_name = decoded_name.strip() generated_name = generated_name.capitalize() # Split the name and check the last part parts = generated_name.split() if parts and len(parts[-1]) < 3: generated_name = " ".join(parts[:-1]) return generated_name.strip() def generateNames(type, amount, max_length=30, temperature=0.5, seed_text=""): hate_speech = detect_hate_speech(seed_text) profanity = detect_profanity([seed_text], language='All') output = '' if len(profanity) > 0: gr.Warning("Profanity detected in the seed text, using an empty seed text.") seed_text = '' else: if hate_speech == ['Hate Speech']: gr.Warning('Hate speech detected in the seed text, using an empty seed text.') seed_text = '' elif hate_speech == ['Offensive Speech']: gr.Warning('Offensive speech detected in the seed text, using an empty seed text.') seed_text = '' # elif hate_speech == ['No Hate and Offensive Speech']: if type == "Terraria": max_seq_len = 12 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/terraria_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_terraria_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Skyrim": max_seq_len = 13 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/skyrim_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_skyrim_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Witcher": max_seq_len = 20 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/witcher_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_witcher_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "WOW": max_seq_len = 16 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/wow_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_wow_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Minecraft": max_seq_len = 17 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/minecraft_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_minecraft_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Dark Souls": max_seq_len = 13 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/dark_souls_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_dark_souls_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Final Fantasy": max_seq_len = 14 sp = spm.SentencePieceProcessor() sp.load("models/final_fantasy_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_final_fantasy_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Elden Ring": max_seq_len = 18 sp = spm.SentencePieceProcessor() sp.load("models/elden_ring_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_elden_ring_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Zelda": max_seq_len = 15 sp = spm.SentencePieceProcessor() sp.load("models/zelda_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_zelda_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Dragon Age": max_seq_len = 16 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/dragon_age_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_dragon_age_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Fallout": max_seq_len = 13 sp = spm.SentencePieceProcessor() sp.load("models/fallout_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_fallout_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Darkest Dungeon": max_seq_len = 14 sp = spm.SentencePieceProcessor() sp.load("models/darkest_dungeon_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_darkest_dungeon_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Monster Hunter": max_seq_len = 15 sp = spm.SentencePieceProcessor() sp.load("models/monster_hunter_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_monster_hunter_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Bloodborne": max_seq_len = 12 sp = spm.SentencePieceProcessor() sp.load("models/bloodborne_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_bloodborne_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Hollow Knight": max_seq_len = 15 sp = spm.SentencePieceProcessor() sp.load("models/hollow_knight_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_hollow_knight_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Assassin's Creed": max_seq_len = 15 sp = spm.SentencePieceProcessor() sp.load("models/assassins_creed_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_assassins_creed_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Baldur's Gate": max_seq_len = 14 sp = spm.SentencePieceProcessor() sp.load("models/baldurs_gate_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_baldurs_gate_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Cyberpunk": max_seq_len = 11 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/cyberpunk_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_cyberpunk_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Mass Effect": max_seq_len = 13 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/mass_effect_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_mass_effect_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "God Of War": max_seq_len = 12 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/god_of_war_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_god_of_war_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Last Of Us": max_seq_len = 5 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/last_of_us_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_last_of_us_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Factorio": max_seq_len = 8 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/factorio_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_factorio_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "The Sims": max_seq_len = 4 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/the_sims_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_the_sims_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Fortnite": max_seq_len = 9 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/fortnite_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_fortnite_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "League Of Legends": max_seq_len = 12 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/league_of_legends_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_league_of_legends_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Among Us": max_seq_len = 13 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/among_us_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_among_us_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Warframe": max_seq_len = 13 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/warframe_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_warframe_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Call of Duty": max_seq_len = 11 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/call_of_duty_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_call_of_duty_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Forza Horizon": max_seq_len = 10 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/forza_horizon_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_forza_horizon_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Halo": max_seq_len = 14 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/halo_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_halo_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Overwatch": max_seq_len = 9 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/overwatch_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_overwatch_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Subnautica": max_seq_len = 14 # For skyrim = 13, for terraria = 12 sp = spm.SentencePieceProcessor() sp.load("models/subnautica_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_subnautica_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) elif type == "Fantasy": max_seq_len = 16 # For fantasy, 16 sp = spm.SentencePieceProcessor() sp.load("models/fantasy_names.model") amount = int(amount) max_length = int(max_length) names = [] # Define necessary variables vocab_size = sp.GetPieceSize() # Load TFLite model interpreter = tf.lite.Interpreter(model_path="models/dungen_fantasy_model.tflite") interpreter.allocate_tensors() # Use the function to generate a name for _ in range(amount): generated_name = generate_random_name(interpreter, vocab_size, sp, seed_text=seed_text, max_length=max_length, temperature=temperature, max_seq_len=max_seq_len) stripped = generated_name.strip() hate_speech = detect_hate_speech(stripped) profanity = detect_profanity([stripped], language='All') name = '' if len(profanity) > 0: name = "Profanity Detected" else: if hate_speech == ['Hate Speech']: name = 'Hate Speech Detected' elif hate_speech == ['Offensive Speech']: name = 'Offensive Speech Detected' elif hate_speech == ['No Hate and Offensive Speech']: name = stripped names.append(name) return pd.DataFrame(names, columns=['Names']) demo = gr.Interface( fn=generateNames, inputs=[gr.Radio(choices=["Terraria", "Skyrim", "Witcher", "WOW", "Minecraft", "Dark Souls", "Final Fantasy", "Elden Ring", "Zelda", "Dragon Age", "Fallout", "Darkest Dungeon", "Monster Hunter", "Bloodborne", "Hollow Knight", "Assassin's Creed", "Baldur's Gate", "Cyberpunk", "Mass Effect", "God Of War", "Last Of Us", "Factorio", "The Sims", "Fortnite", "League Of Legends", "Among Us", "Warframe", "Call of Duty", "Forza Horizon", "Halo", "Overwatch", "Subnautica", "Fantasy"], label="Choose a model for your request", value="Terraria"), gr.Slider(1,100, step=1, label='Amount of Names', info='How many names to generate, must be greater than 0'), gr.Slider(10, 60, value=30, step=1, label='Max Length', info='Max length of the generated word'), gr.Slider(0.1, 1, value=0.5, label='Temperature', info='Controls randomness of generation, higher values = more creative, lower values = more probalistic'), gr.Textbox('', label='Seed text (optional)', info='The starting text to begin with', max_lines=1, )], outputs=[gr.Dataframe(row_count = (2, "dynamic"), col_count=(1, "fixed"), label="Generated Names", headers=["Names"])], title='Dungen - Name Generator', description='A fun game-inspired name generator. For an example of how to create, and train your model, like this one, head over to: https://github.com/Infinitode/OPEN-ARC/tree/main/Project-5-TWNG. There you will find our base model, the dataset we used, and implementation code in the form of a Jupyter Notebook (exported from Kaggle).' ) demo.launch()