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")) # PDF URL for course information COURSE_PDF_URL = "https://drive.google.com/file/d/1Xf46sT9kSzSVdekSCnz3NsBodpGET1Gi/view?usp=drive_link" # Load PDF content once at startup def get_pdf_content(): try: # Convert Google Drive link to direct download link 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) # Add verification 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 # Configure model with system prompt and PDF content 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: # Get PDF content pdf_content = get_pdf_content() # Prepare the message with PDF context 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()