hyperbrowser 1.5.0__tar.gz → 1.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/PKG-INFO +1 -1
  2. {hyperbrowser-1.5.0/hyperbrowser/client/managers/sync_manager → hyperbrowser-1.6.0/hyperbrowser/client/managers/async_manager}/agents/__init__.py +2 -0
  3. hyperbrowser-1.6.0/hyperbrowser/client/managers/async_manager/agents/jev_computer_use.py +84 -0
  4. {hyperbrowser-1.5.0/hyperbrowser/client/managers/async_manager → hyperbrowser-1.6.0/hyperbrowser/client/managers/sync_manager}/agents/__init__.py +2 -0
  5. hyperbrowser-1.6.0/hyperbrowser/client/managers/sync_manager/agents/jev_computer_use.py +84 -0
  6. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/__init__.py +20 -0
  7. hyperbrowser-1.6.0/hyperbrowser/models/agents/jev_computer_use.py +119 -0
  8. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/consts.py +8 -0
  9. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/__init__.py +4 -0
  10. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/agents.py +26 -0
  11. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/pyproject.toml +1 -1
  12. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/LICENSE +0 -0
  13. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/README.md +0 -0
  14. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/__init__.py +0 -0
  15. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/_request.py +0 -0
  16. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/async_client.py +0 -0
  17. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/base.py +0 -0
  18. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/browser_use.py +0 -0
  19. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/claude_computer_use.py +0 -0
  20. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/cua.py +0 -0
  21. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +0 -0
  22. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/grok_computer_use.py +0 -0
  23. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/hyper_agent.py +0 -0
  24. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/meta_computer_use.py +0 -0
  25. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/computer_action.py +0 -0
  26. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
  27. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
  28. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/extract.py +0 -0
  29. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
  30. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandbox.py +0 -0
  31. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/__init__.py +0 -0
  32. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_files.py +0 -0
  33. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_processes.py +0 -0
  34. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_terminal.py +0 -0
  35. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_transport.py +0 -0
  36. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
  37. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/session.py +0 -0
  38. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/team.py +0 -0
  39. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/volume.py +0 -0
  40. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/web/__init__.py +0 -0
  41. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/web/batch_fetch.py +0 -0
  42. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/web/crawl.py +0 -0
  43. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/__init__.py +0 -0
  44. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/dockerfile_analysis.py +0 -0
  45. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/dockerignore.py +0 -0
  46. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/image_build.py +0 -0
  47. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/shared.py +0 -0
  48. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/browser_use.py +0 -0
  49. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +0 -0
  50. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/cua.py +0 -0
  51. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py +0 -0
  52. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/grok_computer_use.py +0 -0
  53. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/hyper_agent.py +0 -0
  54. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/meta_computer_use.py +0 -0
  55. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/computer_action.py +0 -0
  56. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
  57. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
  58. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/extract.py +0 -0
  59. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
  60. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandbox.py +0 -0
  61. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/__init__.py +0 -0
  62. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_files.py +0 -0
  63. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_processes.py +0 -0
  64. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_terminal.py +0 -0
  65. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_transport.py +0 -0
  66. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
  67. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/session.py +0 -0
  68. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/team.py +0 -0
  69. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/volume.py +0 -0
  70. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/web/__init__.py +0 -0
  71. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/web/batch_fetch.py +0 -0
  72. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/web/crawl.py +0 -0
  73. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/client/sync.py +0 -0
  74. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/config.py +0 -0
  75. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/exceptions.py +0 -0
  76. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/_parsers.py +0 -0
  77. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/browser_use.py +0 -0
  78. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/claude_computer_use.py +0 -0
  79. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/cua.py +0 -0
  80. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/gemini_computer_use.py +0 -0
  81. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/grok_computer_use.py +0 -0
  82. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/hyper_agent.py +0 -0
  83. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/meta_computer_use.py +0 -0
  84. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/computer_action.py +0 -0
  85. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/crawl.py +0 -0
  86. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/extension.py +0 -0
  87. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/extract.py +0 -0
  88. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/profile.py +0 -0
  89. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/sandbox.py +0 -0
  90. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/scrape.py +0 -0
  91. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/session.py +0 -0
  92. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/team.py +0 -0
  93. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/volume.py +0 -0
  94. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/web/batch_fetch.py +0 -0
  95. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/web/branding.py +0 -0
  96. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/web/common.py +0 -0
  97. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/web/crawl.py +0 -0
  98. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/web/fetch.py +0 -0
  99. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/models/web/search.py +0 -0
  100. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/py.typed +0 -0
  101. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/sandbox_common.py +0 -0
  102. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/tools/__init__.py +0 -0
  103. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/tools/anthropic.py +0 -0
  104. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/tools/openai.py +0 -0
  105. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/tools/schema.py +0 -0
  106. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/transport/async_transport.py +0 -0
  107. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/transport/base.py +0 -0
  108. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/transport/sync.py +0 -0
  109. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/_json.py +0 -0
  110. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/computer_action.py +0 -0
  111. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/crawl.py +0 -0
  112. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/extension.py +0 -0
  113. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/extract.py +0 -0
  114. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/profile.py +0 -0
  115. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/sandbox.py +0 -0
  116. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/scrape.py +0 -0
  117. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/session.py +0 -0
  118. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/volume.py +0 -0
  119. {hyperbrowser-1.5.0 → hyperbrowser-1.6.0}/hyperbrowser/types/web.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperbrowser
