Leon4gr45 commited on
Commit
21927d0
·
verified ·
1 Parent(s): 2773c2a

Redeploy with build fixes and framework integrity

Browse files
helpers/settings.py DELETED
@@ -1,69 +0,0 @@
1
- import json
2
- import os
3
- import secrets
4
- from python.helpers import files
5
- from python.helpers.print_style import PrintStyle
6
-
7
- def get_settings() -> dict:
8
- try:
9
- path = files.get_abs_path("settings.json")
10
- if os.path.exists(path):
11
- with open(path, "r") as f:
12
- return json.load(f)
13
- except Exception as e:
14
- PrintStyle.error(f"Error loading settings: {e}")
15
- # Return defaults
16
- return {
17
- "chat_model_provider": "openai",
18
- "chat_model_name": "gpt-4",
19
- "chat_model_api_base": "",
20
- "chat_model_ctx_length": 128000,
21
- "chat_model_vision": True,
22
- "chat_model_rl_requests": 0,
23
- "chat_model_rl_input": 0,
24
- "chat_model_rl_output": 0,
25
- "chat_model_kwargs": {},
26
- "util_model_provider": "openai",
27
- "util_model_name": "gpt-4o-mini",
28
- "util_model_api_base": "",
29
- "util_model_ctx_length": 128000,
30
- "util_model_rl_requests": 0,
31
- "util_model_rl_input": 0,
32
- "util_model_rl_output": 0,
33
- "util_model_kwargs": {},
34
- "embed_model_provider": "openai",
35
- "embed_model_name": "text-embedding-3-small",
36
- "embed_model_api_base": "",
37
- "embed_model_rl_requests": 0,
38
- "embed_model_kwargs": {},
39
- "browser_model_provider": "openai",
40
- "browser_model_name": "gpt-4o-mini",
41
- "browser_model_api_base": "",
42
- "browser_model_vision": True,
43
- "browser_model_kwargs": {},
44
- "agent_profile": "default",
45
- "agent_memory_subdir": "default",
46
- "agent_knowledge_subdir": "custom",
47
- "mcp_servers": "",
48
- "rfc_url": "localhost",
49
- "rfc_port_http": 55521
50
- }
51
-
52
- def save_settings(settings: dict) -> bool:
53
- try:
54
- path = files.get_abs_path("settings.json")
55
- with open(path, "w") as f:
56
- json.dump(settings, f, indent=4)
57
- return True
58
- except Exception as e:
59
- PrintStyle.error(f"Error saving settings: {e}")
60
- return False
61
-
62
- def get_runtime_config(set):
63
- return {
64
- "code_exec_docker_enabled": False,
65
- "code_exec_ssh_enabled": False
66
- }
67
-
68
- def create_auth_token():
69
- return secrets.token_hex(16)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
{api → patches/api}/api_docs.py RENAMED
File without changes
{helpers → patches/helpers}/api.py RENAMED
@@ -61,6 +61,7 @@ class ApiHandler:
61
 
62
  async def handle_request(self, request: Request) -> Response:
63
  try:
 
64
  input_data: Input = {}
65
  if request.is_json:
66
  try:
 
61
 
62
  async def handle_request(self, request: Request) -> Response:
63
  try:
64
+ # input data from request based on type
65
  input_data: Input = {}
66
  if request.is_json:
67
  try:
{helpers → patches/helpers}/runtime.py RENAMED
@@ -17,10 +17,15 @@ def initialize():
17
 
18
  def get_arg(name: str): return args.get(name, None)
19
  def is_dockerized() -> bool: return bool(get_arg("dockerized")) or os.getenv("HF_SPACE") == "true"
 
 
 
 
20
  def get_runtime_id() -> str:
21
  global runtime_id
22
  if not runtime_id: runtime_id = secrets.token_hex(8)
23
  return runtime_id
 
24
  def get_web_ui_port():
25
  if os.getenv("HF_SPACE") == "true": return 7860
26
  return get_arg("port") or 5000
 
17
 
18
  def get_arg(name: str): return args.get(name, None)
19
  def is_dockerized() -> bool: return bool(get_arg("dockerized")) or os.getenv("HF_SPACE") == "true"
20
+ def is_development() -> bool:
21
+ if os.getenv("HF_SPACE") == "true": return False
22
+ return not is_dockerized()
23
+
24
  def get_runtime_id() -> str:
25
  global runtime_id
26
  if not runtime_id: runtime_id = secrets.token_hex(8)
27
  return runtime_id
28
+
29
  def get_web_ui_port():
30
  if os.getenv("HF_SPACE") == "true": return 7860
31
  return get_arg("port") or 5000
{helpers → patches/helpers}/ui_server.py RENAMED
@@ -85,6 +85,7 @@ class UiServerRuntime:
85
 
86
  lock = threading.RLock()
87
 
 
88
  cors_allowed = "*" if os.getenv("HF_SPACE") == "true" else (lambda _origin, environ: validate_ws_origin(environ)[0])
89
 
