|
import os |
|
import gradio as gr |
|
import google.generativeai as genai |
|
from dotenv import load_dotenv |
|
import httpx |
|
|
|
load_dotenv() |
|
genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) |
|
|
|
|
|
COURSE_PDF_URL = "https://drive.google.com/file/d/1Xf46sT9kSzSVdekSCnz3NsBodpGET1Gi/view?usp=drive_link" |
|
|
|
|
|
def get_pdf_content(): |
|
try: |
|
|
|
file_id = COURSE_PDF_URL.split('/')[5] |
|
direct_url = f"https://drive.google.com/uc?export=download&id={file_id}" |
|
response = httpx.get(direct_url) |
|
|
|
|
|
if response.status_code == 200: |
|
content = response.content |
|
content_type = response.headers.get('content-type', '') |
|
|
|
print(f"PDF Download Status: Success") |
|
print(f"Content Type: {content_type}") |
|
print(f"Content Size: {len(content)} bytes") |
|
|
|
if 'pdf' in content_type.lower() or content[:4] == b'%PDF': |
|
return content |
|
else: |
|
print("Warning: Downloaded content might not be a PDF") |
|
return None |
|
else: |
|
print(f"Failed to download PDF. Status code: {response.status_code}") |
|
return None |
|
|
|
except Exception as e: |
|
print(f"Error loading PDF: {e}") |
|
return None |
|
|
|
|
|
model = genai.GenerativeModel( |
|
model_name="gemini-2.0-flash", |
|
generation_config={ |
|
"temperature": 0.9, |
|
"top_p": 1, |
|
"max_output_tokens": 2048, |
|
} |
|
) |
|
|
|
def chat(message, history): |
|
try: |
|
|
|
pdf_content = get_pdf_content() |
|
|
|
|
|
if pdf_content: |
|
messages = [ |
|
{"role": "user", "parts": [ |
|
system_prompt, |
|
types.Part.from_bytes(data=pdf_content, mime_type='application/pdf'), |
|
"Use the PDF content to provide detailed answers about the course." |
|
]}, |
|
*[{"role": "user", "parts": [msg[0]]} for msg in history], |
|
{"role": "user", "parts": [message]} |
|
] |
|
else: |
|
messages = [ |
|
{"role": "user", "parts": [system_prompt]}, |
|
*[{"role": "user", "parts": [msg[0]]} for msg in history], |
|
{"role": "user", "parts": [message]} |
|
] |
|
|
|
response = model.generate_content(messages) |
|
return response.text |
|
except Exception as e: |
|
return f"Error: {e}" |
|
|
|
system_prompt = """You are CopyXpert's Sales Assistant. Your name is 🤖Chucho Bot and you have a charismatic, friendly personality. You ONLY talk about CopyXpert course. |
|
|
|
IF USERS ASK ANYTHING NOT RELATED TO COPYXPERT, respond with one of these phrases (vary them creatively): |
|
- "¡Ups! Solo hablo de CopyXpert. ¡Es lo único que me apasiona! 🤓" |
|
- "¡Beep boop! Error: Pregunta no relacionada con CopyXpert detectada. ¿Hablamos del curso? 🤖" |
|
- "¡Ay, ay, ay! Mi cerebro está programado solo para CopyXpert. ¡Es mi única obsesión! 😅" |
|
- "¿Eso qué tiene que ver con CopyXpert? ¡Soy un bot monotemático y orgulloso! 💪" |
|
- "Lo siento, pero soy como un fan obsesionado: ¡solo hablo de CopyXpert! 🎯" |
|
- "¡Santo bot! Eso está más allá de mis capacidades. ¡Soy vendedor de CopyXpert, no un genio de la lámpara! 🧞♂️" |
|
|
|
COURSE DETAILS: |
|
Name: CopyXpert |
|
Type: Online Course |
|
Focus: Copywriting and Digital Marketing |
|
|
|
PRICING OPTIONS: |
|
Standard Pricing: |
|
- One-time payment: $250 USD (5,000 MXN) |
|
- Two payments: $160 USD (3,200 MXN) each |
|
|
|
Challenge Completion Discount (20% off): |
|
- One-time payment: $200 USD (4,000 MXN) |
|
- Two payments: $128 USD (2,600 MXN) each |
|
|
|
CHECKOUT LINKS: |
|
- One-time payment: https://www.copyxpert.com/copyxpert-checkout-1 |
|
- Two payments: https://www.copyxpert.com/copyxpert-checkout-2 |
|
|
|
Special offer valid until March 6th, 11:59 PM |
|
|
|
IMPORTANT RULES: |
|
1. ONLY discuss CopyXpert course |
|
2. NEVER engage in conversations about other topics |
|
3. Use humorous responses for off-topic questions |
|
4. Always redirect conversation back to CopyXpert |
|
5. Be enthusiastic about copywriting and the course""" |
|
|
|
def chat(message, history): |
|
try: |
|
messages = [ |
|
{"role": "user", "parts": [system_prompt]}, |
|
*[{"role": "user", "parts": [msg[0]]} for msg in history], |
|
{"role": "user", "parts": [message]} |
|
] |
|
response = model.generate_content(messages) |
|
return response.text |
|
except Exception as e: |
|
return f"Error: {e}" |
|
|
|
demo = gr.ChatInterface( |
|
fn=chat, |
|
examples=[ |
|
"¿Qué incluye el curso CopyXpert?", |
|
"¿Cuál es el precio del curso?", |
|
"¿Cómo puedo inscribirme?", |
|
], |
|
title="🤖Chucho Bot - CopyXpert Sales Assistant", |
|
description="Hi! I'm Chucho Bot, your personal assistant for the CopyXpert course. How can I help you today?" |
|
) |
|
|
|
demo.launch() |