import asyncioimport osfrom firecrawl import FirecrawlAppfrom autogen_agentchat.agents import AssistantAgentfrom autogen_agentchat.conditions import MaxMessageTerminationfrom autogen_agentchat.teams import RoundRobinGroupChatfrom autogen_agentchat.ui import Consolefrom autogen_ext.models.openai import OpenAIChatCompletionClientfirecrawl = FirecrawlApp(api_key=os.environ["FIRECRAWL_API_KEY"])def scrape_url(url: str) -> str: result = firecrawl.scrape(url, formats=["markdown"]) return result.markdown or ""def web_search(query: str, limit: int = 5) -> list[dict]: result = firecrawl.search(query, limit=limit) return [ {"title": r.title, "url": r.url, "snippet": r.description} for r in result.web or [] ]async def main() -> None: model = OpenAIChatCompletionClient(model="gpt-4o-mini") researcher = AssistantAgent( name="researcher", model_client=model, tools=[scrape_url, web_search], system_message="Gather sources with web_search + scrape_url. Reply with bullet-point findings and URLs.", ) writer = AssistantAgent( name="writer", model_client=model, system_message="Turn the researcher's findings into a 200-word briefing with inline citations.", ) team = RoundRobinGroupChat( [researcher, writer], termination_condition=MaxMessageTermination(max_messages=6), ) await Console(team.run_stream(task="Write a briefing on Firecrawl's crawl endpoint."))if __name__ == "__main__": asyncio.run(main())