hyperbrowser 1.4.4__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.4.4 → hyperbrowser-1.6.0}/PKG-INFO +1 -1
  2. {hyperbrowser-1.4.4/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.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandbox.py +21 -0
  5. {hyperbrowser-1.4.4/hyperbrowser/client/managers/async_manager → hyperbrowser-1.6.0/hyperbrowser/client/managers/sync_manager}/agents/__init__.py +2 -0
  6. hyperbrowser-1.6.0/hyperbrowser/client/managers/sync_manager/agents/jev_computer_use.py +84 -0
  7. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandbox.py +21 -0
  8. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/__init__.py +20 -0
  9. hyperbrowser-1.6.0/hyperbrowser/models/agents/jev_computer_use.py +119 -0
  10. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/consts.py +8 -0
  11. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/sandbox.py +7 -0
  12. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/__init__.py +4 -0
  13. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/agents.py +26 -0
  14. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/sandbox.py +3 -0
  15. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/pyproject.toml +1 -1
  16. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/LICENSE +0 -0
  17. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/README.md +0 -0
  18. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/__init__.py +0 -0
  19. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/_request.py +0 -0
  20. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/async_client.py +0 -0
  21. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/base.py +0 -0
  22. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/browser_use.py +0 -0
  23. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/claude_computer_use.py +0 -0
  24. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/cua.py +0 -0
  25. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +0 -0
  26. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/grok_computer_use.py +0 -0
  27. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/hyper_agent.py +0 -0
  28. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/agents/meta_computer_use.py +0 -0
  29. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/computer_action.py +0 -0
  30. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
  31. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
  32. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/extract.py +0 -0
  33. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
  34. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/__init__.py +0 -0
  35. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_files.py +0 -0
  36. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_processes.py +0 -0
  37. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_terminal.py +0 -0
  38. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_transport.py +0 -0
  39. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
  40. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/session.py +0 -0
  41. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/team.py +0 -0
  42. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/volume.py +0 -0
  43. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/web/__init__.py +0 -0
  44. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/web/batch_fetch.py +0 -0
  45. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/async_manager/web/crawl.py +0 -0
  46. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/__init__.py +0 -0
  47. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/dockerfile_analysis.py +0 -0
  48. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/dockerignore.py +0 -0
  49. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/image_build.py +0 -0
  50. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sandboxes/shared.py +0 -0
  51. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/browser_use.py +0 -0
  52. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +0 -0
  53. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/cua.py +0 -0
  54. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py +0 -0
  55. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/grok_computer_use.py +0 -0
  56. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/hyper_agent.py +0 -0
  57. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/agents/meta_computer_use.py +0 -0
  58. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/computer_action.py +0 -0
  59. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
  60. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
  61. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/extract.py +0 -0
  62. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
  63. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/__init__.py +0 -0
  64. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_files.py +0 -0
  65. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_processes.py +0 -0
  66. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_terminal.py +0 -0
  67. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_transport.py +0 -0
  68. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
  69. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/session.py +0 -0
  70. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/team.py +0 -0
  71. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/volume.py +0 -0
  72. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/web/__init__.py +0 -0
  73. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/web/batch_fetch.py +0 -0
  74. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/managers/sync_manager/web/crawl.py +0 -0
  75. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/client/sync.py +0 -0
  76. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/config.py +0 -0
  77. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/exceptions.py +0 -0
  78. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/_parsers.py +0 -0
  79. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/browser_use.py +0 -0
  80. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/claude_computer_use.py +0 -0
  81. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/cua.py +0 -0
  82. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/gemini_computer_use.py +0 -0
  83. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/grok_computer_use.py +0 -0
  84. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/hyper_agent.py +0 -0
  85. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/agents/meta_computer_use.py +0 -0
  86. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/computer_action.py +0 -0
  87. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/crawl.py +0 -0
  88. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/extension.py +0 -0
  89. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/extract.py +0 -0
  90. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/profile.py +0 -0
  91. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/scrape.py +0 -0
  92. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/session.py +0 -0
  93. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/team.py +0 -0
  94. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/volume.py +0 -0
  95. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/web/batch_fetch.py +0 -0
  96. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/web/branding.py +0 -0
  97. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/web/common.py +0 -0
  98. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/web/crawl.py +0 -0
  99. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/web/fetch.py +0 -0
  100. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/models/web/search.py +0 -0
  101. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/py.typed +0 -0
  102. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/sandbox_common.py +0 -0
  103. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/tools/__init__.py +0 -0
  104. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/tools/anthropic.py +0 -0
  105. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/tools/openai.py +0 -0
  106. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/tools/schema.py +0 -0
  107. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/transport/async_transport.py +0 -0
  108. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/transport/base.py +0 -0
  109. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/transport/sync.py +0 -0
  110. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/_json.py +0 -0
  111. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/computer_action.py +0 -0
  112. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/crawl.py +0 -0
  113. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/extension.py +0 -0
  114. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/extract.py +0 -0
  115. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/profile.py +0 -0
  116. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/scrape.py +0 -0
  117. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/session.py +0 -0
  118. {hyperbrowser-1.4.4 → hyperbrowser-1.6.0}/hyperbrowser/types/volume.py +0 -0
  119. {hyperbrowser-1.4.4 → 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.4.4
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)
@@ -583,6 +583,9 @@ class SandboxManager:
583
583
  platform: str = IMAGE_BUILD_SOURCE_PLATFORM,
584
584
  image_init: Optional[Union[SandboxImageInitDict, SandboxImageInit]] = None,
585
585
  image_config_user: Optional[str] = None,
586
+ builder_cpus: Optional[int] = None,
587
+ builder_memory_mib: Optional[int] = None,
588
+ builder_scratch_mib: Optional[int] = None,
586
589
  wait: bool = True,
587
590
  poll_interval: float = 3.0,
588
591
  wait_timeout: Optional[float] = 35 * 60,
@@ -652,6 +655,9 @@ class SandboxManager:
652
655
  image_config_user=normalized_image_config_user,
653
656
  image_init=normalized_image_init,
654
657
  docker_image_manifest=packaged.manifest,
658
+ builder_cpus=builder_cpus,
659
+ builder_memory_mib=builder_memory_mib,
660
+ builder_scratch_mib=builder_scratch_mib,
655
661
  )
