ScottzillaSystems commited on
Commit
59bbaea
·
verified ·
1 Parent(s): 94051ab

Upload wrapper.py

Browse files
Files changed (1) hide show
  1. wrapper.py +83 -0
wrapper.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Agent Zero Code Architect - Software design agent with workspace isolation."""
3
+
4
+ import os, sys, json, time, threading
5
+ from pathlib import Path
6
+ from datetime import datetime
7
+ import gradio as gr
8
+ import requests as req
9
+
10
+ HF_TOKEN = os.environ.get("HF_TOKEN", "")
11
+ AGENT_NAME = "Code Architect"
12
+ AGENT_ROLE = "code_architect"
13
+ MODEL_NAME = os.environ.get("MODEL_NAME", "DavidAU/OpenAi-GPT-oss-20b-abliterated-uncensored-NEO-Imatrix-gguf")
14
+
15
+ WORKSPACE_DIR = Path("/app/workspace/projects/code-architect")
16
+ SHARED_DIR = Path("/app/workspace/shared")
17
+ TASK_QUEUE_DIR = SHARED_DIR / "task_queue"
18
+ for d in [WORKSPACE_DIR, TASK_QUEUE_DIR]: d.mkdir(parents=True, exist_ok=True)
19
+
20
+ def query_model(prompt: str) -> str:
21
+ api_url = f"https://api-inference.huggingface.co/models/{MODEL_NAME}"
22
+ for attempt in range(3):
23
+ try:
24
+ resp = req.post(api_url, headers={"Authorization": f"Bearer {HF_TOKEN}"},
25
+ json={"inputs": prompt, "parameters": {"max_new_tokens": 4096, "temperature": 0.5}},
26
+ timeout=180)
27
+ if resp.status_code == 200:
28
+ r = resp.json()
29
+ return r[0].get("generated_text","") if isinstance(r,list) else str(r)
30
+ time.sleep(10*(attempt+1))
31
+ except: time.sleep(5)
32
+ return "[ERROR] Model unavailable"
33
+
34
+ def check_tasks():
35
+ tasks = []
36
+ for f in TASK_QUEUE_DIR.glob("*.json"):
37
+ t = json.loads(f.read_text())
38
+ if t.get("assigned_to") == "code-architect" and t.get("status") == "pending":
39
+ tasks.append(t)
40
+ return tasks
41
+
42
+ def execute_task(task):
43
+ task["status"] = "in_progress"
44
+ (TASK_QUEUE_DIR / f"{task['task_id']}.json").write_text(json.dumps(task, indent=2))
45
+ prompt = f"You are a software architect. Design and implement: {task['description']}. Provide complete, production-ready code."
46
+ result = query_model(prompt)
47
+ # Save result to workspace
48
+ out_file = WORKSPACE_DIR / f"{task['task_id']}.py"
49
+ out_file.write_text(result)
50
+ task["status"] = "completed"
51
+ task["result"] = result[:2000]
52
+ task["output_file"] = str(out_file)
53
+ task["completed_at"] = datetime.now().isoformat()
54
+ (TASK_QUEUE_DIR / f"{task['task_id']}.json").write_text(json.dumps(task, indent=2))
55
+
56
+ def autonomous_loop():
57
+ while True:
58
+ for task in check_tasks(): execute_task(task)
59
+ time.sleep(60)
60
+
61
+ threading.Thread(target=autonomous_loop, daemon=True).start()
62
+
63
+ demo = gr.Blocks(title=f"Agent Zero - {AGENT_NAME}", theme=gr.themes.Soft())
64
+ with demo:
65
+ gr.Markdown(f"# 🏗️ Agent Zero: {AGENT_NAME}\n**Role:** {AGENT_ROLE} | **Model:** {MODEL_NAME}")
66
+ with gr.Tabs():
67
+ with gr.TabItem("💬 Chat"):
68
+ chatbot = gr.Chatbot(height=400)
69
+ msg = gr.Textbox(label="Architecture/Code task")
70
+ send = gr.Button("Send")
71
+ def respond(m, h):
72
+ r = query_model(f"Software architecture task. Write complete code for: {m}")
73
+ h = h or []; h.append((m, r[:2000])); return "", h
74
+ send.click(respond, [msg, chatbot], [msg, chatbot])
75
+ with gr.TabItem("📁 Generated Code"):
76
+ files = gr.Dropdown(label="Generated files", choices=[f.name for f in WORKSPACE_DIR.glob("*.py")])
77
+ code = gr.Code(label="Source", language="python")
78
+ def load_code(fname):
79
+ if fname: return (WORKSPACE_DIR / fname).read_text()
80
+ return ""
81
+ files.change(load_code, files, code)
82
+
83
+ demo.queue().launch(server_name="0.0.0.0", server_port=7860)