From 5edf82554d9a0f1cae3e76eb4884e04fc7b37b15 Mon Sep 17 00:00:00 2001 From: patchy631 Date: Sat, 14 Dec 2024 15:33:29 +0530 Subject: [PATCH 1/2] app with sidebar --- ai_news_generator/app.py | 140 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 ai_news_generator/app.py diff --git a/ai_news_generator/app.py b/ai_news_generator/app.py new file mode 100644 index 000000000..7a62cda64 --- /dev/null +++ b/ai_news_generator/app.py @@ -0,0 +1,140 @@ +import os +import streamlit as st +from crewai import Agent, Task, Crew, LLM +from crewai_tools import SerperDevTool +from dotenv import load_dotenv + +# Load environment variables +load_dotenv() + +# Streamlit page config +st.set_page_config(page_title="AI News Generator", page_icon="📰", layout="wide") + +# Title and description +st.title("🤖 AI News Generator") +st.markdown("Generate comprehensive blog posts about any topic using AI agents.") + +def generate_content(topic): + llm = LLM( + model="gpt-4", + temperature=0.7 + ) + + search_tool = SerperDevTool(n_results=10) + + # First Agent: Senior Research Analyst + senior_research_analyst = Agent( + role="Senior Research Analyst", + goal=f"Research, analyze, and synthesize comprehensive information on {topic} from reliable web sources", + backstory="You're an expert research analyst with advanced web research skills. " + "You excel at finding, analyzing, and synthesizing information from " + "across the internet using search tools. You're skilled at " + "distinguishing reliable sources from unreliable ones, " + "fact-checking, cross-referencing information, and " + "identifying key patterns and insights. You provide " + "well-organized research briefs with proper citations " + "and source verification. Your analysis includes both " + "raw data and interpreted insights, making complex " + "information accessible and actionable.", + allow_delegation=False, + verbose=True, + tools=[search_tool], + llm=llm + ) + + # Second Agent: Content Writer + content_writer = Agent( + role="Content Writer", + goal="Transform research findings into engaging blog posts while maintaining accuracy", + backstory="You're a skilled content writer specialized in creating " + "engaging, accessible content from technical research. " + "You work closely with the Senior Research Analyst and excel at maintaining the perfect " + "balance between informative and entertaining writing, " + "while ensuring all facts and citations from the research " + "are properly incorporated. You have a talent for making " + "complex topics approachable without oversimplifying them.", + allow_delegation=False, + verbose=True, + llm=llm + ) + + # Research Task + research_task = Task( + description=(""" + 1. Conduct comprehensive research on {topic} including: + - Recent developments and news + - Key industry trends and innovations + - Expert opinions and analyses + - Statistical data and market insights + 2. Evaluate source credibility and fact-check all information + 3. Organize findings into a structured research brief + 4. Include all relevant citations and sources + """), + expected_output="""A detailed research report containing: + - Executive summary of key findings + - Comprehensive analysis of current trends and developments + - List of verified facts and statistics + - All citations and links to original sources + - Clear categorization of main themes and patterns + Please format with clear sections and bullet points for easy reference.""", + agent=senior_research_analyst + ) + + # Writing Task + writing_task = Task( + description=(""" + Using the research brief provided, create an engaging blog post that: + 1. Transforms technical information into accessible content + 2. Maintains all factual accuracy and citations from the research + 3. Includes: + - Attention-grabbing introduction + - Well-structured body sections with clear headings + - Compelling conclusion + 4. Preserves all source citations in [Source: URL] format + 5. Includes a References section at the end + """), + expected_output="""A polished blog post in markdown format that: + - Engages readers while maintaining accuracy + - Contains properly structured sections + - Includes Inline citations hyperlinked to the original source url + - Presents information in an accessible yet informative way + - Follows proper markdown formatting""", + agent=content_writer + ) + + # Create Crew + crew = Crew( + agents=[senior_research_analyst, content_writer], + tasks=[research_task, writing_task], + verbose=True + ) + + return crew.kickoff(inputs={"topic": topic}) + +# Sidebar for input +with st.sidebar: + st.header("Topic Configuration") + topic = st.text_input("Enter your topic:", "Latest AI Trends in 2024") + generate_button = st.button("Generate Content") + +# Main content area +if generate_button: + with st.spinner('Generating content... This may take a few minutes.'): + try: + result = generate_content(topic) + st.markdown("### Generated Content") + st.markdown(result) + + # Add download button + st.download_button( + label="Download Content", + data=result, + file_name=f"{topic.lower().replace(' ', '_')}_article.md", + mime="text/markdown" + ) + except Exception as e: + st.error(f"An error occurred: {str(e)}") + +# Footer +st.markdown("---") +st.markdown("Built with CrewAI, Streamlit and powered by Cohere's Command R7B") \ No newline at end of file From 3c2be1ee9a1ccfc237334506eb666c9ef0818993 Mon Sep 17 00:00:00 2001 From: patchy631 Date: Sat, 14 Dec 2024 18:47:33 +0530 Subject: [PATCH 2/2] final news generator code --- ai_news_generator/.env.example | 2 ++ ai_news_generator/app.py | 47 ++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 ai_news_generator/.env.example diff --git a/ai_news_generator/.env.example b/ai_news_generator/.env.example new file mode 100644 index 000000000..a52a0479d --- /dev/null +++ b/ai_news_generator/.env.example @@ -0,0 +1,2 @@ +SERPER_API_KEY=your_serper_api_key +COHERE_API_KEY=your_cohere_apikey \ No newline at end of file diff --git a/ai_news_generator/app.py b/ai_news_generator/app.py index 7a62cda64..5d0ba2be6 100644 --- a/ai_news_generator/app.py +++ b/ai_news_generator/app.py @@ -11,12 +11,43 @@ st.set_page_config(page_title="AI News Generator", page_icon="📰", layout="wide") # Title and description -st.title("🤖 AI News Generator") +st.title("🤖 AI News Generator, powered by CrewAI and Cohere's Command R7B") st.markdown("Generate comprehensive blog posts about any topic using AI agents.") +# Sidebar +with st.sidebar: + st.header("Content Settings") + + # Make the text input take up more space + topic = st.text_area( + "Enter your topic", + height=100, + placeholder="Enter the topic you want to generate content about..." + ) + + # Add more sidebar controls if needed + st.markdown("### Advanced Settings") + temperature = st.slider("Temperature", 0.0, 1.0, 0.7) + + # Add some spacing + st.markdown("---") + + # Make the generate button more prominent in the sidebar + generate_button = st.button("Generate Content", type="primary", use_container_width=True) + + # Add some helpful information + with st.expander("â„šī¸ How to use"): + st.markdown(""" + 1. Enter your desired topic in the text area above + 2. Adjust the temperature if needed (higher = more creative) + 3. Click 'Generate Content' to start + 4. Wait for the AI to generate your article + 5. Download the result as a markdown file + """) + def generate_content(topic): llm = LLM( - model="gpt-4", + model="command-r7b-12-2024", temperature=0.7 ) @@ -98,7 +129,7 @@ def generate_content(topic): - Contains properly structured sections - Includes Inline citations hyperlinked to the original source url - Presents information in an accessible yet informative way - - Follows proper markdown formatting""", + - Follows proper markdown formatting, use H1 for the title and H3 for the sub-sections""", agent=content_writer ) @@ -111,15 +142,9 @@ def generate_content(topic): return crew.kickoff(inputs={"topic": topic}) -# Sidebar for input -with st.sidebar: - st.header("Topic Configuration") - topic = st.text_input("Enter your topic:", "Latest AI Trends in 2024") - generate_button = st.button("Generate Content") - # Main content area if generate_button: - with st.spinner('Generating content... This may take a few minutes.'): + with st.spinner('Generating content... This may take a moment.'): try: result = generate_content(topic) st.markdown("### Generated Content") @@ -128,7 +153,7 @@ def generate_content(topic): # Add download button st.download_button( label="Download Content", - data=result, + data=result.raw, file_name=f"{topic.lower().replace(' ', '_')}_article.md", mime="text/markdown" )