athena-intelligence 0.1.204__py3-none-any.whl → 0.1.206__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.

Potentially problematic release.


This version of athena-intelligence might be problematic. Click here for more details.

athena/base_client.py CHANGED
@@ -4,6 +4,7 @@ import typing
4
4
 
5
5
  import httpx
6
6
  from .agents.client import AgentsClient, AsyncAgentsClient
7
+ from .aop.client import AopClient, AsyncAopClient
7
8
  from .assets.client import AssetsClient, AsyncAssetsClient
8
9
  from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
10
  from .environment import AthenaEnvironment
@@ -77,6 +78,7 @@ class BaseAthena:
77
78
  timeout=_defaulted_timeout,
78
79
  )
79
80
  self.agents = AgentsClient(client_wrapper=self._client_wrapper)
81
+ self.aop = AopClient(client_wrapper=self._client_wrapper)
80
82
  self.assets = AssetsClient(client_wrapper=self._client_wrapper)
81
83
  self.query = QueryClient(client_wrapper=self._client_wrapper)
82
84
  self.tools = ToolsClient(client_wrapper=self._client_wrapper)
@@ -148,6 +150,7 @@ class AsyncBaseAthena:
148
150
  timeout=_defaulted_timeout,
149
151
  )
150
152
  self.agents = AsyncAgentsClient(client_wrapper=self._client_wrapper)
153
+ self.aop = AsyncAopClient(client_wrapper=self._client_wrapper)
151
154
  self.assets = AsyncAssetsClient(client_wrapper=self._client_wrapper)
152
155
  self.query = AsyncQueryClient(client_wrapper=self._client_wrapper)
153
156
  self.tools = AsyncToolsClient(client_wrapper=self._client_wrapper)
@@ -22,10 +22,10 @@ class BaseClientWrapper:
22
22
 
23
23
  def get_headers(self) -> typing.Dict[str, str]:
24
24
  headers: typing.Dict[str, str] = {
25
- "User-Agent": "athena-intelligence/0.1.204",
25
+ "User-Agent": "athena-intelligence/0.1.206",
26
26
  "X-Fern-Language": "Python",
27
27
  "X-Fern-SDK-Name": "athena-intelligence",
28
- "X-Fern-SDK-Version": "0.1.204",
28
+ "X-Fern-SDK-Version": "0.1.206",
29
29
  **(self.get_custom_headers() or {}),
30
30
  }
31
31
  headers["X-API-KEY"] = self.api_key
@@ -3,9 +3,8 @@
3
3
  import typing
4
4
 
5
5
  from ..core.api_error import ApiError
6
- from ..types.parent_folder_error import ParentFolderError
7
6
 
8
7
 
9
8
  class BadRequestError(ApiError):
10
- def __init__(self, body: ParentFolderError, headers: typing.Optional[typing.Dict[str, str]] = None):
9
+ def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
11
10
  super().__init__(status_code=400, headers=headers, body=body)
@@ -25,7 +25,6 @@ from ..types.data_frame_unknown_format_error import DataFrameUnknownFormatError
25
25
  from ..types.file_chunk_request_out import FileChunkRequestOut
26
26
  from ..types.file_too_large_error import FileTooLargeError
27
27
  from ..types.folder_response import FolderResponse
28
- from ..types.parent_folder_error import ParentFolderError
29
28
  from ..types.save_asset_request_out import SaveAssetRequestOut
30
29
  from .types.tools_data_frame_request_columns_item import ToolsDataFrameRequestColumnsItem
31
30
 
