unique_sdk 0.10.34__py3-none-any.whl → 0.10.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.
unique_sdk/__init__.py CHANGED
@@ -83,6 +83,7 @@ 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
86
87
  from unique_sdk.api_resources._message_assessment import (
87
88
  MessageAssessment as MessageAssessment,
88
89
  )
@@ -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
@@ -83,6 +83,10 @@ class Folder(APIResource["Folder"]):
83
83
  parentId: str | None
84
84
  externalId: str | None
85
85
 
86
+ class FolderInfos(TypedDict):
87
+ folderInfos: List["Folder.FolderInfo"]
88
+ totalCount: int
89
+
86
90
  id: str
87
91
  name: str
88
92
  scopeAccess: List[ScopeAccess]
@@ -212,12 +216,12 @@ class Folder(APIResource["Folder"]):
212
216
  @classmethod
213
217
  def get_infos(
214
218
  cls, user_id: str, company_id: str, **params: Unpack["Folder.GetInfosParams"]
215
- ) -> "List[Folder.FolderInfo]":
219
+ ) -> "Folder.FolderInfos":
216
220
  """
217
221
  Get paginated folders based on parentId. If the parentId is not defined, the root folders will be returned.
218
222
  """
219
223
  return cast(
220
- "List[Folder.FolderInfo]",
224
+ "Folder.FolderInfos",
221
225
  cls._static_request(
222
226
  "get",
223
227
  "/folder/infos",
@@ -230,12 +234,12 @@ class Folder(APIResource["Folder"]):
230
234
  @classmethod
231
235
  async def get_infos_async(
232
236
  cls, user_id: str, company_id: str, **params: Unpack["Folder.GetInfosParams"]
233
- ) -> "List[Folder.FolderInfo]":
237
+ ) -> "Folder.FolderInfos":
234
238
  """
235
239
  Async get paginated folders based on parentId. If the parentId is not defined, the root folders will be returned.
236
240
  """
237
241
  return cast(
238
- "List[Folder.FolderInfo]",
242
+ "Folder.FolderInfos",
239
243
  await cls._static_request_async(
240
244
  "get",
241
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
 
@@ -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
- url: str | None
15
+ description: Optional[str]
16
+ url: Optional[str]
16
17
  sequenceNumber: int
17
- originalIndex: list[int] | None
18
+ originalIndex: Optional[list[int]]
18
19
  sourceId: str
19
20
  source: str
20
21
 
@@ -35,9 +35,10 @@ class Space(APIResource["Space"]):
35
35
  """
36
36
 
37
37
  name: str
38
- url: str | None
38
+ description: Optional[str]
39
+ url: Optional[str]
39
40
  sequenceNumber: int
40
- originalIndex: List[int] | None
41
+ originalIndex: Optional[list[int]]
41
42
  sourceId: str
42
43
  source: str
43
44
 
@@ -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.34
3
+ Version: 0.10.39
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Martin Fadler
@@ -42,6 +42,7 @@ 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)
45
46
  - [Agentic Table](#agentic-table)
46
47
  6. [UniqueQL](#uniqueql)
47
48
  - [Query Structure](#uniqueql-query-structure)
@@ -260,6 +261,7 @@ unique_sdk.Message.modify(
260
261
  - [Message Assessment](#message-assessment)
261
262
  - [Folder](#folder)
262
263
  - [Space](#space)
264
+ - [LLM Models](#llm-models)
263
265
  - [Agentic Table](#agentic-table)
264
266
 
265
267
  Most of the API services provide an asynchronous version of the method. The async methods are suffixed with `_async`.
@@ -477,6 +479,7 @@ def upload_file(
477
479
  path_to_file,
478
480
  displayed_filename,
479
481
  mimeType,
482
+ description=None,
480
483
  scope_or_unique_path,
481
484
  ingestion_config=None,
482
485
  metadata=None,
@@ -489,6 +492,7 @@ def upload_file(
489
492
  "key": displayed_filename,
490
493
  "title": displayed_filename,
491
494
  "mimeType": mimeType,
495
+ "description": description,
492
496
  "ingestionConfig": ingestionConfig,
493
497
  "metadata": metadata,
494
498
  },
@@ -515,6 +519,7 @@ def upload_file(
515
519
  "key": displayed_filename,
516
520
  "title": displayed_filename,
517
521
  "mimeType": mimeType,
522
+ "description": description,
518
523
  "byteSize": size,
519
524
  "ingestionConfig": ingestionConfig,
520
525
  "metadata": metadata,
@@ -1371,6 +1376,20 @@ unique_sdk.Space.delete_chat(
1371
1376
  )
1372
1377
  ```
1373
1378
 
1379
+ ### LLM Models
1380
+
1381
+ #### `unique_sdk.LLMModels.get` (Compatible with release >.46)
1382
+
1383
+ Get available LLM models. You can optionally filter by module and skip cache to fetch fresh data.
1384
+
1385
+ ```python
1386
+ models = unique_sdk.LLMModels.get(
1387
+ user_id=user_id,
1388
+ company_id=company_id,
1389
+ module="UNIQUE_AI", # Optional - filter models by module, only UNIQUE_AI is supported right now
1390
+ )
1391
+ ```
1392
+
1374
1393
  ### Agentic Table
1375
1394
 
1376
1395
  The Agentic Table (Magic Table) API provides functionality for managing interactive tables with AI-powered cells, activity tracking, and metadata management.
@@ -1976,6 +1995,21 @@ All notable changes to this project will be documented in this file.
1976
1995
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1977
1996
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1978
1997
 
1998
+ ## [0.10.39] - 2025-11-07
1999
+ - Add function to get llm models
2000
+
2001
+ ## [0.10.38] - 2025-11-06
2002
+ - Add description property to Reference and Content.
2003
+
2004
+ ## [0.10.37] - 2025-11-04
2005
+ - Introduce local integration tests for Content API Resource
2006
+
2007
+ ## [0.10.36] - 2025-11-04
2008
+ - Introduce local integration tests for Folder API Resource
2009
+
2010
+ ## [0.10.35] - 2025-11-04
2011
+ - Inmprove folder get infos types.
2012
+
1979
2013
  ## [0.10.34] - 2025-10-29
1980
2014
  - Add documentation for agentic table.
1981
2015
 
@@ -1,4 +1,4 @@
1
- unique_sdk/__init__.py,sha256=iSHCv4LojvIth8YnDhlHvCH6MqeIa3ZQUMFdwj0ipyY,4017
1
+ unique_sdk/__init__.py,sha256=64n1MmnhHojvt32j8QwF-t7JhTPyw9WIWKVBtkjrAVU,4089
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,27 @@ 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=brgl1dqbOTpRK_Q-hj6j2m4mJ66qhcjSZOWgmpup_eQ,17117
20
+ unique_sdk/api_resources/_content.py,sha256=H-aL-dhWSBhMW4nFGpMuGziu0N-c0DnqY4mRAzsy2gU,17234
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=mEKN3llhgi2Zyg-aVyz_LUU55V5ZGOKhgKytlyxBVF8,15679
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=WgdvVS6Gx3gXGlaSlCjE-qrlj3SbkF--EFG7HiSp6cM,9282
27
+ unique_sdk/api_resources/_message.py,sha256=W1Bh51lujpzmiFhZ-Mv_alQYZEY1OTEUr9O-k5jEgVM,9360
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=vmNyXlgfALONNrhGi0qFpUWalcKxH6OkVoBSmJbsL2k,3658
30
+ unique_sdk/api_resources/_message_log.py,sha256=gwxDmEvTMDF9Nz5gH8Mq7qWw73dcjdqGJZjA0b42s6U,3709
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=J7rS7Y62QQ7r_VpGLVb3UdhPtu9FxgrY2c515uxaypc,4994
34
+ unique_sdk/api_resources/_space.py,sha256=JjIPauH37wULEiNO5PqOfgsipyfbRlC0KqjJ4_1Uugg,5035
34
35
  unique_sdk/utils/chat_history.py,sha256=5UqL9hF1O9pV7skbNOlEibF5rHdYsmG3m5-YEPUowOs,3037
35
36
  unique_sdk/utils/chat_in_space.py,sha256=cdjETBLnjv-OE8qsQpm626ks5yBdfQG_KBeG0WIzCbY,5994
36
- unique_sdk/utils/file_io.py,sha256=sJS-dJLjogG65mLukDO9pGDpKVTP4LhIgiZASnCvjNI,4330
37
+ unique_sdk/utils/file_io.py,sha256=lskRULIh7qExK26o_1YqRs0f5mqJHTS9m_mdxlsVo4s,4497
37
38
  unique_sdk/utils/sources.py,sha256=DoxxhMLcLhmDfNarjXa41H4JD2GSSDywr71hiC-4pYc,4952
38
39
  unique_sdk/utils/token.py,sha256=AzKuAA1AwBtnvSFxGcsHLpxXr_wWE5Mj4jYBbOz2ljA,1740
39
- unique_sdk-0.10.34.dist-info/LICENSE,sha256=EJCWoHgrXVBUb47PnjeV4MFIEOR71MAdCOIgv61J-4k,1065
40
- unique_sdk-0.10.34.dist-info/METADATA,sha256=QIioH-WMisDdwNGhYEHqoWE25UDazCtSqEOTXwi6shw,67880
41
- unique_sdk-0.10.34.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
42
- unique_sdk-0.10.34.dist-info/RECORD,,
40
+ unique_sdk-0.10.39.dist-info/LICENSE,sha256=EJCWoHgrXVBUb47PnjeV4MFIEOR71MAdCOIgv61J-4k,1065
41
+ unique_sdk-0.10.39.dist-info/METADATA,sha256=h60DXGC-Jf-cQ7PJHKstxh2OwyrZkUK3syPIseslL8Q,68798
42
+ unique_sdk-0.10.39.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
43
+ unique_sdk-0.10.39.dist-info/RECORD,,