File size: 5,056 Bytes
87b46ad
 
84df946
87b46ad
100165f
87b46ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9bd49fa
 
 
 
 
 
 
 
87b46ad
 
 
 
 
 
 
 
 
 
 
84df946
100165f
 
 
87b46ad
 
 
 
 
 
 
 
 
 
 
 
 
100165f
 
 
87b46ad
 
 
9bd49fa
87b46ad
 
 
 
 
 
 
 
84df946
0ca5145
87b46ad
9bd49fa
87b46ad
9bd49fa
87b46ad
 
 
 
 
84df946
0ca5145
87b46ad
 
 
 
 
 
9bd49fa
 
87b46ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9bd49fa
87b46ad
 
 
 
 
100165f
87b46ad
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import streamlit as st
from crewai import Crew, Agent, Task, Process
from langchain_core.tools import Tool
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.llms import HuggingFaceHub  # Change back to HuggingFaceHub
import datetime
import os

# --- Environment Setup ---
huggingfacehub_api_token = os.environ.get("HUGGINGFACEHUB_API_TOKEN")


# --- Helper Functions ---

def get_date_range():
    """Calculates yesterday's date for the search query."""
    today = datetime.date.today()
    yesterday = today - datetime.timedelta(days=1)
    return yesterday.strftime("%Y-%m-%d")


# --- Agent and Task Definitions ---

def create_ai_news_crew():
    """Creates the CrewAI crew, agents, and tasks."""

    search_tool_instance = DuckDuckGoSearchRun()

    # Wrap the DuckDuckGoSearchRun instance with the Tool class.
    search_tool = Tool(
        name="DuckDuckGo Search",
        func=search_tool_instance.run,
        description="Useful for searching the web for recent AI news articles.",
    )

    # Define Agents
    researcher = Agent(
        role='AI News Researcher',
        goal='Find the most recent and relevant AI news articles from yesterday',
        backstory="""You are a specialized AI research agent 
            focused on finding the most relevant and impactful news articles 
            related to Artificial Intelligence.  You excel at using search 
            tools effectively to find information.""",
        verbose=True,
        allow_delegation=False,
        tools=[search_tool],
        llm=HuggingFaceHub(  # Use HuggingFaceHub
            repo_id="deepseek-ai/DeepSeek-Coder-33B-Instruct", #Specify the model
            model_kwargs={"temperature": 0.5, "max_new_tokens": 1024, "repetition_penalty": 1.2}, # Add model parameters here
            huggingfacehub_api_token=huggingfacehub_api_token,
        )
    )

    summarizer = Agent(
        role='AI News Summarizer',
        goal='Summarize the key news articles and create a concise daily briefing',
        backstory="""You are an expert at taking multiple pieces of information 
            and condensing them into clear, concise, and informative summaries.
            You are writing for a busy executive who needs to stay up-to-date
            on AI developments quickly.""",
        verbose=True,
        allow_delegation=False,
        llm=HuggingFaceHub(  # Use HuggingFaceHub
            repo_id="deepseek-ai/DeepSeek-Coder-33B-Instruct", #Specify model
            model_kwargs={"temperature": 0.2, "max_new_tokens": 1024, "repetition_penalty": 1.2}, #Add model parameters here
            huggingfacehub_api_token=huggingfacehub_api_token,
        )
    )

    # Define Tasks
    yesterday_str = get_date_range()
    research_task = Task(
        description=f"""Find at least 5 relevant news articles about Artificial Intelligence 
            published on {yesterday_str}. Focus on major breakthroughs, 
            industry news, ethical considerations, and new applications of AI.
            Return the titles and URLs of the most important articles.
            """,
        agent=researcher,
        expected_output="A list of titles and URLs of the most important AI news articles from yesterday."
    )

    summarize_task = Task(
        description="""Using the news articles identified, create a daily AI news 
        briefing.  The briefing should be no more than 500 words and should
        cover the 3-5 most important AI news items from yesterday. Include 
        a very brief (1-2 sentence) summary of each item and, if possible, link to the source.
        Format the output using markdown for readability.
        """,
        agent=summarizer,
        expected_output="A concise daily AI news briefing in markdown format, no more than 500 words."
    )

    # Create Crew
    crew = Crew(
        agents=[researcher, summarizer],
        tasks=[research_task, summarize_task],
        verbose=True,
        process=Process.sequential
    )
    return crew


# --- Streamlit App ---

def main():
    """Main function to run the Streamlit app."""

    st.set_page_config(
        page_title="AI Daily News Briefing",
        page_icon="🤖",
        layout="wide"
    )

    st.title("AI Daily News Briefing 🤖")
    st.write("Get a concise summary of the most important AI news from yesterday.")

    if st.button("Generate Briefing"):
        with st.spinner("Generating your daily AI news briefing..."):
            try:
                crew = create_ai_news_crew()
                result = crew.kickoff()
                st.subheader("Your AI News Briefing:")
                st.markdown(result)

            except Exception as e:
                st.error(f"An error occurred: {e}")
                st.error("Please check your API key, and ensure you have set up the environment correctly.")


if __name__ == "__main__":
    if not huggingfacehub_api_token:
        st.error("HUGGINGFACEHUB_API_TOKEN is not set.  Please set it as an environment variable.")
    else:
        main()