Spaces:
Build error
Build error
| 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) |