File size: 2,073 Bytes
f909373
 
 
e8bb3ec
f909373
8fdd6c6
f909373
e8bb3ec
 
f909373
 
 
 
 
 
 
e8bb3ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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 = '<div align="center"> Selecciona entre los distintos menús desplegables para generar un Prompt creativo, los que dejes en blanco serán elegidos aleatoriamente.</div>'
        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()