airia 0.1.37__py3-none-any.whl → 0.1.39__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.
- airia/client/async_client.py +2 -0
- airia/client/attachments/async_attachments.py +54 -1
- airia/client/attachments/base_attachments.py +39 -0
- airia/client/attachments/sync_attachments.py +52 -1
- airia/client/data_store/__init__.py +4 -0
- airia/client/data_store/async_data_store.py +15 -0
- airia/client/data_store/store/__init__.py +4 -0
- airia/client/data_store/store/async_store.py +114 -0
- airia/client/data_store/store/base_store.py +73 -0
- airia/client/data_store/store/sync_store.py +115 -0
- airia/client/data_store/sync_data_store.py +15 -0
- airia/client/data_vector_search/base_data_vector_search.py +3 -1
- airia/client/pipelines_config/async_pipelines_config.py +6 -2
- airia/client/pipelines_config/base_pipelines_config.py +3 -1
- airia/client/pipelines_config/sync_pipelines_config.py +3 -1
- airia/client/sync_client.py +2 -0
- airia/types/api/__init__.py +1 -0
- airia/types/api/attachments/__init__.py +2 -1
- airia/types/api/attachments/get_file_url.py +19 -0
- airia/types/api/data_store/__init__.py +3 -0
- airia/types/api/data_store/store/__init__.py +11 -0
- airia/types/api/data_store/store/_get_files_and_folders.py +84 -0
- airia/types/api/library/__init__.py +1 -1
- airia/types/api/models/list_models.py +3 -1
- airia/types/api/pipelines_config/export_pipeline_definition.py +42 -36
- airia/types/api/tools/_tools.py +3 -1
- {airia-0.1.37.dist-info → airia-0.1.39.dist-info}/METADATA +1 -1
- {airia-0.1.37.dist-info → airia-0.1.39.dist-info}/RECORD +31 -20
- {airia-0.1.37.dist-info → airia-0.1.39.dist-info}/WHEEL +1 -1
- {airia-0.1.37.dist-info → airia-0.1.39.dist-info}/licenses/LICENSE +0 -0
- {airia-0.1.37.dist-info → airia-0.1.39.dist-info}/top_level.txt +0 -0
airia/client/async_client.py
CHANGED
|
@@ -11,6 +11,7 @@ from ._request_handler import AsyncRequestHandler
|
|
|
11
11
|
from .attachments import AsyncAttachments
|
|
12
12
|
from .base_client import AiriaBaseClient
|
|
13
13
|
from .conversations import AsyncConversations
|
|
14
|
+
from .data_store import AsyncDataStore
|
|
14
15
|
from .data_vector_search import AsyncDataVectorSearch
|
|
15
16
|
from .deployments import AsyncDeployments
|
|
16
17
|
from .library import AsyncLibrary
|
|
@@ -70,6 +71,7 @@ class AiriaAsyncClient(AiriaBaseClient):
|
|
|
70
71
|
self.project = AsyncProject(self._request_handler)
|
|
71
72
|
self.conversations = AsyncConversations(self._request_handler)
|
|
72
73
|
self.store = AsyncStore(self._request_handler)
|
|
74
|
+
self.data_store = AsyncDataStore(self._request_handler)
|
|
73
75
|
self.deployments = AsyncDeployments(self._request_handler)
|
|
74
76
|
self.data_vector_search = AsyncDataVectorSearch(self._request_handler)
|
|
75
77
|
self.library = AsyncLibrary(self._request_handler)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
from ...types._api_version import ApiVersion
|
|
4
|
-
from ...types.api.attachments import AttachmentResponse
|
|
4
|
+
from ...types.api.attachments import AttachmentResponse, GetFileUrlResponse
|
|
5
5
|
from .._request_handler import AsyncRequestHandler
|
|
6
6
|
from .base_attachments import BaseAttachments
|
|
7
7
|
|
|
@@ -50,3 +50,56 @@ class AsyncAttachments(BaseAttachments):
|
|
|
50
50
|
|
|
51
51
|
resp = await self._request_handler.make_request_multipart("POST", request_data)
|
|
52
52
|
return AttachmentResponse(**resp)
|
|
53
|
+
|
|
54
|
+
async def get_file_url(
|
|
55
|
+
self,
|
|
56
|
+
file_id: str,
|
|
57
|
+
correlation_id: Optional[str] = None,
|
|
58
|
+
) -> GetFileUrlResponse:
|
|
59
|
+
"""
|
|
60
|
+
Get a refreshed signed URL for an existing attachment.
|
|
61
|
+
|
|
62
|
+
This method retrieves a new time-limited signed URL for accessing
|
|
63
|
+
an attachment that was previously uploaded. Useful when the original
|
|
64
|
+
signed URL has expired or is about to expire.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
file_id: The unique identifier of the attachment
|
|
68
|
+
correlation_id: Optional correlation ID for request tracing. If not provided,
|
|
69
|
+
one will be generated automatically.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
GetFileUrlResponse: Response containing the attachment ID and refreshed signed URL.
|
|
73
|
+
|
|
74
|
+
Raises:
|
|
75
|
+
AiriaAPIError: If the API request fails with details about the error.
|
|
76
|
+
aiohttp.ClientError: For other request-related errors.
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
```python
|
|
80
|
+
async_client = AiriaAsyncClient(api_key="your_api_key")
|
|
81
|
+
|
|
82
|
+
# First, upload a file
|
|
83
|
+
upload_response = await async_client.attachments.upload_file(
|
|
84
|
+
file_path="example.jpg"
|
|
85
|
+
)
|
|
86
|
+
file_id = upload_response.id
|
|
87
|
+
|
|
88
|
+
# Later, get a refreshed URL for the same file
|
|
89
|
+
url_response = await async_client.attachments.get_file_url(
|
|
90
|
+
file_id=file_id
|
|
91
|
+
)
|
|
92
|
+
print(f"Attachment ID: {url_response.id}")
|
|
93
|
+
print(f"Refreshed URL: {url_response.signed_url}")
|
|
94
|
+
```
|
|
95
|
+
"""
|
|
96
|
+
request_data = self._pre_get_file_url(
|
|
97
|
+
file_id=file_id,
|
|
98
|
+
correlation_id=correlation_id,
|
|
99
|
+
api_version=ApiVersion.V1.value,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
resp = await self._request_handler.make_request(
|
|
103
|
+
"GET", request_data, return_json=True
|
|
104
|
+
)
|
|
105
|
+
return GetFileUrlResponse(**resp)
|
|
@@ -52,3 +52,42 @@ class BaseAttachments:
|
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
return request_data
|
|
55
|
+
|
|
56
|
+
def _pre_get_file_url(
|
|
57
|
+
self,
|
|
58
|
+
file_id: str,
|
|
59
|
+
correlation_id: Optional[str] = None,
|
|
60
|
+
api_version: str = ApiVersion.V1.value,
|
|
61
|
+
):
|
|
62
|
+
"""
|
|
63
|
+
Prepare request data for get file URL endpoint.
|
|
64
|
+
|
|
65
|
+
This internal method constructs the URL for refreshing a file's signed URL,
|
|
66
|
+
validating the API version and preparing all request components.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
file_id: The unique identifier of the file
|
|
70
|
+
correlation_id: Optional correlation ID for tracing
|
|
71
|
+
api_version: API version to use for the request
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
RequestData: Prepared request data for the get file URL endpoint
|
|
75
|
+
|
|
76
|
+
Raises:
|
|
77
|
+
ValueError: If an invalid API version is provided
|
|
78
|
+
"""
|
|
79
|
+
if api_version not in ApiVersion.as_list():
|
|
80
|
+
raise ValueError(
|
|
81
|
+
f"Invalid API version: {api_version}. Valid versions are: {', '.join(ApiVersion.as_list())}"
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
url = urljoin(
|
|
85
|
+
self._request_handler.base_url,
|
|
86
|
+
f"{api_version}/upload/refresh/{file_id}",
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
request_data = self._request_handler.prepare_request(
|
|
90
|
+
url=url, payload=None, correlation_id=correlation_id
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
return request_data
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
from ...types._api_version import ApiVersion
|
|
4
|
-
from ...types.api.attachments import AttachmentResponse
|
|
4
|
+
from ...types.api.attachments import AttachmentResponse, GetFileUrlResponse
|
|
5
5
|
from .._request_handler import RequestHandler
|
|
6
6
|
from .base_attachments import BaseAttachments
|
|
7
7
|
|
|
@@ -50,3 +50,54 @@ class Attachments(BaseAttachments):
|
|
|
50
50
|
|
|
51
51
|
resp = self._request_handler.make_request_multipart("POST", request_data)
|
|
52
52
|
return AttachmentResponse(**resp)
|
|
53
|
+
|
|
54
|
+
def get_file_url(
|
|
55
|
+
self,
|
|
56
|
+
file_id: str,
|
|
57
|
+
correlation_id: Optional[str] = None,
|
|
58
|
+
) -> GetFileUrlResponse:
|
|
59
|
+
"""
|
|
60
|
+
Get a refreshed signed URL for an existing attachment.
|
|
61
|
+
|
|
62
|
+
This method retrieves a new time-limited signed URL for accessing
|
|
63
|
+
an attachment that was previously uploaded. Useful when the original
|
|
64
|
+
signed URL has expired or is about to expire.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
file_id: The unique identifier of the attachment
|
|
68
|
+
correlation_id: Optional correlation ID for request tracing. If not provided,
|
|
69
|
+
one will be generated automatically.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
GetFileUrlResponse: Response containing the attachment ID and refreshed signed URL.
|
|
73
|
+
|
|
74
|
+
Raises:
|
|
75
|
+
AiriaAPIError: If the API request fails with details about the error.
|
|
76
|
+
requests.RequestException: For other request-related errors.
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
```python
|
|
80
|
+
client = AiriaClient(api_key="your_api_key")
|
|
81
|
+
|
|
82
|
+
# First, upload a file
|
|
83
|
+
upload_response = client.attachments.upload_file(
|
|
84
|
+
file_path="example.jpg"
|
|
85
|
+
)
|
|
86
|
+
file_id = upload_response.id
|
|
87
|
+
|
|
88
|
+
# Later, get a refreshed URL for the same file
|
|
89
|
+
url_response = client.attachments.get_file_url(
|
|
90
|
+
file_id=file_id
|
|
91
|
+
)
|
|
92
|
+
print(f"Attachment ID: {url_response.id}")
|
|
93
|
+
print(f"Refreshed URL: {url_response.signed_url}")
|
|
94
|
+
```
|
|
95
|
+
"""
|
|
96
|
+
request_data = self._pre_get_file_url(
|
|
97
|
+
file_id=file_id,
|
|
98
|
+
correlation_id=correlation_id,
|
|
99
|
+
api_version=ApiVersion.V1.value,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
resp = self._request_handler.make_request("GET", request_data, return_json=True)
|
|
103
|
+
return GetFileUrlResponse(**resp)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from .._request_handler import AsyncRequestHandler
|
|
2
|
+
from .store import AsyncStore
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AsyncDataStore:
|
|
6
|
+
"""Async Data Store client for browsing files and folders in store connectors."""
|
|
7
|
+
|
|
8
|
+
def __init__(self, request_handler: AsyncRequestHandler):
|
|
9
|
+
"""
|
|
10
|
+
Initialize the AsyncDataStore client.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
request_handler: The async request handler for making API calls
|
|
14
|
+
"""
|
|
15
|
+
self.store = AsyncStore(request_handler)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from ....types.api.data_store.store import GetFilesAndFoldersResponse
|
|
4
|
+
from ..._request_handler import AsyncRequestHandler
|
|
5
|
+
from .base_store import BaseStore
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AsyncStore(BaseStore):
|
|
9
|
+
"""Async Store client for browsing files and folders."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, request_handler: AsyncRequestHandler):
|
|
12
|
+
super().__init__(request_handler)
|
|
13
|
+
|
|
14
|
+
async def get_files_and_folders(
|
|
15
|
+
self,
|
|
16
|
+
store_connector_id: str,
|
|
17
|
+
project_id: str,
|
|
18
|
+
folder_id: Optional[str] = None,
|
|
19
|
+
page_number: Optional[int] = None,
|
|
20
|
+
page_size: Optional[int] = None,
|
|
21
|
+
sort_by: Optional[str] = None,
|
|
22
|
+
sort_order: Optional[str] = None,
|
|
23
|
+
filter_by: Optional[str] = None,
|
|
24
|
+
filter_value: Optional[str] = None,
|
|
25
|
+
correlation_id: Optional[str] = None,
|
|
26
|
+
) -> GetFilesAndFoldersResponse:
|
|
27
|
+
"""
|
|
28
|
+
Retrieve files and folders from a store connector in the Airia data store.
|
|
29
|
+
|
|
30
|
+
This method retrieves information about files and folders in the specified
|
|
31
|
+
store connector, with optional navigation into specific folders and support
|
|
32
|
+
for pagination, sorting, and filtering.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
store_connector_id: The unique identifier of the store connector (GUID format)
|
|
36
|
+
project_id: The unique identifier of the project (GUID format)
|
|
37
|
+
folder_id: Optional folder ID to browse within a specific folder (GUID format).
|
|
38
|
+
If not provided, retrieves items from the root level.
|
|
39
|
+
page_number: Page number for pagination (1-indexed)
|
|
40
|
+
page_size: Number of items per page
|
|
41
|
+
sort_by: Field to sort by (e.g., "lastSyncAt", "name")
|
|
42
|
+
sort_order: Sort order ("ASC" or "DESC")
|
|
43
|
+
filter_by: Field to filter by
|
|
44
|
+
filter_value: Value to filter by
|
|
45
|
+
correlation_id: Optional correlation ID for request tracing
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
GetFilesAndFoldersResponse: List of files and folders with metadata and total count
|
|
49
|
+
|
|
50
|
+
Raises:
|
|
51
|
+
AiriaAPIError: If the API request fails, including cases where:
|
|
52
|
+
- The store_connector_id doesn't exist (404)
|
|
53
|
+
- The project_id doesn't exist (404)
|
|
54
|
+
- The folder_id is invalid (404)
|
|
55
|
+
- Authentication fails (401)
|
|
56
|
+
- Access is forbidden (403)
|
|
57
|
+
- Server errors (5xx)
|
|
58
|
+
ValueError: If required parameters are missing or invalid
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
```python
|
|
62
|
+
from airia import AiriaAsyncClient
|
|
63
|
+
|
|
64
|
+
async with AiriaAsyncClient(api_key="your_api_key") as client:
|
|
65
|
+
# Get files and folders from root level
|
|
66
|
+
response = await client.data_store.store.get_files_and_folders(
|
|
67
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
68
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Browse a specific folder with pagination and sorting
|
|
72
|
+
response = await client.data_store.store.get_files_and_folders(
|
|
73
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
74
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e",
|
|
75
|
+
folder_id="3292db69-f365-4bb6-a2b6-a017a187fb77",
|
|
76
|
+
page_number=1,
|
|
77
|
+
page_size=50,
|
|
78
|
+
sort_by="lastSyncAt",
|
|
79
|
+
sort_order="DESC"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# Access the results
|
|
83
|
+
if response.files_and_folders:
|
|
84
|
+
for item in response.files_and_folders:
|
|
85
|
+
print(f"{item.name} ({item.type})")
|
|
86
|
+
if item.type == "folder":
|
|
87
|
+
print(f" Contains {item.file_count} files, {item.folder_count} folders")
|
|
88
|
+
|
|
89
|
+
print(f"Total items: {response.total_count}")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Note:
|
|
93
|
+
The response includes:
|
|
94
|
+
- files_and_folders: List of file and folder objects with metadata
|
|
95
|
+
- total_count: Total number of items (useful for pagination)
|
|
96
|
+
"""
|
|
97
|
+
request_data = self._pre_get_files_and_folders(
|
|
98
|
+
store_connector_id=store_connector_id,
|
|
99
|
+
project_id=project_id,
|
|
100
|
+
folder_id=folder_id,
|
|
101
|
+
page_number=page_number,
|
|
102
|
+
page_size=page_size,
|
|
103
|
+
sort_by=sort_by,
|
|
104
|
+
sort_order=sort_order,
|
|
105
|
+
filter_by=filter_by,
|
|
106
|
+
filter_value=filter_value,
|
|
107
|
+
correlation_id=correlation_id,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
response = await self._request_handler.make_request(
|
|
111
|
+
"GET", request_data, return_json=True
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
return GetFilesAndFoldersResponse(**response)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
from urllib.parse import urljoin
|
|
3
|
+
|
|
4
|
+
from ..._request_handler import AsyncRequestHandler, RequestHandler
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class BaseStore:
|
|
8
|
+
def __init__(self, request_handler: Union[RequestHandler, AsyncRequestHandler]):
|
|
9
|
+
self._request_handler = request_handler
|
|
10
|
+
|
|
11
|
+
def _pre_get_files_and_folders(
|
|
12
|
+
self,
|
|
13
|
+
store_connector_id: str,
|
|
14
|
+
project_id: str,
|
|
15
|
+
folder_id: Optional[str] = None,
|
|
16
|
+
page_number: Optional[int] = None,
|
|
17
|
+
page_size: Optional[int] = None,
|
|
18
|
+
sort_by: Optional[str] = None,
|
|
19
|
+
sort_order: Optional[str] = None,
|
|
20
|
+
filter_by: Optional[str] = None,
|
|
21
|
+
filter_value: Optional[str] = None,
|
|
22
|
+
correlation_id: Optional[str] = None,
|
|
23
|
+
):
|
|
24
|
+
"""
|
|
25
|
+
Prepare request data for get files and folders endpoint.
|
|
26
|
+
|
|
27
|
+
This internal method constructs the URL and query parameters for
|
|
28
|
+
retrieving files and folders from a store connector.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
store_connector_id: ID of the store connector
|
|
32
|
+
project_id: ID of the project
|
|
33
|
+
folder_id: Optional folder ID to browse within a specific folder
|
|
34
|
+
page_number: Page number for pagination
|
|
35
|
+
page_size: Number of items per page
|
|
36
|
+
sort_by: Field to sort by
|
|
37
|
+
sort_order: Sort order (ASC or DESC)
|
|
38
|
+
filter_by: Field to filter by
|
|
39
|
+
filter_value: Value to filter by
|
|
40
|
+
correlation_id: Optional correlation ID for tracing
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
RequestData: Prepared request data for the get files and folders endpoint
|
|
44
|
+
"""
|
|
45
|
+
# Build URL with optional folder_id
|
|
46
|
+
if folder_id:
|
|
47
|
+
url_path = f"datastore/v1/store/{store_connector_id}/folders/{folder_id}"
|
|
48
|
+
else:
|
|
49
|
+
url_path = f"datastore/v1/store/{store_connector_id}/folders/"
|
|
50
|
+
|
|
51
|
+
url = urljoin(self._request_handler.base_url, url_path)
|
|
52
|
+
|
|
53
|
+
# Build query parameters
|
|
54
|
+
params = {"projectId": project_id}
|
|
55
|
+
|
|
56
|
+
if page_number is not None:
|
|
57
|
+
params["pagingParameters.pageNumber"] = page_number
|
|
58
|
+
if page_size is not None:
|
|
59
|
+
params["pagingParameters.pageSize"] = page_size
|
|
60
|
+
if sort_by is not None:
|
|
61
|
+
params["sortingParameters.sortBy"] = sort_by
|
|
62
|
+
if sort_order is not None:
|
|
63
|
+
params["sortingParameters.sortOrder"] = sort_order
|
|
64
|
+
if filter_by is not None:
|
|
65
|
+
params["filteringParameters.filterBy"] = filter_by
|
|
66
|
+
if filter_value is not None:
|
|
67
|
+
params["filteringParameters.filterValue"] = filter_value
|
|
68
|
+
|
|
69
|
+
request_data = self._request_handler.prepare_request(
|
|
70
|
+
url, params=params, payload=None, correlation_id=correlation_id
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return request_data
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from ....types.api.data_store.store import GetFilesAndFoldersResponse
|
|
4
|
+
from ..._request_handler import RequestHandler
|
|
5
|
+
from .base_store import BaseStore
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Store(BaseStore):
|
|
9
|
+
"""Store client for browsing files and folders."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, request_handler: RequestHandler):
|
|
12
|
+
super().__init__(request_handler)
|
|
13
|
+
|
|
14
|
+
def get_files_and_folders(
|
|
15
|
+
self,
|
|
16
|
+
store_connector_id: str,
|
|
17
|
+
project_id: str,
|
|
18
|
+
folder_id: Optional[str] = None,
|
|
19
|
+
page_number: Optional[int] = None,
|
|
20
|
+
page_size: Optional[int] = None,
|
|
21
|
+
sort_by: Optional[str] = None,
|
|
22
|
+
sort_order: Optional[str] = None,
|
|
23
|
+
filter_by: Optional[str] = None,
|
|
24
|
+
filter_value: Optional[str] = None,
|
|
25
|
+
correlation_id: Optional[str] = None,
|
|
26
|
+
) -> GetFilesAndFoldersResponse:
|
|
27
|
+
"""
|
|
28
|
+
Retrieve files and folders from a store connector in the Airia data store.
|
|
29
|
+
|
|
30
|
+
This method retrieves information about files and folders in the specified
|
|
31
|
+
store connector, with optional navigation into specific folders and support
|
|
32
|
+
for pagination, sorting, and filtering.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
store_connector_id: The unique identifier of the store connector (GUID format)
|
|
36
|
+
project_id: The unique identifier of the project (GUID format)
|
|
37
|
+
folder_id: Optional folder ID to browse within a specific folder (GUID format).
|
|
38
|
+
If not provided, retrieves items from the root level.
|
|
39
|
+
page_number: Page number for pagination (1-indexed)
|
|
40
|
+
page_size: Number of items per page
|
|
41
|
+
sort_by: Field to sort by (e.g., "lastSyncAt", "name")
|
|
42
|
+
sort_order: Sort order ("ASC" or "DESC")
|
|
43
|
+
filter_by: Field to filter by
|
|
44
|
+
filter_value: Value to filter by
|
|
45
|
+
correlation_id: Optional correlation ID for request tracing
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
GetFilesAndFoldersResponse: List of files and folders with metadata and total count
|
|
49
|
+
|
|
50
|
+
Raises:
|
|
51
|
+
AiriaAPIError: If the API request fails, including cases where:
|
|
52
|
+
- The store_connector_id doesn't exist (404)
|
|
53
|
+
- The project_id doesn't exist (404)
|
|
54
|
+
- The folder_id is invalid (404)
|
|
55
|
+
- Authentication fails (401)
|
|
56
|
+
- Access is forbidden (403)
|
|
57
|
+
- Server errors (5xx)
|
|
58
|
+
ValueError: If required parameters are missing or invalid
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
```python
|
|
62
|
+
from airia import AiriaClient
|
|
63
|
+
|
|
64
|
+
client = AiriaClient(api_key="your_api_key")
|
|
65
|
+
|
|
66
|
+
# Get files and folders from root level
|
|
67
|
+
response = client.data_store.store.get_files_and_folders(
|
|
68
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
69
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Browse a specific folder with pagination and sorting
|
|
73
|
+
response = client.data_store.store.get_files_and_folders(
|
|
74
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
75
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e",
|
|
76
|
+
folder_id="3292db69-f365-4bb6-a2b6-a017a187fb77",
|
|
77
|
+
page_number=1,
|
|
78
|
+
page_size=50,
|
|
79
|
+
sort_by="lastSyncAt",
|
|
80
|
+
sort_order="DESC"
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Access the results
|
|
84
|
+
if response.files_and_folders:
|
|
85
|
+
for item in response.files_and_folders:
|
|
86
|
+
print(f"{item.name} ({item.type})")
|
|
87
|
+
if item.type == "folder":
|
|
88
|
+
print(f" Contains {item.file_count} files, {item.folder_count} folders")
|
|
89
|
+
|
|
90
|
+
print(f"Total items: {response.total_count}")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Note:
|
|
94
|
+
The response includes:
|
|
95
|
+
- files_and_folders: List of file and folder objects with metadata
|
|
96
|
+
- total_count: Total number of items (useful for pagination)
|
|
97
|
+
"""
|
|
98
|
+
request_data = self._pre_get_files_and_folders(
|
|
99
|
+
store_connector_id=store_connector_id,
|
|
100
|
+
project_id=project_id,
|
|
101
|
+
folder_id=folder_id,
|
|
102
|
+
page_number=page_number,
|
|
103
|
+
page_size=page_size,
|
|
104
|
+
sort_by=sort_by,
|
|
105
|
+
sort_order=sort_order,
|
|
106
|
+
filter_by=filter_by,
|
|
107
|
+
filter_value=filter_value,
|
|
108
|
+
correlation_id=correlation_id,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
response = self._request_handler.make_request(
|
|
112
|
+
"GET", request_data, return_json=True
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
return GetFilesAndFoldersResponse(**response)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from .._request_handler import RequestHandler
|
|
2
|
+
from .store import Store
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DataStore:
|
|
6
|
+
"""Data Store client for browsing files and folders in store connectors."""
|
|
7
|
+
|
|
8
|
+
def __init__(self, request_handler: RequestHandler):
|
|
9
|
+
"""
|
|
10
|
+
Initialize the DataStore client.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
request_handler: The request handler for making API calls
|
|
14
|
+
"""
|
|
15
|
+
self.store = Store(request_handler)
|
|
@@ -48,7 +48,9 @@ class BaseDataVectorSearch:
|
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
request_data = self._request_handler.prepare_request(
|
|
51
|
-
url,
|
|
51
|
+
url,
|
|
52
|
+
correlation_id=correlation_id,
|
|
53
|
+
params={"pageNumber": page_number, "pageSize": page_size},
|
|
52
54
|
)
|
|
53
55
|
|
|
54
56
|
return request_data
|
|
@@ -133,7 +133,9 @@ class AsyncPipelinesConfig(BasePipelinesConfig):
|
|
|
133
133
|
sort_direction: Optional[Literal["ASC", "DESC"]] = None,
|
|
134
134
|
filter: Optional[str] = None,
|
|
135
135
|
project_id: Optional[str] = None,
|
|
136
|
-
model_credential_source_type: Optional[
|
|
136
|
+
model_credential_source_type: Optional[
|
|
137
|
+
Literal["UserProvided", "Library"]
|
|
138
|
+
] = None,
|
|
137
139
|
correlation_id: Optional[str] = None,
|
|
138
140
|
) -> GetPipelinesConfigResponse:
|
|
139
141
|
"""
|
|
@@ -267,4 +269,6 @@ class AsyncPipelinesConfig(BasePipelinesConfig):
|
|
|
267
269
|
correlation_id=correlation_id,
|
|
268
270
|
api_version=ApiVersion.V1.value,
|
|
269
271
|
)
|
|
270
|
-
await self._request_handler.make_request(
|
|
272
|
+
await self._request_handler.make_request(
|
|
273
|
+
"DELETE", request_data, return_json=False
|
|
274
|
+
)
|
|
@@ -85,7 +85,9 @@ class BasePipelinesConfig:
|
|
|
85
85
|
sort_direction: Optional[Literal["ASC", "DESC"]] = None,
|
|
86
86
|
filter: Optional[str] = None,
|
|
87
87
|
project_id: Optional[str] = None,
|
|
88
|
-
model_credential_source_type: Optional[
|
|
88
|
+
model_credential_source_type: Optional[
|
|
89
|
+
Literal["UserProvided", "Library"]
|
|
90
|
+
] = None,
|
|
89
91
|
correlation_id: Optional[str] = None,
|
|
90
92
|
api_version: str = ApiVersion.V1.value,
|
|
91
93
|
):
|
|
@@ -133,7 +133,9 @@ class PipelinesConfig(BasePipelinesConfig):
|
|
|
133
133
|
sort_direction: Optional[Literal["ASC", "DESC"]] = None,
|
|
134
134
|
filter: Optional[str] = None,
|
|
135
135
|
project_id: Optional[str] = None,
|
|
136
|
-
model_credential_source_type: Optional[
|
|
136
|
+
model_credential_source_type: Optional[
|
|
137
|
+
Literal["UserProvided", "Library"]
|
|
138
|
+
] = None,
|
|
137
139
|
correlation_id: Optional[str] = None,
|
|
138
140
|
) -> GetPipelinesConfigResponse:
|
|
139
141
|
"""
|
airia/client/sync_client.py
CHANGED
|
@@ -11,6 +11,7 @@ from ._request_handler import RequestHandler
|
|
|
11
11
|
from .attachments import Attachments
|
|
12
12
|
from .base_client import AiriaBaseClient
|
|
13
13
|
from .conversations import Conversations
|
|
14
|
+
from .data_store import DataStore
|
|
14
15
|
from .data_vector_search import DataVectorSearch
|
|
15
16
|
from .deployments import Deployments
|
|
16
17
|
from .library import Library
|
|
@@ -70,6 +71,7 @@ class AiriaClient(AiriaBaseClient):
|
|
|
70
71
|
self.project = Project(self._request_handler)
|
|
71
72
|
self.conversations = Conversations(self._request_handler)
|
|
72
73
|
self.store = Store(self._request_handler)
|
|
74
|
+
self.data_store = DataStore(self._request_handler)
|
|
73
75
|
self.deployments = Deployments(self._request_handler)
|
|
74
76
|
self.data_vector_search = DataVectorSearch(self._request_handler)
|
|
75
77
|
self.library = Library(self._request_handler)
|
airia/types/api/__init__.py
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class GetFileUrlResponse(BaseModel):
|
|
7
|
+
"""Response model for getting a refreshed file URL.
|
|
8
|
+
|
|
9
|
+
This class contains the unique identifier and a refreshed signed URL
|
|
10
|
+
for an existing attachment, providing time-limited access to download
|
|
11
|
+
the attachment.
|
|
12
|
+
|
|
13
|
+
Attributes:
|
|
14
|
+
id: The unique identifier of the attachment
|
|
15
|
+
signed_url: A refreshed signed URL of the attachment in storage
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
id: Optional[str] = None
|
|
19
|
+
signed_url: Optional[str] = Field(None, alias="signedUrl")
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic models for data store file and folder listing API responses.
|
|
3
|
+
|
|
4
|
+
This module defines data structures for browsing files and folders within
|
|
5
|
+
store connectors on the Airia platform.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import List, Optional
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class IngestionProcessingStatus(BaseModel):
|
|
14
|
+
"""Status information for file ingestion processing.
|
|
15
|
+
|
|
16
|
+
Contains details about how a file is being processed during ingestion,
|
|
17
|
+
including processing mode, status, and any errors encountered.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
table_document_processing_mode: Mode used for processing table documents
|
|
21
|
+
user_errors: List of user-facing error messages
|
|
22
|
+
system_errors: List of system error messages
|
|
23
|
+
status: Current processing status
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
table_document_processing_mode: Optional[str] = Field(
|
|
27
|
+
None, alias="tableDocumentProcessingMode"
|
|
28
|
+
)
|
|
29
|
+
user_errors: Optional[List[str]] = Field(None, alias="userErrors")
|
|
30
|
+
system_errors: Optional[List[str]] = Field(None, alias="systemErrors")
|
|
31
|
+
status: Optional[str] = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class FileOrFolder(BaseModel):
|
|
35
|
+
"""Individual file or folder entry in a store connector.
|
|
36
|
+
|
|
37
|
+
Represents a single item (file or folder) within the data store,
|
|
38
|
+
including metadata, status, and nested content counts for folders.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
id: Unique identifier for the file or folder
|
|
42
|
+
name: Name of the file or folder
|
|
43
|
+
type: Type of the item (e.g., 'file' or 'folder')
|
|
44
|
+
size: Size in bytes (for files)
|
|
45
|
+
mime_type: MIME type (for files)
|
|
46
|
+
file_count: Number of files (for folders)
|
|
47
|
+
folder_count: Number of subfolders (for folders)
|
|
48
|
+
file_last_updated_at: Timestamp of last update (ISO format)
|
|
49
|
+
status: Current status of the file or folder
|
|
50
|
+
ingestion_processing_statuses: List of ingestion processing status information
|
|
51
|
+
additional_metadata_json: Additional metadata as JSON string
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
id: Optional[str] = None
|
|
55
|
+
name: Optional[str] = None
|
|
56
|
+
type: Optional[str] = None
|
|
57
|
+
size: Optional[int] = None
|
|
58
|
+
mime_type: Optional[str] = Field(None, alias="mimeType")
|
|
59
|
+
file_count: Optional[int] = Field(None, alias="fileCount")
|
|
60
|
+
folder_count: Optional[int] = Field(None, alias="folderCount")
|
|
61
|
+
file_last_updated_at: Optional[str] = Field(None, alias="fileLastUpdatedAt")
|
|
62
|
+
status: Optional[str] = None
|
|
63
|
+
ingestion_processing_statuses: Optional[List[IngestionProcessingStatus]] = Field(
|
|
64
|
+
None, alias="ingestionProcessingStatuses"
|
|
65
|
+
)
|
|
66
|
+
additional_metadata_json: Optional[str] = Field(
|
|
67
|
+
None, alias="additionalMetadataJson"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class GetFilesAndFoldersResponse(BaseModel):
|
|
72
|
+
"""Response model for getting files and folders from a store connector.
|
|
73
|
+
|
|
74
|
+
Contains a list of files and folders along with pagination information.
|
|
75
|
+
|
|
76
|
+
Attributes:
|
|
77
|
+
files_and_folders: List of file and folder objects
|
|
78
|
+
total_count: Total number of items available (may be greater than items returned)
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
files_and_folders: Optional[List[FileOrFolder]] = Field(
|
|
82
|
+
None, alias="filesAndFolders"
|
|
83
|
+
)
|
|
84
|
+
total_count: Optional[int] = Field(None, alias="totalCount")
|
|
@@ -121,7 +121,9 @@ class ModelItem(BaseModel):
|
|
|
121
121
|
has_tool_support: bool = Field(alias="hasToolSupport")
|
|
122
122
|
has_stream_support: bool = Field(alias="hasStreamSupport")
|
|
123
123
|
library_model_id: Optional[str] = Field(None, alias="libraryModelId")
|
|
124
|
-
user_provided_details: Optional[ModelUserProvidedDetails] = Field(
|
|
124
|
+
user_provided_details: Optional[ModelUserProvidedDetails] = Field(
|
|
125
|
+
None, alias="userProvidedDetails"
|
|
126
|
+
)
|
|
125
127
|
allow_airia_credentials: bool = Field(alias="allowAiriaCredentials")
|
|
126
128
|
allow_byok_credentials: bool = Field(alias="allowBYOKCredentials")
|
|
127
129
|
price_type: str = Field(alias="priceType")
|
|
@@ -85,9 +85,7 @@ class ExportCredentials(BaseModel):
|
|
|
85
85
|
description="Gets or sets the administrative scope.",
|
|
86
86
|
alias="administrativeScope",
|
|
87
87
|
)
|
|
88
|
-
origin: Optional[str] = Field(
|
|
89
|
-
None, description="Gets or sets the origin."
|
|
90
|
-
)
|
|
88
|
+
origin: Optional[str] = Field(None, description="Gets or sets the origin.")
|
|
91
89
|
custom_credentials: Optional[ExportCustomCredentials] = Field(
|
|
92
90
|
None,
|
|
93
91
|
description="Gets or sets the custom credentials.",
|
|
@@ -204,9 +202,7 @@ class ExportJsonFormatterStepConfiguration(BaseModel):
|
|
|
204
202
|
template: The JSON formatter template
|
|
205
203
|
"""
|
|
206
204
|
|
|
207
|
-
template: str = Field(
|
|
208
|
-
..., description="Gets the JSON formatter template."
|
|
209
|
-
)
|
|
205
|
+
template: str = Field(..., description="Gets the JSON formatter template.")
|
|
210
206
|
|
|
211
207
|
|
|
212
208
|
class ExportConditionalBranchConfigDefinition(BaseModel):
|
|
@@ -220,7 +216,7 @@ class ExportConditionalBranchConfigDefinition(BaseModel):
|
|
|
220
216
|
id: str = Field(..., description="Gets or sets the Id.")
|
|
221
217
|
label: Optional[str] = Field(
|
|
222
218
|
None,
|
|
223
|
-
description=
|
|
219
|
+
description='Gets or sets the route label (e.g., "Route 1", "High Priority").',
|
|
224
220
|
)
|
|
225
221
|
|
|
226
222
|
|
|
@@ -398,7 +394,9 @@ class ExportPipelineStep(BaseModel):
|
|
|
398
394
|
None, description="Gets or sets the code.", alias="pythonCodeBlockId"
|
|
399
395
|
)
|
|
400
396
|
approval_request_id: Optional[str] = Field(
|
|
401
|
-
None,
|
|
397
|
+
None,
|
|
398
|
+
description="Gets or sets the approval request ID.",
|
|
399
|
+
alias="approvalRequestId",
|
|
402
400
|
)
|
|
403
401
|
webhook_approval_request_id: Optional[str] = Field(
|
|
404
402
|
None,
|
|
@@ -431,7 +429,9 @@ class ExportPipelineStep(BaseModel):
|
|
|
431
429
|
description="Gets or sets the loop step configuration.",
|
|
432
430
|
alias="loopStepConfiguration",
|
|
433
431
|
)
|
|
434
|
-
json_formatter_step_configuration: Optional[
|
|
432
|
+
json_formatter_step_configuration: Optional[
|
|
433
|
+
ExportJsonFormatterStepConfiguration
|
|
434
|
+
] = Field(
|
|
435
435
|
None,
|
|
436
436
|
description="Gets or sets the JSON formatter step configuration.",
|
|
437
437
|
alias="jsonFormatterStepConfiguration",
|
|
@@ -627,9 +627,7 @@ class ExportPipeline(BaseModel):
|
|
|
627
627
|
description="Gets or sets the markdown description.",
|
|
628
628
|
alias="markdownDescription",
|
|
629
629
|
)
|
|
630
|
-
tagline: Optional[str] = Field(
|
|
631
|
-
None, description="Gets or sets the tagline."
|
|
632
|
-
)
|
|
630
|
+
tagline: Optional[str] = Field(None, description="Gets or sets the tagline.")
|
|
633
631
|
video_link: Optional[str] = Field(
|
|
634
632
|
None, description="Gets or sets the video link.", alias="videoLink"
|
|
635
633
|
)
|
|
@@ -719,7 +717,9 @@ class ExportVectorStore(BaseModel):
|
|
|
719
717
|
None, description="Gets or sets the credential ID.", alias="credentialId"
|
|
720
718
|
)
|
|
721
719
|
configuration_json: Optional[str] = Field(
|
|
722
|
-
None,
|
|
720
|
+
None,
|
|
721
|
+
description="Gets or sets the configuration JSON.",
|
|
722
|
+
alias="configurationJson",
|
|
723
723
|
)
|
|
724
724
|
sparse_vector_enabled: bool = Field(
|
|
725
725
|
...,
|
|
@@ -727,7 +727,9 @@ class ExportVectorStore(BaseModel):
|
|
|
727
727
|
alias="sparseVectorEnabled",
|
|
728
728
|
)
|
|
729
729
|
embedding_provider: str = Field(
|
|
730
|
-
...,
|
|
730
|
+
...,
|
|
731
|
+
description="Gets or sets the embedding provider.",
|
|
732
|
+
alias="embeddingProvider",
|
|
731
733
|
)
|
|
732
734
|
embedding_configuration_json: Optional[str] = Field(
|
|
733
735
|
None,
|
|
@@ -1045,9 +1047,7 @@ class ExportTool(BaseModel):
|
|
|
1045
1047
|
description="Gets or sets a value indicating what the credential type is when the tool use user based credentials.",
|
|
1046
1048
|
alias="useUserCredentialsType",
|
|
1047
1049
|
)
|
|
1048
|
-
provider: Optional[str] = Field(
|
|
1049
|
-
None, description="Gets or sets the provider."
|
|
1050
|
-
)
|
|
1050
|
+
provider: Optional[str] = Field(None, description="Gets or sets the provider.")
|
|
1051
1051
|
body_type: Optional[str] = Field(
|
|
1052
1052
|
None, description="Gets or sets the body type.", alias="bodyType"
|
|
1053
1053
|
)
|
|
@@ -1543,9 +1543,7 @@ class ExportMetadata(BaseModel):
|
|
|
1543
1543
|
readiness: Optional[str] = Field(
|
|
1544
1544
|
None, description="Gets or sets the readiness level."
|
|
1545
1545
|
)
|
|
1546
|
-
department: Optional[str] = Field(
|
|
1547
|
-
None, description="Gets or sets the department."
|
|
1548
|
-
)
|
|
1546
|
+
department: Optional[str] = Field(None, description="Gets or sets the department.")
|
|
1549
1547
|
agent_last_updated: Optional[str] = Field(
|
|
1550
1548
|
None,
|
|
1551
1549
|
description="Gets or sets the timestamp when the agent was last updated.",
|
|
@@ -1585,7 +1583,9 @@ class ExportApprovalRequest(BaseModel):
|
|
|
1585
1583
|
alias="denialDescription",
|
|
1586
1584
|
)
|
|
1587
1585
|
approved_handle_id: str = Field(
|
|
1588
|
-
...,
|
|
1586
|
+
...,
|
|
1587
|
+
description="Gets or sets the approved handle ID.",
|
|
1588
|
+
alias="approvedHandleId",
|
|
1589
1589
|
)
|
|
1590
1590
|
denied_handle_id: str = Field(
|
|
1591
1591
|
..., description="Gets or sets the denied handle ID.", alias="deniedHandleId"
|
|
@@ -1626,7 +1626,9 @@ class ExportWebhookApprovalRequest(BaseModel):
|
|
|
1626
1626
|
description="Gets or sets the optional Message to include in the webhook payload.",
|
|
1627
1627
|
)
|
|
1628
1628
|
approved_handle_id: str = Field(
|
|
1629
|
-
...,
|
|
1629
|
+
...,
|
|
1630
|
+
description="Gets the approved handle identifier.",
|
|
1631
|
+
alias="approvedHandleId",
|
|
1630
1632
|
)
|
|
1631
1633
|
denied_handle_id: str = Field(
|
|
1632
1634
|
..., description="Gets the denied handle identifier.", alias="deniedHandleId"
|
|
@@ -1694,9 +1696,13 @@ class ExportAgentCardSkill(BaseModel):
|
|
|
1694
1696
|
|
|
1695
1697
|
id: str = Field(..., description="Gets or sets the ID.")
|
|
1696
1698
|
name: str = Field(..., description="Gets or sets the name.")
|
|
1697
|
-
description: Optional[str] = Field(
|
|
1699
|
+
description: Optional[str] = Field(
|
|
1700
|
+
None, description="Gets or sets the description."
|
|
1701
|
+
)
|
|
1698
1702
|
tags: Optional[List[str]] = Field(None, description="Gets or sets the tags.")
|
|
1699
|
-
examples: Optional[List[str]] = Field(
|
|
1703
|
+
examples: Optional[List[str]] = Field(
|
|
1704
|
+
None, description="Gets or sets the examples."
|
|
1705
|
+
)
|
|
1700
1706
|
input_modes: Optional[List[str]] = Field(
|
|
1701
1707
|
None, description="Gets or sets the input modes.", alias="inputModes"
|
|
1702
1708
|
)
|
|
@@ -1736,7 +1742,9 @@ class ExportAgentCard(BaseModel):
|
|
|
1736
1742
|
)
|
|
1737
1743
|
version: str = Field(..., description="Gets or sets the version.")
|
|
1738
1744
|
documentation_url: Optional[str] = Field(
|
|
1739
|
-
None,
|
|
1745
|
+
None,
|
|
1746
|
+
description="Gets or sets the documentation URL.",
|
|
1747
|
+
alias="documentationUrl",
|
|
1740
1748
|
)
|
|
1741
1749
|
capabilities: Optional[ExportAgentCardCapabilities] = Field(
|
|
1742
1750
|
None, description="Gets or sets the capabilities."
|
|
@@ -1745,7 +1753,9 @@ class ExportAgentCard(BaseModel):
|
|
|
1745
1753
|
None, description="Gets or sets the authentication."
|
|
1746
1754
|
)
|
|
1747
1755
|
default_input_modes: List[str] = Field(
|
|
1748
|
-
...,
|
|
1756
|
+
...,
|
|
1757
|
+
description="Gets or sets the default input modes.",
|
|
1758
|
+
alias="defaultInputModes",
|
|
1749
1759
|
)
|
|
1750
1760
|
default_output_modes: List[str] = Field(
|
|
1751
1761
|
...,
|
|
@@ -1804,9 +1814,7 @@ class ExportMCPAnnotations(BaseModel):
|
|
|
1804
1814
|
description="Gets or sets a value indicating whether the tool is read-only.",
|
|
1805
1815
|
alias="readOnlyHint",
|
|
1806
1816
|
)
|
|
1807
|
-
title: Optional[str] = Field(
|
|
1808
|
-
None, description="Gets or sets the tool title."
|
|
1809
|
-
)
|
|
1817
|
+
title: Optional[str] = Field(None, description="Gets or sets the tool title.")
|
|
1810
1818
|
|
|
1811
1819
|
|
|
1812
1820
|
class ExportToolInterface(BaseModel):
|
|
@@ -1879,7 +1887,7 @@ class ExportSDKStepCredentialReference(BaseModel):
|
|
|
1879
1887
|
|
|
1880
1888
|
property_name: str = Field(
|
|
1881
1889
|
...,
|
|
1882
|
-
description=
|
|
1890
|
+
description='Gets or sets the property name in the parameters class (e.g., "CredentialId").',
|
|
1883
1891
|
alias="propertyName",
|
|
1884
1892
|
)
|
|
1885
1893
|
original_credential_id: str = Field(
|
|
@@ -1922,21 +1930,19 @@ class ExportSDKStepDefinition(BaseModel):
|
|
|
1922
1930
|
...,
|
|
1923
1931
|
description="Gets or sets the unique identifier of the SDK step.",
|
|
1924
1932
|
)
|
|
1925
|
-
name: str = Field(
|
|
1926
|
-
..., description="Gets or sets the name of the SDK step."
|
|
1927
|
-
)
|
|
1933
|
+
name: str = Field(..., description="Gets or sets the name of the SDK step.")
|
|
1928
1934
|
sdk_step_type: str = Field(
|
|
1929
1935
|
...,
|
|
1930
|
-
description=
|
|
1936
|
+
description='Gets or sets the type of SDK step (e.g., "HttpRequest", "OneDrive_ListItems").',
|
|
1931
1937
|
alias="sdkStepType",
|
|
1932
1938
|
)
|
|
1933
1939
|
category: str = Field(
|
|
1934
1940
|
...,
|
|
1935
|
-
description=
|
|
1941
|
+
description='Gets or sets the SDK step category (e.g., "Actions", "Logic").',
|
|
1936
1942
|
)
|
|
1937
1943
|
group: str = Field(
|
|
1938
1944
|
...,
|
|
1939
|
-
description=
|
|
1945
|
+
description='Gets or sets the SDK step group (e.g., "Http", "OneDrive").',
|
|
1940
1946
|
)
|
|
1941
1947
|
version: str = Field(
|
|
1942
1948
|
...,
|
airia/types/api/tools/_tools.py
CHANGED
|
@@ -106,7 +106,9 @@ class ToolCredential(BaseModel):
|
|
|
106
106
|
expires_on: Optional[datetime] = Field(None, alias="expiresOn")
|
|
107
107
|
administrative_scope: str = Field(alias="administrativeScope")
|
|
108
108
|
user_id: Optional[str] = Field(None, alias="userId")
|
|
109
|
-
credential_data: List[CredentialEntry] = Field(
|
|
109
|
+
credential_data: List[CredentialEntry] = Field(
|
|
110
|
+
default_factory=list, alias="credentialData"
|
|
111
|
+
)
|
|
110
112
|
custom_credentials: Optional[dict] = Field(None, alias="customCredentials")
|
|
111
113
|
custom_credentials_id: Optional[str] = Field(None, alias="customCredentialsId")
|
|
112
114
|
tenant_id: Optional[str] = Field(None, alias="tenantId")
|
|
@@ -3,24 +3,31 @@ airia/constants.py,sha256=oKABowOTsJPIQ1AgtVpNN73oKuhh1DekBC5axYSm8lY,647
|
|
|
3
3
|
airia/exceptions.py,sha256=l1FCKlWC6tONvAxSxv4YEAXjpHEM-eQQQ3mEtSkJvhc,1233
|
|
4
4
|
airia/logs.py,sha256=V5YSAq6TPGT0AxOUCwIxy69Zu8jQubzhhjf8deC0rSw,8370
|
|
5
5
|
airia/client/__init__.py,sha256=6gSQ9bl7j79q1HPE0o5py3IRdkwWWuU_7J4h05Dd2o8,127
|
|
6
|
-
airia/client/async_client.py,sha256=
|
|
6
|
+
airia/client/async_client.py,sha256=gPNSgsKwkimMEKjUvEJqMH_aXqZ32hzHtCW0O7H5yog,7632
|
|
7
7
|
airia/client/base_client.py,sha256=bEs75GIUZ2DSfV2JLcRTq0VGGgf0HjcgsDeuBLYhuq0,3181
|
|
8
|
-
airia/client/sync_client.py,sha256=
|
|
8
|
+
airia/client/sync_client.py,sha256=YqyeoT9l8ypiRri7SrieR8U7yclazoe8u_XHuTNd6LQ,7431
|
|
9
9
|
airia/client/_request_handler/__init__.py,sha256=FOdJMfzjN0Tw0TeD8mDJwHgte70Fw_j08EljtfulCvw,157
|
|
10
10
|
airia/client/_request_handler/async_request_handler.py,sha256=TqjiyMG88PCsXL0lzIFpXkzP-GljtDvNpp8KSR_7d7Q,11556
|
|
11
11
|
airia/client/_request_handler/base_request_handler.py,sha256=-_RhSb0nAKZf5-oNZM9jyeIcnbqX58Ht1a66qmlPuGA,3515
|
|
12
12
|
airia/client/_request_handler/sync_request_handler.py,sha256=ce5ryMJRFhtyhnlL_Zspjf_MSiHOTvz75nA9LfhsUbc,10668
|
|
13
13
|
airia/client/attachments/__init__.py,sha256=EId17aIpzEs6Qw1R2DNzetpxYDJZDzLN4J_IrH2wYE8,137
|
|
14
|
-
airia/client/attachments/async_attachments.py,sha256=
|
|
15
|
-
airia/client/attachments/base_attachments.py,sha256=
|
|
16
|
-
airia/client/attachments/sync_attachments.py,sha256=
|
|
14
|
+
airia/client/attachments/async_attachments.py,sha256=9LxvEnlFbovGPCLHElj4RJVrxzWtEKTmECrIUULZw1c,3690
|
|
15
|
+
airia/client/attachments/base_attachments.py,sha256=teFeI2fbIxgmGw6MF3x-9YXi7iaJL-g6vs52YI9saC8,3053
|
|
16
|
+
airia/client/attachments/sync_attachments.py,sha256=_2ZJ5ovoDHwLqsahYI355X8ZMAhPAX3UqWxZGVmog7g,3583
|
|
17
17
|
airia/client/conversations/__init__.py,sha256=5gbcHEYLHOn5cK95tlM52GPOmar8gpyK-BivyASmFEo,149
|
|
18
18
|
airia/client/conversations/async_conversations.py,sha256=XbSErt_6RKcQwDdGHKr_roSf2EkxhR6ogBiN3oMFNhk,7448
|
|
19
19
|
airia/client/conversations/base_conversations.py,sha256=YpIvA66xFZbOC4L8P17pISCqyWlJvju34FHX7Pcj8Aw,4848
|
|
20
20
|
airia/client/conversations/sync_conversations.py,sha256=IelRpGuoV0sBwOfZd44igV3i5P35Hv-zzZwCC7y6mlA,7200
|
|
21
|
+
airia/client/data_store/__init__.py,sha256=MqbqpIQE2OaUQjCb8wJJbxuShfzhNwBmRc7AXhpdSPE,127
|
|
22
|
+
airia/client/data_store/async_data_store.py,sha256=R_iYEuztOL6lojlNekyiF9ZfNlRxbPoxSge0Oxzme24,464
|
|
23
|
+
airia/client/data_store/sync_data_store.py,sha256=2aCb8RRqRSMSHQgIjLy-mK1mp2a8X58HRA4nQtcSIwY,422
|
|
24
|
+
airia/client/data_store/store/__init__.py,sha256=-rbtYQ8PTaFA6Fs2dm7Db2C3RDNvagaK3iE4PpLRcjg,101
|
|
25
|
+
airia/client/data_store/store/async_store.py,sha256=iqYrsAkR9c6PA_uTDkT7HQQzrL-EfSGpL_J1-TYAqLA,4744
|
|
26
|
+
airia/client/data_store/store/base_store.py,sha256=R7wn29Ch9oaXdxx8Xn2JB1vMYXI8UadBoCFB5AcdPHI,2746
|
|
27
|
+
airia/client/data_store/store/sync_store.py,sha256=IK7wQU-HxJaXsqGkRJn1W5CSoyVkp9lZMbMncYnaZRY,4589
|
|
21
28
|
airia/client/data_vector_search/__init__.py,sha256=RmeB9wdIWubjnmoco321dx0T2h5tV0-rTsuHQdXOwI0,171
|
|
22
29
|
airia/client/data_vector_search/async_data_vector_search.py,sha256=aeI963entUS3hSZGfKwFOYl2fKMWLHn74P4EQUHh4v8,3347
|
|
23
|
-
airia/client/data_vector_search/base_data_vector_search.py,sha256=
|
|
30
|
+
airia/client/data_vector_search/base_data_vector_search.py,sha256=Zha55-mqzYgNE2-R6kP8ubQXPK0T_0-XiMAE1FRkr6Y,1914
|
|
24
31
|
airia/client/data_vector_search/sync_data_vector_search.py,sha256=le3C4ttzlsZQlLi6g5SG6jkpJpGpTve1Dd-Ou7UB7NU,3094
|
|
25
32
|
airia/client/deployments/__init__.py,sha256=Xu_MqbeUrtqYE4tH6hbmvUk8eQScWJ6MEyYFlVEwlRw,310
|
|
26
33
|
airia/client/deployments/async_deployments.py,sha256=VUeRU448xXXaitbDMwz7NNHU09tllyd4h9_m_l1HElY,5366
|
|
@@ -43,9 +50,9 @@ airia/client/pipeline_import/async_pipeline_import.py,sha256=BC6HkkMNiU7_7H8vAhX
|
|
|
43
50
|
airia/client/pipeline_import/base_pipeline_import.py,sha256=_6AHf_bL3RABDaIQN3-ivL3Z8NR1l0J7A4S0ilJCluY,3844
|
|
44
51
|
airia/client/pipeline_import/sync_pipeline_import.py,sha256=SaF8uIWGFhk5i0e45JGY2WXLVNyJPq4WXwUA78m7Yv8,7000
|
|
45
52
|
airia/client/pipelines_config/__init__.py,sha256=Mjn3ie-bQo6zjayxrJDvoJG2vKis72yGt_CQkvtREw4,163
|
|
46
|
-
airia/client/pipelines_config/async_pipelines_config.py,sha256=
|
|
47
|
-
airia/client/pipelines_config/base_pipelines_config.py,sha256=
|
|
48
|
-
airia/client/pipelines_config/sync_pipelines_config.py,sha256=
|
|
53
|
+
airia/client/pipelines_config/async_pipelines_config.py,sha256=p0oTu95bvZ3Fs-dpTKVIGBA_hB_vX_MFeoQg_iYFi_4,10979
|
|
54
|
+
airia/client/pipelines_config/base_pipelines_config.py,sha256=zGfsA4OBbydiufBEK3jsY3Ci4zKUh3C2gxDIVmP4NdM,6481
|
|
55
|
+
airia/client/pipelines_config/sync_pipelines_config.py,sha256=oKFA4HhPOi7_L2xzQ7MVv5Xh3k4VyCPkL5JhdwXU7Mg,10818
|
|
49
56
|
airia/client/project/__init__.py,sha256=GGEGfxtNzSO_BMAJ8Wfo8ZTq8BIdR6MHf6gSwhPv9mE,113
|
|
50
57
|
airia/client/project/async_project.py,sha256=MTX2rvoltXL26_qvn_Wn5MkiTdpbRZHZRwbt4zAdFjE,5734
|
|
51
58
|
airia/client/project/base_project.py,sha256=HFoxeHgvCYOwUhLPF2xYGwF5e1A9WXpCrOWAjRkHWBY,3389
|
|
@@ -62,27 +69,31 @@ airia/types/__init__.py,sha256=fbNw1eto8l-qgz-W2QG32i-zQY7WiWZY3JR6fL2HsKM,235
|
|
|
62
69
|
airia/types/_api_version.py,sha256=Uzom6O2ZG92HN_Z2h-lTydmO2XYX9RVs4Yi4DJmXytE,255
|
|
63
70
|
airia/types/_request_data.py,sha256=q8t7KfO2WvgbPVYPvPWiwYb8LyP0kovlOgHFhZIU6ns,1278
|
|
64
71
|
airia/types/_structured_output.py,sha256=j_uqBMl5SmDNv0v_FrAli0ugQoLzhZKT_YGLHvWc2A0,5357
|
|
65
|
-
airia/types/api/__init__.py,sha256=
|
|
66
|
-
airia/types/api/attachments/__init__.py,sha256=
|
|
72
|
+
airia/types/api/__init__.py,sha256=9ORtzlH5iQRbO72EbIPaOwi10G2uvuxTnh4WhuQu6Ps,189
|
|
73
|
+
airia/types/api/attachments/__init__.py,sha256=DDkYf2Lmh67Q1YM-E9x80QQ-La285AwZsR2_OECHoOM,145
|
|
74
|
+
airia/types/api/attachments/get_file_url.py,sha256=CdAAp0wiyCE8yeXAbHt0zbCwVgw-c19UmJgcWuV5msk,572
|
|
67
75
|
airia/types/api/attachments/upload_file.py,sha256=XBCm1lZJAloFxmyp_3fbtuJ9Y28O-mbAfwy6D0EvTgQ,457
|
|
68
76
|
airia/types/api/conversations/__init__.py,sha256=W6GlNVZCAY5eViJOoPl1bY9_etRBWeUnYZJJt7WHtfI,269
|
|
69
77
|
airia/types/api/conversations/_conversations.py,sha256=O7VHs2_Ykg0s6Phe0sAVvbO7YVu6d6R2M2-JkWAipxI,4845
|
|
78
|
+
airia/types/api/data_store/__init__.py,sha256=Kv5Vle9HNrCQv0bXRfFZ6zp4BHzGtmwy1slycJKo7jw,50
|
|
79
|
+
airia/types/api/data_store/store/__init__.py,sha256=wmdNMDUUsIGy8SWOrvH_QS9_cniSPvZt5re4OuIPp7k,223
|
|
80
|
+
airia/types/api/data_store/store/_get_files_and_folders.py,sha256=mkwabQdWFlwLqKDgRZFTZDmVTss52VB0LRd66TepZpA,3161
|
|
70
81
|
airia/types/api/data_vector_search/__init__.py,sha256=TXomyrDRlsFmiBWUNoSyD3-dSK5ahYHvn9-s8CIS5xI,112
|
|
71
82
|
airia/types/api/data_vector_search/get_file_chunks.py,sha256=ywP1zH_OXnyP5ZyJ_epaZWRLvOxC72RnL235ySYSZA0,1597
|
|
72
83
|
airia/types/api/deployments/__init__.py,sha256=ONQgkKr_8i6FhcBsHyzT4mYOP_H0OPUAsxvxroZWBMU,538
|
|
73
84
|
airia/types/api/deployments/get_deployment.py,sha256=KBr9edTu-e-tC3u9bpAdz0CMWzk0DFQxusrVU6OZ7mc,4398
|
|
74
85
|
airia/types/api/deployments/get_deployments.py,sha256=5Dm7pTkEFmIZ4p4Scle9x9p3Nqy5tnXxeft3H4O_Fa8,8718
|
|
75
|
-
airia/types/api/library/__init__.py,sha256=
|
|
86
|
+
airia/types/api/library/__init__.py,sha256=Yka_tt95gouqaMayQ1zVR5Ps-JBGgjSXfsTSVhAygSo,202
|
|
76
87
|
airia/types/api/library/_library_models.py,sha256=d0YbmKNuUDXrieSRZh1IkhW_2aKrnaU08yuxqij98Dg,10486
|
|
77
88
|
airia/types/api/models/__init__.py,sha256=bm4Rn86Tuk7q3988bJ_gvS5zY7t-sqCFt1BYb0nS7Xo,224
|
|
78
|
-
airia/types/api/models/list_models.py,sha256=
|
|
89
|
+
airia/types/api/models/list_models.py,sha256=HlwyxlCNCT4wH0L7nQn7faqUz_6P9iirlzdUYbMvlhg,5497
|
|
79
90
|
airia/types/api/pipeline_execution/__init__.py,sha256=SSuwWyW3IXRv-3cGUwuKp-yC7utOqqsZGkdpydi12NU,910
|
|
80
91
|
airia/types/api/pipeline_execution/_pipeline_execution.py,sha256=Y167Tdt0XHY2ZGV-Ji0DlBog2KRJDtCIeseXAb-cyyo,6889
|
|
81
92
|
airia/types/api/pipeline_execution/get_pipeline_execution.py,sha256=Mkp3bV9sajVq4GARVyJviFWPR2BEtLCbZZLHTgQqcSI,2925
|
|
82
93
|
airia/types/api/pipeline_import/__init__.py,sha256=5m8e4faOYGCEFLQWJgj-v5H4NXPNtnlAKAxA4tGJUbw,267
|
|
83
94
|
airia/types/api/pipeline_import/create_agent_from_pipeline_definition.py,sha256=vn2aZGPnahmstHYKKMMN1hyTMRWFa2uAjpAYGwaI2xg,4394
|
|
84
95
|
airia/types/api/pipelines_config/__init__.py,sha256=6nxX-y1cAp66aupdzG_EvHeizBNoJ56i5nhRQIp2kbg,2752
|
|
85
|
-
airia/types/api/pipelines_config/export_pipeline_definition.py,sha256=
|
|
96
|
+
airia/types/api/pipelines_config/export_pipeline_definition.py,sha256=J7yzIank3VFnC-NgYZ6mXCi7sggdQV0pcXbKAynhAtw,79238
|
|
86
97
|
airia/types/api/pipelines_config/get_pipeline_config.py,sha256=gvyp_xGpxr3Elcsu04JSQRPDvjmxRCPDAAR0rbE-oGs,23538
|
|
87
98
|
airia/types/api/pipelines_config/get_pipelines_config.py,sha256=RbiX5zISxzGRxzPGHe7QpO-Ro-0woQsPGLxtiP4Y4K4,15955
|
|
88
99
|
airia/types/api/project/__init__.py,sha256=ervHvCeqt08JkMRsSrG1ZnQshE70of-8kf4VeW2HG9c,113
|
|
@@ -91,12 +102,12 @@ airia/types/api/store/__init__.py,sha256=BgViwV_SHE9cxtilPnA2xWRk6MkAbxYxansmGeZ
|
|
|
91
102
|
airia/types/api/store/get_file.py,sha256=Li3CpWUktQruNeoKSTlHJPXzNMaysG_Zy-fXGji8zs8,6174
|
|
92
103
|
airia/types/api/store/get_files.py,sha256=v22zmOuTSFqzrS73L5JL_FgBeF5a5wutv1nK4IHAoW0,700
|
|
93
104
|
airia/types/api/tools/__init__.py,sha256=r4jcHknQcLIb3jVkGR5lcmuapHqln7-rot3EBCNmZtI,146
|
|
94
|
-
airia/types/api/tools/_tools.py,sha256=
|
|
105
|
+
airia/types/api/tools/_tools.py,sha256=AcnzgOes_xjdw1BaiiSE0p2o495Xp02zAwNGQMu2sXg,9255
|
|
95
106
|
airia/types/sse/__init__.py,sha256=KWnNTfsQnthfrU128pUX6ounvSS7DvjC-Y21FE-OdMk,1863
|
|
96
107
|
airia/types/sse/sse_messages.py,sha256=asq9KG5plT2XSgQMz-Nqo0WcKlXvE8UT3E-WLhCegPk,30244
|
|
97
108
|
airia/utils/sse_parser.py,sha256=XCTkuaroYWaVQOgBq8VpbseQYSAVruF69AvKUwZQKTA,4251
|
|
98
|
-
airia-0.1.
|
|
99
|
-
airia-0.1.
|
|
100
|
-
airia-0.1.
|
|
101
|
-
airia-0.1.
|
|
102
|
-
airia-0.1.
|
|
109
|
+
airia-0.1.39.dist-info/licenses/LICENSE,sha256=R3ClUMMKPRItIcZ0svzyj2taZZnFYw568YDNzN9KQ1Q,1066
|
|
110
|
+
airia-0.1.39.dist-info/METADATA,sha256=LFp3lWJ5Q6uN0G3zHaGiVl8Q55uJtPNxUc6uZnvqv88,4949
|
|
111
|
+
airia-0.1.39.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
112
|
+
airia-0.1.39.dist-info/top_level.txt,sha256=qUQEKfs_hdOYTwjKj1JZbRhS5YeXDNaKQaVTrzabS6w,6
|
|
113
|
+
airia-0.1.39.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|