Skip to content

Commit 2766929

Browse files
cursoragentnikhil
andcommitted
Parse live Meta Computer Use envelope fields on get responses.
Keep createdAt, finishedAt, liveDomain, and jobParams instead of dropping them from the production task payload. Co-authored-by: nikhil <nikhil@metlo.com>
1 parent c6ea51f commit 2766929

3 files changed

Lines changed: 59 additions & 0 deletions

File tree

hyperbrowser/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
StartMetaComputerUseTaskParams,
138138
StartMetaComputerUseTaskResponse,
139139
MetaComputerUseApiKeys,
140+
MetaComputerUseJobParams,
140141
)
141142
from .agents.cua import (
142143
CuaTaskData,
@@ -528,6 +529,7 @@
528529
"GeminiComputerUseApiKeys",
529530
"GrokComputerUseApiKeys",
530531
"MetaComputerUseApiKeys",
532+
"MetaComputerUseJobParams",
531533
"CuaApiKeys",
532534
"CuaBaseUrls",
533535
"HyperAgentApiKeys",

hyperbrowser/models/agents/meta_computer_use.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from datetime import datetime
34
from typing import Any, List, Literal, Optional
45

56
from pydantic import BaseModel, ConfigDict, Field
@@ -70,6 +71,7 @@ class StartMetaComputerUseTaskResponse(BaseModel):
7071

7172
job_id: str = Field(alias="jobId")
7273
live_url: Optional[str] = Field(default=None, alias="liveUrl")
74+
live_domain: Optional[str] = Field(default=None, alias="liveDomain")
7375

7476

7577
class MetaComputerUseTaskStatusResponse(BaseModel):
@@ -146,6 +148,32 @@ class MetaComputerUseTaskMetadata(BaseModel):
146148
)
147149

148150

151+
class MetaComputerUseJobParams(BaseModel):
152+
"""
153+
Echoed start params returned on a Meta Computer Use task.
154+
"""
155+
156+
model_config = ConfigDict(
157+
populate_by_alias=True,
158+
)
159+
160+
task: Optional[str] = Field(default=None, alias="task")
161+
llm: Optional[MetaComputerUseLlm] = Field(default=None, alias="llm")
162+
reasoning_effort: Optional[MetaReasoningEffort] = Field(
163+
default=None, alias="reasoningEffort"
164+
)
165+
session_id: Optional[str] = Field(default=None, alias="sessionId")
166+
max_steps: Optional[int] = Field(default=None, alias="maxSteps")
167+
keep_browser_open: Optional[bool] = Field(default=None, alias="keepBrowserOpen")
168+
max_failures: Optional[int] = Field(default=None, alias="maxFailures")
169+
use_custom_api_keys: Optional[bool] = Field(
170+
default=None, alias="useCustomApiKeys"
171+
)
172+
use_computer_action: Optional[bool] = Field(
173+
default=None, alias="useComputerAction"
174+
)
175+
176+
149177
class MetaComputerUseTaskResponse(BaseModel):
150178
"""
151179
Response from a Meta Computer Use task.
@@ -157,9 +185,15 @@ class MetaComputerUseTaskResponse(BaseModel):
157185

158186
job_id: str = Field(alias="jobId")
159187
status: MetaComputerUseTaskStatus
188+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
189+
finished_at: Optional[datetime] = Field(default=None, alias="finishedAt")
160190
metadata: Optional[MetaComputerUseTaskMetadata] = Field(
161191
default=None, alias="metadata"
162192
)
163193
data: Optional[MetaComputerUseTaskData] = Field(default=None, alias="data")
164194
error: Optional[str] = Field(default=None, alias="error")
165195
live_url: Optional[str] = Field(default=None, alias="liveUrl")
196+
live_domain: Optional[str] = Field(default=None, alias="liveDomain")
197+
job_params: Optional[MetaComputerUseJobParams] = Field(
198+
default=None, alias="jobParams"
199+
)

tests/test_meta_computer_use_models.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@ def test_meta_computer_use_task_response_parses_responses_style_step_payload() -
55
payload = {
66
"jobId": "job-123",
77
"status": "completed",
8+
"createdAt": "2026-09-07T01:33:08.205Z",
9+
"finishedAt": "2026-09-07T01:33:33.038Z",
10+
"liveUrl": None,
11+
"liveDomain": None,
12+
"jobParams": {
13+
"task": "Go to example.com",
14+
"llm": "muse-spark-1.3",
15+
"reasoningEffort": "medium",
16+
"sessionId": "session-123",
17+
"maxSteps": 5,
18+
"keepBrowserOpen": False,
19+
"maxFailures": 3,
20+
"useCustomApiKeys": False,
21+
"useComputerAction": True,
22+
},
823
"data": {
924
"steps": [
1025
{
@@ -73,6 +88,14 @@ def test_meta_computer_use_task_response_parses_responses_style_step_payload() -
7388

7489
result = MetaComputerUseTaskResponse(**payload)
7590

91+
assert result.created_at is not None
92+
assert result.finished_at is not None
93+
assert result.live_domain is None
94+
assert result.job_params is not None
95+
assert result.job_params.llm == "muse-spark-1.3"
96+
assert result.job_params.reasoning_effort == "medium"
97+
assert result.job_params.session_id == "session-123"
98+
7699
final_step = result.data.steps[0]
77100
assert final_step.created_at == 1788743504
78101
assert final_step.completed_at == 1788743511

0 commit comments

Comments
 (0)