import os import 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, CompositeBackend # LLM configuration using OpenRouter 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: real filesystem in current directory backend = CompositeBackend([ FilesystemBackend(), ]) @tool async def web_search(query: str) -> str: """Search the web for information using DuckDuckGo.""" 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}" @tool def write_file(path: str, content: str) -> str: """Write a file to the local filesystem.""" try: with open(path, 'w', encoding='utf-8') as f: f.write(content) return f"File written to {path}" except Exception as e: return f"Error writing file: {e}" agent = create_deep_agent( llm=llm, tools=[web_search, write_file], backend=backend, system_prompt="You are a helpful research assistant. Your task is to search the web for information on a given topic and then create virtual files with the results. At the end of the conversation, ensure all generated files are written to disk.", ) async def main(): # Example interaction: ask about Python best practices 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())