import gradio as gr from composio_crewai import ComposioToolSet, App, Action from crewai import Agent, Task, Crew, Process from langchain_openai import ChatOpenAI from dotenv import load_dotenv import os load_dotenv() llm = ChatOpenAI(model="gpt-4o") toolset = ComposioToolSet() tools = toolset.get_tools(apps=[App.SERPAPI]) def find_hackernews_posts(message,history): profile = message hacnews_agent = Agent( role="Technical Researcher", goal="Find the best technical posts on Hackernews", backstory="You are a technical person who loves reading Hackernews and looking for technical posts. You spend all your time looking for interesting posts of the day.", llm=llm, tools=tools ) hacnews_task = Task( description=f""" Use the serp tool to search for the user's twitter profile of name {profile} to read his bio, and then scrape it. Based on his bio, find good technical hackernews posts suited to his bio. Return one post that is most appropriate to the personality. Make it funny. Return title and link to it. """, expected_output="A list of 5 technical hackernews posts with titles and URLs", agent=hacnews_agent, tools=tools ) crew = Crew( agents=[hacnews_agent], tasks=[hacnews_task], process=Process.sequential, verbose=True ) result = crew.kickoff() # Return the result in the format expected by the Chatbot component return str(result) chat_interface = gr.ChatInterface( fn=find_hackernews_posts, title="HackerNews Post Finder", description="Enter a Twitter username to find relevant technical HackerNews posts.", ) if __name__ == "__main__": chat_interface.launch()