import streamlit as st # Import from the correct package from langchain_google_genai import ChatGoogleGenerativeAI from langchain.tools import Tool from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.tools import DuckDuckGoSearchRun import os # Configure LangChain LLM with Gemini llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", google_api_key=os.getenv("gemini_api")) # Use DuckDuckGo Search (no API key needed) ddgs = DuckDuckGoSearchRun() search_tool = Tool( name="Web Search", func=ddgs.run, description="Searches the web for relevant certification information." ) # Create LangChain agent agent = initialize_agent( tools=[search_tool], llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True ) def azure_cert_bot(cert_name): query = f"Microsoft Azure {cert_name} certification curriculum site:microsoft.com" search_results = ddgs.run(query).split("\n") prompt = f"Based on the following curriculum details, generate key questions and answers in markdown format for the {cert_name} certification exam. Do not include any metadata or unnecessary text, only return the formatted Q&A:\n{search_results}" response = llm.invoke(prompt) try: response_text = response.get("content", "No response generated.") if isinstance(response, dict) else response response_text = "\n".join([line for line in response_text.split("\n") if not line.lower().startswith("content=") and "metadata" not in line.lower()]) except Exception as e: response_text = f"Error processing response: {str(e)}" return search_results, response_text # Streamlit UI Enhancements st.set_page_config(page_title="Azure Certification Prep Assistant", layout="wide") # Custom Styling st.markdown(""" """, unsafe_allow_html=True) st.markdown("
Azure Certification Prep Assistant
", unsafe_allow_html=True) cert_name = st.text_input("Enter Azure Certification Name (e.g., AZ-900)", "") if st.button("Get Certification Details"): if cert_name: links, qa_content = azure_cert_bot(cert_name) st.markdown("
Certification Links & Curriculum
", unsafe_allow_html=True) for link in links: if link.strip(): st.markdown(f"
- {link}
", unsafe_allow_html=True) st.markdown("
Exam Questions & Answers
", unsafe_allow_html=True) st.markdown(f"
{qa_content}
", unsafe_allow_html=True) else: st.warning("Please enter a certification name.")