656
662
  )
657
663
  build_id = create_result.build.id
@@ -719,6 +725,9 @@ class SandboxManager:
719
725
  remote_full_context: bool,
720
726
  image_init: Optional[Union[SandboxImageInitDict, SandboxImageInit]],
721
727
  image_config_user: Optional[str],
728
+ builder_cpus: Optional[int],
729
+ builder_memory_mib: Optional[int],
730
+ builder_scratch_mib: Optional[int],
722
731
  wait: bool,
723
732
  poll_interval: float,
724
733
  wait_timeout: Optional[float],
@@ -752,6 +761,9 @@ class SandboxManager:
752
761
  image_config_user=image_config_user,
753
762
  image_init=normalized_image_init,
754
763
  context_manifest=packaged.manifest,
764
+ builder_cpus=builder_cpus,
765
+ builder_memory_mib=builder_memory_mib,
766
+ builder_scratch_mib=builder_scratch_mib,
755
767
  )
756
768
  )
757
769
  build_id = create_result.build.id
@@ -794,6 +806,9 @@ class SandboxManager:
794
806
  build_args: Optional[Dict[str, str]] = None,
795
807
  image_init: Optional[Union[SandboxImageInitDict, SandboxImageInit]] = None,
796
808
  image_config_user: Optional[str] = None,
809
+ builder_cpus: Optional[int] = None,
810
+ builder_memory_mib: Optional[int] = None,
811
+ builder_scratch_mib: Optional[int] = None,
797
812
  wait: bool = True,
798
813
  poll_interval: float = 3.0,
799
814
  wait_timeout: Optional[float] = 35 * 60,
@@ -814,6 +829,9 @@ class SandboxManager:
814
829
  remote_full_context=remote_full_context,
815
830
  image_init=image_init,
816
831
  image_config_user=image_config_user,
832
+ builder_cpus=builder_cpus,
833
+ builder_memory_mib=builder_memory_mib,
834
+ builder_scratch_mib=builder_scratch_mib,
817
835
  wait=wait,
818
836
  poll_interval=poll_interval,
819
837
  wait_timeout=wait_timeout,
@@ -837,6 +855,9 @@ class SandboxManager:
837
855
  platform=platform,
838
856
  image_init=image_init,
839
857
  image_config_user=image_config_user,
858
+ builder_cpus=builder_cpus,
859
+ builder_memory_mib=builder_memory_mib,
860
+ builder_scratch_mib=builder_scratch_mib,
840
861
  wait=wait,
841
862
  poll_interval=poll_interval,
842
863
  wait_timeout=wait_timeout,
@@ -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)
@@ -575,6 +575,9 @@ class SandboxManager:
575
575
  platform: str = IMAGE_BUILD_SOURCE_PLATFORM,
576
576
  image_init: Optional[Union[SandboxImageInitDict, SandboxImageInit]] = None,
577
577
  image_config_user: Optional[str] = None,
578
+ builder_cpus: Optional[int] = None,
579
+ builder_memory_mib: Optional[int] = None,
580
+ builder_scratch_mib: Optional[int] = None,
578
581
  wait: bool = True,
