import os, asyncio from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage from langchain.tools import tool from deepagents import create_deep_agent from deepagents.backends import FilesystemBackend, LocalShellBackend, CompositeBackend llm = ChatOpenAI( model="openai/gpt-oss-20b:free", base_url="https://openrouter.ai/api/v1", api_key=os.getenv("OPENAI_API_KEY"), temperature=0.0, ) backend = CompositeBackend([ LocalShellBackend(workspace_dir="./workspace"), FilesystemBackend(), ]) @tool def web_search(query: str) -> str: """Search the web for information."" try: from duckduckgo_search import DDGS with DDGS() as ddgs: results = list(ddgs.text(query, max_results=5)) return "\n".join(f"{r['title']}: {r['body']}" for r in results) except Exception as e: return f"Search error: {e}" agent = create_deep_agent( llm=llm, tools=[web_search], backend=backend, system_prompt="You are a helpful research agent.", ) async def main(): result = await agent.ainvoke( {"messages": [HumanMessage(content="Search for Python best practices and save to results.txt")]}, {"configurable": {"thread_id": "session-1"}}, ) print(result["messages"][-1].content) if __name__ == "__main__": asyncio.run(main())