90
  socketio_server = socketio.AsyncServer(
 
85
 
86
  lock = threading.RLock()
87
 
88
+ # Use a lambda to avoid issues if validate_ws_origin is called during initialization
89
  cors_allowed = "*" if os.getenv("HF_SPACE") == "true" else (lambda _origin, environ: validate_ws_origin(environ)[0])
90
 
91
  socketio_server = socketio.AsyncServer(
run_ui.py DELETED
@@ -1,85 +0,0 @@
1
- from datetime import timedelta
2
- import os
3
- import secrets
4
- import threading
5
- from flask import Flask, request, Response, session
6
- from werkzeug.middleware.proxy_fix import ProxyFix
7
- import initialize
8
- from python.helpers import files, git, mcp_server, fasta2a_server
9
- from python.helpers.files import get_abs_path
10
- from python.helpers import runtime, dotenv, process
11
- from python.helpers.extract_tools import load_classes_from_folder
12
- from python.helpers.api import ApiHandler
13
- from python.helpers.print_style import PrintStyle
14
-
15
- # initialize the internal Flask server
16
- webapp = Flask("app", static_folder=get_abs_path("./webui"), static_url_path="/")
17
- webapp.secret_key = os.getenv("FLASK_SECRET_KEY") or secrets.token_hex(32)
18
-
19
- # HF Space reverse proxy support
20
- if os.getenv("HF_SPACE") == "true":
21
- webapp.wsgi_app = ProxyFix(webapp.wsgi_app, x_for=1, x_proto=1, x_host=1)
22
-
23
- webapp.config.update(
24
- JSON_SORT_KEYS=False,
25
- SESSION_COOKIE_NAME="session_" + runtime.get_runtime_id(),
26
- SESSION_COOKIE_SAMESITE="Lax",
27
- SESSION_PERMANENT=True,
28
- PERMANENT_SESSION_LIFETIME=timedelta(days=1)
29
- )
30
-
31
- lock = threading.Lock()
32
-
33
- @webapp.route("/", methods=["GET"])
34
- async def serve_index():
35
- index = files.read_file("webui/index.html")
36
- return index
37
-
38
- @webapp.route("/health", methods=["GET"])
39
- async def health():
40
- return {"status": "ok", "service": "agent-zero"}
41
-
42
- @webapp.route("/api-docs", methods=["GET"])
43
- async def api_docs():
44
- from python.api.api_docs import ApiDocs
45
- handler = ApiDocs(webapp, lock)
46
- result = await handler.process({}, request)
47
- return result
48
-
49
- def run():
50
- from werkzeug.serving import make_server
51
- from werkzeug.middleware.dispatcher import DispatcherMiddleware
52
- from a2wsgi import ASGIMiddleware
53
-
54
- port = runtime.get_web_ui_port()
55
- host = "0.0.0.0"
56
-
57
- # register API handlers
58
- handlers = load_classes_from_folder("python/api", "*.py", ApiHandler)
59
- for handler in handlers:
60
- name = handler.__module__.split(".")[-1]
61
- instance = handler(webapp, lock)
62
- async def handler_wrap(h=instance): return await h.handle_request(request=request)
63
- webapp.add_url_rule(f"/api/{name}", f"/{name}", handler_wrap, methods=handler.get_methods())
64
-
65
- middleware_routes = {
66
- "/mcp": ASGIMiddleware(app=mcp_server.DynamicMcpProxy.get_instance()),
67
- "/a2a": ASGIMiddleware(app=fasta2a_server.DynamicA2AProxy.get_instance()),
68
- }
69
-
70
- app = DispatcherMiddleware(webapp, middleware_routes)
71
- server = make_server(host=host, port=port, app=app, threaded=True)
72
- process.set_server(server)
73
-
74
- # Init tasks
75
- initialize.initialize_chats().result_sync()
76
- initialize.initialize_mcp()
77
- initialize.initialize_job_loop()
78
-
79
- PrintStyle().debug(f"Starting server at http://{host}:{port} ...")
80
- server.serve_forever()
81
-
82
- if __name__ == "__main__":
83
- runtime.initialize()
84
- dotenv.load_dotenv()
85
- run()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
start_hf.sh CHANGED
@@ -14,17 +14,12 @@ fi
14
  git clone "$REPO_URL" "$CLONE_DIR"
15
 
16
  echo "Applying Agent-Zero codebase to app directory..."
17
- # Copy everything from the clone into the current directory, but don't overwrite local patches
18
  cp -rn "$CLONE_DIR"/* "$APP_DIR/" 2>/dev/null || true
19
 
20
  echo "Applying patches from $PATCHES_DIR..."
21
- # Forcefully apply our adaptations over the cloned files
22
  if [ -d "$PATCHES_DIR/helpers" ]; then
23
  cp -f "$PATCHES_DIR/helpers/"*.py "$APP_DIR/helpers/"
24
  fi
25
- if [ -f "$PATCHES_DIR/run_ui.py" ]; then
26
- cp -f "$PATCHES_DIR/run_ui.py" "$APP_DIR/run_ui.py"
27
- fi
28
  if [ -d "$PATCHES_DIR/api" ]; then
29
  mkdir -p "$APP_DIR/api"
30
  cp -f "$PATCHES_DIR/api/"*.py "$APP_DIR/api/"
@@ -42,5 +37,4 @@ export PORT=7860
42
  export HOST=0.0.0.0
43
 
44
  echo "Starting Agent-Zero..."
45
- # The run_ui.py in the root has been patched with HF adaptations
46
  python run_ui.py
 
14
  git clone "$REPO_URL" "$CLONE_DIR"
15
 
16
  echo "Applying Agent-Zero codebase to app directory..."
 
17
  cp -rn "$CLONE_DIR"/* "$APP_DIR/" 2>/dev/null || true
18
 
19
  echo "Applying patches from $PATCHES_DIR..."
 
20
  if [ -d "$PATCHES_DIR/helpers" ]; then
21
  cp -f "$PATCHES_DIR/helpers/"*.py "$APP_DIR/helpers/"
22
  fi
 
 
 
23
  if [ -d "$PATCHES_DIR/api" ]; then
24
  mkdir -p "$APP_DIR/api"
25
  cp -f "$PATCHES_DIR/api/"*.py "$APP_DIR/api/"
 
37
  export HOST=0.0.0.0
38
 
39
  echo "Starting Agent-Zero..."
 
40
  python run_ui.py