Spaces:
Sleeping
Sleeping
| 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']) | |