3
- Version: 1.5.0
3
+ Version: 1.6.0
4
4
  Summary: Python SDK for hyperbrowser
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -4,6 +4,7 @@ from .claude_computer_use import ClaudeComputerUseManager
4
4
  from .hyper_agent import HyperAgentManager
5
5
  from .gemini_computer_use import GeminiComputerUseManager
6
6
  from .grok_computer_use import GrokComputerUseManager
7
+ from .jev_computer_use import JevComputerUseManager
7
8
  from .meta_computer_use import MetaComputerUseManager
8
9
 
9
10
 
@@ -15,4 +16,5 @@ class Agents:
15
16
  self.hyper_agent = HyperAgentManager(client)
16
17
  self.gemini_computer_use = GeminiComputerUseManager(client)
17
18
  self.grok_computer_use = GrokComputerUseManager(client)
19
+ self.jev_computer_use = JevComputerUseManager(client)
18
20
  self.meta_computer_use = MetaComputerUseManager(client)
@@ -0,0 +1,84 @@
1
+ import asyncio
2
+ from typing import Union
3
+
4
+ from hyperbrowser.client._request import dump_request
5
+ from hyperbrowser.exceptions import HyperbrowserError
6
+ from hyperbrowser.types import (
7
+ StartJevComputerUseTaskParams as StartJevComputerUseTaskParamsDict,
8
+ )
9
+
10
+ from .....models import (
11
+ POLLING_ATTEMPTS,
12
+ BasicResponse,
13
+ JevComputerUseTaskResponse,
14
+ JevComputerUseTaskStatusResponse,
15
+ StartJevComputerUseTaskParams,
16
+ StartJevComputerUseTaskResponse,
17
+ )
18
+
19
+
20
+ class JevComputerUseManager:
21
+ def __init__(self, client):
22
+ self._client = client
23
+
24
+ async def start(
25
+ self,
26
+ params: Union[
27
+ StartJevComputerUseTaskParamsDict,
28
+ StartJevComputerUseTaskParams,
29
+ ],
30
+ ) -> StartJevComputerUseTaskResponse:
31
+ response = await self._client.transport.post(
32
+ self._client._build_url("/task/jev"),
33
+ data=dump_request(params, StartJevComputerUseTaskParams),
34
+ )
35
+ return StartJevComputerUseTaskResponse(**response.data)
36
+
37
+ async def get(self, job_id: str) -> JevComputerUseTaskResponse:
38
+ response = await self._client.transport.get(
39
+ self._client._build_url(f"/task/jev/{job_id}")
40
+ )
41
+ return JevComputerUseTaskResponse(**response.data)
42
+
43
+ async def get_status(self, job_id: str) -> JevComputerUseTaskStatusResponse:
44
+ response = await self._client.transport.get(
45
+ self._client._build_url(f"/task/jev/{job_id}/status")
46
+ )
47
+ return JevComputerUseTaskStatusResponse(**response.data)
48
+
49
+ async def stop(self, job_id: str) -> BasicResponse:
50
+ response = await self._client.transport.put(
51
+ self._client._build_url(f"/task/jev/{job_id}/stop")
52
+ )
53
+ return BasicResponse(**response.data)
54
+
55
+ async def start_and_wait(
56
+ self,
57
+ params: Union[
58
+ StartJevComputerUseTaskParamsDict,
59
+ StartJevComputerUseTaskParams,
60
+ ],
61
+ ) -> JevComputerUseTaskResponse:
62
+ job_start_resp = await self.start(params)
63
+ job_id = job_start_resp.job_id
64
+ if not job_id:
65
+ raise HyperbrowserError("Failed to start Jev Computer Use task job")
66
+
67
+ failures = 0
68
+ while True:
69
+ try:
70
+ job_response = await self.get_status(job_id)
71
+ if (
72
+ job_response.status == "completed"
73
+ or job_response.status == "failed"
74
+ or job_response.status == "stopped"
75
+ ):
76
+ return await self.get(job_id)
77
+ failures = 0
78
+ except Exception as e:
79
+ failures += 1
80
+ if failures >= POLLING_ATTEMPTS:
81
+ raise HyperbrowserError(
82
+ f"Failed to poll Jev Computer Use task job {job_id} after {POLLING_ATTEMPTS} attempts: {e}"
83
+ )
84
+ await asyncio.sleep(2)
@@ -4,6 +4,7 @@ from .claude_computer_use import ClaudeComputerUseManager
4
4
  from .hyper_agent import HyperAgentManager