579
582
  poll_interval: float = 3.0,
580
583
  wait_timeout: Optional[float] = 35 * 60,
@@ -642,6 +645,9 @@ class SandboxManager:
642
645
  image_config_user=normalized_image_config_user,
643
646
  image_init=normalized_image_init,
644
647
  docker_image_manifest=packaged.manifest,
648
+ builder_cpus=builder_cpus,
649
+ builder_memory_mib=builder_memory_mib,
650
+ builder_scratch_mib=builder_scratch_mib,
645
651
  )
646
652
  )
647
653
  build_id = create_result.build.id
@@ -705,6 +711,9 @@ class SandboxManager:
705
711
  remote_full_context: bool,
706
712
  image_init: Optional[Union[SandboxImageInitDict, SandboxImageInit]],
707
713
  image_config_user: Optional[str],
714
+ builder_cpus: Optional[int],
715
+ builder_memory_mib: Optional[int],
716
+ builder_scratch_mib: Optional[int],
708
717
  wait: bool,
709
718
  poll_interval: float,
710
719
  wait_timeout: Optional[float],
@@ -737,6 +746,9 @@ class SandboxManager:
737
746
  image_config_user=image_config_user,
738
747
  image_init=normalized_image_init,
739
748
  context_manifest=packaged.manifest,
749
+ builder_cpus=builder_cpus,
750
+ builder_memory_mib=builder_memory_mib,
751
+ builder_scratch_mib=builder_scratch_mib,
740
752
  )
741
753
  )
742
754
  build_id = create_result.build.id
@@ -778,6 +790,9 @@ class SandboxManager:
778
790
  build_args: Optional[Dict[str, str]] = None,
779
791
  image_init: Optional[Union[SandboxImageInitDict, SandboxImageInit]] = None,
780
792
  image_config_user: Optional[str] = None,
793
+ builder_cpus: Optional[int] = None,
794
+ builder_memory_mib: Optional[int] = None,
795
+ builder_scratch_mib: Optional[int] = None,
781
796
  wait: bool = True,
782
797
  poll_interval: float = 3.0,
783
798
  wait_timeout: Optional[float] = 35 * 60,
@@ -798,6 +813,9 @@ class SandboxManager:
798
813
  remote_full_context=remote_full_context,
799
814
  image_init=image_init,
800
815
  image_config_user=image_config_user,
816
+ builder_cpus=builder_cpus,
817
+ builder_memory_mib=builder_memory_mib,
818
+ builder_scratch_mib=builder_scratch_mib,
801
819
  wait=wait,
802
820
  poll_interval=poll_interval,
803
821
  wait_timeout=wait_timeout,
@@ -820,6 +838,9 @@ class SandboxManager:
820
838
  platform=platform,
821
839
  image_init=image_init,
822
840
  image_config_user=image_config_user,
841
+ builder_cpus=builder_cpus,
842
+ builder_memory_mib=builder_memory_mib,
843
+ builder_scratch_mib=builder_scratch_mib,
823
844
  wait=wait,
824
845
  poll_interval=poll_interval,
825
846
  wait_timeout=wait_timeout,
@@ -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",
@@ -421,6 +421,13 @@ class CreateSandboxImageBuildParams(SandboxBaseModel):
421
421
  image_name: str = Field(serialization_alias="imageName")
422
422
  input_sha256: str = Field(serialization_alias="inputSha256")
423
423
  input_size_bytes: int = Field(serialization_alias="inputSizeBytes")
424
+ builder_cpus: Optional[int] = Field(default=None, ge=1, serialization_alias="vcpus")
425
+ builder_memory_mib: Optional[int] = Field(
426
+ default=None, ge=1, serialization_alias="memMiB"
427
+ )
428
+ builder_scratch_mib: Optional[int] = Field(
429
+ default=None, ge=1, serialization_alias="scratchMiB"
430
+ )
424
431
  input_format: Optional[SandboxImageBuildInputFormat] = Field(
425
432
  default=None,
426
433
  serialization_alias="inputFormat",
@@ -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
  ]
@@ -208,6 +208,9 @@ class CreateSandboxImageBuildParams(TypedDict, total=False):
208
208
  image_name: Required[str]
209
209
  input_sha256: Required[str]
210
210
  input_size_bytes: Required[int]
211
+ builder_cpus: Optional[int]
212
+ builder_memory_mib: Optional[int]
213
+ builder_scratch_mib: Optional[int]
211
214
  input_format: SandboxImageBuildInputFormat
212
215
  source_platform: SandboxImageBuildSourcePlatform
213
216
  image_config_user: Optional[str]
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hyperbrowser"
3
- version = "1.4.4"
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