unique_sdk 0.10.35__py3-none-any.whl → 0.10.42__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.
- unique_sdk/__init__.py +2 -0
- unique_sdk/api_resources/_content.py +18 -10
- unique_sdk/api_resources/_folder.py +4 -4
- unique_sdk/api_resources/_llm_models.py +64 -0
- unique_sdk/api_resources/_message.py +38 -0
- unique_sdk/api_resources/_message_log.py +28 -3
- unique_sdk/api_resources/_space.py +3 -2
- unique_sdk/api_resources/_user.py +91 -0
- unique_sdk/utils/file_io.py +4 -0
- {unique_sdk-0.10.35.dist-info → unique_sdk-0.10.42.dist-info}/METADATA +96 -1
- {unique_sdk-0.10.35.dist-info → unique_sdk-0.10.42.dist-info}/RECORD +13 -11
- {unique_sdk-0.10.35.dist-info → unique_sdk-0.10.42.dist-info}/LICENSE +0 -0
- {unique_sdk-0.10.35.dist-info → unique_sdk-0.10.42.dist-info}/WHEEL +0 -0
unique_sdk/__init__.py
CHANGED
|
@@ -83,6 +83,8 @@ from unique_sdk.api_resources._short_term_memory import (
|
|
|
83
83
|
from unique_sdk.api_resources._folder import Folder as Folder
|
|
84
84
|
from unique_sdk.api_resources._embedding import Embeddings as Embeddings
|
|
85
85
|
from unique_sdk.api_resources._acronyms import Acronyms as Acronyms
|
|
86
|
+
from unique_sdk.api_resources._llm_models import LLMModels as LLMModels
|
|
87
|
+
from unique_sdk.api_resources._user import User as User
|
|
86
88
|
from unique_sdk.api_resources._message_assessment import (
|
|
87
89
|
MessageAssessment as MessageAssessment,
|
|
88
90
|
)
|
|
@@ -20,6 +20,16 @@ from unique_sdk._request_options import RequestOptions
|
|
|
20
20
|
class Content(APIResource["Content"]):
|
|
21
21
|
OBJECT_NAME: ClassVar[Literal["content.search"]] = "content.search"
|
|
22
22
|
|
|
23
|
+
id: str
|
|
24
|
+
key: str
|
|
25
|
+
url: Optional[str]
|
|
26
|
+
title: Optional[str]
|
|
27
|
+
updatedAt: str
|
|
28
|
+
chunks: Optional[List["Content.Chunk"]]
|
|
29
|
+
metadata: Optional[Dict[str, Any]]
|
|
30
|
+
writeUrl: Optional[str]
|
|
31
|
+
readUrl: Optional[str]
|
|
32
|
+
|
|
23
33
|
class QueryMode(Enum):
|
|
24
34
|
Default = "default"
|
|
25
35
|
Insensitive = "insensitive"
|
|
@@ -127,6 +137,7 @@ class Content(APIResource["Content"]):
|
|
|
127
137
|
key: str
|
|
128
138
|
title: Optional[str]
|
|
129
139
|
mimeType: str
|
|
140
|
+
description: NotRequired[str | None]
|
|
130
141
|
ownerType: NotRequired[str | None]
|
|
131
142
|
ownerId: NotRequired[str | None]
|
|
132
143
|
byteSize: NotRequired[int | None]
|
|
@@ -168,6 +179,7 @@ class Content(APIResource["Content"]):
|
|
|
168
179
|
title: str | None
|
|
169
180
|
metadata: Dict[str, Any] | None
|
|
170
181
|
mimeType: str
|
|
182
|
+
description: str | None
|
|
171
183
|
byteSize: int
|
|
172
184
|
ownerId: str
|
|
173
185
|
createdAt: str
|
|
@@ -192,16 +204,6 @@ class Content(APIResource["Content"]):
|
|
|
192
204
|
class DeleteResponse(TypedDict):
|
|
193
205
|
id: str
|
|
194
206
|
|
|
195
|
-
id: str
|
|
196
|
-
key: str
|
|
197
|
-
url: Optional[str]
|
|
198
|
-
title: Optional[str]
|
|
199
|
-
updatedAt: str
|
|
200
|
-
chunks: List[Chunk]
|
|
201
|
-
metadata: Optional[Dict[str, Any]]
|
|
202
|
-
writeUrl: str
|
|
203
|
-
readUrl: str
|
|
204
|
-
|
|
205
207
|
class MagicTableSheetTableColumn(TypedDict):
|
|
206
208
|
columnId: str
|
|
207
209
|
columnName: str
|
|
@@ -349,6 +351,9 @@ class Content(APIResource["Content"]):
|
|
|
349
351
|
"""
|
|
350
352
|
if "input" in params:
|
|
351
353
|
params["input"]["metadata"] = params["input"].get("metadata") or {}
|
|
354
|
+
if "description" in params["input"] and not params["input"]["description"]:
|
|
355
|
+
params["input"].pop("description")
|
|
356
|
+
|
|
352
357
|
return cast(
|
|
353
358
|
"Content",
|
|
354
359
|
cls._static_request(
|
|
@@ -372,6 +377,9 @@ class Content(APIResource["Content"]):
|
|
|
372
377
|
"""
|
|
373
378
|
if "input" in params:
|
|
374
379
|
params["input"]["metadata"] = params["input"].get("metadata") or {}
|
|
380
|
+
if "description" in params["input"] and not params["input"]["description"]:
|
|
381
|
+
params["input"].pop("description")
|
|
382
|
+
|
|
375
383
|
return cast(
|
|
376
384
|
"Content",
|
|
377
385
|
await cls._static_request_async(
|
|
@@ -216,12 +216,12 @@ class Folder(APIResource["Folder"]):
|
|
|
216
216
|
@classmethod
|
|
217
217
|
def get_infos(
|
|
218
218
|
cls, user_id: str, company_id: str, **params: Unpack["Folder.GetInfosParams"]
|
|
219
|
-
) -> "
|
|
219
|
+
) -> "Folder.FolderInfos":
|
|
220
220
|
"""
|
|
221
221
|
Get paginated folders based on parentId. If the parentId is not defined, the root folders will be returned.
|
|
222
222
|
"""
|
|
223
223
|
return cast(
|
|
224
|
-
"
|
|
224
|
+
"Folder.FolderInfos",
|
|
225
225
|
cls._static_request(
|
|
226
226
|
"get",
|
|
227
227
|
"/folder/infos",
|
|
@@ -234,12 +234,12 @@ class Folder(APIResource["Folder"]):
|
|
|
234
234
|
@classmethod
|
|
235
235
|
async def get_infos_async(
|
|
236
236
|
cls, user_id: str, company_id: str, **params: Unpack["Folder.GetInfosParams"]
|
|
237
|
-
) -> "
|
|
237
|
+
) -> "Folder.FolderInfos":
|
|
238
238
|
"""
|
|
239
239
|
Async get paginated folders based on parentId. If the parentId is not defined, the root folders will be returned.
|
|
240
240
|
"""
|
|
241
241
|
return cast(
|
|
242
|
-
"
|
|
242
|
+
"Folder.FolderInfos",
|
|
243
243
|
await cls._static_request_async(
|
|
244
244
|
"get",
|
|
245
245
|
"/folder/infos",
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from typing import ClassVar, List, Literal, NotRequired, TypedDict, Unpack, cast
|
|
2
|
+
|
|
3
|
+
from unique_sdk._api_resource import APIResource
|
|
4
|
+
from unique_sdk._request_options import RequestOptions
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class LLMModels(APIResource["LLMModels"]):
|
|
8
|
+
OBJECT_NAME: ClassVar[Literal["llm-models"]] = "llm-models"
|
|
9
|
+
|
|
10
|
+
class GetParams(RequestOptions):
|
|
11
|
+
"""
|
|
12
|
+
Parameters for getting available LLM models.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
module: NotRequired[str | None]
|
|
16
|
+
|
|
17
|
+
class LLMModelsResponse(TypedDict):
|
|
18
|
+
"""
|
|
19
|
+
Response for getting available LLM models.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
models: List[str]
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def get_models(
|
|
26
|
+
cls,
|
|
27
|
+
user_id: str,
|
|
28
|
+
company_id: str,
|
|
29
|
+
**params: Unpack["LLMModels.GetParams"],
|
|
30
|
+
) -> "LLMModels.LLMModelsResponse":
|
|
31
|
+
"""
|
|
32
|
+
Get available LLM models.
|
|
33
|
+
"""
|
|
34
|
+
return cast(
|
|
35
|
+
"LLMModels.LLMModelsResponse",
|
|
36
|
+
cls._static_request(
|
|
37
|
+
"get",
|
|
38
|
+
"/openai/models",
|
|
39
|
+
user_id,
|
|
40
|
+
company_id,
|
|
41
|
+
params=params,
|
|
42
|
+
),
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
async def get_models_async(
|
|
47
|
+
cls,
|
|
48
|
+
user_id: str,
|
|
49
|
+
company_id: str,
|
|
50
|
+
**params: Unpack["LLMModels.GetParams"],
|
|
51
|
+
) -> "LLMModels.LLMModelsResponse":
|
|
52
|
+
"""
|
|
53
|
+
Async get available LLM models.
|
|
54
|
+
"""
|
|
55
|
+
return cast(
|
|
56
|
+
"LLMModels.LLMModelsResponse",
|
|
57
|
+
await cls._static_request_async(
|
|
58
|
+
"get",
|
|
59
|
+
"/openai/models",
|
|
60
|
+
user_id,
|
|
61
|
+
company_id,
|
|
62
|
+
params=params,
|
|
63
|
+
),
|
|
64
|
+
)
|
|
@@ -29,8 +29,10 @@ class Message(APIResource["Message"]):
|
|
|
29
29
|
|
|
30
30
|
class Reference(TypedDict):
|
|
31
31
|
name: str
|
|
32
|
+
description: Optional[str]
|
|
32
33
|
url: Optional[str]
|
|
33
34
|
sequenceNumber: int
|
|
35
|
+
originalIndex: Optional[list[int]]
|
|
34
36
|
sourceId: str
|
|
35
37
|
source: str
|
|
36
38
|
|
|
@@ -165,6 +167,12 @@ class Message(APIResource["Message"]):
|
|
|
165
167
|
"""
|
|
166
168
|
Creates a new message object.
|
|
167
169
|
"""
|
|
170
|
+
# Clean up empty descriptions from references
|
|
171
|
+
if "references" in params and params["references"]:
|
|
172
|
+
for ref in params["references"]:
|
|
173
|
+
if "description" in ref and not ref["description"]:
|
|
174
|
+
ref.pop("description")
|
|
175
|
+
|
|
168
176
|
return cast(
|
|
169
177
|
"Message",
|
|
170
178
|
cls._static_request(
|
|
@@ -186,6 +194,12 @@ class Message(APIResource["Message"]):
|
|
|
186
194
|
"""
|
|
187
195
|
Creates a new message object.
|
|
188
196
|
"""
|
|
197
|
+
# Clean up empty descriptions from references
|
|
198
|
+
if "references" in params and params["references"]:
|
|
199
|
+
for ref in params["references"]:
|
|
200
|
+
if "description" in ref and not ref["description"]:
|
|
201
|
+
ref.pop("description")
|
|
202
|
+
|
|
189
203
|
return cast(
|
|
190
204
|
"Message",
|
|
191
205
|
await cls._static_request_async(
|
|
@@ -208,6 +222,12 @@ class Message(APIResource["Message"]):
|
|
|
208
222
|
"""
|
|
209
223
|
Updates an existing message object.
|
|
210
224
|
"""
|
|
225
|
+
# Clean up empty descriptions from references
|
|
226
|
+
if "references" in params and params["references"]:
|
|
227
|
+
for ref in params["references"]:
|
|
228
|
+
if "description" in ref and not ref["description"]:
|
|
229
|
+
ref.pop("description")
|
|
230
|
+
|
|
211
231
|
url = "%s/%s" % (cls.class_url(), quote_plus(id))
|
|
212
232
|
return cast(
|
|
213
233
|
"Message",
|
|
@@ -231,6 +251,12 @@ class Message(APIResource["Message"]):
|
|
|
231
251
|
"""
|
|
232
252
|
Updates an existing message object.
|
|
233
253
|
"""
|
|
254
|
+
# Clean up empty descriptions from references
|
|
255
|
+
if "references" in params and params["references"]:
|
|
256
|
+
for ref in params["references"]:
|
|
257
|
+
if "description" in ref and not ref["description"]:
|
|
258
|
+
ref.pop("description")
|
|
259
|
+
|
|
234
260
|
url = "%s/%s" % (cls.class_url(), quote_plus(id))
|
|
235
261
|
return cast(
|
|
236
262
|
"Message",
|
|
@@ -324,6 +350,12 @@ class Message(APIResource["Message"]):
|
|
|
324
350
|
"""
|
|
325
351
|
Creates a new message event object.
|
|
326
352
|
"""
|
|
353
|
+
# Clean up empty descriptions from references
|
|
354
|
+
if "references" in params and params["references"]:
|
|
355
|
+
for ref in params["references"]:
|
|
356
|
+
if "description" in ref and not ref["description"]:
|
|
357
|
+
ref.pop("description")
|
|
358
|
+
|
|
327
359
|
message_id = params.get("messageId")
|
|
328
360
|
params.pop("messageId", None)
|
|
329
361
|
return cast(
|
|
@@ -347,6 +379,12 @@ class Message(APIResource["Message"]):
|
|
|
347
379
|
"""
|
|
348
380
|
Creates a new message event object.
|
|
349
381
|
"""
|
|
382
|
+
# Clean up empty descriptions from references
|
|
383
|
+
if "references" in params and params["references"]:
|
|
384
|
+
for ref in params["references"]:
|
|
385
|
+
if "description" in ref and not ref["description"]:
|
|
386
|
+
ref.pop("description")
|
|
387
|
+
|
|
350
388
|
message_id = params.get("messageId")
|
|
351
389
|
params.pop("messageId", None)
|
|
352
390
|
return cast(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import ClassVar, Literal, NotRequired, TypedDict, Unpack, cast
|
|
1
|
+
from typing import ClassVar, Literal, NotRequired, Optional, TypedDict, Unpack, cast
|
|
2
2
|
|
|
3
3
|
from unique_sdk._api_resource import APIResource
|
|
4
4
|
from unique_sdk._request_options import RequestOptions
|
|
@@ -12,9 +12,10 @@ class MessageLog(APIResource["MessageLog"]):
|
|
|
12
12
|
|
|
13
13
|
class Reference(TypedDict):
|
|
14
14
|
name: str
|
|
15
|
-
|
|
15
|
+
description: Optional[str]
|
|
16
|
+
url: Optional[str]
|
|
16
17
|
sequenceNumber: int
|
|
17
|
-
originalIndex: list[int]
|
|
18
|
+
originalIndex: Optional[list[int]]
|
|
18
19
|
sourceId: str
|
|
19
20
|
source: str
|
|
20
21
|
|
|
@@ -63,6 +64,12 @@ class MessageLog(APIResource["MessageLog"]):
|
|
|
63
64
|
"""
|
|
64
65
|
Create a MessageLog.
|
|
65
66
|
"""
|
|
67
|
+
# Clean up empty descriptions from references
|
|
68
|
+
if "references" in params and params["references"]:
|
|
69
|
+
for ref in params["references"]:
|
|
70
|
+
if "description" in ref and not ref["description"]:
|
|
71
|
+
ref.pop("description")
|
|
72
|
+
|
|
66
73
|
return cast(
|
|
67
74
|
"MessageLog",
|
|
68
75
|
cls._static_request(
|
|
@@ -84,6 +91,12 @@ class MessageLog(APIResource["MessageLog"]):
|
|
|
84
91
|
"""
|
|
85
92
|
Async create a MessageLog.
|
|
86
93
|
"""
|
|
94
|
+
# Clean up empty descriptions from references
|
|
95
|
+
if "references" in params and params["references"]:
|
|
96
|
+
for ref in params["references"]:
|
|
97
|
+
if "description" in ref and not ref["description"]:
|
|
98
|
+
ref.pop("description")
|
|
99
|
+
|
|
87
100
|
return cast(
|
|
88
101
|
"MessageLog",
|
|
89
102
|
await cls._static_request_async(
|
|
@@ -106,6 +119,12 @@ class MessageLog(APIResource["MessageLog"]):
|
|
|
106
119
|
"""
|
|
107
120
|
Update a MessageLog.
|
|
108
121
|
"""
|
|
122
|
+
# Clean up empty descriptions from references
|
|
123
|
+
if "references" in params and params["references"]:
|
|
124
|
+
for ref in params["references"]:
|
|
125
|
+
if "description" in ref and not ref["description"]:
|
|
126
|
+
ref.pop("description")
|
|
127
|
+
|
|
109
128
|
return cast(
|
|
110
129
|
"MessageLog",
|
|
111
130
|
cls._static_request(
|
|
@@ -128,6 +147,12 @@ class MessageLog(APIResource["MessageLog"]):
|
|
|
128
147
|
"""
|
|
129
148
|
Async update a MessageLog.
|
|
130
149
|
"""
|
|
150
|
+
# Clean up empty descriptions from references
|
|
151
|
+
if "references" in params and params["references"]:
|
|
152
|
+
for ref in params["references"]:
|
|
153
|
+
if "description" in ref and not ref["description"]:
|
|
154
|
+
ref.pop("description")
|
|
155
|
+
|
|
131
156
|
return cast(
|
|
132
157
|
"MessageLog",
|
|
133
158
|
await cls._static_request_async(
|
|
@@ -35,9 +35,10 @@ class Space(APIResource["Space"]):
|
|
|
35
35
|
"""
|
|
36
36
|
|
|
37
37
|
name: str
|
|
38
|
-
|
|
38
|
+
description: Optional[str]
|
|
39
|
+
url: Optional[str]
|
|
39
40
|
sequenceNumber: int
|
|
40
|
-
originalIndex:
|
|
41
|
+
originalIndex: Optional[list[int]]
|
|
41
42
|
sourceId: str
|
|
42
43
|
source: str
|
|
43
44
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
ClassVar,
|
|
3
|
+
List,
|
|
4
|
+
NotRequired,
|
|
5
|
+
Optional,
|
|
6
|
+
TypedDict,
|
|
7
|
+
Unpack,
|
|
8
|
+
cast,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from unique_sdk._api_resource import APIResource
|
|
12
|
+
from unique_sdk._request_options import RequestOptions
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class User(APIResource["User"]):
|
|
16
|
+
OBJECT_NAME: ClassVar[str] = "users"
|
|
17
|
+
|
|
18
|
+
class GetParams(RequestOptions):
|
|
19
|
+
"""
|
|
20
|
+
Parameters for getting users in a company.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
skip: NotRequired[Optional[int]]
|
|
24
|
+
take: NotRequired[Optional[int]]
|
|
25
|
+
email: NotRequired[Optional[str]]
|
|
26
|
+
displayName: NotRequired[Optional[str]]
|
|
27
|
+
|
|
28
|
+
class User(TypedDict):
|
|
29
|
+
"""
|
|
30
|
+
Represents a user in the company.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
id: str
|
|
34
|
+
externalId: Optional[str]
|
|
35
|
+
firstName: str
|
|
36
|
+
lastName: str
|
|
37
|
+
displayName: str
|
|
38
|
+
userName: str
|
|
39
|
+
email: str
|
|
40
|
+
updatedAt: str
|
|
41
|
+
createdAt: str
|
|
42
|
+
active: bool
|
|
43
|
+
|
|
44
|
+
class Users(TypedDict):
|
|
45
|
+
"""
|
|
46
|
+
Response for getting users.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
users: List["User.User"]
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def get_users(
|
|
53
|
+
cls,
|
|
54
|
+
user_id: str,
|
|
55
|
+
company_id: str,
|
|
56
|
+
**params: Unpack["User.GetParams"],
|
|
57
|
+
) -> "User.Users":
|
|
58
|
+
"""
|
|
59
|
+
Get users in a company.
|
|
60
|
+
"""
|
|
61
|
+
return cast(
|
|
62
|
+
"User.Users",
|
|
63
|
+
cls._static_request(
|
|
64
|
+
"get",
|
|
65
|
+
"/users",
|
|
66
|
+
user_id,
|
|
67
|
+
company_id,
|
|
68
|
+
params=params,
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
async def get_users_async(
|
|
74
|
+
cls,
|
|
75
|
+
user_id: str,
|
|
76
|
+
company_id: str,
|
|
77
|
+
**params: Unpack["User.GetParams"],
|
|
78
|
+
) -> "User.Users":
|
|
79
|
+
"""
|
|
80
|
+
Async get users in a company.
|
|
81
|
+
"""
|
|
82
|
+
return cast(
|
|
83
|
+
"User.Users",
|
|
84
|
+
await cls._static_request_async(
|
|
85
|
+
"get",
|
|
86
|
+
"/users",
|
|
87
|
+
user_id,
|
|
88
|
+
company_id,
|
|
89
|
+
params=params,
|
|
90
|
+
),
|
|
91
|
+
)
|
unique_sdk/utils/file_io.py
CHANGED
|
@@ -38,6 +38,7 @@ def upload_file(
|
|
|
38
38
|
path_to_file,
|
|
39
39
|
displayed_filename,
|
|
40
40
|
mime_type,
|
|
41
|
+
description: Optional[str] = None,
|
|
41
42
|
scope_or_unique_path=None,
|
|
42
43
|
chat_id=None,
|
|
43
44
|
ingestion_config: Optional[Content.IngestionConfig] = None,
|
|
@@ -55,6 +56,7 @@ def upload_file(
|
|
|
55
56
|
"key": displayed_filename,
|
|
56
57
|
"title": displayed_filename,
|
|
57
58
|
"mimeType": mime_type,
|
|
59
|
+
"description": description,
|
|
58
60
|
"ingestionConfig": ingestion_config,
|
|
59
61
|
"metadata": metadata,
|
|
60
62
|
},
|
|
@@ -83,6 +85,7 @@ def upload_file(
|
|
|
83
85
|
"key": displayed_filename,
|
|
84
86
|
"title": displayed_filename,
|
|
85
87
|
"mimeType": mime_type,
|
|
88
|
+
"description": description,
|
|
86
89
|
"byteSize": size,
|
|
87
90
|
"ingestionConfig": ingestion_config,
|
|
88
91
|
"metadata": metadata,
|
|
@@ -98,6 +101,7 @@ def upload_file(
|
|
|
98
101
|
"key": displayed_filename,
|
|
99
102
|
"title": displayed_filename,
|
|
100
103
|
"mimeType": mime_type,
|
|
104
|
+
"description": description,
|
|
101
105
|
"byteSize": size,
|
|
102
106
|
"ingestionConfig": ingestion_config,
|
|
103
107
|
"metadata": metadata,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: unique_sdk
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.42
|
|
4
4
|
Summary:
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Martin Fadler
|
|
@@ -42,6 +42,8 @@ The Unique Python SDK provides access to the public API of Unique AI. It also en
|
|
|
42
42
|
- [Message Assessment](#message-assessment)
|
|
43
43
|
- [Folder](#folder)
|
|
44
44
|
- [Space](#space)
|
|
45
|
+
- [LLM Models](#llm-models)
|
|
46
|
+
- [User](#user)
|
|
45
47
|
- [Agentic Table](#agentic-table)
|
|
46
48
|
6. [UniqueQL](#uniqueql)
|
|
47
49
|
- [Query Structure](#uniqueql-query-structure)
|
|
@@ -260,6 +262,8 @@ unique_sdk.Message.modify(
|
|
|
260
262
|
- [Message Assessment](#message-assessment)
|
|
261
263
|
- [Folder](#folder)
|
|
262
264
|
- [Space](#space)
|
|
265
|
+
- [LLM Models](#llm-models)
|
|
266
|
+
- [User](#user)
|
|
263
267
|
- [Agentic Table](#agentic-table)
|
|
264
268
|
|
|
265
269
|
Most of the API services provide an asynchronous version of the method. The async methods are suffixed with `_async`.
|
|
@@ -477,6 +481,7 @@ def upload_file(
|
|
|
477
481
|
path_to_file,
|
|
478
482
|
displayed_filename,
|
|
479
483
|
mimeType,
|
|
484
|
+
description=None,
|
|
480
485
|
scope_or_unique_path,
|
|
481
486
|
ingestion_config=None,
|
|
482
487
|
metadata=None,
|
|
@@ -489,6 +494,7 @@ def upload_file(
|
|
|
489
494
|
"key": displayed_filename,
|
|
490
495
|
"title": displayed_filename,
|
|
491
496
|
"mimeType": mimeType,
|
|
497
|
+
"description": description,
|
|
492
498
|
"ingestionConfig": ingestionConfig,
|
|
493
499
|
"metadata": metadata,
|
|
494
500
|
},
|
|
@@ -515,6 +521,7 @@ def upload_file(
|
|
|
515
521
|
"key": displayed_filename,
|
|
516
522
|
"title": displayed_filename,
|
|
517
523
|
"mimeType": mimeType,
|
|
524
|
+
"description": description,
|
|
518
525
|
"byteSize": size,
|
|
519
526
|
"ingestionConfig": ingestionConfig,
|
|
520
527
|
"metadata": metadata,
|
|
@@ -1359,6 +1366,42 @@ unique_sdk.Folder.delete(
|
|
|
1359
1366
|
|
|
1360
1367
|
### Space
|
|
1361
1368
|
|
|
1369
|
+
#### `unique_sdk.Space.create_message`
|
|
1370
|
+
|
|
1371
|
+
Send a message in a space. You can optionally provide a chat ID to continue an existing conversation, or omit it to start a new chat.
|
|
1372
|
+
|
|
1373
|
+
```python
|
|
1374
|
+
message = unique_sdk.Space.create_message(
|
|
1375
|
+
user_id=user_id,
|
|
1376
|
+
company_id=company_id,
|
|
1377
|
+
chatId="chat_dejfhe729br398", # Optional - if not provided, a new chat will be created
|
|
1378
|
+
assistantId="assistant_abc123",
|
|
1379
|
+
text="Hello, how can you help me?",
|
|
1380
|
+
toolChoices=["WebSearch"], # Optional - list of tools to use
|
|
1381
|
+
scopeRules={ # Optional - scope rules for filtering
|
|
1382
|
+
"or": [
|
|
1383
|
+
{
|
|
1384
|
+
"operator": "contains",
|
|
1385
|
+
"path": ["folderIdPath"],
|
|
1386
|
+
"value": "uniquepathid://scope_123"
|
|
1387
|
+
}
|
|
1388
|
+
]
|
|
1389
|
+
},
|
|
1390
|
+
)
|
|
1391
|
+
```
|
|
1392
|
+
|
|
1393
|
+
#### `unique_sdk.Space.get_latest_message`
|
|
1394
|
+
|
|
1395
|
+
Get the latest message in a space chat.
|
|
1396
|
+
|
|
1397
|
+
```python
|
|
1398
|
+
message = unique_sdk.Space.get_latest_message(
|
|
1399
|
+
user_id=user_id,
|
|
1400
|
+
company_id=company_id,
|
|
1401
|
+
chat_id="chat_dejfhe729br398",
|
|
1402
|
+
)
|
|
1403
|
+
```
|
|
1404
|
+
|
|
1362
1405
|
#### `unique_sdk.Space.delete_chat`
|
|
1363
1406
|
|
|
1364
1407
|
Delete a space chat by id. If the chat does not exist, the function will return an error.
|
|
@@ -1371,6 +1414,37 @@ unique_sdk.Space.delete_chat(
|
|
|
1371
1414
|
)
|
|
1372
1415
|
```
|
|
1373
1416
|
|
|
1417
|
+
### LLM Models
|
|
1418
|
+
|
|
1419
|
+
#### `unique_sdk.LLMModels.get` (Compatible with release >.46)
|
|
1420
|
+
|
|
1421
|
+
Get available LLM models. You can optionally filter by module and skip cache to fetch fresh data.
|
|
1422
|
+
|
|
1423
|
+
```python
|
|
1424
|
+
models = unique_sdk.LLMModels.get(
|
|
1425
|
+
user_id=user_id,
|
|
1426
|
+
company_id=company_id,
|
|
1427
|
+
module="UNIQUE_AI", # Optional - filter models by module, only UNIQUE_AI is supported right now
|
|
1428
|
+
)
|
|
1429
|
+
```
|
|
1430
|
+
|
|
1431
|
+
### User
|
|
1432
|
+
|
|
1433
|
+
#### `unique_sdk.User.get_users` (Compatible with release >.48)
|
|
1434
|
+
|
|
1435
|
+
Get users in a company. You can filter by email, display name, and use pagination with skip and take parameters.
|
|
1436
|
+
|
|
1437
|
+
```python
|
|
1438
|
+
users = unique_sdk.User.get_users(
|
|
1439
|
+
user_id=user_id,
|
|
1440
|
+
company_id=company_id,
|
|
1441
|
+
skip=0, # Optional - number of records to skip for pagination
|
|
1442
|
+
take=50, # Optional - number of records to return (max 1000)
|
|
1443
|
+
email="user@example.com", # Optional - filter by email
|
|
1444
|
+
displayName="John", # Optional - filter by display name
|
|
1445
|
+
)
|
|
1446
|
+
```
|
|
1447
|
+
|
|
1374
1448
|
### Agentic Table
|
|
1375
1449
|
|
|
1376
1450
|
The Agentic Table (Magic Table) API provides functionality for managing interactive tables with AI-powered cells, activity tracking, and metadata management.
|
|
@@ -1976,6 +2050,27 @@ All notable changes to this project will be documented in this file.
|
|
|
1976
2050
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
1977
2051
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
1978
2052
|
|
|
2053
|
+
## [0.10.42] - 2025-11-14
|
|
2054
|
+
- Add get_users function.
|
|
2055
|
+
|
|
2056
|
+
## [0.10.41] - 2025-11-13
|
|
2057
|
+
- Add create_message and get_latest_message.
|
|
2058
|
+
|
|
2059
|
+
## [0.10.40] - 2025-11-10
|
|
2060
|
+
- Don't send description if not defined.
|
|
2061
|
+
|
|
2062
|
+
## [0.10.39] - 2025-11-07
|
|
2063
|
+
- Add function to get llm models
|
|
2064
|
+
|
|
2065
|
+
## [0.10.38] - 2025-11-06
|
|
2066
|
+
- Add description property to Reference and Content.
|
|
2067
|
+
|
|
2068
|
+
## [0.10.37] - 2025-11-04
|
|
2069
|
+
- Introduce local integration tests for Content API Resource
|
|
2070
|
+
|
|
2071
|
+
## [0.10.36] - 2025-11-04
|
|
2072
|
+
- Introduce local integration tests for Folder API Resource
|
|
2073
|
+
|
|
1979
2074
|
## [0.10.35] - 2025-11-04
|
|
1980
2075
|
- Inmprove folder get infos types.
|
|
1981
2076
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
unique_sdk/__init__.py,sha256=
|
|
1
|
+
unique_sdk/__init__.py,sha256=nBscz8qGKhZxUDUM43h4hfTjWZ_IWSswNo6bQ1K0TMs,4145
|
|
2
2
|
unique_sdk/_api_requestor.py,sha256=i4gCpzx8zP95sv-AhJfpQxKvWR0U-I6lclHyV55RPtg,14397
|
|
3
3
|
unique_sdk/_api_resource.py,sha256=ytjomI-IVJwsbvdPyuZCfF-bl-Abgf66bu1D34YxCu8,6244
|
|
4
4
|
unique_sdk/_api_version.py,sha256=Ku4JPdeyJtnX5eJJvRCEc1_u44UObdVrvrL1T-WwWCs,46
|
|
@@ -17,26 +17,28 @@ unique_sdk/api_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
17
17
|
unique_sdk/api_resources/_acronyms.py,sha256=GIU1XH1flGWQYcpsFqTYwg4ioIGxVmb15tux84nmhEg,891
|
|
18
18
|
unique_sdk/api_resources/_agentic_table.py,sha256=8-_f7t-m_iiiOj2835iESoxz91YRxl4-tkxpzQbgdcI,9958
|
|
19
19
|
unique_sdk/api_resources/_chat_completion.py,sha256=ILCAffxkbkfh2iV9L4KKnfe80gZmT9pWfkNmf3mq68U,2172
|
|
20
|
-
unique_sdk/api_resources/_content.py,sha256=
|
|
20
|
+
unique_sdk/api_resources/_content.py,sha256=Z7BU2bw1qULnn-UBX0f6ix_XV0qI1yaRH6zOSgtMvho,17514
|
|
21
21
|
unique_sdk/api_resources/_embedding.py,sha256=C6qak7cCUBMBINfPhgH8taCJZ9n6w1MUElqDJJ8dG10,1281
|
|
22
22
|
unique_sdk/api_resources/_event.py,sha256=bpWF9vstdoAWbUzr-iiGP713ceP0zPk77GJXiImf9zg,374
|
|
23
|
-
unique_sdk/api_resources/_folder.py,sha256=
|
|
23
|
+
unique_sdk/api_resources/_folder.py,sha256=WPyRPsdAE62tU7p4hEYiVB4OoArv_60b8t4j7hgrJKk,15765
|
|
24
24
|
unique_sdk/api_resources/_integrated.py,sha256=O8e673z-RB7FRFMQYn_YEuHijebr5W7KJxkUnymbBZk,6164
|
|
25
|
+
unique_sdk/api_resources/_llm_models.py,sha256=3Jn6MpxWgZ43Hze8JHd4_n27si5xmwd3JE8r8cEZq_M,1640
|
|
25
26
|
unique_sdk/api_resources/_mcp.py,sha256=zKh0dyn0QnkKk57N2zlGVN_GQoxEp5T2CS38vVm6jQY,3341
|
|
26
|
-
unique_sdk/api_resources/_message.py,sha256=
|
|
27
|
+
unique_sdk/api_resources/_message.py,sha256=tSS_jVwoAffBFH6RSClEnbRf48MleL7RMs3MnbNDq-E,10986
|
|
27
28
|
unique_sdk/api_resources/_message_assessment.py,sha256=SSfx6eW7zb_GKe8cFJzCqW-t-_eWEXxKP5cnIb0DhIc,2276
|
|
28
29
|
unique_sdk/api_resources/_message_execution.py,sha256=7V_Qovu4vzoXDd2em0AgnAJC460RUX6AE4byztNPlvg,4556
|
|
29
|
-
unique_sdk/api_resources/_message_log.py,sha256=
|
|
30
|
+
unique_sdk/api_resources/_message_log.py,sha256=_DifZ4Di7uKyzkP0i8rwu5IIiYZPCBp5lvE4gfTrTHw,4793
|
|
30
31
|
unique_sdk/api_resources/_search.py,sha256=GQItZKoGNOVZfkLLltBmsRZYBIreRKU0lGW8Kgpj1_Q,1959
|
|
31
32
|
unique_sdk/api_resources/_search_string.py,sha256=LZz2_QPZXV1NXucRR06dnDC2miK7J8XBY7dXX2xoDY4,1610
|
|
32
33
|
unique_sdk/api_resources/_short_term_memory.py,sha256=vPRN-Y0WPx74E6y-A3LocGc0TxJdzT-xGL66WzZwKRg,2820
|
|
33
|
-
unique_sdk/api_resources/_space.py,sha256=
|
|
34
|
+
unique_sdk/api_resources/_space.py,sha256=JjIPauH37wULEiNO5PqOfgsipyfbRlC0KqjJ4_1Uugg,5035
|
|
35
|
+
unique_sdk/api_resources/_user.py,sha256=u59Hgq9i-QhYlqIYgk-KE7OeSx5xuNVo_gUgDpZTLcI,1974
|
|
34
36
|
unique_sdk/utils/chat_history.py,sha256=5UqL9hF1O9pV7skbNOlEibF5rHdYsmG3m5-YEPUowOs,3037
|
|
35
37
|
unique_sdk/utils/chat_in_space.py,sha256=cdjETBLnjv-OE8qsQpm626ks5yBdfQG_KBeG0WIzCbY,5994
|
|
36
|
-
unique_sdk/utils/file_io.py,sha256=
|
|
38
|
+
unique_sdk/utils/file_io.py,sha256=lskRULIh7qExK26o_1YqRs0f5mqJHTS9m_mdxlsVo4s,4497
|
|
37
39
|
unique_sdk/utils/sources.py,sha256=DoxxhMLcLhmDfNarjXa41H4JD2GSSDywr71hiC-4pYc,4952
|
|
38
40
|
unique_sdk/utils/token.py,sha256=AzKuAA1AwBtnvSFxGcsHLpxXr_wWE5Mj4jYBbOz2ljA,1740
|
|
39
|
-
unique_sdk-0.10.
|
|
40
|
-
unique_sdk-0.10.
|
|
41
|
-
unique_sdk-0.10.
|
|
42
|
-
unique_sdk-0.10.
|
|
41
|
+
unique_sdk-0.10.42.dist-info/LICENSE,sha256=EJCWoHgrXVBUb47PnjeV4MFIEOR71MAdCOIgv61J-4k,1065
|
|
42
|
+
unique_sdk-0.10.42.dist-info/METADATA,sha256=hZwJdmI3RPTLRNJgAcPH0kedZuEo1pMK-7zfNpe0uvs,70570
|
|
43
|
+
unique_sdk-0.10.42.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
44
|
+
unique_sdk-0.10.42.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|