add agent.py
This commit is contained in:
@@ -0,0 +1,66 @@
|
|||||||
|
import os
|
||||||
|
from typing import Dict, Any
|
||||||
|
import requests
|
||||||
|
from langchain.llms.openai import OpenAI
|
||||||
|
from langchain.prompts import PromptTemplate
|
||||||
|
from langchain.chains import LLMChain
|
||||||
|
|
||||||
|
# Simple web search tool using DuckDuckGo instant answer API
|
||||||
|
class WebSearch:
|
||||||
|
def __init__(self):
|
||||||
|
self.base = "https://api.duckduckgo.com/"
|
||||||
|
|
||||||
|
def run(self, query: str) -> str:
|
||||||
|
params = {
|
||||||
|
"q": query,
|
||||||
|
"format": "json",
|
||||||
|
"no_redirect": 1,
|
||||||
|
"no_html": 1,
|
||||||
|
"skip_disambig": 1,
|
||||||
|
}
|
||||||
|
r = requests.get(self.base, params=params)
|
||||||
|
data = r.json()
|
||||||
|
# Return the abstract text if available
|
||||||
|
return data.get("AbstractText", "") or data.get("RelatedTopics", [])[0].get("Text", "")
|
||||||
|
|
||||||
|
# Agent that searches and writes a virtual file
|
||||||
|
class DeepAgent:
|
||||||
|
def __init__(self, llm: Any):
|
||||||
|
self.llm = llm
|
||||||
|
self.search = WebSearch()
|
||||||
|
self.virtual_fs: Dict[str, str] = {}
|
||||||
|
|
||||||
|
def run(self, task_description: str) -> None:
|
||||||
|
# Step 1: Search the web for relevant info
|
||||||
|
search_query = f"{task_description} example"
|
||||||
|
context = self.search.run(search_query)
|
||||||
|
if not context:
|
||||||
|
context = "No context found."
|
||||||
|
|
||||||
|
# Step 2: Ask LLM to generate file content based on context
|
||||||
|
prompt = PromptTemplate(
|
||||||
|
input_variables=["context", "task_description"],
|
||||||
|
template="You are a developer. Based on the following context, write a Python file named output.py that demonstrates the concept described in the task: {task_description}\nContext: {context}\nOutput:\n"
|
||||||
|
)
|
||||||
|
chain = LLMChain(llm=self.llm, prompt=prompt)
|
||||||
|
result = chain.run(context=context, task_description=task_description)
|
||||||
|
|
||||||
|
# Step 3: Store in virtual FS
|
||||||
|
self.virtual_fs["output.py"] = result.strip()
|
||||||
|
|
||||||
|
def export_to_real_fs(self, repo_path: str) -> None:
|
||||||
|
for filename, content in self.virtual_fs.items():
|
||||||
|
full_path = os.path.join(repo_path, filename)
|
||||||
|
with open(full_path, "w", encoding="utf-8") as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
# Example usage
|
||||||
|
if __name__ == "__main__":
|
||||||
|
llm = OpenAI(temperature=0.2, model_name="gpt-4o-mini")
|
||||||
|
agent = DeepAgent(llm)
|
||||||
|
task_desc = "Create a simple Python script that prints 'Hello World'"
|
||||||
|
agent.run(task_desc)
|
||||||
|
# Export to repository directory
|
||||||
|
repo_dir = os.path.abspath(".")
|
||||||
|
agent.export_to_real_fs(repo_dir)
|
||||||
|
print("Files written:", list(agent.virtual_fs.keys()))
|
||||||
Reference in New Issue
Block a user