This commit is contained in:
@@ -12,6 +12,7 @@ from fastapi.responses import FileResponse
|
||||
from fastapi.responses import HTMLResponse, JSONResponse
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from .agent import normalize_disabled_tools
|
||||
from .config import AppConfig, load_app_config
|
||||
from .storage import HistoryDB
|
||||
from .task_manager import JobManager
|
||||
@@ -28,6 +29,13 @@ class CreateJobRequest(BaseModel):
|
||||
click_pause: float = Field(0.10, ge=0.0, le=2.0)
|
||||
reasoning_effort: str = Field("medium", pattern="^(low|medium|high)$")
|
||||
screen_context_decay_steps: int = Field(4, ge=0, le=50)
|
||||
max_visual_context_images: int = Field(3, ge=0, le=12)
|
||||
native_automation_mode: str = Field("prefer", pattern="^(off|prefer|require_fallback)$")
|
||||
dialog_timeout_seconds: float = Field(12.0, ge=0.5, le=120.0)
|
||||
focus_timeout_seconds: float = Field(8.0, ge=0.5, le=120.0)
|
||||
ui_element_timeout_seconds: float = Field(8.0, ge=0.5, le=120.0)
|
||||
max_retries_per_surface: int = Field(3, ge=1, le=10)
|
||||
pretty_logs: bool = False
|
||||
disabled_tools: list[str] = Field(default_factory=list)
|
||||
safety_override: bool = False
|
||||
no_failsafe: bool = False
|
||||
@@ -297,19 +305,30 @@ def create_app(config: AppConfig | None = None) -> FastAPI:
|
||||
|
||||
@app.post("/api/jobs")
|
||||
def create_job(payload: CreateJobRequest, _: None = Depends(require_token)) -> dict[str, str]:
|
||||
job_id = manager.submit_job(
|
||||
objective=payload.job,
|
||||
model=payload.model,
|
||||
max_steps=payload.max_steps,
|
||||
command_timeout=payload.command_timeout,
|
||||
type_interval=payload.type_interval,
|
||||
click_pause=payload.click_pause,
|
||||
reasoning_effort=payload.reasoning_effort,
|
||||
screen_context_decay_steps=payload.screen_context_decay_steps,
|
||||
disabled_tools=payload.disabled_tools,
|
||||
safety_override=payload.safety_override,
|
||||
no_failsafe=payload.no_failsafe,
|
||||
)
|
||||
try:
|
||||
disabled_tools = normalize_disabled_tools(payload.disabled_tools)
|
||||
job_id = manager.submit_job(
|
||||
objective=payload.job,
|
||||
model=payload.model,
|
||||
max_steps=payload.max_steps,
|
||||
command_timeout=payload.command_timeout,
|
||||
type_interval=payload.type_interval,
|
||||
click_pause=payload.click_pause,
|
||||
reasoning_effort=payload.reasoning_effort,
|
||||
screen_context_decay_steps=payload.screen_context_decay_steps,
|
||||
max_visual_context_images=payload.max_visual_context_images,
|
||||
native_automation_mode=payload.native_automation_mode,
|
||||
dialog_timeout_seconds=payload.dialog_timeout_seconds,
|
||||
focus_timeout_seconds=payload.focus_timeout_seconds,
|
||||
ui_element_timeout_seconds=payload.ui_element_timeout_seconds,
|
||||
max_retries_per_surface=payload.max_retries_per_surface,
|
||||
pretty_logs=payload.pretty_logs,
|
||||
disabled_tools=disabled_tools,
|
||||
safety_override=payload.safety_override,
|
||||
no_failsafe=payload.no_failsafe,
|
||||
)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||
return {"job_id": job_id}
|
||||
|
||||
@app.get("/api/jobs")
|
||||
|
||||
Reference in New Issue
Block a user