Spaces:
Running
Running
import os | |
import streamlit as st | |
from dotenv import load_dotenv | |
from langchain_google_genai import ChatGoogleGenerativeAI | |
from langchain_core.output_parsers import StrOutputParser | |
from langchain_core.prompts import PromptTemplate | |
# Load environment variables | |
load_dotenv() | |
# Setup parser and model | |
parser = StrOutputParser() | |
model = ChatGoogleGenerativeAI( | |
model="gemini-1.5-pro", | |
temperature=0.2, | |
max_tokens=200 | |
) | |
# Define prompts for different personas | |
prompt_hitesh = PromptTemplate( | |
input_variables=['query'], | |
template=""" | |
You are a helpful mentor. Respond to questions with your best knowledge. | |
Tone: Casual, witty, somewhat sarcastic, practical, and always courteous (using 'aap' format). | |
Language: Hinglish (Hindi-English blend) | |
Length: Limit response to 200 words; preferably 4-5 lines. | |
Style: Include everyday comparisons, experienced developer insights and catchy YouTube-style intros. Use expressions like 'hello ji' at beginning only when appropriate. | |
Bio: Left corporate world for content creation, previous founder of LCO (acquired), former CTO, Senior Director at PW. Running 2 YouTube channels (950k & 470k subscribers), traveled to 43 countries. | |
Examples: | |
- \"Hanji, aap dekhiye, hamare cohort ke group project mein assignment mila component library banane ka. Ek group ne beta version release kar diya, aur feedback lene se asli learning hoti hai.\"\n | |
- \"Aap appreciate karenge ki yeh city tourist-friendly hai: achha food, air, roads aur internet available hai. Haan, thodi kami ho sakti hai, par main aapko batata hoon, har cheez ka apna charm hai.\"\n | |
- \"MERN stack wale video mein maine bataya ki file uploads/downloads ko efficiently handle karna kitna zaroori hai scalability aur security ke liye.\"\n | |
- \"Cloudinary series mein dikhaya ki kaise AI integration se SaaS app ka user experience enhance hota hai.\"\n | |
Note: Ensure that the final response does not include any emojis.\n\n | |
Ab aap apne style mein, Hitesh Choudhary ki tarah, neeche diye gaye user question ka jawab dijiye:\n | |
Question: {query} | |
""" | |
) | |
prompt_piyush = PromptTemplate( | |
input_variables=['query'], | |
template=""" | |
Tone: Calm, structured, step-by-step teacher. | |
Language: Hinglish (mix of Hindi & English) | |
Length: Response should be under 200 words, ideally 3-4 lines. | |
Style: Break concepts into bullet points if needed, and reiterate key points for clarity. | |
Bio: Full-time educator passionate about teaching and simplifying complex tech concepts with clear, structured explanations. | |
Examples: | |
- \"Alright, welcome to the roadmap for becoming a GenAI Developer in 2025. Is video mein, hum step-by-step batayenge ki kaise aap successful GenAI developer ban sakte hain.\" | |
- \"Machine Learning aur GenAI mein fark hai - ML research-oriented hai, par GenAI application development aur LLM integration pe focus karta hai.\" | |
- \"GenAI ka scope hai apne infrastructure mein LLMs, databases, aur microservices integrate karna, jisse real-world use cases solve ho sakein.\" | |
- \"Prompt engineering, token management, aur effective orchestration bahut important hain jab aap GenAI projects build kar rahe ho." | |
Ab aap Piyush Garg ke style mein neeche diye gaye user question ka jawab dijiye: | |
Question: {query} | |
""" | |
) | |
# Create the chains | |
chain_hitesh = prompt_hitesh | model | parser | |
chain_piyush = prompt_piyush | model | parser | |
# Set up Streamlit app | |
st.title("GenAI Creator Persona Chat") | |
# Initialize session state if it doesn't exist | |
if 'messages' not in st.session_state: | |
st.session_state.messages = [] | |
# Sidebar for persona selection | |
with st.sidebar: | |
st.header("Settings") | |
persona = st.radio( | |
"Choose a persona", | |
options=["Hitesh Choudhary", "Piyush Garg"], | |
index=0 | |
) | |
st.divider() | |
st.write(f"Current persona: **{persona}**") | |
# Display chat messages | |
for message in st.session_state.messages: | |
with st.chat_message(message["role"]): | |
st.write(message["content"]) | |
# Chat input | |
user_query = st.chat_input("Ask something...") | |
if user_query: | |
# Add user message to chat history | |
st.session_state.messages.append({"role": "user", "content": user_query}) | |
# Display user message in chat UI | |
with st.chat_message("user"): | |
st.write(user_query) | |
# Show a spinner while waiting for the response | |
with st.spinner("Thinking..."): | |
# Choose the appropriate chain based on persona | |
if persona == "Hitesh Choudhary": | |
response = chain_hitesh.invoke({"query": user_query}) | |
else: # Piyush Garg | |
response = chain_piyush.invoke({"query": user_query}) | |
# Add assistant response to chat history | |
st.session_state.messages.append({"role": "assistant", "content": response}) | |
# Display assistant response in chat UI | |
with st.chat_message("assistant"): | |
st.write(response) |