athena-intelligence 0.1.205__py3-none-any.whl → 0.1.207__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/__init__.py CHANGED
@@ -17,6 +17,7 @@ from .types import (
17
17
  ChunkResult,
18
18
  ChunkResultChunkId,
19
19
  Content,
20
+ ConversationAssetInfo,
20
21
  CreateNewSheetTabResponse,
21
22
  CustomAgentResponse,
22
23
  DataFrameRequestOut,
@@ -51,6 +52,7 @@ from .types import (
51
52
  SqlAgentResponse,
52
53
  StructuredDataExtractorResponse,
53
54
  TextContent,
55
+ ThreadStatusResponseOut,
54
56
  Type,
55
57
  )
56
58
  from .errors import (
@@ -62,7 +64,7 @@ from .errors import (
62
64
  UnprocessableEntityError,
63
65
  UnsupportedMediaTypeError,
64
66
  )
65
- from . import agents, aop, assets, query, tools
67
+ from . import agents, aop, assets, query, threads, tools
66
68
  from .client import AsyncAthena, Athena
67
69
  from .environment import AthenaEnvironment
68
70
  from .query import QueryExecuteRequestDatabaseAssetIds
@@ -89,6 +91,7 @@ __all__ = [
89
91
  "ChunkResultChunkId",
90
92
  "Content",
91
93
  "ContentTooLargeError",
94
+ "ConversationAssetInfo",
92
95
  "CreateNewSheetTabResponse",
93
96
  "CustomAgentResponse",
94
97
  "DataFrameRequestOut",
@@ -126,6 +129,7 @@ __all__ = [
126
129
  "SqlAgentResponse",
127
130
  "StructuredDataExtractorResponse",
128
131
  "TextContent",
132
+ "ThreadStatusResponseOut",
129
133
  "ToolsDataFrameRequestColumnsItem",
130
134
  "Type",
131
135
  "UnauthorizedError",
@@ -136,5 +140,6 @@ __all__ = [
136
140
  "aop",
137
141
  "assets",
138
142
  "query",
143
+ "threads",
139
144
  "tools",
140
145
  ]
athena/base_client.py CHANGED
@@ -9,6 +9,7 @@ from .assets.client import AssetsClient, AsyncAssetsClient
9
9
  from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
10
10
  from .environment import AthenaEnvironment
11
11
  from .query.client import AsyncQueryClient, QueryClient
12
+ from .threads.client import AsyncThreadsClient, ThreadsClient
12
13
  from .tools.client import AsyncToolsClient, ToolsClient
13
14
 
14
15
 
@@ -81,6 +82,7 @@ class BaseAthena:
81
82
  self.aop = AopClient(client_wrapper=self._client_wrapper)
82
83
  self.assets = AssetsClient(client_wrapper=self._client_wrapper)
83
84
  self.query = QueryClient(client_wrapper=self._client_wrapper)
85
+ self.threads = ThreadsClient(client_wrapper=self._client_wrapper)
84
86
  self.tools = ToolsClient(client_wrapper=self._client_wrapper)
85
87
 
86
88
 
@@ -153,6 +155,7 @@ class AsyncBaseAthena:
153
155
  self.aop = AsyncAopClient(client_wrapper=self._client_wrapper)
154
156
  self.assets = AsyncAssetsClient(client_wrapper=self._client_wrapper)
155
157
  self.query = AsyncQueryClient(client_wrapper=self._client_wrapper)
158
+ self.threads = AsyncThreadsClient(client_wrapper=self._client_wrapper)
156
159
  self.tools = AsyncToolsClient(client_wrapper=self._client_wrapper)
157
160
 
158
161
 
@@ -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.205",
25
+ "User-Agent": "athena-intelligence/0.1.207",
26
26
  "X-Fern-Language": "Python",
27
27
  "X-Fern-SDK-Name": "athena-intelligence",
28
- "X-Fern-SDK-Version": "0.1.205",
28
+ "X-Fern-SDK-Version": "0.1.207",
29
29
  **(self.get_custom_headers() or {}),
30
30
  }
31
31
  headers["X-API-KEY"] = self.api_key
@@ -0,0 +1,4 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
@@ -0,0 +1,114 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ..core.request_options import RequestOptions
7
+ from ..types.thread_status_response_out import ThreadStatusResponseOut
8
+ from .raw_client import AsyncRawThreadsClient, RawThreadsClient
9
+
10
+
11
+ class ThreadsClient:
12
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
13
+ self._raw_client = RawThreadsClient(client_wrapper=client_wrapper)
14
+
15
+ @property
16
+ def with_raw_response(self) -> RawThreadsClient:
17
+ """
18
+ Retrieves a raw implementation of this client that returns raw responses.
19
+
20
+ Returns
21
+ -------
22
+ RawThreadsClient
23
+ """
24
+ return self._raw_client
25
+
26
+ def get_status(
27
+ self, thread_id: str, *, request_options: typing.Optional[RequestOptions] = None
28
+ ) -> ThreadStatusResponseOut:
29
+ """
30
+ Check the status of a thread execution by thread ID. Returns thread status and associated conversation asset information for tracking progress.
31
+
32
+ Parameters
33
+ ----------
34
+ thread_id : str
35
+ The unique thread ID to check status for
36
+
37
+ request_options : typing.Optional[RequestOptions]
38
+ Request-specific configuration.
39
+
40
+ Returns
41
+ -------
42
+ ThreadStatusResponseOut
43
+ Thread status retrieved successfully
44
+
45
+ Examples
46
+ --------
47
+ from athena import Athena
48
+
49
+ client = Athena(
50
+ api_key="YOUR_API_KEY",
51
+ )
52
+ client.threads.get_status(
53
+ thread_id="thread_id",
54
+ )
55
+ """
56
+ _response = self._raw_client.get_status(thread_id, request_options=request_options)
57
+ return _response.data
58
+
59
+
60
+ class AsyncThreadsClient:
61
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
62
+ self._raw_client = AsyncRawThreadsClient(client_wrapper=client_wrapper)
63
+
64
+ @property
65
+ def with_raw_response(self) -> AsyncRawThreadsClient:
66
+ """
67
+ Retrieves a raw implementation of this client that returns raw responses.
68
+
69
+ Returns
70
+ -------
71
+ AsyncRawThreadsClient
72
+ """
73
+ return self._raw_client
74
+
75
+ async def get_status(
76
+ self, thread_id: str, *, request_options: typing.Optional[RequestOptions] = None
77
+ ) -> ThreadStatusResponseOut:
78
+ """
79
+ Check the status of a thread execution by thread ID. Returns thread status and associated conversation asset information for tracking progress.
80
+
81
+ Parameters
82
+ ----------
83
+ thread_id : str
84
+ The unique thread ID to check status for
85
+
86
+ request_options : typing.Optional[RequestOptions]
87
+ Request-specific configuration.
88
+
89
+ Returns
90
+ -------
91
+ ThreadStatusResponseOut
92
+ Thread status retrieved successfully
93
+
94
+ Examples
95
+ --------
96
+ import asyncio
97
+
98
+ from athena import AsyncAthena
99
+
100
+ client = AsyncAthena(
101
+ api_key="YOUR_API_KEY",
102
+ )
103
+
104
+
105
+ async def main() -> None:
106
+ await client.threads.get_status(
107
+ thread_id="thread_id",
108
+ )
109
+
110
+
111
+ asyncio.run(main())
112
+ """
113
+ _response = await self._raw_client.get_status(thread_id, request_options=request_options)
114
+ return _response.data
@@ -0,0 +1,193 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.pydantic_utilities import parse_obj_as
11
+ from ..core.request_options import RequestOptions
12
+ from ..errors.internal_server_error import InternalServerError
13
+ from ..errors.not_found_error import NotFoundError
14
+ from ..errors.unauthorized_error import UnauthorizedError
15
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
16
+ from ..types.asset_not_found_error import AssetNotFoundError
17
+ from ..types.thread_status_response_out import ThreadStatusResponseOut
18
+
19
+
20
+ class RawThreadsClient:
21
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
22
+ self._client_wrapper = client_wrapper
23
+
24
+ def get_status(
25
+ self, thread_id: str, *, request_options: typing.Optional[RequestOptions] = None
26
+ ) -> HttpResponse[ThreadStatusResponseOut]:
27
+ """
28
+ Check the status of a thread execution by thread ID. Returns thread status and associated conversation asset information for tracking progress.
29
+
30
+ Parameters
31
+ ----------
32
+ thread_id : str
33
+ The unique thread ID to check status for
34
+
35
+ request_options : typing.Optional[RequestOptions]
36
+ Request-specific configuration.
37
+
38
+ Returns
39
+ -------
40
+ HttpResponse[ThreadStatusResponseOut]
41
+ Thread status retrieved successfully
42
+ """
43
+ _response = self._client_wrapper.httpx_client.request(
44
+ f"api/v0/threads/{jsonable_encoder(thread_id)}/status",
45
+ method="GET",
46
+ request_options=request_options,
47
+ )
48
+ try:
49
+ if 200 <= _response.status_code < 300:
50
+ _data = typing.cast(
51
+ ThreadStatusResponseOut,
52
+ parse_obj_as(
53
+ type_=ThreadStatusResponseOut, # type: ignore
54
+ object_=_response.json(),
55
+ ),
56
+ )
57
+ return HttpResponse(response=_response, data=_data)
58
+ if _response.status_code == 401:
59
+ raise UnauthorizedError(
60
+ headers=dict(_response.headers),
61
+ body=typing.cast(
62
+ typing.Optional[typing.Any],
63
+ parse_obj_as(
64
+ type_=typing.Optional[typing.Any], # type: ignore
65
+ object_=_response.json(),
66
+ ),
67
+ ),
68
+ )
69
+ if _response.status_code == 404:
70
+ raise NotFoundError(
71
+ headers=dict(_response.headers),
72
+ body=typing.cast(
73
+ AssetNotFoundError,
74
+ parse_obj_as(
75
+ type_=AssetNotFoundError, # type: ignore
76
+ object_=_response.json(),
77
+ ),
78
+ ),
79
+ )
80
+ if _response.status_code == 422:
81
+ raise UnprocessableEntityError(
82
+ headers=dict(_response.headers),
83
+ body=typing.cast(
84
+ typing.Optional[typing.Any],
85
+ parse_obj_as(
86
+ type_=typing.Optional[typing.Any], # type: ignore
87
+ object_=_response.json(),
88
+ ),
89
+ ),
90
+ )
91
+ if _response.status_code == 500:
92
+ raise InternalServerError(
93
+ headers=dict(_response.headers),
94
+ body=typing.cast(
95
+ typing.Optional[typing.Any],
96
+ parse_obj_as(
97
+ type_=typing.Optional[typing.Any], # type: ignore
98
+ object_=_response.json(),
99
+ ),
100
+ ),
101
+ )
102
+ _response_json = _response.json()
103
+ except JSONDecodeError:
104
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
105
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
106
+
107
+
108
+ class AsyncRawThreadsClient:
109
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
110
+ self._client_wrapper = client_wrapper
111
+
112
+ async def get_status(
113
+ self, thread_id: str, *, request_options: typing.Optional[RequestOptions] = None
114
+ ) -> AsyncHttpResponse[ThreadStatusResponseOut]:
115
+ """
116
+ Check the status of a thread execution by thread ID. Returns thread status and associated conversation asset information for tracking progress.
117
+
118
+ Parameters
119
+ ----------
120
+ thread_id : str
121
+ The unique thread ID to check status for
122
+
123
+ request_options : typing.Optional[RequestOptions]
124
+ Request-specific configuration.
125
+
126
+ Returns
127
+ -------
128
+ AsyncHttpResponse[ThreadStatusResponseOut]
129
+ Thread status retrieved successfully
130
+ """
131
+ _response = await self._client_wrapper.httpx_client.request(
132
+ f"api/v0/threads/{jsonable_encoder(thread_id)}/status",
133
+ method="GET",
134
+ request_options=request_options,
135
+ )
136
+ try:
137
+ if 200 <= _response.status_code < 300:
138
+ _data = typing.cast(
139
+ ThreadStatusResponseOut,
140
+ parse_obj_as(
141
+ type_=ThreadStatusResponseOut, # type: ignore
142
+ object_=_response.json(),
143
+ ),
144
+ )
145
+ return AsyncHttpResponse(response=_response, data=_data)
146
+ if _response.status_code == 401:
147
+ raise UnauthorizedError(
148
+ headers=dict(_response.headers),
149
+ body=typing.cast(
150
+ typing.Optional[typing.Any],
151
+ parse_obj_as(
152
+ type_=typing.Optional[typing.Any], # type: ignore
153
+ object_=_response.json(),
154
+ ),
155
+ ),
156
+ )
157
+ if _response.status_code == 404:
158
+ raise NotFoundError(
159
+ headers=dict(_response.headers),
160
+ body=typing.cast(
161
+ AssetNotFoundError,
162
+ parse_obj_as(
163
+ type_=AssetNotFoundError, # type: ignore
164
+ object_=_response.json(),
165
+ ),
166
+ ),
167
+ )
168
+ if _response.status_code == 422:
169
+ raise UnprocessableEntityError(
170
+ headers=dict(_response.headers),
171
+ body=typing.cast(
172
+ typing.Optional[typing.Any],
173
+ parse_obj_as(
174
+ type_=typing.Optional[typing.Any], # type: ignore
175
+ object_=_response.json(),
176
+ ),
177
+ ),
178
+ )
179
+ if _response.status_code == 500:
180
+ raise InternalServerError(
181
+ headers=dict(_response.headers),
182
+ body=typing.cast(
183
+ typing.Optional[typing.Any],
184
+ parse_obj_as(
185
+ type_=typing.Optional[typing.Any], # type: ignore
186
+ object_=_response.json(),
187
+ ),
188
+ ),
189
+ )
190
+ _response_json = _response.json()
191
+ except JSONDecodeError:
192
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
193
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -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
@@ -14,6 +14,7 @@ from .chunk_content_item import ChunkContentItem, ChunkContentItem_ImageUrl, Chu
14
14
  from .chunk_result import ChunkResult
15
15
  from .chunk_result_chunk_id import ChunkResultChunkId
16
16
  from .content import Content
17
+ from .conversation_asset_info import ConversationAssetInfo
17
18
  from .create_new_sheet_tab_response import CreateNewSheetTabResponse
18
19
  from .custom_agent_response import CustomAgentResponse
19
20
  from .data_frame_request_out import DataFrameRequestOut
@@ -50,6 +51,7 @@ from .sheet_operation_response import SheetOperationResponse
50
51
  from .sql_agent_response import SqlAgentResponse
51
52
  from .structured_data_extractor_response import StructuredDataExtractorResponse
52
53
  from .text_content import TextContent
54
+ from .thread_status_response_out import ThreadStatusResponseOut
53
55
  from .type import Type
54
56
 
55
57
  __all__ = [
@@ -67,6 +69,7 @@ __all__ = [
67
69
  "ChunkResult",
68
70
  "ChunkResultChunkId",
69
71
  "Content",
72
+ "ConversationAssetInfo",
70
73
  "CreateNewSheetTabResponse",
71
74
  "CustomAgentResponse",
72
75
  "DataFrameRequestOut",
@@ -101,5 +104,6 @@ __all__ = [
101
104
  "SqlAgentResponse",
102
105
  "StructuredDataExtractorResponse",
103
106
  "TextContent",
107
+ "ThreadStatusResponseOut",
104
108
  "Type",
105
109
  ]
@@ -0,0 +1,100 @@
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 ConversationAssetInfo(UniversalBaseModel):
10
+ """
11
+ Conversation asset information associated with a thread.
12
+ """
13
+
14
+ agent: typing.Optional[str] = pydantic.Field(default=None)
15
+ """
16
+ Agent configuration used in conversation
17
+ """
18
+
19
+ conversation_asset_id: str = pydantic.Field()
20
+ """
21
+ ID of the conversation asset
22
+ """
23
+
24
+ created_at: str = pydantic.Field()
25
+ """
26
+ ISO timestamp when conversation was created
27
+ """
28
+
29
+ created_by: str = pydantic.Field()
30
+ """
31
+ User ID who created the conversation
32
+ """
33
+
34
+ last_channel: typing.Optional[str] = pydantic.Field(default=None)
35
+ """
36
+ Last active channel for the conversation
37
+ """
38
+
39
+ last_message: typing.Optional[str] = pydantic.Field(default=None)
40
+ """
41
+ Last message content
42
+ """
43
+
44
+ linked_aops: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = pydantic.Field(
45
+ default=None
46
+ )
47
+ """
48
+ List of linked AOP assets
49
+ """
50
+
51
+ linked_projects: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = pydantic.Field(
52
+ default=None
53
+ )
54
+ """
55
+ List of linked project assets
56
+ """
57
+
58
+ model: typing.Optional[str] = pydantic.Field(default=None)
59
+ """
60
+ Model used in conversation
61
+ """
62
+
63
+ num_messages: typing.Optional[int] = pydantic.Field(default=None)
64
+ """
65
+ Number of messages in the conversation
66
+ """
67
+
68
+ start_channel: typing.Optional[str] = pydantic.Field(default=None)
69
+ """
70
+ Channel where conversation was started
71
+ """
72
+
73
+ state: typing.Optional[str] = pydantic.Field(default=None)
74
+ """
75
+ Current state of the conversation (e.g., 'running', 'completed')
76
+ """
77
+
78
+ title: str = pydantic.Field()
79
+ """
80
+ Title of the conversation
81
+ """
82
+
83
+ updated_at: str = pydantic.Field()
84
+ """
85
+ ISO timestamp when conversation was last updated
86
+ """
87
+
88
+ workspace_id: str = pydantic.Field()
89
+ """
90
+ Workspace ID where conversation exists
91
+ """
92
+
93
+ if IS_PYDANTIC_V2:
94
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
95
+ else:
96
+
97
+ class Config:
98
+ frozen = True
99
+ smart_union = True
100
+ extra = pydantic.Extra.allow
@@ -0,0 +1,47 @@
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
+ from .conversation_asset_info import ConversationAssetInfo
8
+
9
+
10
+ class ThreadStatusResponseOut(UniversalBaseModel):
11
+ """
12
+ Response model for thread status check.
13
+ """
14
+
15
+ conversation_asset: typing.Optional[ConversationAssetInfo] = pydantic.Field(default=None)
16
+ """
17
+ Information about the associated conversation asset
18
+ """
19
+
20
+ created_at: str = pydantic.Field()
21
+ """
22
+ ISO timestamp when thread was created
23
+ """
24
+
25
+ status: str = pydantic.Field()
26
+ """
27
+ Current status of the thread (e.g., 'running', 'completed', 'failed')
28
+ """
29
+
30
+ thread_id: str = pydantic.Field()
31
+ """
32
+ The thread ID that was checked
33
+ """
34
+
35
+ updated_at: str = pydantic.Field()
36
+ """
37
+ ISO timestamp when thread was last updated
38
+ """
39
+
40
+ if IS_PYDANTIC_V2:
41
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
42
+ else:
43
+
44
+ class Config:
45
+ frozen = True
46
+ smart_union = True
47
+ extra = pydantic.Extra.allow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: athena-intelligence
3
- Version: 0.1.205
3
+ Version: 0.1.207
4
4
  Summary: Athena Intelligence Python Library
5
5
  Requires-Python: >=3.9,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -1,4 +1,4 @@
1
- athena/__init__.py,sha256=VXyrAkqUDbvUpdBa-A7lShZliUPwL00Q0brxX3cS_Hs,3597
1
+ athena/__init__.py,sha256=uYu0eT7L5Q3E6S2MxapA5hqgYRM9jL34MZ3ljdZhdBg,3737
2
2
  athena/agents/__init__.py,sha256=dg7IOwE6-BQSx20JEhdc1VDHlbIHPy08x5fuww_Tvko,180
3
3
  athena/agents/client.py,sha256=A70jdG6spqLkPriU8-NCn0vOJvdc5f4SKoVZLOebZjQ,5975
4
4
  athena/agents/drive/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
@@ -20,11 +20,11 @@ athena/aop/raw_client.py,sha256=plXlJeQ4c9FgCh8cB8tr44kEPHaemm1H_akuDV9Xfms,1824
20
20
  athena/assets/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
21
21
  athena/assets/client.py,sha256=8qxDICl5Dz-cNeUOl0du1spj54g_-bLObSLK_biUXV0,5159
22
22
  athena/assets/raw_client.py,sha256=TW6dCb1i68p-0sf4_B2F0H8SK-kk9sIHFAuwfTEg5GQ,7077
23
- athena/base_client.py,sha256=v0xO5KUQrRW8zlNSeyNWwv8r3Yc5bn3RzRWNTOeeGEY,6523
23
+ athena/base_client.py,sha256=9OfmXHlNIFE_4Udzxn0Ue-H-sC2ps0AIm8ZRyuaDwXA,6738
24
24
  athena/client.py,sha256=lK3vVU3TF3YjPpiohpxcuRl8x_sSw8HmQ-uuDDeAT6I,22161
25
25
  athena/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
26
26
  athena/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
27
- athena/core/client_wrapper.py,sha256=fZWSYnU3HfaLMpPZ75iQcWJJOtpC_vpESfpLKi8Yu9Y,2392
27
+ athena/core/client_wrapper.py,sha256=hW_0p055pZduZ1-qb7ZRzO6pvNFiRBkNCCSlP9k08B0,2392
28
28
  athena/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
29
29
  athena/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
30
30
  athena/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -51,6 +51,9 @@ athena/query/client.py,sha256=X4fBmmmawPaBEt9xWIuhoAcohPKmMadKzpgcEp22oYA,5692
51
51
  athena/query/raw_client.py,sha256=aD0CfHJrTZnEiIGwsk4ZSUIueKfDV9vdvMxsfBkvDWs,13701
52
52
  athena/query/types/__init__.py,sha256=O7bsrzp7vi-HiEiDq7X6dGcElLkCbWtyQ4wqP6Qdyp0,226
53
53
  athena/query/types/query_execute_request_database_asset_ids.py,sha256=aoVl5Xb34Q27hYGuVTnByGIxtHkL67wAwzXh7eJctew,154
54
+ athena/threads/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
55
+ athena/threads/client.py,sha256=gLjlEgLuEMduyPlK54GhGxWu6Vto-_TKFHcYcu9ZoiY,3328
56
+ athena/threads/raw_client.py,sha256=1-y1q2M5UyoIV6kuH-zkTGDKNdGUWMWUALsKJhtPPvE,8072
54
57
  athena/tools/__init__.py,sha256=Lq5sY-WpodI9cuRtzoJXXPiK7oQ-JAopxo2-M6ugJEU,326
55
58
  athena/tools/calendar/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
56
59
  athena/tools/calendar/client.py,sha256=NMiwSaBD-JYcAoudGyBMtWVIWPm6ChFqOFSndxYupY0,4385
@@ -61,8 +64,8 @@ athena/tools/email/client.py,sha256=dOidOOOLHdfz2c3nykzyOa7nTftS91d2_aws0LTg8DU,
61
64
  athena/tools/email/raw_client.py,sha256=GkSxb-RFdhGgFNghnwH6i0cPI_gfWGLUmWvBNlBlhE4,9962
62
65
  athena/tools/raw_client.py,sha256=iiAKpFTyBoYLzL5G0BCV6GM69NxCkksB_30XAAmyc24,53049
63
66
  athena/tools/sheets/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
64
- athena/tools/sheets/client.py,sha256=PFN_qTfL2sNXkSyU8rDbwEqrHW1ACI9hVkGdfzbDdOE,55273
65
- athena/tools/sheets/raw_client.py,sha256=bi2koBw2Ggct_9ZWZ3kRS50a9sVbT-ZWVtpU9XfMS9k,89950
67
+ athena/tools/sheets/client.py,sha256=Bs4VtViBqIOsC1xMr_3hv_D3zdGbXjbgxCXd2teSiFE,58581
68
+ athena/tools/sheets/raw_client.py,sha256=4YZXW77QK9eeLwHEcNdb1CQltTd7_L4qm7k6J21Yuak,95535
66
69
  athena/tools/structured_data_extractor/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
67
70
  athena/tools/structured_data_extractor/client.py,sha256=V1FcGZTPbrlz2d9oQZhsj3UIN1ZlZfnqRdDXj16xiPs,10623
68
71
  athena/tools/structured_data_extractor/raw_client.py,sha256=1ZYZBssmf1jDomopeJ3PMRLql3zT4c7ssRNNLa1YrGE,11245
@@ -71,7 +74,7 @@ athena/tools/tasks/client.py,sha256=c_YZ7OjQNJmPKbeeXJznXj3zo5CRFSv02dLupAdHAyo,
71
74
  athena/tools/tasks/raw_client.py,sha256=Mexzuf_HcRXWNlESDGQkHHv5tC2tAo-AX3PBSuSRO3U,3812
72
75
  athena/tools/types/__init__.py,sha256=ZI6REilQ0Xuocjd8iyNVfLvOsA2Ltlb8--px07wRSPg,217
73
76
  athena/tools/types/tools_data_frame_request_columns_item.py,sha256=GA1FUlTV_CfSc-KToTAwFf4Exl0rr4fsweVZupztjw0,138
74
- athena/types/__init__.py,sha256=Vip2IwctpaB5yqoT_iZ5djAL9leN-HeNV-0scuGjo9Y,4051
77
+ athena/types/__init__.py,sha256=P84dfrZwrzrFIka7jnJyadx4P8rQhhRtjT79CNSo3r4,4234
75
78
  athena/types/aop_async_execute_response_out.py,sha256=R3oy0RLyD-t4MQCnp3Ll13Ci3D5JUMhPyuetbhrONNs,1798
76
79
  athena/types/aop_execute_request_in.py,sha256=mEsMKyNN6e90gZra733lJDC6z0bZWdc72af3B-Z5aqE,889
77
80
  athena/types/aop_execute_response_out.py,sha256=sOaPWALEo5hWKSnoq_kXrHKtgqsJvgCWcOWpjCTtTCA,1816
@@ -84,6 +87,7 @@ athena/types/chunk_content_item.py,sha256=nKP8lq4AbbAZEKY7bRKOc7sDvqfyslCBCn8Cl_
84
87
  athena/types/chunk_result.py,sha256=hgrS4hMeuwTRpJ2YrMdrW_QWWWUQ82iYVVTuhFWm1X0,734
85
88
  athena/types/chunk_result_chunk_id.py,sha256=pzJ6yL6NdUtseoeU4Kw2jlxSTMCVew2TrjhR1MbCuFg,124
86
89
  athena/types/content.py,sha256=sSPPkZkHZgA_rO6UyTnR2QBK5mOqUz2pZ--B86r5584,211
90
+ athena/types/conversation_asset_info.py,sha256=m461eFh_CbC8zwz_W3D0q0lB-hV897ZMlFh-R3OjqEc,2451
87
91
  athena/types/create_new_sheet_tab_response.py,sha256=RF8iOL3mkSc3pY0pqQhvw9IdnncxDC_-XdSUhqPODsM,892
88
92
  athena/types/custom_agent_response.py,sha256=hzw1s7mcCI9V58l5OqK4Q59AGF_NctSx5scjJeVWckk,684
89
93
  athena/types/data_frame_request_out.py,sha256=wyVIEEI6mqSoH6SyXTQpzLCJOWwsAlUvG9iAVlNuNOU,1076
@@ -116,8 +120,9 @@ athena/types/sheet_operation_response.py,sha256=w-Nl11a1kii-RHTzgrt9QjpN1nuWfbF4
116
120
  athena/types/sql_agent_response.py,sha256=qp-VIpsZziEkx8EIF4bdhmlPqqH8a8GaCWLANJxE5kU,765
117
121
  athena/types/structured_data_extractor_response.py,sha256=yFQ0CiFDdlZIq2X8UprEAwOPhNBqG8lzVu9_aDySW2M,1067
118
122
  athena/types/text_content.py,sha256=tcVCPj3tHh5zQcTElr2tdCIjjfx3ZI63rKIlaG8vo64,592
123
+ athena/types/thread_status_response_out.py,sha256=UuSAvs9woL1i8RwvVRKsFUufN4A9jO3jsV47YMckvQU,1219
119
124
  athena/types/type.py,sha256=Gvs56nvBMPcQpOZkfPocGNNb7S05PuINianbT309QAQ,146
120
125
  athena/version.py,sha256=tnXYUugs9zF_pkVdem-QBorKSuhEOOuetkR57dADDxE,86
121
- athena_intelligence-0.1.205.dist-info/METADATA,sha256=cxr4yqUDhnPtGoJ148NkSYC9BlTHIvUIJRn5EZwPUbE,5440
122
- athena_intelligence-0.1.205.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
123
- athena_intelligence-0.1.205.dist-info/RECORD,,
126
+ athena_intelligence-0.1.207.dist-info/METADATA,sha256=K3KqvAnitBfPPg-6b-oX5ND1jUN_x3iXaiLK5j1CQu4,5440
127
+ athena_intelligence-0.1.207.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
128
+ athena_intelligence-0.1.207.dist-info/RECORD,,