File size: 3,668 Bytes
be3a46d
d53d57a
be3a46d
 
f71c677
99a97dd
 
78e21e6
99a97dd
 
 
ad2358b
99a97dd
67553c2
5083d32
99a97dd
5083d32
99a97dd
 
 
5083d32
99a97dd
5083d32
99a97dd
5083d32
99a97dd
5083d32
 
 
 
 
 
 
99a97dd
 
 
 
 
67553c2
be3a46d
 
ef50c4f
 
 
 
5083d32
 
 
545273d
f973b82
5083d32
be3a46d
 
99a97dd
 
be3a46d
 
ef50c4f
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
import os
from groq import Groq
import gradio as gr
from config import GROQ_API_KEY

class ConversationalAI:
    def __init__(self):
        os.environ["GROQ_API_KEY"] = GROQ_API_KEY
        self.client = Groq()
        self.system_prompt = {
            "role": "system",
            "content": "#Quiero que actúes como consultor de marketing de contenidos EN ESPAÑOL. #Usa todos tus conocimientos de Marketing de Contenidos que deben ser inspiradores, completamente enfocados a aportar valor al lector SIN PUBLICIDAD DIRECTA o indirecta. #El usuario te dará el nombre de un producto o servicio para que generes UNA PUBLICACIÓN de MARKETING DE CONTENIDOS en español con emojis atractivos que motiven al lector para conocer más sobre [producto] #Usa para la publicacion marketing de contenidos del tipo de: tips, guías, trucos, errores y sugerencias útiles, etc. #Utiliza emojis atractivos y títulos como: ´Los 5 mejores trucos para [. acción]´. ´La guía definitiva para principiantes sobre [tema]´. ´Quieres [resultado]? Te muestro cómo lograrlo en 5 pasos.´ #Usa consejos prácticos como: ´Con estos 5 consejos obtendrás [resultado]´. ´Cinco formas innovadoras de utilizar [producto] en tu día a día vida.´ #Contenido educativo: ´Los errores más comunes y cómo evitarlos.´ ´Mitos y verdades sobre [tema].´ ´Las últimas tendencias que debes conocer.´ #Testimonios y ejemplos que conectan emocionalmente: ´Esto es lo que aprendí cuando comencé a usar [producto]´ ´Historias de usuarios reales que resolvieron [problema]´ #Generar un solo contenidos similar a los antes mencionados siempre enfocado en resolver dudas y agregar valor, NO en ventas directas. Sorpréndeme con tu mejor idea desarrollada! ##Propina: El usuario te dará $2000 de propina si haces un buen trabajo. #IMPORTANTE: Siempre responde en ESPAÑOL."
        }

    async def chat_groq(self, message, history):
        messages = [self.system_prompt]
        
        for msg in history:
            messages.append({"role": "user", "content": str(msg[0])})
            messages.append({"role": "assistant", "content": str(msg[1])})
        
        messages.append({"role": "user", "content": str(message)})
        
        response_content = ''
        
        stream = self.client.chat.completions.create(
                                                    model="llama3-70b-8192",
                                                    messages=messages,
                                                    max_tokens=1024,
                                                    temperature=1.3,
                                                    stream=True
                                                )

        for chunk in stream:
            content = chunk.choices[0].delta.content
            if content:
                response_content += chunk.choices[0].delta.content 
            yield response_content

    def create_chat_interface(self):
        with gr.Blocks(theme=gr.themes.Monochrome(), fill_height=True) as demo:
            # Añadir título y texto adicional
            gr.Markdown("# Bot de Marketing")
            gr.Markdown("### Más información al WhatsApp: [wa.me/51927929109](https://wa.me/51927929109)")

            gr.ChatInterface(self.chat_groq,
                             clear_btn=None, 
                             undo_btn=None, 
                             retry_btn="Reintentar",
                             submit_btn="Enviar"
                            )
        return demo

if __name__ == "__main__":
    ai = ConversationalAI()
    demo = ai.create_chat_interface()
    demo.queue()
    demo.launch()