@@ -337,9 +336,9 @@ class RawToolsClient:
337
336
  raise BadRequestError(
338
337
  headers=dict(_response.headers),
339
338
  body=typing.cast(
340
- ParentFolderError,
339
+ typing.Optional[typing.Any],
341
340
  parse_obj_as(
342
- type_=ParentFolderError, # type: ignore
341
+ type_=typing.Optional[typing.Any], # type: ignore
343
342
  object_=_response.json(),
344
343
  ),
345
344
  ),
@@ -645,9 +644,9 @@ class RawToolsClient:
645
644
  raise BadRequestError(
646
645
  headers=dict(_response.headers),
647
646
  body=typing.cast(
648
- ParentFolderError,
647
+ typing.Optional[typing.Any],
649
648
  parse_obj_as(
650
- type_=ParentFolderError, # type: ignore
649
+ type_=typing.Optional[typing.Any], # type: ignore
651
650
  object_=_response.json(),
652
651
  ),
653
652
  ),
@@ -984,9 +983,9 @@ class AsyncRawToolsClient:
984
983
  raise BadRequestError(
985
984
  headers=dict(_response.headers),
986
985
  body=typing.cast(
987
- ParentFolderError,
986
+ typing.Optional[typing.Any],
988
987
  parse_obj_as(
989
- type_=ParentFolderError, # type: ignore
988
+ type_=typing.Optional[typing.Any], # type: ignore
990
989
  object_=_response.json(),
991
990
  ),
992
991
  ),
@@ -1293,9 +1292,9 @@ class AsyncRawToolsClient:
1293
1292
  raise BadRequestError(
1294
1293
  headers=dict(_response.headers),
1295
1294
  body=typing.cast(
1296
- ParentFolderError,
1295
+ typing.Optional[typing.Any],
1297
1296
  parse_obj_as(
1298
- type_=ParentFolderError, # type: ignore
1297
+ type_=typing.Optional[typing.Any], # type: ignore
1299
1298
  object_=_response.json(),
1300
1299
  ),
1301
1300
  ),
@@ -930,6 +930,61 @@ class SheetsClient:
930
930
  )
931
931
  return _response.data
932
932
 
933
+ def insert_table_row(
934
+ self,
935
+ *,
936
+ asset_id: str,
937
+ row_data: typing.Sequence[typing.Dict[str, typing.Optional[str]]],
938
+ table_id: typing.Optional[str] = OMIT,
939
+ table_name: typing.Optional[str] = OMIT,
940
+ request_options: typing.Optional[RequestOptions] = None,
941
+ ) -> SheetOperationResponse:
942
+ """
943
+ Insert rows into a table in an Athena spreadsheet.
944
+
945
+ Parameters
946
+ ----------
947
+ asset_id : str
948
+ The ID of the spreadsheet asset
949
+
950
+ row_data : typing.Sequence[typing.Dict[str, typing.Optional[str]]]
951
+ Array of row objects where keys are column names and values are cell values
952
+
953
+ table_id : typing.Optional[str]
954
+ Table ID to insert row into
955
+
956
+ table_name : typing.Optional[str]
957
+ Table name to insert row into
958
+
959
+ request_options : typing.Optional[RequestOptions]
960
+ Request-specific configuration.
961
+
962
+ Returns
963
+ -------
964
+ SheetOperationResponse
965
+ Successful Response
966
+
967
+ Examples
968
+ --------
969
+ from athena import Athena
970
+
971
+ client = Athena(
972
+ api_key="YOUR_API_KEY",
973
+ )
974
+ client.tools.sheets.insert_table_row(
975
+ asset_id="asset_id",
976
+ row_data=[{}],
977
+ )
978
+ """
979
+ _response = self._raw_client.insert_table_row(
980
+ asset_id=asset_id,
981
+ row_data=row_data,
982
+ table_id=table_id,
983
+ table_name=table_name,
984
+ request_options=request_options,
985
+ )
986
+ return _response.data
987
+
933
988
  def update_table(
934
989
  self,
935
990
  *,
@@ -2048,6 +2103,69 @@ class AsyncSheetsClient:
2048
2103
  )
2049
2104
  return _response.data
2050
2105
 
2106
+ async def insert_table_row(
2107
+ self,
2108
+ *,
2109
+ asset_id: str,
2110
+ row_data: typing.Sequence[typing.Dict[str, typing.Optional[str]]],
2111
+ table_id: typing.Optional[str] = OMIT,
2112
+ table_name: typing.Optional[str] = OMIT,
2113
+ request_options: typing.Optional[RequestOptions] = None,
2114
+ ) -> SheetOperationResponse:
2115
+ """
2116
+ Insert rows into a table in an Athena spreadsheet.
2117
+
2118
+ Parameters
2119
+ ----------
2120
+ asset_id : str
2121
+ The ID of the spreadsheet asset
2122
+
2123
+ row_data : typing.Sequence[typing.Dict[str, typing.Optional[str]]]
2124
+ Array of row objects where keys are column names and values are cell values
2125
+
2126
+ table_id : typing.Optional[str]
2127
+ Table ID to insert row into
2128
+
2129
+ table_name : typing.Optional[str]
2130
+ Table name to insert row into
2131
+
2132
+ request_options : typing.Optional[RequestOptions]
2133
+ Request-specific configuration.
2134
+
2135
+ Returns
2136
+ -------
2137
+ SheetOperationResponse
2138
+ Successful Response
2139
+
2140
+ Examples
2141
+ --------
2142
+ import asyncio
2143
+
2144
+ from athena import AsyncAthena
2145
+
2146
+ client = AsyncAthena(
2147
+ api_key="YOUR_API_KEY",
2148
+ )
2149
+
2150
+
2151
+ async def main() -> None:
2152
+ await client.tools.sheets.insert_table_row(
2153
+ asset_id="asset_id",
2154
+ row_data=[{}],
2155
+ )
2156
+
2157
+
2158
+ asyncio.run(main())
2159
+ """
2160
+ _response = await self._raw_client.insert_table_row(
2161
+ asset_id=asset_id,
2162
+ row_data=row_data,
2163
+ table_id=table_id,
2164
+ table_name=table_name,
2165
+ request_options=request_options,
2166
+ )
2167
+ return _response.data
2168
+
2051
2169
  async def update_table(
2052
2170
  self,
2053
2171
  *,
@@ -1211,6 +1211,81 @@ class RawSheetsClient:
1211
1211
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1212
1212
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1213
1213
 
1214
+ def insert_table_row(
1215
+ self,
1216
+ *,
1217
+ asset_id: str,
1218
+ row_data: typing.Sequence[typing.Dict[str, typing.Optional[str]]],
1219
+ table_id: typing.Optional[str] = OMIT,
1220
+ table_name: typing.Optional[str] = OMIT,
1221
+ request_options: typing.Optional[RequestOptions] = None,
1222
+ ) -> HttpResponse[SheetOperationResponse]:
1223
+ """
1224
+ Insert rows into a table in an Athena spreadsheet.
1225
+
1226
+ Parameters
1227
+ ----------
1228
+ asset_id : str
1229
+ The ID of the spreadsheet asset
1230
+
1231
+ row_data : typing.Sequence[typing.Dict[str, typing.Optional[str]]]
1232
+ Array of row objects where keys are column names and values are cell values
1233
+
1234
+ table_id : typing.Optional[str]
1235
+ Table ID to insert row into
1236
+
1237
+ table_name : typing.Optional[str]
1238
+ Table name to insert row into
1239
+
1240
+ request_options : typing.Optional[RequestOptions]
1241
+ Request-specific configuration.
1242
+
1243
+ Returns
1244
+ -------
1245
+ HttpResponse[SheetOperationResponse]
1246
+ Successful Response
1247
+ """
1248
+ _response = self._client_wrapper.httpx_client.request(
1249
+ "api/v0/tools/sheets/table/insert-row",
1250
+ method="POST",
1251
+ json={
1252
+ "asset_id": asset_id,
1253
+ "row_data": row_data,
1254
+ "table_id": table_id,
1255
+ "table_name": table_name,
1256
+ },
1257
+ headers={
1258
+ "content-type": "application/json",
1259
+ },
1260
+ request_options=request_options,
1261
+ omit=OMIT,
1262
+ )
1263
+ try:
1264
+ if 200 <= _response.status_code < 300:
1265
+ _data = typing.cast(
1266
+ SheetOperationResponse,
1267
+ parse_obj_as(
1268
+ type_=SheetOperationResponse, # type: ignore
1269
+ object_=_response.json(),
1270
+ ),
1271
+ )
1272
+ return HttpResponse(response=_response, data=_data)
1273
+ if _response.status_code == 422:
1274
+ raise UnprocessableEntityError(
1275
+ headers=dict(_response.headers),
1276
+ body=typing.cast(
1277
+ typing.Optional[typing.Any],
1278
+ parse_obj_as(
1279
+ type_=typing.Optional[typing.Any], # type: ignore
1280
+ object_=_response.json(),
1281
+ ),
1282
+ ),
1283
+ )
1284
+ _response_json = _response.json()
1285
+ except JSONDecodeError:
1286
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1287
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1288
+
1214
1289
  def update_table(
1215
1290
  self,
1216
1291
  *,
@@ -2501,6 +2576,81 @@ class AsyncRawSheetsClient:
2501
2576
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
2502
2577
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
2503
2578
 
2579
+ async def insert_table_row(
2580
+ self,
2581
+ *,
2582
+ asset_id: str,
2583
+ row_data: typing.Sequence[typing.Dict[str, typing.Optional[str]]],
2584
+ table_id: typing.Optional[str] = OMIT,
2585
+ table_name: typing.Optional[str] = OMIT,
2586
+ request_options: typing.Optional[RequestOptions] = None,
2587
+ ) -> AsyncHttpResponse[SheetOperationResponse]:
2588
+ """
2589
+ Insert rows into a table in an Athena spreadsheet.
2590
+
2591
+ Parameters
2592
+ ----------
2593
+ asset_id : str
2594
+ The ID of the spreadsheet asset
2595
+
2596
+ row_data : typing.Sequence[typing.Dict[str, typing.Optional[str]]]
2597
+ Array of row objects where keys are column names and values are cell values
2598
+
2599
+ table_id : typing.Optional[str]
2600
+ Table ID to insert row into
2601
+
2602
+ table_name : typing.Optional[str]
2603
+ Table name to insert row into
2604
+
2605
+ request_options : typing.Optional[RequestOptions]
2606
+ Request-specific configuration.
2607
+
2608
+ Returns
2609
+ -------
2610
+ AsyncHttpResponse[SheetOperationResponse]
2611
+ Successful Response
2612
+ """
2613
+ _response = await self._client_wrapper.httpx_client.request(
2614
+ "api/v0/tools/sheets/table/insert-row",
2615
+ method="POST",
2616
+ json={
2617
+ "asset_id": asset_id,
2618
+ "row_data": row_data,
2619
+ "table_id": table_id,
2620
+ "table_name": table_name,
2621
+ },
2622
+ headers={
2623
+ "content-type": "application/json",
2624
+ },
2625
+ request_options=request_options,
2626
+ omit=OMIT,
2627
+ )
2628
+ try:
2629
+ if 200 <= _response.status_code < 300:
2630
+ _data = typing.cast(
2631
+ SheetOperationResponse,
2632
+ parse_obj_as(
2633
+ type_=SheetOperationResponse, # type: ignore
2634
+ object_=_response.json(),
2635
+ ),
2636
+ )
2637
+ return AsyncHttpResponse(response=_response, data=_data)
2638
+ if _response.status_code == 422:
2639
+ raise UnprocessableEntityError(
2640
+ headers=dict(_response.headers),
2641
+ body=typing.cast(
2642
+ typing.Optional[typing.Any],
2643
+ parse_obj_as(
2644
+ type_=typing.Optional[typing.Any], # type: ignore
2645
+ object_=_response.json(),
2646
+ ),
2647
+ ),
2648
+ )
2649
+ _response_json = _response.json()
2650
+ except JSONDecodeError:
2651
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
2652
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
2653
+
2504
2654
  async def update_table(
2505
2655
  self,
2506
2656
  *,
athena/types/__init__.py CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  # isort: skip_file
4
4
 
5
+ from .aop_async_execute_response_out import AopAsyncExecuteResponseOut
6
+ from .aop_execute_request_in import AopExecuteRequestIn
7
+ from .aop_execute_response_out import AopExecuteResponseOut
5
8
  from .asset_content_request_out import AssetContentRequestOut
6
9
  from .asset_node import AssetNode
7
10
  from .asset_not_found_error import AssetNotFoundError
@@ -39,7 +42,6 @@ from .input_message_content_item import (
39
42
  InputMessageContentItem_Text,
40
43
  )
41
44
  from .paginated_assets_out import PaginatedAssetsOut
42
- from .parent_folder_error import ParentFolderError
43
45
  from .prompt_message import PromptMessage
44
46
  from .public_asset_out import PublicAssetOut
45
47
  from .research_agent_response import ResearchAgentResponse
@@ -51,6 +53,9 @@ from .text_content import TextContent
51
53
  from .type import Type
52
54
 
53
55
  __all__ = [
56
+ "AopAsyncExecuteResponseOut",
57
+ "AopExecuteRequestIn",
58
+ "AopExecuteResponseOut",
54
59
  "AssetContentRequestOut",
55
60
  "AssetNode",
56
61
  "AssetNotFoundError",
@@ -88,7 +93,6 @@ __all__ = [
88
93
  "InputMessageContentItem_ImageUrl",
89
94
  "InputMessageContentItem_Text",
90
95
  "PaginatedAssetsOut",
91
- "ParentFolderError",
92
96
  "PromptMessage",
93
97
  "PublicAssetOut",
94
98
  "ResearchAgentResponse",
@@ -0,0 +1,76 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+
8
+
9
+ class AopAsyncExecuteResponseOut(UniversalBaseModel):
10
+ """
11
+ Response model for async AOP execution.
12
+ """
13
+
14
+ aop_asset_id: str = pydantic.Field()
15
+ """
16
+ ID of the AOP asset that was executed
17
+ """
18
+
19
+ aop_config: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field()
20
+ """
21
+ Full configuration of the AOP asset
22
+ """
23
+
24
+ aop_title: str = pydantic.Field()
25
+ """
26
+ Title of the AOP asset
27
+ """
28
+
29
+ base_prompt: str = pydantic.Field()
30
+ """
31
+ Base prompt of the AOP before user inputs were added
32
+ """
33
+
34
+ enabled_tools: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
35
+ """
36
+ List of tools that were enabled for this execution
37
+ """
38
+
39
+ final_prompt: str = pydantic.Field()
40
+ """
41
+ Final prompt used for execution including user inputs
42
+ """
43
+
44
+ message: str = pydantic.Field()
45
+ """
46
+ Status message about the async execution
47
+ """
48
+
49
+ status: str = pydantic.Field()
50
+ """
51
+ Status of the execution (always 'started' for async)
52
+ """
53
+
54
+ sync_server: str = pydantic.Field()
55
+ """
56
+ Sync server URL used for execution
57
+ """
58
+
59
+ thread_id: str = pydantic.Field()
60
+ """
61
+ Unique thread ID for tracking the execution
62
+ """
63
+
64
+ trigger_type: str = pydantic.Field()
65
+ """
66
+ Type of trigger that initiated the execution
67
+ """
68
+
69
+ if IS_PYDANTIC_V2:
70
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
71
+ else:
72
+
73
+ class Config:
74
+ frozen = True
75
+ smart_union = True
76
+ extra = pydantic.Extra.allow
@@ -6,8 +6,20 @@ import pydantic
6
6
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
7
 
8
8
 
9
- class ParentFolderError(UniversalBaseModel):
10
- message: str
9
+ class AopExecuteRequestIn(UniversalBaseModel):
10
+ """
11
+ Request model for executing an AOP (Agent Operating Procedure).
12
+ """
13
+
14
+ asset_id: str = pydantic.Field()
15
+ """
16
+ ID of the existing AOP asset to execute
17
+ """
18
+
19
+ user_inputs: typing.Optional[typing.Dict[str, typing.Optional[str]]] = pydantic.Field(default=None)
20
+ """
21
+ Optional user inputs to append to the AOP's prompt as key-value pairs
22
+ """
11
23
 
12
24
  if IS_PYDANTIC_V2:
13
25
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -0,0 +1,76 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+
8
+
9
+ class AopExecuteResponseOut(UniversalBaseModel):
10
+ """
11
+ Response model for AOP execution.
12
+ """
13
+
14
+ aop_asset_id: str = pydantic.Field()
15
+ """
16
+ ID of the AOP asset that was executed
17
+ """
18
+
19
+ aop_config: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field()
20
+ """
21
+ Full configuration of the AOP asset
22
+ """
23
+
24
+ aop_title: str = pydantic.Field()
25
+ """
26
+ Title of the AOP asset
27
+ """
28
+
29
+ base_prompt: str = pydantic.Field()
30
+ """
31
+ Base prompt of the AOP before user inputs were added
32
+ """
33
+
34
+ enabled_tools: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
35
+ """
36
+ List of tools that were enabled for this execution
37
+ """
38
+
39
+ final_prompt: str = pydantic.Field()
40
+ """
41
+ Final prompt used for execution including user inputs
42
+ """
43
+
44
+ response: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field()
45
+ """
46
+ The execution response from the AOP
47
+ """
48
+
49
+ status: str = pydantic.Field()
50
+ """
51
+ Status of the execution (e.g., 'submitted')
52
+ """
53
+
54
+ sync_server: str = pydantic.Field()
55
+ """
56
+ Sync server URL used for execution
57
+ """
58
+
59
+ thread_id: str = pydantic.Field()
60
+ """
61
+ Unique thread ID for tracking the execution
62
+ """
63
+
64
+ trigger_type: str = pydantic.Field()
65
+ """
66
+ Type of trigger that initiated the execution
67
+ """
68
+
69
+ if IS_PYDANTIC_V2:
70
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
71
+ else:
72
+
73
+ class Config:
74
+ frozen = True
75
+ smart_union = True
76
+ extra = pydantic.Extra.allow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: athena-intelligence
3
- Version: 0.1.204
3
+ Version: 0.1.206
4
4
  Summary: Athena Intelligence Python Library
5
5
  Requires-Python: >=3.9,<4.0
6
6
  Classifier: Intended Audience :: Developers