Multi-Agent-Rag-System / pipeline.py
DhruvSoni's picture
Fix rate limits by adding time.sleep delays between pipeline steps
36d6e26
Raw
History Blame Contribute Delete
2.52 kB
from agents import build_reader_agent, build_search_agent, writer_chain, critic_chain
import time
def extract_text(content) -> str:
if isinstance(content, str):
return content
elif isinstance(content, list):
return "".join(item.get("text", "") for item in content if isinstance(item, dict) and "text" in item)
return str(content)
def run_research_pipeline(topic: str) -> dict:
state={}
#Search Agent working
print("\n" + "="*50 )
print("step 1 - search agent is wokring ...")
print("=" *50)
search_agent= build_search_agent()
search_result= search_agent.invoke({
"messages": [("user", f"Find recent, reliable and detailed information about: {topic}")]
})
state["search_results"]= extract_text(search_result['messages'][-1].content)
print("\n search result", state['search_results'])
# Introduce delay to prevent rate limits
time.sleep(5)
#Step 2 - reader agent
print("\n" + "="*50)
print("step 2- reader agent is scrapping top respurces ...")
print("="*50)
reader_agent= build_reader_agent()
reader_result = reader_agent.invoke({
"messages": [("user",
f"Based on the following search results about '{topic}',"
f"pick the most relevant URL and scrape it for deeper content.\n\n"
f"Search Results: \n{state['search_results'][:800]}"
)]
})
state['scraped_content']= extract_text(reader_result['messages'][-1].content)
print("\nScraped content\n", state['scraped_content'])
# Introduce delay to prevent rate limits
time.sleep(5)
#Step 3- writer chain
print("\n" + "="*50)
print("step 3- Writer is drafting the report ...")
print("="*50)
research_combined= (
f"Search Results: \n {state['search_results']}\n\n"
f"Detailed Scraped Content: \n {state['scraped_content']}"
)
state['report']= writer_chain.invoke({
"topic":topic,
"research": research_combined
})
print("\n final report\n", state['report'])
#Critic Report
print("\n" + "="*50)
print("step 3- Critic is reviewing the report ...")
print("="*50)
# Introduce delay to prevent rate limits
time.sleep(5)
state['feedback']=critic_chain.invoke({
"report": state['report']
})
print("\n critic report \n", state['feedback'])
return state
if __name__ == "__main__":
topic= input("\n Enter a research topic: " )
run_research_pipeline(topic)