from contextlib import nullcontext import csv import os.path import random import gradio as gr from gradio.components import Textbox, Dropdown from gradio import Interface, TabbedInterface def parametroAleatorio(lista): res = random.choice(list(lista)) while res == '': res = random.choice(list(lista)) return res def make_concat_prompt(csv_reader, valoresUnicos): def concat_prompt(*args): campos = {campo: parametroAleatorio(valoresUnicos[campo]) for campo in csv_reader.fieldnames} campos.update({campo: valor for campo, valor in zip(csv_reader.fieldnames, args) if valor}) prompt = ', '.join([campos[campo] for campo in csv_reader.fieldnames]) return prompt return concat_prompt csv_files = [f for f in os.listdir() if os.path.isfile(f) and f.endswith('.csv')] csv_files.sort() # Ordenar alfabéticamente interfaces = [] tab_labels = [] for file_name in csv_files: with open(file_name, 'r') as csv_file: csv_reader = csv.DictReader(csv_file) valoresUnicos = {} for campo in csv_reader.fieldnames: valoresUnicos[campo] = set() for row in csv_reader: for campo, valor in row.items(): valoresUnicos[campo].add(valor) inputs = [Dropdown(list(valoresUnicos[campo]), label=campo.capitalize()) for campo in valoresUnicos.keys()] output_text = Textbox(label='Prompt') tab_label = os.path.splitext(file_name)[0].title() tab_labels.append(tab_label) title = f"Generador Prompts Tecnolitas" description = '
Selecciona entre los distintos menús desplegables para generar un Prompt creativo, los que dejes en blanco serán elegidos aleatoriamente.
' fn = make_concat_prompt(csv_reader, valoresUnicos) interface = Interface(fn=fn, inputs=inputs, outputs=output_text, title=title, description=description) interfaces.append(interface) tabbed_interface = TabbedInterface(interfaces, tab_labels) tabbed_interface.launch()