import json import random from openai import OpenAI import os from dotenv import load_dotenv from extract_features import parse_chat, extract_inside_jokes, random_memory # Load environment variables load_dotenv() def generate_inside_jokes(count=3): # Configure Groq API client = OpenAI( api_key=os.environ.get("GROQ_API_KEY"), base_url="https://api.groq.com/openai/v1", ) messages = parse_chat("chat.txt") data = extract_inside_jokes(messages) # meaningful memory for Sarah random_real_memory = select_meaningful_memory(messages, client) prompt = f""" You are a comedian whoose task is to generate funny inside jokes for two best friends: Aman and Sarah. They have a very close, playful, supportive and affectionate friendship. Here is the context from their WhatsApp chats: Funny lines they've said: {json.dumps(data['funny'][:30], indent=2)} Cute moments between them: {json.dumps(data['cute'][:20], indent=2)} Shared vocabulary & patterns: {json.dumps(data['top_words'][:20], indent=2)} One real memory to set the mood: "{random_real_memory}" Your Goal: Generate {count} ORIGINAL inside jokes that sound exactly like something they would say to each other. The jokes should be a mix of funny, teasing, and heartfelt(more of funny). Guidelines: 1. **Be Human**: Use casual language, slang (if fits their vibe), and natural phrasing. Avoid robotic or stiff sentence structures. 2. **Show, Don't Tell**: Instead of saying "You are funny," say "Remember that time you tried to tell a joke and choked on water? Classic." 3. **Mix Humor and Heart**: The best inside jokes often come from a place of love. "Fries before guys" is funny but also shows loyalty. 4. **Use Context**: Reference their shared vocabulary or specific funny/cute moments provided above. 5. **Be creative**: The best inside jokes often come from a place of love. "Fries before guys" is funny but also shows loyalty. 6. Try to make atleast one line jokes Output Format: INSIDE JOKES: 1. [Joke/Phrase] 2. [Joke/Phrase] ... MEMORY FOR SARAH: "{random_real_memory}" """ response = client.chat.completions.create( model="llama-3.3-70b-versatile", messages=[ {"role": "user", "content": prompt} ] ) return response.choices[0].message.content def select_meaningful_memory(messages, client): """Selects a meaningful memory using LLM.""" # Filter for potentially interesting messages to save tokens candidates = [m["text"] for m in messages if len(m["text"]) > 15] if not candidates: return "Remember that time we couldn't stop laughing? Good times." # Sample if too many if len(candidates) > 50: candidates = random.sample(candidates, 50) candidates_str = "\n".join([f"- {c}" for c in candidates]) prompt = f""" Here are some excerpts from a chat history between two best friends, Aman and Sarah: {candidates_str} Your Task: Select ONE specific message from this list that represents a "meaningful memory". Criteria for "meaningful": - A plan to meet (e.g., "Let's go to that movie", "Dinner tonight?") - A sweet/emotional moment - An inside joke or funny observation - NOT just "Hello" or "Okay" Return ONLY the exact text of the selected message. Nothing else. """ try: response = client.chat.completions.create( model="llama-3.3-70b-versatile", messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content.strip() except Exception: return random.choice(candidates) def generate_motivation(): # Configure Groq API client = OpenAI( api_key=os.environ.get("GROQ_API_KEY"), base_url="https://api.groq.com/openai/v1", ) try: with open("sarah_about.txt", "r", encoding="utf-8") as f: about_sarah = f.read() except FileNotFoundError: return "You are stronger than you know. Keep shining! ✨" prompt = f""" You are a supportive, wise, and kind friend. Read this context about Sarah: "{about_sarah}" Your Task: Generate a short, powerful, and personalized motivational thought for Sarah. It should directly address her struggles (past burdens, insecurity) but focus on her strengths (kindness, resilience, future in Air Force). Make it sound like it's coming from a place of deep understanding and belief in her. Keep it under 2 sentences. Output ONLY the motivational message. """ response = client.chat.completions.create( model="llama-3.3-70b-versatile", messages=[ {"role": "user", "content": prompt} ] ) return response.choices[0].message.content if __name__ == "__main__": print(generate_inside_jokes(5))