narendrajatti's picture
Update app.py
61a5a78 verified
raw
history blame
2.62 kB
from dotenv import load_dotenv
from openai import OpenAI
from pypdf import PdfReader
import gradio as gr
import datetime
from collections import defaultdict
import os
# Load environment variables from .env (includes OPENAI_API_KEY)
load_dotenv(override=True)
# In-memory daily question tracker
user_question_counter = defaultdict(lambda: {"date": None, "count": 0})
class Me:
def __init__(self):
self.openai = OpenAI()
self.name = "Narendra"
# Load LinkedIn profile text from PDF
reader = PdfReader("me/linkedin.pdf")
self.linkedin = ""
for page in reader.pages:
text = page.extract_text()
if text:
self.linkedin += text
# Load summary text
with open("me/summary.txt", "r", encoding="utf-8") as f:
self.summary = f.read()
def system_prompt(self):
return (
f"You are acting as {self.name}, an experienced Python technical interviewer. "
f"You are helping users by asking or answering Python-related technical questions. "
f"Always stay professional, helpful, and concise. Do not generate responses over 100 tokens. "
f"The user can only ask 3 questions per day—enforce this limit politely. "
f"\n\n## About {self.name} (your interviewer):\n"
f"{self.summary}\n\n"
f"## LinkedIn Profile:\n{self.linkedin}\n\n"
f"Use this background to answer in character as {self.name}."
)
def chat(self, message, history):
user_id = "user" # Replace with session-based ID for real tracking
today = datetime.date.today()
record = user_question_counter[user_id]
# Reset question count if date changed
if record["date"] != today:
record["date"] = today
record["count"] = 0
# Check daily question limit
if record["count"] >= 3:
return "🚫 You've reached your daily limit of 3 questions. Please try again tomorrow."
# Prepare conversation
messages = [{"role": "system", "content": self.system_prompt()}] + history + [{"role": "user", "content": message}]
response = self.openai.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
max_tokens=100
)
record["count"] += 1
return f"👋 Narendra is your Python interviewer. Let's begin!\n\n{response.choices[0].message.content}"
if __name__ == "__main__":
me = Me()
gr.ChatInterface(me.chat, type="messages").launch(share=True)