5
5
  from .gemini_computer_use import GeminiComputerUseManager
6
6
  from .grok_computer_use import GrokComputerUseManager
7
+ from .jev_computer_use import JevComputerUseManager
7
8
  from .meta_computer_use import MetaComputerUseManager
8
9
 
9
10
 
@@ -15,4 +16,5 @@ class Agents:
15
16
  self.hyper_agent = HyperAgentManager(client)
16
17
  self.gemini_computer_use = GeminiComputerUseManager(client)
17
18
  self.grok_computer_use = GrokComputerUseManager(client)
19
+ self.jev_computer_use = JevComputerUseManager(client)
18
20
  self.meta_computer_use = MetaComputerUseManager(client)
@@ -0,0 +1,84 @@
1
+ import time
2
+ from typing import Union
3
+
4
+ from hyperbrowser.client._request import dump_request
5
+ from hyperbrowser.exceptions import HyperbrowserError
6
+ from hyperbrowser.types import (
7
+ StartJevComputerUseTaskParams as StartJevComputerUseTaskParamsDict,
8
+ )
9
+
10
+ from .....models import (
11
+ POLLING_ATTEMPTS,
12
+ BasicResponse,
13
+ JevComputerUseTaskResponse,
14
+ JevComputerUseTaskStatusResponse,
15
+ StartJevComputerUseTaskParams,
16
+ StartJevComputerUseTaskResponse,
17
+ )
18
+
19
+
20
+ class JevComputerUseManager:
21
+ def __init__(self, client):
22
+ self._client = client
23
+
24
+ def start(
25
+ self,
26
+ params: Union[
27
+ StartJevComputerUseTaskParamsDict,
28
+ StartJevComputerUseTaskParams,
29
+ ],
30
+ ) -> StartJevComputerUseTaskResponse:
31
+ response = self._client.transport.post(
32
+ self._client._build_url("/task/jev"),
33
+ data=dump_request(params, StartJevComputerUseTaskParams),
34
+ )
35
+ return StartJevComputerUseTaskResponse(**response.data)
36
+
37
+ def get(self, job_id: str) -> JevComputerUseTaskResponse:
38
+ response = self._client.transport.get(
39
+ self._client._build_url(f"/task/jev/{job_id}")
40
+ )
41
+ return JevComputerUseTaskResponse(**response.data)
42
+
43
+ def get_status(self, job_id: str) -> JevComputerUseTaskStatusResponse:
44
+ response = self._client.transport.get(
45
+ self._client._build_url(f"/task/jev/{job_id}/status")
46
+ )
47
+ return JevComputerUseTaskStatusResponse(**response.data)
48
+
49
+ def stop(self, job_id: str) -> BasicResponse:
50
+ response = self._client.transport.put(
51
+ self._client._build_url(f"/task/jev/{job_id}/stop")
52
+ )
53
+ return BasicResponse(**response.data)
54
+
55
+ def start_and_wait(
56
+ self,
57
+ params: Union[
58
+ StartJevComputerUseTaskParamsDict,
59
+ StartJevComputerUseTaskParams,
60
+ ],
61
+ ) -> JevComputerUseTaskResponse:
62
+ job_start_resp = self.start(params)
63
+ job_id = job_start_resp.job_id
64
+ if not job_id:
65
+ raise HyperbrowserError("Failed to start Jev Computer Use task job")
66
+
67
+ failures = 0
68
+ while True:
69
+ try:
70
+ job_response = self.get_status(job_id)
71
+ if (
72
+ job_response.status == "completed"
73
+ or job_response.status == "failed"
74
+ or job_response.status == "stopped"
75
+ ):
76
+ return self.get(job_id)
77
+ failures = 0
78
+ except Exception as e:
79
+ failures += 1
80
+ if failures >= POLLING_ATTEMPTS:
81
+ raise HyperbrowserError(
82
+ f"Failed to poll Jev Computer Use task job {job_id} after {POLLING_ATTEMPTS} attempts: {e}"
83
+ )
84
+ time.sleep(2)
@@ -138,6 +138,15 @@ from .agents.meta_computer_use import (
138
138
  StartMetaComputerUseTaskResponse,
139
139
  MetaComputerUseApiKeys,
140
140
  )
