Spaces:
Sleeping
Sleeping
""" | |
Project Name: Autonomous AI Orchestrator | |
Description: | |
An end-to-end, self-improving AI agent framework that takes user goals and autonomously: | |
- Plans multi-step workflows (Research, Learn, Develop, Execute, Diagnose, Review) | |
- Performs web searches and aggregates reliable information | |
- Generates and safely executes Python code | |
- Self-evaluates and optimizes its own processes | |
- Provides a Learning Coach for personalized, source-backed teaching | |
- Persists session memory, logs activities, and snapshots full state for audit and rollback | |
Instructions: | |
1. **Dependencies**: Ensure your `requirements.txt` contains: | |
``` | |
duckduckgo-search | |
gradio | |
requests | |
python-dotenv | |
feedparser | |
``` | |
2. **Module Structure**: Place the following modules alongside your main script (`app.py`): | |
- `memory.py` | |
- `planner.py` | |
- `executor.py` | |
- `critic.py` | |
- `cognitive_engine.py` | |
- `web_searcher.py` | |
- `hf_packager.py` | |
- (Optional CSS: `style.css` for UI styling) | |
3. **Run the Application**: | |
```bash | |
python app.py | |
``` | |
4. **Access Interfaces**: | |
- **Gradio UI**: Navigate to `http://<host>:<port>/ui` for Task Execution and Learning Coach tabs | |
- **API Endpoints**: | |
- `GET /status` β Health check and available routes | |
- `GET /generate?prompt=<text>` β Quick text generation | |
- `POST /generate` β JSON-based generation with session tracking | |
- `GET /memory/{session_id}` β Retrieve session history | |
- `GET /summary/{session_id}` β Summarize recent interactions | |
5. **Persistence & Logs**: | |
- Activity logs in `log.txt` | |
- Session memory stored in `memory.json` | |
- Snapshots saved under `snapshots/` with recoverable JSON files | |
""" | |
import os | |
import zipfile | |
import base64 | |
import gradio as gr | |
import uuid | |
import json | |
import logging | |
import datetime | |
from memory_manager import MemoryManager | |
from planner import Planner | |
from executor import Executor | |
from critic import Critic | |
from cognitive_engine import CognitiveEngine | |
from web_searcher import WebSearcher | |
from hf_packager import HFSpacePackager | |
# Initialize components | |
memory = MemoryManager() | |
planner = Planner() | |
executor = Executor() | |
critic = Critic() | |
cog_engine = CognitiveEngine() | |
web_searcher = WebSearcher() | |
packager = HFSpacePackager() | |
# Set up logging | |
logging.basicConfig(filename='log.txt', level=logging.INFO, | |
format='%(asctime)s - %(levelname)s - %(message)s') | |
class AutonomousAgent: | |
def __init__(self): | |
self.state_file = "state.json" | |
self.load_state() | |
def load_state(self): | |
try: | |
with open(self.state_file, 'r') as f: | |
self.state = json.load(f) | |
except (FileNotFoundError, json.JSONDecodeError): | |
self.state = {"sessions": {}} | |
self.save_state() | |
def save_state(self): | |
with open(self.state_file, 'w') as f: | |
json.dump(self.state, f, indent=2) | |
def process_goal(self, goal, session_id=None): | |
try: | |
if not session_id: | |
session_id = str(uuid.uuid4()) | |
self.state["sessions"][session_id] = {"goal": goal, "status": "processing"} | |
memory.init_session(session_id) | |
self.save_state() | |
# Add to memory | |
memory.add(session_id, "user_goal", goal) | |
# Plan the task | |
plan = planner.plan_task(goal, memory.get(session_id)) | |
memory.add(session_id, "plan", plan) | |
# Execute plan | |
results = [] | |
for step in plan: | |
key = step.split(":")[0].lower() | |
if key in ["research", "search"]: | |
query = step.split(":",1)[1].strip() | |
res = web_searcher.search(query) | |
memory.add(session_id, f"search:{query}", res) | |
results.append(f"π Search '{query}': {res[:300]}...") | |
elif key in ["develop", "code"]: | |
code = cog_engine.generate_code(step, memory.get(session_id)) | |
out = executor.execute_code(code) | |
memory.add(session_id, "generated_code", code) | |
memory.add(session_id, "execution_result", out) | |
review = critic.review(step, out) | |
memory.add(session_id, "review", review) | |
if "error" in review.lower(): | |
improved = cog_engine.improve_code(code, review) | |
memory.add(session_id, "enhanced_code", improved) | |
out = executor.execute_code(improved) | |
results.append(f"π οΈ Enhanced code: {out}") | |
else: | |
results.append(f"β Code executed: {out}") | |
elif key in ["diagnose", "check"]: | |
issues = cog_engine.identify_improvements(step) | |
memory.add(session_id, "diagnosis", issues) | |
if issues: | |
fixes = cog_engine.generate_enhancements(issues) | |
cog_engine.apply_enhancements(fixes) | |
results.append(f"βοΈ Repaired: {', '.join(issues)}") | |
else: | |
results.append("β Healthy") | |
self.state["sessions"][session_id]["status"] = "completed" | |
self.save_state() | |
snap = packager.create_snapshot({"session_id": session_id, "memory": memory.get(session_id), "results": results}) | |
return "\n\n".join(results), session_id, snap | |
except Exception as e: | |
logging.error(f"Error: {e}", exc_info=True) | |
issues = [str(e)] | |
fixes = cog_engine.generate_enhancements(issues) | |
cog_engine.apply_enhancements(fixes) | |
return f"β οΈ Error occurred: {e}", session_id, "" | |
agent = AutonomousAgent() | |
with gr.Blocks(css="style.css", title="Autonomous AI") as demo: | |
sid = gr.State() | |
hist = gr.State({"history": []}) | |
gr.Markdown("# π€ Autonomous AI System") | |
with gr.Tab("Task Execution"): | |
inp = gr.Textbox(label="Your Goal") | |
btn = gr.Button("Execute Goal") | |
out = gr.Textbox(label="Results", lines=10) | |
sid_box = gr.Textbox(label="Session ID") | |
snap_box = gr.Textbox(label="Snapshot URL") | |
btn.click(agent.process_goal, [inp, sid], [out, sid_box, snap_box]) | |
with gr.Tab("Learning Coach"): | |
chat = gr.Chatbot() | |
q_in = gr.Textbox(label="Your Question") | |
ask = gr.Button("Ask") | |
clear = gr.Button("Clear") | |
kb = gr.Markdown("") | |
ask.click(lambda q,h: (h+[(q, cog_engine.learning_coach_response(q))], h), [q_in, hist], [chat, hist]) | |
clear.click(lambda h: ([],h), [hist], [chat, hist]) | |
demo.launch() | |