asteroid-odyssey 1.3.0__py3-none-any.whl → 1.3.1__py3-none-any.whl
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.
- asteroid_odyssey/__init__.py +9 -1
- asteroid_odyssey/agents_v1_gen/__init__.py +2 -0
- asteroid_odyssey/agents_v1_gen/models/__init__.py +1 -0
- asteroid_odyssey/agents_v1_gen/models/agent_profile.py +11 -1
- asteroid_odyssey/agents_v1_gen/models/cookie.py +113 -0
- asteroid_odyssey/agents_v1_gen/models/create_agent_profile_request.py +12 -2
- asteroid_odyssey/agents_v1_gen/models/update_agent_profile_request.py +14 -2
- asteroid_odyssey/agents_v2_gen/__init__.py +8 -0
- asteroid_odyssey/agents_v2_gen/configuration.py +2 -2
- asteroid_odyssey/agents_v2_gen/models/__init__.py +4 -0
- asteroid_odyssey/agents_v2_gen/models/execution_activity_status_changed_payload.py +27 -3
- asteroid_odyssey/agents_v2_gen/models/execution_awaiting_confirmation_payload.py +87 -0
- asteroid_odyssey/agents_v2_gen/models/execution_completed_payload.py +105 -0
- asteroid_odyssey/agents_v2_gen/models/execution_failed_payload.py +87 -0
- asteroid_odyssey/agents_v2_gen/models/execution_paused_payload.py +87 -0
- asteroid_odyssey/client.py +230 -7
- {asteroid_odyssey-1.3.0.dist-info → asteroid_odyssey-1.3.1.dist-info}/METADATA +1 -1
- {asteroid_odyssey-1.3.0.dist-info → asteroid_odyssey-1.3.1.dist-info}/RECORD +20 -15
- {asteroid_odyssey-1.3.0.dist-info → asteroid_odyssey-1.3.1.dist-info}/WHEEL +0 -0
- {asteroid_odyssey-1.3.0.dist-info → asteroid_odyssey-1.3.1.dist-info}/top_level.txt +0 -0
asteroid_odyssey/__init__.py
CHANGED
|
@@ -7,9 +7,13 @@ from .client import (
|
|
|
7
7
|
wait_for_execution_result,
|
|
8
8
|
upload_execution_files,
|
|
9
9
|
get_browser_session_recording,
|
|
10
|
+
get_last_n_execution_activities,
|
|
11
|
+
add_message_to_execution,
|
|
12
|
+
wait_for_agent_interaction,
|
|
10
13
|
AsteroidAPIError,
|
|
11
14
|
ExecutionError,
|
|
12
|
-
TimeoutError
|
|
15
|
+
TimeoutError,
|
|
16
|
+
AgentInteractionResult
|
|
13
17
|
)
|
|
14
18
|
from .agents_v1_gen import ExecutionResult
|
|
15
19
|
|
|
@@ -22,8 +26,12 @@ __all__ = [
|
|
|
22
26
|
'wait_for_execution_result',
|
|
23
27
|
'upload_execution_files',
|
|
24
28
|
'get_browser_session_recording',
|
|
29
|
+
'get_last_n_execution_activities',
|
|
30
|
+
'add_message_to_execution',
|
|
31
|
+
'wait_for_agent_interaction',
|
|
25
32
|
'AsteroidAPIError',
|
|
26
33
|
'ExecutionError',
|
|
27
34
|
'TimeoutError',
|
|
35
|
+
'AgentInteractionResult',
|
|
28
36
|
'ExecutionResult'
|
|
29
37
|
]
|
|
@@ -32,6 +32,7 @@ __all__ = [
|
|
|
32
32
|
"ApiException",
|
|
33
33
|
"AgentProfile",
|
|
34
34
|
"BrowserSessionRecordingResponse",
|
|
35
|
+
"Cookie",
|
|
35
36
|
"CountryCode",
|
|
36
37
|
"CreateAgentProfileRequest",
|
|
37
38
|
"Credential",
|
|
@@ -69,6 +70,7 @@ from asteroid_odyssey.agents_v1_gen.exceptions import ApiException as ApiExcepti
|
|
|
69
70
|
# import models into sdk package
|
|
70
71
|
from asteroid_odyssey.agents_v1_gen.models.agent_profile import AgentProfile as AgentProfile
|
|
71
72
|
from asteroid_odyssey.agents_v1_gen.models.browser_session_recording_response import BrowserSessionRecordingResponse as BrowserSessionRecordingResponse
|
|
73
|
+
from asteroid_odyssey.agents_v1_gen.models.cookie import Cookie as Cookie
|
|
72
74
|
from asteroid_odyssey.agents_v1_gen.models.country_code import CountryCode as CountryCode
|
|
73
75
|
from asteroid_odyssey.agents_v1_gen.models.create_agent_profile_request import CreateAgentProfileRequest as CreateAgentProfileRequest
|
|
74
76
|
from asteroid_odyssey.agents_v1_gen.models.credential import Credential as Credential
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
# import models into model package
|
|
17
17
|
from asteroid_odyssey.agents_v1_gen.models.agent_profile import AgentProfile
|
|
18
18
|
from asteroid_odyssey.agents_v1_gen.models.browser_session_recording_response import BrowserSessionRecordingResponse
|
|
19
|
+
from asteroid_odyssey.agents_v1_gen.models.cookie import Cookie
|
|
19
20
|
from asteroid_odyssey.agents_v1_gen.models.country_code import CountryCode
|
|
20
21
|
from asteroid_odyssey.agents_v1_gen.models.create_agent_profile_request import CreateAgentProfileRequest
|
|
21
22
|
from asteroid_odyssey.agents_v1_gen.models.credential import Credential
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
from datetime import datetime
|
|
21
21
|
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List
|
|
23
|
+
from asteroid_odyssey.agents_v1_gen.models.cookie import Cookie
|
|
23
24
|
from asteroid_odyssey.agents_v1_gen.models.country_code import CountryCode
|
|
24
25
|
from asteroid_odyssey.agents_v1_gen.models.credential import Credential
|
|
25
26
|
from asteroid_odyssey.agents_v1_gen.models.proxy_type import ProxyType
|
|
@@ -39,9 +40,10 @@ class AgentProfile(BaseModel):
|
|
|
39
40
|
captcha_solver_active: StrictBool = Field(description="Whether the captcha solver is active for this profile")
|
|
40
41
|
sticky_ip: StrictBool = Field(description="Whether the same IP address should be used for all executions of this profile")
|
|
41
42
|
credentials: List[Credential] = Field(description="List of credentials associated with this agent profile")
|
|
43
|
+
cookies: List[Cookie] = Field(description="List of cookies associated with this agent profile")
|
|
42
44
|
created_at: datetime = Field(description="The date and time the agent profile was created")
|
|
43
45
|
updated_at: datetime = Field(description="The last update time of the agent profile")
|
|
44
|
-
__properties: ClassVar[List[str]] = ["id", "name", "description", "organization_id", "proxy_cc", "proxy_type", "captcha_solver_active", "sticky_ip", "credentials", "created_at", "updated_at"]
|
|
46
|
+
__properties: ClassVar[List[str]] = ["id", "name", "description", "organization_id", "proxy_cc", "proxy_type", "captcha_solver_active", "sticky_ip", "credentials", "cookies", "created_at", "updated_at"]
|
|
45
47
|
|
|
46
48
|
model_config = ConfigDict(
|
|
47
49
|
populate_by_name=True,
|
|
@@ -89,6 +91,13 @@ class AgentProfile(BaseModel):
|
|
|
89
91
|
if _item_credentials:
|
|
90
92
|
_items.append(_item_credentials.to_dict())
|
|
91
93
|
_dict['credentials'] = _items
|
|
94
|
+
# override the default output from pydantic by calling `to_dict()` of each item in cookies (list)
|
|
95
|
+
_items = []
|
|
96
|
+
if self.cookies:
|
|
97
|
+
for _item_cookies in self.cookies:
|
|
98
|
+
if _item_cookies:
|
|
99
|
+
_items.append(_item_cookies.to_dict())
|
|
100
|
+
_dict['cookies'] = _items
|
|
92
101
|
return _dict
|
|
93
102
|
|
|
94
103
|
@classmethod
|
|
@@ -110,6 +119,7 @@ class AgentProfile(BaseModel):
|
|
|
110
119
|
"captcha_solver_active": obj.get("captcha_solver_active"),
|
|
111
120
|
"sticky_ip": obj.get("sticky_ip"),
|
|
112
121
|
"credentials": [Credential.from_dict(_item) for _item in obj["credentials"]] if obj.get("credentials") is not None else None,
|
|
122
|
+
"cookies": [Cookie.from_dict(_item) for _item in obj["cookies"]] if obj.get("cookies") is not None else None,
|
|
113
123
|
"created_at": obj.get("created_at"),
|
|
114
124
|
"updated_at": obj.get("updated_at")
|
|
115
125
|
})
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Asteroid Agents API
|
|
5
|
+
|
|
6
|
+
Version 1 of the Asteroid Agents API
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: v1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
|
|
22
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
|
|
26
|
+
class Cookie(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
Cookie
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
id: Optional[StrictStr] = Field(default=None, description="Unique identifier for the cookie")
|
|
31
|
+
name: StrictStr = Field(description="Display name for the cookie")
|
|
32
|
+
key: StrictStr = Field(description="The cookie name/key")
|
|
33
|
+
value: StrictStr = Field(description="The cookie value")
|
|
34
|
+
expiry: Optional[datetime] = Field(default=None, description="When the cookie expires (optional)")
|
|
35
|
+
domain: StrictStr = Field(description="The domain for which the cookie is valid")
|
|
36
|
+
secure: StrictBool = Field(description="Whether the cookie should only be sent over HTTPS")
|
|
37
|
+
same_site: StrictStr = Field(description="SameSite attribute for the cookie")
|
|
38
|
+
http_only: StrictBool = Field(description="Whether the cookie should be accessible only via HTTP(S)")
|
|
39
|
+
created_at: datetime = Field(description="When the cookie was created")
|
|
40
|
+
__properties: ClassVar[List[str]] = ["id", "name", "key", "value", "expiry", "domain", "secure", "same_site", "http_only", "created_at"]
|
|
41
|
+
|
|
42
|
+
@field_validator('same_site')
|
|
43
|
+
def same_site_validate_enum(cls, value):
|
|
44
|
+
"""Validates the enum"""
|
|
45
|
+
if value not in set(['Strict', 'Lax', 'None']):
|
|
46
|
+
raise ValueError("must be one of enum values ('Strict', 'Lax', 'None')")
|
|
47
|
+
return value
|
|
48
|
+
|
|
49
|
+
model_config = ConfigDict(
|
|
50
|
+
populate_by_name=True,
|
|
51
|
+
validate_assignment=True,
|
|
52
|
+
protected_namespaces=(),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def to_str(self) -> str:
|
|
57
|
+
"""Returns the string representation of the model using alias"""
|
|
58
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
59
|
+
|
|
60
|
+
def to_json(self) -> str:
|
|
61
|
+
"""Returns the JSON representation of the model using alias"""
|
|
62
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
63
|
+
return json.dumps(self.to_dict())
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
67
|
+
"""Create an instance of Cookie from a JSON string"""
|
|
68
|
+
return cls.from_dict(json.loads(json_str))
|
|
69
|
+
|
|
70
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
71
|
+
"""Return the dictionary representation of the model using alias.
|
|
72
|
+
|
|
73
|
+
This has the following differences from calling pydantic's
|
|
74
|
+
`self.model_dump(by_alias=True)`:
|
|
75
|
+
|
|
76
|
+
* `None` is only added to the output dict for nullable fields that
|
|
77
|
+
were set at model initialization. Other fields with value `None`
|
|
78
|
+
are ignored.
|
|
79
|
+
"""
|
|
80
|
+
excluded_fields: Set[str] = set([
|
|
81
|
+
])
|
|
82
|
+
|
|
83
|
+
_dict = self.model_dump(
|
|
84
|
+
by_alias=True,
|
|
85
|
+
exclude=excluded_fields,
|
|
86
|
+
exclude_none=True,
|
|
87
|
+
)
|
|
88
|
+
return _dict
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
92
|
+
"""Create an instance of Cookie from a dict"""
|
|
93
|
+
if obj is None:
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
if not isinstance(obj, dict):
|
|
97
|
+
return cls.model_validate(obj)
|
|
98
|
+
|
|
99
|
+
_obj = cls.model_validate({
|
|
100
|
+
"id": obj.get("id"),
|
|
101
|
+
"name": obj.get("name"),
|
|
102
|
+
"key": obj.get("key"),
|
|
103
|
+
"value": obj.get("value"),
|
|
104
|
+
"expiry": obj.get("expiry"),
|
|
105
|
+
"domain": obj.get("domain"),
|
|
106
|
+
"secure": obj.get("secure"),
|
|
107
|
+
"same_site": obj.get("same_site"),
|
|
108
|
+
"http_only": obj.get("http_only"),
|
|
109
|
+
"created_at": obj.get("created_at")
|
|
110
|
+
})
|
|
111
|
+
return _obj
|
|
112
|
+
|
|
113
|
+
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
|
|
21
21
|
from typing import Any, ClassVar, Dict, List
|
|
22
22
|
from typing_extensions import Annotated
|
|
23
|
+
from asteroid_odyssey.agents_v1_gen.models.cookie import Cookie
|
|
23
24
|
from asteroid_odyssey.agents_v1_gen.models.country_code import CountryCode
|
|
24
25
|
from asteroid_odyssey.agents_v1_gen.models.credential import Credential
|
|
25
26
|
from asteroid_odyssey.agents_v1_gen.models.proxy_type import ProxyType
|
|
@@ -38,7 +39,8 @@ class CreateAgentProfileRequest(BaseModel):
|
|
|
38
39
|
captcha_solver_active: StrictBool = Field(description="Whether the captcha solver should be active for this profile")
|
|
39
40
|
sticky_ip: StrictBool = Field(description="Whether the same IP address should be used for all executions of this profile")
|
|
40
41
|
credentials: List[Credential] = Field(description="Optional list of credentials to create with the profile")
|
|
41
|
-
|
|
42
|
+
cookies: List[Cookie] = Field(description="Optional list of cookies to create with the profile")
|
|
43
|
+
__properties: ClassVar[List[str]] = ["name", "description", "organization_id", "proxy_cc", "proxy_type", "captcha_solver_active", "sticky_ip", "credentials", "cookies"]
|
|
42
44
|
|
|
43
45
|
model_config = ConfigDict(
|
|
44
46
|
populate_by_name=True,
|
|
@@ -86,6 +88,13 @@ class CreateAgentProfileRequest(BaseModel):
|
|
|
86
88
|
if _item_credentials:
|
|
87
89
|
_items.append(_item_credentials.to_dict())
|
|
88
90
|
_dict['credentials'] = _items
|
|
91
|
+
# override the default output from pydantic by calling `to_dict()` of each item in cookies (list)
|
|
92
|
+
_items = []
|
|
93
|
+
if self.cookies:
|
|
94
|
+
for _item_cookies in self.cookies:
|
|
95
|
+
if _item_cookies:
|
|
96
|
+
_items.append(_item_cookies.to_dict())
|
|
97
|
+
_dict['cookies'] = _items
|
|
89
98
|
return _dict
|
|
90
99
|
|
|
91
100
|
@classmethod
|
|
@@ -105,7 +114,8 @@ class CreateAgentProfileRequest(BaseModel):
|
|
|
105
114
|
"proxy_type": obj.get("proxy_type"),
|
|
106
115
|
"captcha_solver_active": obj.get("captcha_solver_active") if obj.get("captcha_solver_active") is not None else False,
|
|
107
116
|
"sticky_ip": obj.get("sticky_ip") if obj.get("sticky_ip") is not None else False,
|
|
108
|
-
"credentials": [Credential.from_dict(_item) for _item in obj["credentials"]] if obj.get("credentials") is not None else None
|
|
117
|
+
"credentials": [Credential.from_dict(_item) for _item in obj["credentials"]] if obj.get("credentials") is not None else None,
|
|
118
|
+
"cookies": [Cookie.from_dict(_item) for _item in obj["cookies"]] if obj.get("cookies") is not None else None
|
|
109
119
|
})
|
|
110
120
|
return _obj
|
|
111
121
|
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
|
|
21
21
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
22
|
from typing_extensions import Annotated
|
|
23
|
+
from asteroid_odyssey.agents_v1_gen.models.cookie import Cookie
|
|
23
24
|
from asteroid_odyssey.agents_v1_gen.models.country_code import CountryCode
|
|
24
25
|
from asteroid_odyssey.agents_v1_gen.models.credential import Credential
|
|
25
26
|
from asteroid_odyssey.agents_v1_gen.models.proxy_type import ProxyType
|
|
@@ -38,7 +39,9 @@ class UpdateAgentProfileRequest(BaseModel):
|
|
|
38
39
|
sticky_ip: Optional[StrictBool] = Field(default=None, description="Whether the same IP address should be used for all executions of this profile")
|
|
39
40
|
credentials_to_add: Optional[List[Credential]] = Field(default=None, description="List of credentials to add to the profile")
|
|
40
41
|
credentials_to_delete: Optional[List[StrictStr]] = Field(default=None, description="List of credential IDs to delete from the profile")
|
|
41
|
-
|
|
42
|
+
cookies_to_add: Optional[List[Cookie]] = Field(default=None, description="List of cookies to add to the profile")
|
|
43
|
+
cookies_to_delete: Optional[List[StrictStr]] = Field(default=None, description="List of cookie IDs to delete from the profile")
|
|
44
|
+
__properties: ClassVar[List[str]] = ["name", "description", "proxy_cc", "proxy_type", "captcha_solver_active", "sticky_ip", "credentials_to_add", "credentials_to_delete", "cookies_to_add", "cookies_to_delete"]
|
|
42
45
|
|
|
43
46
|
model_config = ConfigDict(
|
|
44
47
|
populate_by_name=True,
|
|
@@ -86,6 +89,13 @@ class UpdateAgentProfileRequest(BaseModel):
|
|
|
86
89
|
if _item_credentials_to_add:
|
|
87
90
|
_items.append(_item_credentials_to_add.to_dict())
|
|
88
91
|
_dict['credentials_to_add'] = _items
|
|
92
|
+
# override the default output from pydantic by calling `to_dict()` of each item in cookies_to_add (list)
|
|
93
|
+
_items = []
|
|
94
|
+
if self.cookies_to_add:
|
|
95
|
+
for _item_cookies_to_add in self.cookies_to_add:
|
|
96
|
+
if _item_cookies_to_add:
|
|
97
|
+
_items.append(_item_cookies_to_add.to_dict())
|
|
98
|
+
_dict['cookies_to_add'] = _items
|
|
89
99
|
return _dict
|
|
90
100
|
|
|
91
101
|
@classmethod
|
|
@@ -105,7 +115,9 @@ class UpdateAgentProfileRequest(BaseModel):
|
|
|
105
115
|
"captcha_solver_active": obj.get("captcha_solver_active"),
|
|
106
116
|
"sticky_ip": obj.get("sticky_ip"),
|
|
107
117
|
"credentials_to_add": [Credential.from_dict(_item) for _item in obj["credentials_to_add"]] if obj.get("credentials_to_add") is not None else None,
|
|
108
|
-
"credentials_to_delete": obj.get("credentials_to_delete")
|
|
118
|
+
"credentials_to_delete": obj.get("credentials_to_delete"),
|
|
119
|
+
"cookies_to_add": [Cookie.from_dict(_item) for _item in obj["cookies_to_add"]] if obj.get("cookies_to_add") is not None else None,
|
|
120
|
+
"cookies_to_delete": obj.get("cookies_to_delete")
|
|
109
121
|
})
|
|
110
122
|
return _obj
|
|
111
123
|
|
|
@@ -50,6 +50,10 @@ __all__ = [
|
|
|
50
50
|
"ExecutionActivityStepStartedPayload",
|
|
51
51
|
"ExecutionActivityTransitionedNodePayload",
|
|
52
52
|
"ExecutionActivityUserMessageReceivedPayload",
|
|
53
|
+
"ExecutionAwaitingConfirmationPayload",
|
|
54
|
+
"ExecutionCompletedPayload",
|
|
55
|
+
"ExecutionFailedPayload",
|
|
56
|
+
"ExecutionPausedPayload",
|
|
53
57
|
"ExecutionStatus",
|
|
54
58
|
"ExecutionTerminalPayload",
|
|
55
59
|
"ExecutionUserMessagesAddTextBody",
|
|
@@ -93,6 +97,10 @@ from asteroid_odyssey.agents_v2_gen.models.execution_activity_step_completed_pay
|
|
|
93
97
|
from asteroid_odyssey.agents_v2_gen.models.execution_activity_step_started_payload import ExecutionActivityStepStartedPayload as ExecutionActivityStepStartedPayload
|
|
94
98
|
from asteroid_odyssey.agents_v2_gen.models.execution_activity_transitioned_node_payload import ExecutionActivityTransitionedNodePayload as ExecutionActivityTransitionedNodePayload
|
|
95
99
|
from asteroid_odyssey.agents_v2_gen.models.execution_activity_user_message_received_payload import ExecutionActivityUserMessageReceivedPayload as ExecutionActivityUserMessageReceivedPayload
|
|
100
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_awaiting_confirmation_payload import ExecutionAwaitingConfirmationPayload as ExecutionAwaitingConfirmationPayload
|
|
101
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_completed_payload import ExecutionCompletedPayload as ExecutionCompletedPayload
|
|
102
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_failed_payload import ExecutionFailedPayload as ExecutionFailedPayload
|
|
103
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_paused_payload import ExecutionPausedPayload as ExecutionPausedPayload
|
|
96
104
|
from asteroid_odyssey.agents_v2_gen.models.execution_status import ExecutionStatus as ExecutionStatus
|
|
97
105
|
from asteroid_odyssey.agents_v2_gen.models.execution_terminal_payload import ExecutionTerminalPayload as ExecutionTerminalPayload
|
|
98
106
|
from asteroid_odyssey.agents_v2_gen.models.execution_user_messages_add_text_body import ExecutionUserMessagesAddTextBody as ExecutionUserMessagesAddTextBody
|
|
@@ -209,7 +209,7 @@ conf = asteroid_odyssey.agents_v2_gen.Configuration(
|
|
|
209
209
|
) -> None:
|
|
210
210
|
"""Constructor
|
|
211
211
|
"""
|
|
212
|
-
self._base_path = "https://odyssey.asteroid.ai/agents/
|
|
212
|
+
self._base_path = "https://odyssey.asteroid.ai/agents/v2" if host is None else host
|
|
213
213
|
"""Default Base url
|
|
214
214
|
"""
|
|
215
215
|
self.server_index = 0 if server_index is None and host is None else server_index
|
|
@@ -546,7 +546,7 @@ conf = asteroid_odyssey.agents_v2_gen.Configuration(
|
|
|
546
546
|
'variables': {
|
|
547
547
|
'version': {
|
|
548
548
|
'description': "No description provided",
|
|
549
|
-
'default_value': "",
|
|
549
|
+
'default_value': "v2",
|
|
550
550
|
'enum_values': [
|
|
551
551
|
"frontend",
|
|
552
552
|
"v2"
|
|
@@ -36,6 +36,10 @@ from asteroid_odyssey.agents_v2_gen.models.execution_activity_step_completed_pay
|
|
|
36
36
|
from asteroid_odyssey.agents_v2_gen.models.execution_activity_step_started_payload import ExecutionActivityStepStartedPayload
|
|
37
37
|
from asteroid_odyssey.agents_v2_gen.models.execution_activity_transitioned_node_payload import ExecutionActivityTransitionedNodePayload
|
|
38
38
|
from asteroid_odyssey.agents_v2_gen.models.execution_activity_user_message_received_payload import ExecutionActivityUserMessageReceivedPayload
|
|
39
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_awaiting_confirmation_payload import ExecutionAwaitingConfirmationPayload
|
|
40
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_completed_payload import ExecutionCompletedPayload
|
|
41
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_failed_payload import ExecutionFailedPayload
|
|
42
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_paused_payload import ExecutionPausedPayload
|
|
39
43
|
from asteroid_odyssey.agents_v2_gen.models.execution_status import ExecutionStatus
|
|
40
44
|
from asteroid_odyssey.agents_v2_gen.models.execution_terminal_payload import ExecutionTerminalPayload
|
|
41
45
|
from asteroid_odyssey.agents_v2_gen.models.execution_user_messages_add_text_body import ExecutionUserMessagesAddTextBody
|
|
@@ -17,8 +17,12 @@ import pprint
|
|
|
17
17
|
import re # noqa: F401
|
|
18
18
|
import json
|
|
19
19
|
|
|
20
|
-
from pydantic import BaseModel, ConfigDict
|
|
21
|
-
from typing import Any, ClassVar, Dict, List
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_awaiting_confirmation_payload import ExecutionAwaitingConfirmationPayload
|
|
23
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_completed_payload import ExecutionCompletedPayload
|
|
24
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_failed_payload import ExecutionFailedPayload
|
|
25
|
+
from asteroid_odyssey.agents_v2_gen.models.execution_paused_payload import ExecutionPausedPayload
|
|
22
26
|
from asteroid_odyssey.agents_v2_gen.models.execution_status import ExecutionStatus
|
|
23
27
|
from typing import Optional, Set
|
|
24
28
|
from typing_extensions import Self
|
|
@@ -27,8 +31,12 @@ class ExecutionActivityStatusChangedPayload(BaseModel):
|
|
|
27
31
|
"""
|
|
28
32
|
ExecutionActivityStatusChangedPayload
|
|
29
33
|
""" # noqa: E501
|
|
34
|
+
awaiting_confirmation_payload: Optional[ExecutionAwaitingConfirmationPayload] = Field(default=None, alias="awaitingConfirmationPayload")
|
|
35
|
+
completed_payload: Optional[ExecutionCompletedPayload] = Field(default=None, alias="completedPayload")
|
|
36
|
+
failed_payload: Optional[ExecutionFailedPayload] = Field(default=None, alias="failedPayload")
|
|
37
|
+
paused_payload: Optional[ExecutionPausedPayload] = Field(default=None, alias="pausedPayload")
|
|
30
38
|
status: ExecutionStatus
|
|
31
|
-
__properties: ClassVar[List[str]] = ["status"]
|
|
39
|
+
__properties: ClassVar[List[str]] = ["awaitingConfirmationPayload", "completedPayload", "failedPayload", "pausedPayload", "status"]
|
|
32
40
|
|
|
33
41
|
model_config = ConfigDict(
|
|
34
42
|
populate_by_name=True,
|
|
@@ -69,6 +77,18 @@ class ExecutionActivityStatusChangedPayload(BaseModel):
|
|
|
69
77
|
exclude=excluded_fields,
|
|
70
78
|
exclude_none=True,
|
|
71
79
|
)
|
|
80
|
+
# override the default output from pydantic by calling `to_dict()` of awaiting_confirmation_payload
|
|
81
|
+
if self.awaiting_confirmation_payload:
|
|
82
|
+
_dict['awaitingConfirmationPayload'] = self.awaiting_confirmation_payload.to_dict()
|
|
83
|
+
# override the default output from pydantic by calling `to_dict()` of completed_payload
|
|
84
|
+
if self.completed_payload:
|
|
85
|
+
_dict['completedPayload'] = self.completed_payload.to_dict()
|
|
86
|
+
# override the default output from pydantic by calling `to_dict()` of failed_payload
|
|
87
|
+
if self.failed_payload:
|
|
88
|
+
_dict['failedPayload'] = self.failed_payload.to_dict()
|
|
89
|
+
# override the default output from pydantic by calling `to_dict()` of paused_payload
|
|
90
|
+
if self.paused_payload:
|
|
91
|
+
_dict['pausedPayload'] = self.paused_payload.to_dict()
|
|
72
92
|
return _dict
|
|
73
93
|
|
|
74
94
|
@classmethod
|
|
@@ -81,6 +101,10 @@ class ExecutionActivityStatusChangedPayload(BaseModel):
|
|
|
81
101
|
return cls.model_validate(obj)
|
|
82
102
|
|
|
83
103
|
_obj = cls.model_validate({
|
|
104
|
+
"awaitingConfirmationPayload": ExecutionAwaitingConfirmationPayload.from_dict(obj["awaitingConfirmationPayload"]) if obj.get("awaitingConfirmationPayload") is not None else None,
|
|
105
|
+
"completedPayload": ExecutionCompletedPayload.from_dict(obj["completedPayload"]) if obj.get("completedPayload") is not None else None,
|
|
106
|
+
"failedPayload": ExecutionFailedPayload.from_dict(obj["failedPayload"]) if obj.get("failedPayload") is not None else None,
|
|
107
|
+
"pausedPayload": ExecutionPausedPayload.from_dict(obj["pausedPayload"]) if obj.get("pausedPayload") is not None else None,
|
|
84
108
|
"status": obj.get("status")
|
|
85
109
|
})
|
|
86
110
|
return _obj
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Agent Service
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: v2
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class ExecutionAwaitingConfirmationPayload(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
ExecutionAwaitingConfirmationPayload
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
reason: StrictStr
|
|
30
|
+
__properties: ClassVar[List[str]] = ["reason"]
|
|
31
|
+
|
|
32
|
+
model_config = ConfigDict(
|
|
33
|
+
populate_by_name=True,
|
|
34
|
+
validate_assignment=True,
|
|
35
|
+
protected_namespaces=(),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_str(self) -> str:
|
|
40
|
+
"""Returns the string representation of the model using alias"""
|
|
41
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
42
|
+
|
|
43
|
+
def to_json(self) -> str:
|
|
44
|
+
"""Returns the JSON representation of the model using alias"""
|
|
45
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
46
|
+
return json.dumps(self.to_dict())
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
50
|
+
"""Create an instance of ExecutionAwaitingConfirmationPayload from a JSON string"""
|
|
51
|
+
return cls.from_dict(json.loads(json_str))
|
|
52
|
+
|
|
53
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
54
|
+
"""Return the dictionary representation of the model using alias.
|
|
55
|
+
|
|
56
|
+
This has the following differences from calling pydantic's
|
|
57
|
+
`self.model_dump(by_alias=True)`:
|
|
58
|
+
|
|
59
|
+
* `None` is only added to the output dict for nullable fields that
|
|
60
|
+
were set at model initialization. Other fields with value `None`
|
|
61
|
+
are ignored.
|
|
62
|
+
"""
|
|
63
|
+
excluded_fields: Set[str] = set([
|
|
64
|
+
])
|
|
65
|
+
|
|
66
|
+
_dict = self.model_dump(
|
|
67
|
+
by_alias=True,
|
|
68
|
+
exclude=excluded_fields,
|
|
69
|
+
exclude_none=True,
|
|
70
|
+
)
|
|
71
|
+
return _dict
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
75
|
+
"""Create an instance of ExecutionAwaitingConfirmationPayload from a dict"""
|
|
76
|
+
if obj is None:
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
if not isinstance(obj, dict):
|
|
80
|
+
return cls.model_validate(obj)
|
|
81
|
+
|
|
82
|
+
_obj = cls.model_validate({
|
|
83
|
+
"reason": obj.get("reason")
|
|
84
|
+
})
|
|
85
|
+
return _obj
|
|
86
|
+
|
|
87
|
+
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Agent Service
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: v2
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictStr, field_validator
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class ExecutionCompletedPayload(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
ExecutionCompletedPayload
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
final_answer: Optional[StrictStr] = None
|
|
30
|
+
outcome: StrictStr
|
|
31
|
+
reasoning: StrictStr
|
|
32
|
+
result: Optional[Any]
|
|
33
|
+
__properties: ClassVar[List[str]] = ["final_answer", "outcome", "reasoning", "result"]
|
|
34
|
+
|
|
35
|
+
@field_validator('outcome')
|
|
36
|
+
def outcome_validate_enum(cls, value):
|
|
37
|
+
"""Validates the enum"""
|
|
38
|
+
if value not in set(['success', 'failure']):
|
|
39
|
+
raise ValueError("must be one of enum values ('success', 'failure')")
|
|
40
|
+
return value
|
|
41
|
+
|
|
42
|
+
model_config = ConfigDict(
|
|
43
|
+
populate_by_name=True,
|
|
44
|
+
validate_assignment=True,
|
|
45
|
+
protected_namespaces=(),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def to_str(self) -> str:
|
|
50
|
+
"""Returns the string representation of the model using alias"""
|
|
51
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
52
|
+
|
|
53
|
+
def to_json(self) -> str:
|
|
54
|
+
"""Returns the JSON representation of the model using alias"""
|
|
55
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
56
|
+
return json.dumps(self.to_dict())
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
60
|
+
"""Create an instance of ExecutionCompletedPayload from a JSON string"""
|
|
61
|
+
return cls.from_dict(json.loads(json_str))
|
|
62
|
+
|
|
63
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
64
|
+
"""Return the dictionary representation of the model using alias.
|
|
65
|
+
|
|
66
|
+
This has the following differences from calling pydantic's
|
|
67
|
+
`self.model_dump(by_alias=True)`:
|
|
68
|
+
|
|
69
|
+
* `None` is only added to the output dict for nullable fields that
|
|
70
|
+
were set at model initialization. Other fields with value `None`
|
|
71
|
+
are ignored.
|
|
72
|
+
"""
|
|
73
|
+
excluded_fields: Set[str] = set([
|
|
74
|
+
])
|
|
75
|
+
|
|
76
|
+
_dict = self.model_dump(
|
|
77
|
+
by_alias=True,
|
|
78
|
+
exclude=excluded_fields,
|
|
79
|
+
exclude_none=True,
|
|
80
|
+
)
|
|
81
|
+
# set to None if result (nullable) is None
|
|
82
|
+
# and model_fields_set contains the field
|
|
83
|
+
if self.result is None and "result" in self.model_fields_set:
|
|
84
|
+
_dict['result'] = None
|
|
85
|
+
|
|
86
|
+
return _dict
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
90
|
+
"""Create an instance of ExecutionCompletedPayload from a dict"""
|
|
91
|
+
if obj is None:
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
if not isinstance(obj, dict):
|
|
95
|
+
return cls.model_validate(obj)
|
|
96
|
+
|
|
97
|
+
_obj = cls.model_validate({
|
|
98
|
+
"final_answer": obj.get("final_answer"),
|
|
99
|
+
"outcome": obj.get("outcome"),
|
|
100
|
+
"reasoning": obj.get("reasoning"),
|
|
101
|
+
"result": obj.get("result")
|
|
102
|
+
})
|
|
103
|
+
return _obj
|
|
104
|
+
|
|
105
|
+
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Agent Service
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: v2
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class ExecutionFailedPayload(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
ExecutionFailedPayload
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
reason: StrictStr
|
|
30
|
+
__properties: ClassVar[List[str]] = ["reason"]
|
|
31
|
+
|
|
32
|
+
model_config = ConfigDict(
|
|
33
|
+
populate_by_name=True,
|
|
34
|
+
validate_assignment=True,
|
|
35
|
+
protected_namespaces=(),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_str(self) -> str:
|
|
40
|
+
"""Returns the string representation of the model using alias"""
|
|
41
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
42
|
+
|
|
43
|
+
def to_json(self) -> str:
|
|
44
|
+
"""Returns the JSON representation of the model using alias"""
|
|
45
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
46
|
+
return json.dumps(self.to_dict())
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
50
|
+
"""Create an instance of ExecutionFailedPayload from a JSON string"""
|
|
51
|
+
return cls.from_dict(json.loads(json_str))
|
|
52
|
+
|
|
53
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
54
|
+
"""Return the dictionary representation of the model using alias.
|
|
55
|
+
|
|
56
|
+
This has the following differences from calling pydantic's
|
|
57
|
+
`self.model_dump(by_alias=True)`:
|
|
58
|
+
|
|
59
|
+
* `None` is only added to the output dict for nullable fields that
|
|
60
|
+
were set at model initialization. Other fields with value `None`
|
|
61
|
+
are ignored.
|
|
62
|
+
"""
|
|
63
|
+
excluded_fields: Set[str] = set([
|
|
64
|
+
])
|
|
65
|
+
|
|
66
|
+
_dict = self.model_dump(
|
|
67
|
+
by_alias=True,
|
|
68
|
+
exclude=excluded_fields,
|
|
69
|
+
exclude_none=True,
|
|
70
|
+
)
|
|
71
|
+
return _dict
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
75
|
+
"""Create an instance of ExecutionFailedPayload from a dict"""
|
|
76
|
+
if obj is None:
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
if not isinstance(obj, dict):
|
|
80
|
+
return cls.model_validate(obj)
|
|
81
|
+
|
|
82
|
+
_obj = cls.model_validate({
|
|
83
|
+
"reason": obj.get("reason")
|
|
84
|
+
})
|
|
85
|
+
return _obj
|
|
86
|
+
|
|
87
|
+
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Agent Service
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: v2
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class ExecutionPausedPayload(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
ExecutionPausedPayload
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
reason: StrictStr
|
|
30
|
+
__properties: ClassVar[List[str]] = ["reason"]
|
|
31
|
+
|
|
32
|
+
model_config = ConfigDict(
|
|
33
|
+
populate_by_name=True,
|
|
34
|
+
validate_assignment=True,
|
|
35
|
+
protected_namespaces=(),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_str(self) -> str:
|
|
40
|
+
"""Returns the string representation of the model using alias"""
|
|
41
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
42
|
+
|
|
43
|
+
def to_json(self) -> str:
|
|
44
|
+
"""Returns the JSON representation of the model using alias"""
|
|
45
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
46
|
+
return json.dumps(self.to_dict())
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
50
|
+
"""Create an instance of ExecutionPausedPayload from a JSON string"""
|
|
51
|
+
return cls.from_dict(json.loads(json_str))
|
|
52
|
+
|
|
53
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
54
|
+
"""Return the dictionary representation of the model using alias.
|
|
55
|
+
|
|
56
|
+
This has the following differences from calling pydantic's
|
|
57
|
+
`self.model_dump(by_alias=True)`:
|
|
58
|
+
|
|
59
|
+
* `None` is only added to the output dict for nullable fields that
|
|
60
|
+
were set at model initialization. Other fields with value `None`
|
|
61
|
+
are ignored.
|
|
62
|
+
"""
|
|
63
|
+
excluded_fields: Set[str] = set([
|
|
64
|
+
])
|
|
65
|
+
|
|
66
|
+
_dict = self.model_dump(
|
|
67
|
+
by_alias=True,
|
|
68
|
+
exclude=excluded_fields,
|
|
69
|
+
exclude_none=True,
|
|
70
|
+
)
|
|
71
|
+
return _dict
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
75
|
+
"""Create an instance of ExecutionPausedPayload from a dict"""
|
|
76
|
+
if obj is None:
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
if not isinstance(obj, dict):
|
|
80
|
+
return cls.model_validate(obj)
|
|
81
|
+
|
|
82
|
+
_obj = cls.model_validate({
|
|
83
|
+
"reason": obj.get("reason")
|
|
84
|
+
})
|
|
85
|
+
return _obj
|
|
86
|
+
|
|
87
|
+
|
asteroid_odyssey/client.py
CHANGED
|
@@ -10,9 +10,8 @@ without modifying any generated files.
|
|
|
10
10
|
|
|
11
11
|
import time
|
|
12
12
|
import os
|
|
13
|
-
import logging
|
|
14
13
|
import base64
|
|
15
|
-
from typing import Dict, Any, Optional, List, Union, Tuple
|
|
14
|
+
from typing import Dict, Any, Optional, List, Union, Tuple, NamedTuple
|
|
16
15
|
from cryptography.hazmat.primitives import serialization
|
|
17
16
|
from cryptography.hazmat.primitives.asymmetric import padding, rsa
|
|
18
17
|
from .agents_v1_gen import (
|
|
@@ -60,6 +59,14 @@ class TimeoutError(AsteroidAPIError):
|
|
|
60
59
|
super().__init__(message)
|
|
61
60
|
|
|
62
61
|
|
|
62
|
+
class AgentInteractionResult(NamedTuple):
|
|
63
|
+
"""Result returned by wait_for_agent_interaction method."""
|
|
64
|
+
is_terminal: bool # True if execution reached a terminal state
|
|
65
|
+
status: str # Current execution status
|
|
66
|
+
agent_message: Optional[str] # Agent's message if requesting interaction
|
|
67
|
+
execution_result: Optional[ExecutionResult] # Final result if terminal
|
|
68
|
+
|
|
69
|
+
|
|
63
70
|
def encrypt_with_public_key(plaintext: str, pem_public_key: str) -> str:
|
|
64
71
|
"""
|
|
65
72
|
Encrypt plaintext using RSA public key with PKCS1v15 padding.
|
|
@@ -576,6 +583,166 @@ class AsteroidClient:
|
|
|
576
583
|
except ApiException as e:
|
|
577
584
|
raise AsteroidAPIError(f"Failed to get credentials public key: {e}") from e
|
|
578
585
|
|
|
586
|
+
def wait_for_agent_interaction(
|
|
587
|
+
self,
|
|
588
|
+
execution_id: str,
|
|
589
|
+
poll_interval: float = 2.0,
|
|
590
|
+
timeout: float = 3600.0
|
|
591
|
+
) -> AgentInteractionResult:
|
|
592
|
+
"""
|
|
593
|
+
Wait for an agent interaction request or terminal state.
|
|
594
|
+
|
|
595
|
+
This method polls an existing execution until it either:
|
|
596
|
+
1. Requests human input (paused_by_agent state)
|
|
597
|
+
2. Reaches a terminal state (completed, failed, cancelled)
|
|
598
|
+
3. Times out
|
|
599
|
+
|
|
600
|
+
Unlike interactive_agent, this method doesn't start an execution or handle
|
|
601
|
+
the response automatically - it just waits and reports what happened.
|
|
602
|
+
|
|
603
|
+
Args:
|
|
604
|
+
execution_id: The execution identifier for an already started execution
|
|
605
|
+
poll_interval: How often to check for updates in seconds (default: 2.0)
|
|
606
|
+
timeout: Maximum wait time in seconds (default: 3600 - 1 hour)
|
|
607
|
+
|
|
608
|
+
Returns:
|
|
609
|
+
AgentInteractionResult containing:
|
|
610
|
+
- is_terminal: True if execution finished (completed/failed/cancelled)
|
|
611
|
+
- status: Current execution status string
|
|
612
|
+
- agent_message: Agent's message if requesting interaction (None if terminal)
|
|
613
|
+
- execution_result: Final result if terminal state (None if requesting interaction)
|
|
614
|
+
|
|
615
|
+
Raises:
|
|
616
|
+
ValueError: If interval or timeout parameters are invalid
|
|
617
|
+
TimeoutError: If the execution times out
|
|
618
|
+
AsteroidAPIError: If API calls fail
|
|
619
|
+
|
|
620
|
+
Example:
|
|
621
|
+
# Start an execution first
|
|
622
|
+
execution_id = client.execute_agent('agent-id', {'input': 'test'})
|
|
623
|
+
|
|
624
|
+
# Wait for interaction or completion
|
|
625
|
+
result = client.wait_for_agent_interaction(execution_id)
|
|
626
|
+
|
|
627
|
+
if result.is_terminal:
|
|
628
|
+
print(f"Execution finished with status: {result.status}")
|
|
629
|
+
if result.execution_result:
|
|
630
|
+
print(f"Result: {result.execution_result.outcome}")
|
|
631
|
+
else:
|
|
632
|
+
print(f"Agent requesting input: {result.agent_message}")
|
|
633
|
+
# Send response
|
|
634
|
+
client.add_message_to_execution(execution_id, "user response")
|
|
635
|
+
# Wait again
|
|
636
|
+
result = client.wait_for_agent_interaction(execution_id)
|
|
637
|
+
"""
|
|
638
|
+
# Validate parameters
|
|
639
|
+
if poll_interval <= 0:
|
|
640
|
+
raise ValueError("poll_interval must be positive")
|
|
641
|
+
if timeout <= 0:
|
|
642
|
+
raise ValueError("timeout must be positive")
|
|
643
|
+
|
|
644
|
+
start_time = time.time()
|
|
645
|
+
|
|
646
|
+
while True:
|
|
647
|
+
elapsed_time = time.time() - start_time
|
|
648
|
+
if elapsed_time >= timeout:
|
|
649
|
+
raise TimeoutError(f"Wait for interaction on execution {execution_id} timed out after {timeout}s")
|
|
650
|
+
|
|
651
|
+
# Get current status
|
|
652
|
+
status_response = self.get_execution_status(execution_id)
|
|
653
|
+
current_status = status_response.status
|
|
654
|
+
status_str = current_status.value.lower()
|
|
655
|
+
|
|
656
|
+
# Handle terminal states
|
|
657
|
+
if current_status == Status.COMPLETED:
|
|
658
|
+
try:
|
|
659
|
+
execution_result = self.get_execution_result(execution_id)
|
|
660
|
+
return AgentInteractionResult(
|
|
661
|
+
is_terminal=True,
|
|
662
|
+
status=status_str,
|
|
663
|
+
agent_message=None,
|
|
664
|
+
execution_result=execution_result
|
|
665
|
+
)
|
|
666
|
+
except AsteroidAPIError as e:
|
|
667
|
+
if "not available yet" in str(e):
|
|
668
|
+
time.sleep(poll_interval)
|
|
669
|
+
continue
|
|
670
|
+
raise e
|
|
671
|
+
|
|
672
|
+
elif current_status in [Status.FAILED, Status.CANCELLED]:
|
|
673
|
+
try:
|
|
674
|
+
execution_result = self.get_execution_result(execution_id)
|
|
675
|
+
return AgentInteractionResult(
|
|
676
|
+
is_terminal=True,
|
|
677
|
+
status=status_str,
|
|
678
|
+
agent_message=None,
|
|
679
|
+
execution_result=execution_result
|
|
680
|
+
)
|
|
681
|
+
except AsteroidAPIError as e:
|
|
682
|
+
# If we can't get the execution result, still return terminal state
|
|
683
|
+
return AgentInteractionResult(
|
|
684
|
+
is_terminal=True,
|
|
685
|
+
status=status_str,
|
|
686
|
+
agent_message=None,
|
|
687
|
+
execution_result=None
|
|
688
|
+
)
|
|
689
|
+
|
|
690
|
+
# Handle agent interaction request
|
|
691
|
+
elif current_status == Status.PAUSED_BY_AGENT:
|
|
692
|
+
# Get the agent's message/request
|
|
693
|
+
agent_message = self._extract_agent_request_message(execution_id)
|
|
694
|
+
return AgentInteractionResult(
|
|
695
|
+
is_terminal=False,
|
|
696
|
+
status=status_str,
|
|
697
|
+
agent_message=agent_message,
|
|
698
|
+
execution_result=None
|
|
699
|
+
)
|
|
700
|
+
|
|
701
|
+
# Wait before next poll for non-terminal, non-interaction states
|
|
702
|
+
time.sleep(poll_interval)
|
|
703
|
+
|
|
704
|
+
def _extract_agent_request_message(self, execution_id: str) -> str:
|
|
705
|
+
"""
|
|
706
|
+
Extract the agent's request message from recent activities.
|
|
707
|
+
|
|
708
|
+
Args:
|
|
709
|
+
execution_id: The execution identifier
|
|
710
|
+
|
|
711
|
+
Returns:
|
|
712
|
+
The agent's message or a default message if not found
|
|
713
|
+
"""
|
|
714
|
+
try:
|
|
715
|
+
activities = self.get_last_n_execution_activities(execution_id, 20)
|
|
716
|
+
|
|
717
|
+
# Filter for human input requests
|
|
718
|
+
human_input_requests = [
|
|
719
|
+
activity for activity in activities
|
|
720
|
+
if (hasattr(activity, 'payload') and
|
|
721
|
+
activity.payload and
|
|
722
|
+
getattr(activity.payload, 'activityType', None) == 'action_started')
|
|
723
|
+
]
|
|
724
|
+
|
|
725
|
+
if human_input_requests:
|
|
726
|
+
human_input_request = human_input_requests[0]
|
|
727
|
+
|
|
728
|
+
# Extract message from payload data with robust error handling
|
|
729
|
+
try:
|
|
730
|
+
payload = human_input_request.payload
|
|
731
|
+
if hasattr(payload, 'data') and payload.data:
|
|
732
|
+
payload_data = payload.data
|
|
733
|
+
if hasattr(payload_data, 'message') and payload_data.message:
|
|
734
|
+
return str(payload_data.message)
|
|
735
|
+
return 'Agent is requesting input'
|
|
736
|
+
except (AttributeError, TypeError) as e:
|
|
737
|
+
return 'Agent is requesting input (extraction failed)'
|
|
738
|
+
|
|
739
|
+
return 'Agent is requesting input'
|
|
740
|
+
|
|
741
|
+
except AsteroidAPIError as e:
|
|
742
|
+
return 'Agent is requesting input (API error)'
|
|
743
|
+
except Exception as e:
|
|
744
|
+
return 'Agent is requesting input (extraction failed)'
|
|
745
|
+
|
|
579
746
|
def __enter__(self):
|
|
580
747
|
"""Context manager entry."""
|
|
581
748
|
return self
|
|
@@ -592,10 +759,7 @@ class AsteroidClient:
|
|
|
592
759
|
if pool_manager:
|
|
593
760
|
pool_manager.clear()
|
|
594
761
|
except Exception as e:
|
|
595
|
-
|
|
596
|
-
logging.warning("Failed to clear connection pool: %s", e)
|
|
597
|
-
|
|
598
|
-
# Returning False allows any exception in the 'with' block to propagate
|
|
762
|
+
pass
|
|
599
763
|
return False
|
|
600
764
|
|
|
601
765
|
# Utility methods for nicer response formatting
|
|
@@ -949,6 +1113,60 @@ def add_message_to_execution(client: AsteroidClient, execution_id: str, message:
|
|
|
949
1113
|
"""
|
|
950
1114
|
return client.add_message_to_execution(execution_id, message)
|
|
951
1115
|
|
|
1116
|
+
|
|
1117
|
+
def wait_for_agent_interaction(
|
|
1118
|
+
client: AsteroidClient,
|
|
1119
|
+
execution_id: str,
|
|
1120
|
+
poll_interval: float = 2.0,
|
|
1121
|
+
timeout: float = 3600.0
|
|
1122
|
+
) -> AgentInteractionResult:
|
|
1123
|
+
"""
|
|
1124
|
+
Wait for an agent interaction request or terminal state.
|
|
1125
|
+
|
|
1126
|
+
This convenience function provides the same functionality as the AsteroidClient.wait_for_agent_interaction method.
|
|
1127
|
+
|
|
1128
|
+
Args:
|
|
1129
|
+
client: The AsteroidClient instance
|
|
1130
|
+
execution_id: The execution identifier for an already started execution
|
|
1131
|
+
poll_interval: How often to check for updates in seconds (default: 2.0)
|
|
1132
|
+
timeout: Maximum wait time in seconds (default: 3600 - 1 hour)
|
|
1133
|
+
|
|
1134
|
+
Returns:
|
|
1135
|
+
AgentInteractionResult containing:
|
|
1136
|
+
- is_terminal: True if execution finished (completed/failed/cancelled)
|
|
1137
|
+
- status: Current execution status string
|
|
1138
|
+
- agent_message: Agent's message if requesting interaction (None if terminal)
|
|
1139
|
+
- execution_result: Final result if terminal state (None if requesting interaction)
|
|
1140
|
+
|
|
1141
|
+
Raises:
|
|
1142
|
+
ValueError: If interval or timeout parameters are invalid
|
|
1143
|
+
TimeoutError: If the execution times out
|
|
1144
|
+
AsteroidAPIError: If API calls fail
|
|
1145
|
+
|
|
1146
|
+
Example:
|
|
1147
|
+
# Start an execution first
|
|
1148
|
+
execution_id = execute_agent(client, 'agent-id', {'input': 'test'})
|
|
1149
|
+
|
|
1150
|
+
# Wait for interaction or completion
|
|
1151
|
+
result = wait_for_agent_interaction(client, execution_id)
|
|
1152
|
+
|
|
1153
|
+
if result.is_terminal:
|
|
1154
|
+
print(f"Execution finished with status: {result.status}")
|
|
1155
|
+
if result.execution_result:
|
|
1156
|
+
print(f"Result: {result.execution_result.outcome}")
|
|
1157
|
+
else:
|
|
1158
|
+
print(f"Agent requesting input: {result.agent_message}")
|
|
1159
|
+
# Send response
|
|
1160
|
+
add_message_to_execution(client, execution_id, "user response")
|
|
1161
|
+
# Wait again
|
|
1162
|
+
result = wait_for_agent_interaction(client, execution_id)
|
|
1163
|
+
"""
|
|
1164
|
+
return client.wait_for_agent_interaction(
|
|
1165
|
+
execution_id=execution_id,
|
|
1166
|
+
poll_interval=poll_interval,
|
|
1167
|
+
timeout=timeout
|
|
1168
|
+
)
|
|
1169
|
+
|
|
952
1170
|
# Re-export common types for convenience
|
|
953
1171
|
__all__ = [
|
|
954
1172
|
'AsteroidClient',
|
|
@@ -964,8 +1182,13 @@ __all__ = [
|
|
|
964
1182
|
'create_agent_profile',
|
|
965
1183
|
'update_agent_profile',
|
|
966
1184
|
'delete_agent_profile',
|
|
1185
|
+
'get_last_n_execution_activities',
|
|
1186
|
+
'add_message_to_execution',
|
|
1187
|
+
'interactive_agent',
|
|
1188
|
+
'wait_for_agent_interaction',
|
|
967
1189
|
'get_credentials_public_key',
|
|
968
1190
|
'AsteroidAPIError',
|
|
969
1191
|
'ExecutionError',
|
|
970
|
-
'TimeoutError'
|
|
1192
|
+
'TimeoutError',
|
|
1193
|
+
'AgentInteractionResult'
|
|
971
1194
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
asteroid_odyssey/__init__.py,sha256=
|
|
2
|
-
asteroid_odyssey/client.py,sha256=
|
|
3
|
-
asteroid_odyssey/agents_v1_gen/__init__.py,sha256=
|
|
1
|
+
asteroid_odyssey/__init__.py,sha256=r3WWW_BsZUiHfBcstmWnJxeeDrmWdy-7uovPEHHfO80,915
|
|
2
|
+
asteroid_odyssey/client.py,sha256=lcjZ9YMU2w3q05qw2aOVJr78CCaI_FHlkwlAJixpZrQ,45335
|
|
3
|
+
asteroid_odyssey/agents_v1_gen/__init__.py,sha256=bc-NDFcUy9zBjdMcfRgZtKtMotoyz74VMR9jKeCjgkM,4386
|
|
4
4
|
asteroid_odyssey/agents_v1_gen/api_client.py,sha256=Fq7Uh5yc9Mwza9NgCE1A0g2zrJ_hl5qQ_WFkACeHxWw,27747
|
|
5
5
|
asteroid_odyssey/agents_v1_gen/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
|
|
6
6
|
asteroid_odyssey/agents_v1_gen/configuration.py,sha256=Q5iAuaxcXVhsirre6lzbDLNP6okMLJacsp9UxNvt-5I,19060
|
|
@@ -11,11 +11,12 @@ asteroid_odyssey/agents_v1_gen/api/__init__.py,sha256=oj1pzgrbo8C6FrpBVC7IvfUu-u
|
|
|
11
11
|
asteroid_odyssey/agents_v1_gen/api/agent_profile_api.py,sha256=uOgyH3VN8LseS5Mq2uFxAbZM5iH88O0YEmXFTMc8bQ0,66369
|
|
12
12
|
asteroid_odyssey/agents_v1_gen/api/api_api.py,sha256=vqZ7wQEQGOpa1D6U1QLL27XK-0DY5_v9tdQJNt_lpsM,19217
|
|
13
13
|
asteroid_odyssey/agents_v1_gen/api/execution_api.py,sha256=RXYDwX_VKMfM44IrKRb-c5D3FXnAPw8QQcpqDoGpL3Q,67849
|
|
14
|
-
asteroid_odyssey/agents_v1_gen/models/__init__.py,sha256=
|
|
15
|
-
asteroid_odyssey/agents_v1_gen/models/agent_profile.py,sha256=
|
|
14
|
+
asteroid_odyssey/agents_v1_gen/models/__init__.py,sha256=B4qBgPxwjUAB2yKdPOgFj_uYNjxMYCwaLrKUBrKTuiI,2053
|
|
15
|
+
asteroid_odyssey/agents_v1_gen/models/agent_profile.py,sha256=ByGmAHoJFuqF_tdUejWZaWnz19v1BT1sH6FJ1tU6Vm8,5344
|
|
16
16
|
asteroid_odyssey/agents_v1_gen/models/browser_session_recording_response.py,sha256=OgYXsMiADk5IIDKkWJTy0RfnnBO3Zbaq9mEUyaxTaH0,2590
|
|
17
|
+
asteroid_odyssey/agents_v1_gen/models/cookie.py,sha256=jvK-SgpFn8Untq3JnHTxDQnznT6Snn7Vnykba1-c3XU,4020
|
|
17
18
|
asteroid_odyssey/agents_v1_gen/models/country_code.py,sha256=pYFM0OC_maaGfUsFTTnKtSJxXKQiNS0pU3O0LLFz_Uo,802
|
|
18
|
-
asteroid_odyssey/agents_v1_gen/models/create_agent_profile_request.py,sha256=
|
|
19
|
+
asteroid_odyssey/agents_v1_gen/models/create_agent_profile_request.py,sha256=jqHaASZlDkTWSpF9AYEsc4QyEpfN9uY4QPw0uMhcSOA,5194
|
|
19
20
|
asteroid_odyssey/agents_v1_gen/models/credential.py,sha256=MSzwgGLjNiH_fclHpZpYKKDWn-498etD1CLS_EfmA7k,3033
|
|
20
21
|
asteroid_odyssey/agents_v1_gen/models/delete_agent_profile200_response.py,sha256=y6gaG8VLeC2muBcw-i6KG64i-xrHq1v-8A7T8ViwBwk,2514
|
|
21
22
|
asteroid_odyssey/agents_v1_gen/models/error_response.py,sha256=njnDeKZeMPiteuX4l3MsWTHkG4qEiv8sbIUTv0Z8yQY,2459
|
|
@@ -28,18 +29,18 @@ asteroid_odyssey/agents_v1_gen/models/health_check500_response.py,sha256=b6pG-pq
|
|
|
28
29
|
asteroid_odyssey/agents_v1_gen/models/proxy_type.py,sha256=5AUJvncQEl77V3QLJCIidk-WQRU1BlhMJo9ARUUdo1Y,704
|
|
29
30
|
asteroid_odyssey/agents_v1_gen/models/status.py,sha256=tnt_4jdoMzcjo6J0vttf2QKLNK0FC9XcjZKbGC3sbz0,889
|
|
30
31
|
asteroid_odyssey/agents_v1_gen/models/structured_agent_execution_request.py,sha256=VZyW85pVz9T27aiG4ZlGywnnxTOaJCAjHSDz8D2YxY8,2913
|
|
31
|
-
asteroid_odyssey/agents_v1_gen/models/update_agent_profile_request.py,sha256=
|
|
32
|
+
asteroid_odyssey/agents_v1_gen/models/update_agent_profile_request.py,sha256=ZggUpiv1G87Ds85n7XDCR0Lc3buwK-1C2kt0Zp3xUM0,5646
|
|
32
33
|
asteroid_odyssey/agents_v1_gen/models/upload_execution_files200_response.py,sha256=u85oEP2bEuhszonE78VcrB_keT0UZpv16CTGvfse_v4,2735
|
|
33
|
-
asteroid_odyssey/agents_v2_gen/__init__.py,sha256=
|
|
34
|
+
asteroid_odyssey/agents_v2_gen/__init__.py,sha256=qQ6DKYTAwQ0g4DLl8mQ-CPCh-jZV1lMwZh1hWmcP8Qw,7149
|
|
34
35
|
asteroid_odyssey/agents_v2_gen/api_client.py,sha256=KxpVoMofYD5Uwdg7-TXy6TdWgGdtQtaD3UunO3T75MY,27807
|
|
35
36
|
asteroid_odyssey/agents_v2_gen/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
|
|
36
|
-
asteroid_odyssey/agents_v2_gen/configuration.py,sha256=
|
|
37
|
+
asteroid_odyssey/agents_v2_gen/configuration.py,sha256=WbWZkkdcOX_oqWTdQuBQo07UqU5qlCPUrjMZrfnYtgw,19315
|
|
37
38
|
asteroid_odyssey/agents_v2_gen/exceptions.py,sha256=hBo-qUqJrW250S_xxUORV_LZU3YWE1-EhXXTxX5-P3k,6474
|
|
38
39
|
asteroid_odyssey/agents_v2_gen/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
40
|
asteroid_odyssey/agents_v2_gen/rest.py,sha256=QUgg1ahRFOoPjd6F0BU4uZ0MxdrxqGQartE6QMMziTI,9487
|
|
40
41
|
asteroid_odyssey/agents_v2_gen/api/__init__.py,sha256=HJP59V3S9sayesugWn215uvjoIfhzWxNGRknmMvtRJE,122
|
|
41
42
|
asteroid_odyssey/agents_v2_gen/api/execution_api.py,sha256=1rCYuGB2S4dgsFJmocRXXj9IVig7dEdx1xyGXwRF5bA,25365
|
|
42
|
-
asteroid_odyssey/agents_v2_gen/models/__init__.py,sha256=
|
|
43
|
+
asteroid_odyssey/agents_v2_gen/models/__init__.py,sha256=k238x-mE3t97EpcO5BfLjlX9NxyFgG20C2TS68w2ots,3821
|
|
43
44
|
asteroid_odyssey/agents_v2_gen/models/activity_payload_union_action_completed.py,sha256=djIqJOhSsyNDehLRJ_RKfjhZyQL596TNz4XhYC65FgY,3389
|
|
44
45
|
asteroid_odyssey/agents_v2_gen/models/activity_payload_union_action_failed.py,sha256=Ld0T3X-TjRwd3PnBObiHE7jFpHBejRXgt8ENB486zU8,3359
|
|
45
46
|
asteroid_odyssey/agents_v2_gen/models/activity_payload_union_action_started.py,sha256=ZVanUlpD1p5u1woVZ1YWi6qpj2X1Yg1twTCVI-ZoBB0,3369
|
|
@@ -57,16 +58,20 @@ asteroid_odyssey/agents_v2_gen/models/execution_activity_action_failed_payload.p
|
|
|
57
58
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_action_started_payload.py,sha256=yC9InGz_D_CyIFiC5ZOUBjh0VpTpfb8k_tfIviEOdFA,2579
|
|
58
59
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_generic_payload.py,sha256=xkECW6M-Rd-DhbAFiCT2-2QN7o0ZGeej4Xml24Mg_xU,2555
|
|
59
60
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_payload_union.py,sha256=9RlOiopP4UpYCb1RsqXdN2GAJY33Q9_gFn_L3dvuQ2U,14956
|
|
60
|
-
asteroid_odyssey/agents_v2_gen/models/execution_activity_status_changed_payload.py,sha256=
|
|
61
|
+
asteroid_odyssey/agents_v2_gen/models/execution_activity_status_changed_payload.py,sha256=jdBn1YAHmwTuveFAIoELV--NdpeUw0NyJorlwz1cgCc,5073
|
|
61
62
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_step_completed_payload.py,sha256=SOC8Y7Ox5POHbrACjYUX9wUkEnGFgWdRV60dhqhfbPg,2627
|
|
62
63
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_step_started_payload.py,sha256=6IIbpvDKLIDzc5sr2KaHcGGKPDnUu4iPR-LlXChysT0,2619
|
|
63
64
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_transitioned_node_payload.py,sha256=nvHGIaaF37ol12EjU0RduaUnRhUaDpKD1qKStpJ7qLE,2769
|
|
64
65
|
asteroid_odyssey/agents_v2_gen/models/execution_activity_user_message_received_payload.py,sha256=47US747NjJy11BsuwggH-o8-UhO3HUDamnNA4KISjjM,2718
|
|
66
|
+
asteroid_odyssey/agents_v2_gen/models/execution_awaiting_confirmation_payload.py,sha256=KFgB1DITaMhPgITwFCdvuhCEn1WnJ9IQxMLCLvIc7X4,2571
|
|
67
|
+
asteroid_odyssey/agents_v2_gen/models/execution_completed_payload.py,sha256=iFozfv2PoqHJ83lTqbIqo0RKPKww-knEeqnY434A8AA,3306
|
|
68
|
+
asteroid_odyssey/agents_v2_gen/models/execution_failed_payload.py,sha256=dzIk6XgTy1BWBp963FTnDQasrrkRb5fsshOkIsn_j54,2515
|
|
69
|
+
asteroid_odyssey/agents_v2_gen/models/execution_paused_payload.py,sha256=scUIg3_2yLGWry6-vnZwMEG4AeaSphVBewQ4tv_07z4,2515
|
|
65
70
|
asteroid_odyssey/agents_v2_gen/models/execution_status.py,sha256=SHpsS6IzN42kPdDiykmKudEzmCiR1yRttJ9nG206W-g,959
|
|
66
71
|
asteroid_odyssey/agents_v2_gen/models/execution_terminal_payload.py,sha256=hWh7Fuy0fswZZFwXncRwdtlyDD4WGEA-wYYdtOg8-vQ,2935
|
|
67
72
|
asteroid_odyssey/agents_v2_gen/models/execution_user_messages_add_text_body.py,sha256=BQ9klnV_2-3svbyPFcGC272y7uKanIKtpbwVPXQs6gk,2559
|
|
68
73
|
asteroid_odyssey/agents_v2_gen/models/versions.py,sha256=54MndkW0A32LnZbTGHEsFnNRrrT112iWNJMgk7-a2eM,736
|
|
69
|
-
asteroid_odyssey-1.3.
|
|
70
|
-
asteroid_odyssey-1.3.
|
|
71
|
-
asteroid_odyssey-1.3.
|
|
72
|
-
asteroid_odyssey-1.3.
|
|
74
|
+
asteroid_odyssey-1.3.1.dist-info/METADATA,sha256=fjCqNaAB4EAyUb0dhY3OToLWfbQ2h2_LsHuX9ewMvcI,7073
|
|
75
|
+
asteroid_odyssey-1.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
76
|
+
asteroid_odyssey-1.3.1.dist-info/top_level.txt,sha256=h4T6NKscnThJ4Nhzors2NKlJeZzepnM7XvDgsnfi5HA,17
|
|
77
|
+
asteroid_odyssey-1.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|