141
+ from .agents.jev_computer_use import (
142
+ JevComputerUseTaskStatus,
143
+ JevComputerUseTaskData,
144
+ JevComputerUseTaskResponse,
145
+ JevComputerUseTaskStatusResponse,
146
+ StartJevComputerUseTaskParams,
147
+ StartJevComputerUseTaskResponse,
148
+ JevComputerUseApiKeys,
149
+ )
141
150
  from .agents.cua import (
142
151
  CuaTaskData,
143
152
  CuaTaskResponse,
@@ -175,6 +184,8 @@ from .consts import (
175
184
  GrokReasoningEffort,
176
185
  MetaComputerUseLlm,
177
186
  MetaReasoningEffort,
187
+ JevComputerUseLlm,
188
+ JevTextLlm,
178
189
  Country,
179
190
  DownloadsStatus,
180
191
  FetchScreenshotFormat,
@@ -521,6 +532,12 @@ __all__ = [
521
532
  "MetaComputerUseTaskStatusResponse",
522
533
  "StartMetaComputerUseTaskParams",
523
534
  "StartMetaComputerUseTaskResponse",
535
+ "JevComputerUseTaskStatus",
536
+ "JevComputerUseTaskData",
537
+ "JevComputerUseTaskResponse",
538
+ "JevComputerUseTaskStatusResponse",
539
+ "StartJevComputerUseTaskParams",
540
+ "StartJevComputerUseTaskResponse",
524
541
  "CuaTaskStatus",
525
542
  "CuaTaskData",
526
543
  "CuaTaskResponse",
@@ -531,6 +548,7 @@ __all__ = [
531
548
  "ClaudeComputerUseApiKeys",
532
549
  "GeminiComputerUseApiKeys",
533
550
  "GrokComputerUseApiKeys",
551
+ "JevComputerUseApiKeys",
534
552
  "MetaComputerUseApiKeys",
535
553
  "CuaApiKeys",
536
554
  "CuaBaseUrls",
@@ -539,6 +557,8 @@ __all__ = [
539
557
  "GrokReasoningEffort",
540
558
  "MetaComputerUseLlm",
541
559
  "MetaReasoningEffort",
560
+ "JevComputerUseLlm",
561
+ "JevTextLlm",
542
562
  "HyperAgentOutputV110",
543
563
  "HyperAgentStepV110",
544
564
  # crawl
@@ -0,0 +1,119 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, List, Literal, Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from ..session import CreateSessionParams
8
+ from ..consts import JevComputerUseLlm, JevTextLlm
9
+
10
+ JevComputerUseTaskStatus = Literal[
11
+ "pending", "running", "completed", "failed", "stopped"
12
+ ]
13
+
14
+
15
+ class JevComputerUseApiKeys(BaseModel):
16
+ """
17
+ API keys for the Jev Computer Use task.
18
+ """
19
+
20
+ model_config = ConfigDict(
21
+ populate_by_alias=True,
22
+ )
23
+
24
+ jev: Optional[str] = Field(default=None, serialization_alias="jev")
25
+ google: Optional[str] = Field(default=None, serialization_alias="google")
26
+
27
+
28
+ class StartJevComputerUseTaskParams(BaseModel):
29
+ """
30
+ Parameters for creating a new Jev Computer Use task.
31
+ """
32
+
33
+ model_config = ConfigDict(
34
+ populate_by_alias=True,
35
+ )
36
+
37
+ task: str
38
+ llm: Optional[JevComputerUseLlm] = Field(default=None, serialization_alias="llm")
39
+ text_llm: Optional[JevTextLlm] = Field(default=None, serialization_alias="textLlm")
40
+ session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
41
+ max_failures: Optional[int] = Field(default=None, serialization_alias="maxFailures")
42
+ max_steps: Optional[int] = Field(default=None, serialization_alias="maxSteps")
43
+ keep_browser_open: Optional[bool] = Field(
44
+ default=None, serialization_alias="keepBrowserOpen"
45
+ )
46
+ session_options: Optional[CreateSessionParams] = Field(
47
+ default=None, serialization_alias="sessionOptions"
48
+ )
49
+ use_custom_api_keys: Optional[bool] = Field(
50
+ default=None, serialization_alias="useCustomApiKeys"
51
+ )
52
+ api_keys: Optional[JevComputerUseApiKeys] = Field(
53
+ default=None, serialization_alias="apiKeys"
54
+ )
55
+
56
+
57
+ class StartJevComputerUseTaskResponse(BaseModel):
58
+ """
59
+ Response from starting a Jev Computer Use task.
60
+ """
61
+
62
+ model_config = ConfigDict(
63
+ populate_by_alias=True,
64
+ )
65
+
66
+ job_id: str = Field(alias="jobId")
67
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
68
+
69
+
70
+ class JevComputerUseTaskStatusResponse(BaseModel):
71
+ """
72
+ Response from getting a Jev Computer Use task status.
73
+ """
74
+
75
+ model_config = ConfigDict(
76
+ populate_by_alias=True,
77
+ )
78
+
79
+ status: JevComputerUseTaskStatus
80
+
81
+
82
+ class JevComputerUseTaskData(BaseModel):
83
+ model_config = ConfigDict(
84
+ populate_by_alias=True,
85
+ )
86
+
87
+ steps: List[Dict[str, Any]]
88
+ final_result: Optional[str] = Field(default=None, alias="finalResult")
89
+
90
+
91
+ class JevComputerUseTaskMetadata(BaseModel):
92
+ model_config = ConfigDict(
93
+ populate_by_alias=True,
94
+ )
95
+
96
+ input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
97
+ output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
98
+ num_task_steps_completed: Optional[int] = Field(
99
+ default=None, alias="numTaskStepsCompleted"
100
+ )
101
+
102
+
103
+ class JevComputerUseTaskResponse(BaseModel):
104
+ """
105
+ Response from a Jev Computer Use task.
106
+ """
107
+
108
+ model_config = ConfigDict(
109
+ populate_by_alias=True,
110
+ )
111
+
112
+ job_id: str = Field(alias="jobId")
113
+ status: JevComputerUseTaskStatus
114
+ metadata: Optional[JevComputerUseTaskMetadata] = Field(
115
+ default=None, alias="metadata"
116
+ )
117
+ data: Optional[JevComputerUseTaskData] = Field(default=None, alias="data")
118
+ error: Optional[str] = Field(default=None, alias="error")
119
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -68,6 +68,7 @@ HyperAgentLlm = Literal[
68
68
  "gemini-3-flash-preview",
69
69
  ]
70
70
  ClaudeComputerUseLlm = Literal[
71
+ "claude-opus-5-5",
71
72
  "claude-fable-5-1",
72
73
  "claude-opus-5",
73
74
  "claude-opus-4-5",
@@ -91,6 +92,8 @@ ClaudeComputerUseReasoningEffort = Literal[
91
92
  CuaLlm = Literal[
92
93
  "computer-use-preview",
93
94
  "gpt-6-astra",
95
+ "gpt-6-sol",
96
+ "gpt-6-luna",
94
97
  "gpt-5.6-sol",
95
98
  "gpt-5.6-terra",
96
99
  "gpt-5.6-luna",
@@ -138,6 +141,11 @@ MetaReasoningEffort = Literal[
138
141
  "xhigh",
139
142
  "max",
140
143
  ]
144
+ JevComputerUseLlm = Literal[
145
+ "jev-1.13.0",
146
+ "jev-latest",
147
+ ]
148
+ JevTextLlm = Literal["gemini-3.5-flash-lite",]
141
149
  SessionRegion = Literal[
142
150
  "us",
143
151
  "us-central",
@@ -20,6 +20,7 @@ from .agents import (
20
20
  GeminiComputerUseApiKeys,
21
21
  GrokComputerUseApiKeys,
22
22
  HyperAgentApiKeys,
23
+ JevComputerUseApiKeys,
23
24
  MetaComputerUseApiKeys,
24
25
  StartBrowserUseTaskParams,
25
26
  StartClaudeComputerUseTaskParams,
@@ -27,6 +28,7 @@ from .agents import (
27
28
  StartGeminiComputerUseTaskParams,
28
29
  StartGrokComputerUseTaskParams,
29
30
  StartHyperAgentTaskParams,
31
+ StartJevComputerUseTaskParams,
30
32
  StartMetaComputerUseTaskParams,
31
33
  )
32
34
  from .computer_action import (
@@ -186,6 +188,7 @@ __all__ = [
186
188
  "GeminiComputerUseApiKeys",
187
189
  "GrokComputerUseApiKeys",
188
190
  "HyperAgentApiKeys",
191
+ "JevComputerUseApiKeys",
189
192
  "MetaComputerUseApiKeys",
190
193
  "StartBrowserUseTaskParams",
191
194
  "StartClaudeComputerUseTaskParams",
@@ -193,6 +196,7 @@ __all__ = [
193
196
  "StartGeminiComputerUseTaskParams",
194
197
  "StartGrokComputerUseTaskParams",
195
198
  "StartHyperAgentTaskParams",
199
+ "StartJevComputerUseTaskParams",
196
200
  "StartMetaComputerUseTaskParams",
197
201
  "ClickActionParams",
198
202
  "ComputerActionMouseButton",
@@ -14,6 +14,8 @@ from hyperbrowser.models.consts import (
14
14
  GrokReasoningEffort,
15
15
  MetaComputerUseLlm,
16
16
  MetaReasoningEffort,
17
+ JevComputerUseLlm,
18
+ JevTextLlm,
17
19
  HyperAgentLlm,
18
20
  HyperAgentVersion,
19
21
  )
@@ -144,6 +146,28 @@ class StartMetaComputerUseTaskParams(TypedDict, total=False):
144
146
  use_computer_action: Optional[bool]
145
147
 
146
148
 
149
+ class JevComputerUseApiKeys(TypedDict, total=False):
150
+ """Provider API keys for a Jev Computer Use task."""
151
+
152
+ jev: Optional[str]
153
+ google: Optional[str]
154
+
155
+
156
+ class StartJevComputerUseTaskParams(TypedDict, total=False):
157
+ """Parameters for starting a Jev Computer Use task."""
158
+
159
+ task: Required[str]
160
+ llm: Optional[JevComputerUseLlm]
161
+ text_llm: Optional[JevTextLlm]
162
+ session_id: Optional[str]
163
+ max_failures: Optional[int]
164
+ max_steps: Optional[int]
165
+ keep_browser_open: Optional[bool]
166
+ session_options: Optional[CreateSessionParams]
167
+ use_custom_api_keys: Optional[bool]
168
+ api_keys: Optional[JevComputerUseApiKeys]
169
+
170
+
147
171
  class CuaApiKeys(TypedDict, total=False):
148
172
  """Provider API keys for an OpenAI CUA task."""
149
173
 
@@ -204,6 +228,7 @@ __all__ = [
204
228
  "GeminiComputerUseApiKeys",
205
229
  "GrokComputerUseApiKeys",
206
230
  "HyperAgentApiKeys",
231
+ "JevComputerUseApiKeys",
207
232
  "MetaComputerUseApiKeys",
208
233
  "StartBrowserUseTaskParams",
209
234
  "StartClaudeComputerUseTaskParams",
@@ -211,5 +236,6 @@ __all__ = [
211
236
  "StartGeminiComputerUseTaskParams",
212
237
  "StartGrokComputerUseTaskParams",
213
238
  "StartHyperAgentTaskParams",
239
+ "StartJevComputerUseTaskParams",
214
240
  "StartMetaComputerUseTaskParams",
215
241
  ]
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hyperbrowser"
3
- version = "1.5.0"
3
+ version = "1.6.0"
4
4
  description = "Python SDK for hyperbrowser"
5
5
  authors = ["Nikhil Shahi <nshahi1998@gmail.com>"]
6
6
  license = "MIT"
File without changes
File without changes