AhsanRazi's picture
Update pages/Latest.py
0424771 verified
raw
history blame
2.87 kB
import os
import streamlit as st
from typing import List, Dict
from dotenv import load_dotenv
from typing_extensions import TypedDict
from langchain_core.messages import HumanMessage
from langgraph.graph import START, StateGraph, END
from langchain_google_genai import ChatGoogleGenerativeAI
# General Information Blog
st.set_page_config(
page_title="Latest Information Blog"
)
# Secret Key
load_dotenv(override=True)
gemini_api_key = os.getenv("GEMINI_API_KEY")
# Latest Information Blog
from search_queries_generator import generate_queries
from blog_title_generator import blog_titles_agent
from blog_content_generator import blog_content_agent
from image_fomatted_blog_generator import image_formatted_blog
from image_prompts_generator import image_prompts
# LLM
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp", api_key = gemini_api_key) # type:ignore
# Define State
class BlogState(TypedDict):
topic: str
search_queries: List[str]
blog_topics: List[str]
final_topic: str
blog_content: str
image_formated_blog: str
prompts: Dict[str, str]
# Graph 1:
builder1 = StateGraph(BlogState)
builder1.add_node("queries", lambda state: generate_queries(llm, state))
builder1.add_node("blog_topic", lambda state: blog_titles_agent(llm, state))
builder1.add_edge(START, "queries")
builder1.add_edge("queries", "blog_topic")
builder1.add_edge("blog_topic", END)
graph1 = builder1.compile()
# Graph 2:
builder2 = StateGraph(BlogState)
builder2.add_node("blog_agent", lambda state: blog_content_agent(llm, state))
builder2.add_node("image_formatted_blog", lambda state: image_formatted_blog(llm, state))
builder2.add_node("image_prompts", lambda state: image_prompts(llm, state))
builder2.add_edge(START, "blog_agent")
builder2.add_edge("blog_agent", "image_formatted_blog")
builder2.add_edge("image_formatted_blog", "image_prompts")
builder2.add_edge("image_prompts", END)
graph2 = builder2.compile()
st.title("Generate Latest Information Blog")
input_data = st.text_input("Enter a Category for your blog:")
if 'titles' not in st.session_state:
st.session_state.titles = None
if 'selected_title' not in st.session_state:
st.session_state.selected_title = None
if st.button("Generate Titles"):
try:
topic = [HumanMessage(content=input_data)]
result = graph1.invoke({"topic": topic})
print(result)
st.session_state.titles = result['blog_topics']
except Exception as e:
st.error(str(e))
if st.session_state.titles is not None:
st.session_state.selected_title = st.selectbox("Pick the Title for your Blog", st.session_state.titles)
if st.button("Generate Blog") and st.session_state.selected_title is not None:
content = graph2.invoke({"final_topic": st.session_state.selected_title})
st.markdown(content['image_formated_blog'])