unique_sdk 0.10.38__tar.gz → 0.10.48__tar.gz

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.
Files changed (46) hide show
  1. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/CHANGELOG.md +30 -0
  2. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/PKG-INFO +203 -4
  3. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/README.md +172 -3
  4. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/pyproject.toml +1 -1
  5. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/__init__.py +3 -0
  6. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_agentic_table.py +1 -2
  7. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_content.py +7 -0
  8. unique_sdk-0.10.48/unique_sdk/api_resources/_group.py +369 -0
  9. unique_sdk-0.10.48/unique_sdk/api_resources/_llm_models.py +64 -0
  10. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_message.py +36 -0
  11. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_message_log.py +24 -0
  12. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_space.py +60 -0
  13. unique_sdk-0.10.48/unique_sdk/api_resources/_user.py +91 -0
  14. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/utils/chat_in_space.py +3 -2
  15. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/LICENSE +0 -0
  16. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_api_requestor.py +0 -0
  17. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_api_resource.py +0 -0
  18. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_api_version.py +0 -0
  19. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_error.py +0 -0
  20. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_http_client.py +0 -0
  21. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_list_object.py +0 -0
  22. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_object_classes.py +0 -0
  23. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_request_options.py +0 -0
  24. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_unique_object.py +0 -0
  25. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_unique_ql.py +0 -0
  26. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_unique_response.py +0 -0
  27. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_util.py +0 -0
  28. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_version.py +0 -0
  29. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/_webhook.py +0 -0
  30. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/__init__.py +0 -0
  31. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_acronyms.py +0 -0
  32. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_chat_completion.py +0 -0
  33. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_embedding.py +0 -0
  34. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_event.py +0 -0
  35. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_folder.py +0 -0
  36. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_integrated.py +0 -0
  37. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_mcp.py +0 -0
  38. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_message_assessment.py +0 -0
  39. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_message_execution.py +0 -0
  40. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_search.py +0 -0
  41. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_search_string.py +0 -0
  42. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  43. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/utils/chat_history.py +0 -0
  44. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/utils/file_io.py +0 -0
  45. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/utils/sources.py +0 -0
  46. {unique_sdk-0.10.38 → unique_sdk-0.10.48}/unique_sdk/utils/token.py +0 -0
@@ -5,6 +5,36 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.10.48] - 2025-11-20
9
+ - Update Agentic Table LogDetail and LogEntry types.
10
+
11
+ ## [0.10.47] - 2025-11-19
12
+ - Add expired/s at fields on content search result.
13
+
14
+ ## [0.10.46] - 2025-11-18
15
+ - chat_against_file function allows now a should_delete_chat flag.
16
+
17
+ ## [0.10.45] - 2025-11-18
18
+ - Create group and manage users functions.
19
+
20
+ ## [0.10.44] - 2025-11-18
21
+ - add function to get all messages in a chat.
22
+
23
+ ## [0.10.43] - 2025-11-14
24
+ - Add get, delete and update groups functions.
25
+
26
+ ## [0.10.42] - 2025-11-14
27
+ - Add get_users function.
28
+
29
+ ## [0.10.41] - 2025-11-13
30
+ - Add create_message and get_latest_message.
31
+
32
+ ## [0.10.40] - 2025-11-10
33
+ - Don't send description if not defined.
34
+
35
+ ## [0.10.39] - 2025-11-07
36
+ - Add function to get llm models
37
+
8
38
  ## [0.10.38] - 2025-11-06
9
39
  - Add description property to Reference and Content.
10
40
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_sdk
3
- Version: 0.10.38
3
+ Version: 0.10.48
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Martin Fadler
@@ -42,6 +42,9 @@ 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)
47
+ - [Group](#group)
45
48
  - [Agentic Table](#agentic-table)
46
49
  6. [UniqueQL](#uniqueql)
47
50
  - [Query Structure](#uniqueql-query-structure)
@@ -260,6 +263,9 @@ unique_sdk.Message.modify(
260
263
  - [Message Assessment](#message-assessment)
261
264
  - [Folder](#folder)
262
265
  - [Space](#space)
266
+ - [LLM Models](#llm-models)
267
+ - [User](#user)
268
+ - [Group](#group)
263
269
  - [Agentic Table](#agentic-table)
264
270
 
265
271
  Most of the API services provide an asynchronous version of the method. The async methods are suffixed with `_async`.
@@ -1362,6 +1368,56 @@ unique_sdk.Folder.delete(
1362
1368
 
1363
1369
  ### Space
1364
1370
 
1371
+ #### `unique_sdk.Space.create_message`
1372
+
1373
+ 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.
1374
+
1375
+ ```python
1376
+ message = unique_sdk.Space.create_message(
1377
+ user_id=user_id,
1378
+ company_id=company_id,
1379
+ chatId="chat_dejfhe729br398", # Optional - if not provided, a new chat will be created
1380
+ assistantId="assistant_abc123",
1381
+ text="Hello, how can you help me?",
1382
+ toolChoices=["WebSearch"], # Optional - list of tools to use
1383
+ scopeRules={ # Optional - scope rules for filtering
1384
+ "or": [
1385
+ {
1386
+ "operator": "contains",
1387
+ "path": ["folderIdPath"],
1388
+ "value": "uniquepathid://scope_123"
1389
+ }
1390
+ ]
1391
+ },
1392
+ )
1393
+ ```
1394
+
1395
+ #### `unique_sdk.Space.get_chat_messages` (Compatible with release >.48)
1396
+
1397
+ Get all messages in a space chat. Returns a list of paginated messages in the specified chat.
1398
+
1399
+ ```python
1400
+ messages = unique_sdk.Space.get_chat_messages(
1401
+ user_id=user_id,
1402
+ company_id=company_id,
1403
+ chat_id="chat_dejfhe729br398",
1404
+ skip=0, # Optional (defaults to 0) - number of messages to skip for pagination
1405
+ take=50, # Optional (defaults to 10) - number of messages to return
1406
+ )
1407
+ ```
1408
+
1409
+ #### `unique_sdk.Space.get_latest_message`
1410
+
1411
+ Get the latest message in a space chat.
1412
+
1413
+ ```python
1414
+ message = unique_sdk.Space.get_latest_message(
1415
+ user_id=user_id,
1416
+ company_id=company_id,
1417
+ chat_id="chat_dejfhe729br398",
1418
+ )
1419
+ ```
1420
+
1365
1421
  #### `unique_sdk.Space.delete_chat`
1366
1422
 
1367
1423
  Delete a space chat by id. If the chat does not exist, the function will return an error.
@@ -1374,6 +1430,118 @@ unique_sdk.Space.delete_chat(
1374
1430
  )
1375
1431
  ```
1376
1432
 
1433
+ ### LLM Models
1434
+
1435
+ #### `unique_sdk.LLMModels.get` (Compatible with release >.46)
1436
+
1437
+ Get available LLM models. You can optionally filter by module and skip cache to fetch fresh data.
1438
+
1439
+ ```python
1440
+ models = unique_sdk.LLMModels.get(
1441
+ user_id=user_id,
1442
+ company_id=company_id,
1443
+ module="UNIQUE_AI", # Optional - filter models by module, only UNIQUE_AI is supported right now
1444
+ )
1445
+ ```
1446
+
1447
+ ### User
1448
+
1449
+ #### `unique_sdk.User.get_users` (Compatible with release >.48)
1450
+
1451
+ Get users in a company. You can filter by email, display name, and use pagination with skip and take parameters.
1452
+
1453
+ ```python
1454
+ users = unique_sdk.User.get_users(
1455
+ user_id=user_id,
1456
+ company_id=company_id,
1457
+ skip=0, # Optional - number of records to skip for pagination
1458
+ take=50, # Optional - number of records to return (max 1000)
1459
+ email="user@example.com", # Optional - filter by email
1460
+ displayName="John", # Optional - filter by display name
1461
+ )
1462
+ ```
1463
+
1464
+ ### Group
1465
+
1466
+ #### `unique_sdk.Group.create_group` (Compatible with release >.48)
1467
+
1468
+ Create a new group in a company. You can specify the group name (required), external ID and parent group ID.
1469
+
1470
+ ```python
1471
+ group = unique_sdk.Group.create_group(
1472
+ user_id=user_id,
1473
+ company_id=company_id,
1474
+ name="New Group", # Required - the name of the group
1475
+ externalId="ext_123", # Optional - external ID for the group
1476
+ parentId="group_a9cs7wr2z1bg2sxczvltgjch", # Optional - parent group ID
1477
+ )
1478
+ ```
1479
+
1480
+ #### `unique_sdk.Group.get_groups` (Compatible with release >.48)
1481
+
1482
+ Get groups in a company. You can filter by name and use pagination with skip and take parameters.
1483
+
1484
+ ```python
1485
+ groups = unique_sdk.Group.get_groups(
1486
+ user_id=user_id,
1487
+ company_id=company_id,
1488
+ skip=0, # Optional - number of records to skip for pagination
1489
+ take=50, # Optional - number of records to return (max 1000)
1490
+ name="Admin", # Optional - filter by group name
1491
+ )
1492
+ ```
1493
+
1494
+ #### `unique_sdk.Group.update_group` (Compatible with release >.48)
1495
+
1496
+ Update a group in a company. You can update the group's name.
1497
+
1498
+ ```python
1499
+ updated_group = unique_sdk.Group.update_group(
1500
+ user_id=user_id,
1501
+ company_id=company_id,
1502
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1503
+ name="New Group Name", # Optional - update the group name
1504
+ )
1505
+ ```
1506
+
1507
+ #### `unique_sdk.Group.add_users_to_group` (Compatible with release >.48)
1508
+
1509
+ Add users to a group. Provide an array of user IDs to add as members to the specified group.
1510
+
1511
+ ```python
1512
+ result = unique_sdk.Group.add_users_to_group(
1513
+ user_id=user_id,
1514
+ company_id=company_id,
1515
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1516
+ userIds=["299420877169688584", "325402458132058201", "299426678160031752"], # Required - array of user IDs to add
1517
+ )
1518
+ ```
1519
+
1520
+ #### `unique_sdk.Group.remove_users_from_group` (Compatible with release >.48)
1521
+
1522
+ Remove users from a group. Provide an array of user IDs to remove from the specified group.
1523
+
1524
+ ```python
1525
+ result = unique_sdk.Group.remove_users_from_group(
1526
+ user_id=user_id,
1527
+ company_id=company_id,
1528
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1529
+ userIds=["299426678160031752", "299426678160031752"], # Required - array of user IDs to remove
1530
+ )
1531
+ ```
1532
+
1533
+ #### `unique_sdk.Group.delete_group` (Compatible with release >.48)
1534
+
1535
+ Delete a group in a company by its group ID.
1536
+
1537
+ ```python
1538
+ result = unique_sdk.Group.delete_group(
1539
+ user_id=user_id,
1540
+ company_id=company_id,
1541
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1542
+ )
1543
+ ```
1544
+
1377
1545
  ### Agentic Table
1378
1546
 
1379
1547
  The Agentic Table (Magic Table) API provides functionality for managing interactive tables with AI-powered cells, activity tracking, and metadata management.
@@ -1918,11 +2086,12 @@ You must provide the following parameters:
1918
2086
  - `mime_type`: The mime type of the ifle to be uploaded.
1919
2087
  - `text`: The text to be sent to the chat for chatting against the file.
1920
2088
 
1921
- The script creates a chat and uploads the file to it. It then keeps polling the `ingestionState` field of the message, waiting for it to reach `FINISHED`, signaling the upload is complete. Once the file uploads successfully, the script sends the text, continues polling for completion, and finally retrieves the response message.
2089
+ The script creates a chat and uploads the file to it. It then keeps polling the `ingestionState` field of the message, waiting for it to reach `FINISHED`, signaling the upload is complete. Once the file uploads successfully, the script sends the text, continues polling for completion, and finally retrieves the response message. The function deletes the chat at the end unless the `should_delete_chat` is set to false.
1922
2090
 
1923
2091
  **Optional parameters:**
1924
2092
  - `poll_interval`: The number of seconds to wait between polling attempts (default: `1` second).
1925
2093
  - `max_wait`: The maximum number of seconds to wait for the message to complete (default: `60` seconds).
2094
+ - `should_delete_chat`: Setting this flag determines whether the chat should be deleted at the end or not. Default is True.
1926
2095
 
1927
2096
  Example of chatting against a PDF. (The usage can be extended to any supported file type)
1928
2097
 
@@ -1932,8 +2101,8 @@ latest_message = await unique_sdk.utils.chat_in_space.chat_against_file(
1932
2101
  company_id=company_id,
1933
2102
  assistant_id="assistant_hjcdga64bkcjnhu4",
1934
2103
  path_to_file="/files/hello.pdf",
1935
- displayed_filename="hello.pdf"
1936
- mime_type="application/pdf"
2104
+ displayed_filename="hello.pdf",
2105
+ mime_type="application/pdf",
1937
2106
  text="Give me a bullet point summary of the file.",
1938
2107
  )
1939
2108
  ```
@@ -1979,6 +2148,36 @@ All notable changes to this project will be documented in this file.
1979
2148
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1980
2149
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1981
2150
 
2151
+ ## [0.10.48] - 2025-11-20
2152
+ - Update Agentic Table LogDetail and LogEntry types.
2153
+
2154
+ ## [0.10.47] - 2025-11-19
2155
+ - Add expired/s at fields on content search result.
2156
+
2157
+ ## [0.10.46] - 2025-11-18
2158
+ - chat_against_file function allows now a should_delete_chat flag.
2159
+
2160
+ ## [0.10.45] - 2025-11-18
2161
+ - Create group and manage users functions.
2162
+
2163
+ ## [0.10.44] - 2025-11-18
2164
+ - add function to get all messages in a chat.
2165
+
2166
+ ## [0.10.43] - 2025-11-14
2167
+ - Add get, delete and update groups functions.
2168
+
2169
+ ## [0.10.42] - 2025-11-14
2170
+ - Add get_users function.
2171
+
2172
+ ## [0.10.41] - 2025-11-13
2173
+ - Add create_message and get_latest_message.
2174
+
2175
+ ## [0.10.40] - 2025-11-10
2176
+ - Don't send description if not defined.
2177
+
2178
+ ## [0.10.39] - 2025-11-07
2179
+ - Add function to get llm models
2180
+
1982
2181
  ## [0.10.38] - 2025-11-06
1983
2182
  - Add description property to Reference and Content.
1984
2183
 
@@ -24,6 +24,9 @@ The Unique Python SDK provides access to the public API of Unique AI. It also en
24
24
  - [Message Assessment](#message-assessment)
25
25
  - [Folder](#folder)
26
26
  - [Space](#space)
27
+ - [LLM Models](#llm-models)
28
+ - [User](#user)
29
+ - [Group](#group)
27
30
  - [Agentic Table](#agentic-table)
28
31
  6. [UniqueQL](#uniqueql)
29
32
  - [Query Structure](#uniqueql-query-structure)
@@ -242,6 +245,9 @@ unique_sdk.Message.modify(
242
245
  - [Message Assessment](#message-assessment)
243
246
  - [Folder](#folder)
244
247
  - [Space](#space)
248
+ - [LLM Models](#llm-models)
249
+ - [User](#user)
250
+ - [Group](#group)
245
251
  - [Agentic Table](#agentic-table)
246
252
 
247
253
  Most of the API services provide an asynchronous version of the method. The async methods are suffixed with `_async`.
@@ -1344,6 +1350,56 @@ unique_sdk.Folder.delete(
1344
1350
 
1345
1351
  ### Space
1346
1352
 
1353
+ #### `unique_sdk.Space.create_message`
1354
+
1355
+ 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.
1356
+
1357
+ ```python
1358
+ message = unique_sdk.Space.create_message(
1359
+ user_id=user_id,
1360
+ company_id=company_id,
1361
+ chatId="chat_dejfhe729br398", # Optional - if not provided, a new chat will be created
1362
+ assistantId="assistant_abc123",
1363
+ text="Hello, how can you help me?",
1364
+ toolChoices=["WebSearch"], # Optional - list of tools to use
1365
+ scopeRules={ # Optional - scope rules for filtering
1366
+ "or": [
1367
+ {
1368
+ "operator": "contains",
1369
+ "path": ["folderIdPath"],
1370
+ "value": "uniquepathid://scope_123"
1371
+ }
1372
+ ]
1373
+ },
1374
+ )
1375
+ ```
1376
+
1377
+ #### `unique_sdk.Space.get_chat_messages` (Compatible with release >.48)
1378
+
1379
+ Get all messages in a space chat. Returns a list of paginated messages in the specified chat.
1380
+
1381
+ ```python
1382
+ messages = unique_sdk.Space.get_chat_messages(
1383
+ user_id=user_id,
1384
+ company_id=company_id,
1385
+ chat_id="chat_dejfhe729br398",
1386
+ skip=0, # Optional (defaults to 0) - number of messages to skip for pagination
1387
+ take=50, # Optional (defaults to 10) - number of messages to return
1388
+ )
1389
+ ```
1390
+
1391
+ #### `unique_sdk.Space.get_latest_message`
1392
+
1393
+ Get the latest message in a space chat.
1394
+
1395
+ ```python
1396
+ message = unique_sdk.Space.get_latest_message(
1397
+ user_id=user_id,
1398
+ company_id=company_id,
1399
+ chat_id="chat_dejfhe729br398",
1400
+ )
1401
+ ```
1402
+
1347
1403
  #### `unique_sdk.Space.delete_chat`
1348
1404
 
1349
1405
  Delete a space chat by id. If the chat does not exist, the function will return an error.
@@ -1356,6 +1412,118 @@ unique_sdk.Space.delete_chat(
1356
1412
  )
1357
1413
  ```
1358
1414
 
1415
+ ### LLM Models
1416
+
1417
+ #### `unique_sdk.LLMModels.get` (Compatible with release >.46)
1418
+
1419
+ Get available LLM models. You can optionally filter by module and skip cache to fetch fresh data.
1420
+
1421
+ ```python
1422
+ models = unique_sdk.LLMModels.get(
1423
+ user_id=user_id,
1424
+ company_id=company_id,
1425
+ module="UNIQUE_AI", # Optional - filter models by module, only UNIQUE_AI is supported right now
1426
+ )
1427
+ ```
1428
+
1429
+ ### User
1430
+
1431
+ #### `unique_sdk.User.get_users` (Compatible with release >.48)
1432
+
1433
+ Get users in a company. You can filter by email, display name, and use pagination with skip and take parameters.
1434
+
1435
+ ```python
1436
+ users = unique_sdk.User.get_users(
1437
+ user_id=user_id,
1438
+ company_id=company_id,
1439
+ skip=0, # Optional - number of records to skip for pagination
1440
+ take=50, # Optional - number of records to return (max 1000)
1441
+ email="user@example.com", # Optional - filter by email
1442
+ displayName="John", # Optional - filter by display name
1443
+ )
1444
+ ```
1445
+
1446
+ ### Group
1447
+
1448
+ #### `unique_sdk.Group.create_group` (Compatible with release >.48)
1449
+
1450
+ Create a new group in a company. You can specify the group name (required), external ID and parent group ID.
1451
+
1452
+ ```python
1453
+ group = unique_sdk.Group.create_group(
1454
+ user_id=user_id,
1455
+ company_id=company_id,
1456
+ name="New Group", # Required - the name of the group
1457
+ externalId="ext_123", # Optional - external ID for the group
1458
+ parentId="group_a9cs7wr2z1bg2sxczvltgjch", # Optional - parent group ID
1459
+ )
1460
+ ```
1461
+
1462
+ #### `unique_sdk.Group.get_groups` (Compatible with release >.48)
1463
+
1464
+ Get groups in a company. You can filter by name and use pagination with skip and take parameters.
1465
+
1466
+ ```python
1467
+ groups = unique_sdk.Group.get_groups(
1468
+ user_id=user_id,
1469
+ company_id=company_id,
1470
+ skip=0, # Optional - number of records to skip for pagination
1471
+ take=50, # Optional - number of records to return (max 1000)
1472
+ name="Admin", # Optional - filter by group name
1473
+ )
1474
+ ```
1475
+
1476
+ #### `unique_sdk.Group.update_group` (Compatible with release >.48)
1477
+
1478
+ Update a group in a company. You can update the group's name.
1479
+
1480
+ ```python
1481
+ updated_group = unique_sdk.Group.update_group(
1482
+ user_id=user_id,
1483
+ company_id=company_id,
1484
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1485
+ name="New Group Name", # Optional - update the group name
1486
+ )
1487
+ ```
1488
+
1489
+ #### `unique_sdk.Group.add_users_to_group` (Compatible with release >.48)
1490
+
1491
+ Add users to a group. Provide an array of user IDs to add as members to the specified group.
1492
+
1493
+ ```python
1494
+ result = unique_sdk.Group.add_users_to_group(
1495
+ user_id=user_id,
1496
+ company_id=company_id,
1497
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1498
+ userIds=["299420877169688584", "325402458132058201", "299426678160031752"], # Required - array of user IDs to add
1499
+ )
1500
+ ```
1501
+
1502
+ #### `unique_sdk.Group.remove_users_from_group` (Compatible with release >.48)
1503
+
1504
+ Remove users from a group. Provide an array of user IDs to remove from the specified group.
1505
+
1506
+ ```python
1507
+ result = unique_sdk.Group.remove_users_from_group(
1508
+ user_id=user_id,
1509
+ company_id=company_id,
1510
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1511
+ userIds=["299426678160031752", "299426678160031752"], # Required - array of user IDs to remove
1512
+ )
1513
+ ```
1514
+
1515
+ #### `unique_sdk.Group.delete_group` (Compatible with release >.48)
1516
+
1517
+ Delete a group in a company by its group ID.
1518
+
1519
+ ```python
1520
+ result = unique_sdk.Group.delete_group(
1521
+ user_id=user_id,
1522
+ company_id=company_id,
1523
+ group_id="group_a9cs7wr2z1bg2sxczvltgjch",
1524
+ )
1525
+ ```
1526
+
1359
1527
  ### Agentic Table
1360
1528
 
1361
1529
  The Agentic Table (Magic Table) API provides functionality for managing interactive tables with AI-powered cells, activity tracking, and metadata management.
@@ -1900,11 +2068,12 @@ You must provide the following parameters:
1900
2068
  - `mime_type`: The mime type of the ifle to be uploaded.
1901
2069
  - `text`: The text to be sent to the chat for chatting against the file.
1902
2070
 
1903
- The script creates a chat and uploads the file to it. It then keeps polling the `ingestionState` field of the message, waiting for it to reach `FINISHED`, signaling the upload is complete. Once the file uploads successfully, the script sends the text, continues polling for completion, and finally retrieves the response message.
2071
+ The script creates a chat and uploads the file to it. It then keeps polling the `ingestionState` field of the message, waiting for it to reach `FINISHED`, signaling the upload is complete. Once the file uploads successfully, the script sends the text, continues polling for completion, and finally retrieves the response message. The function deletes the chat at the end unless the `should_delete_chat` is set to false.
1904
2072
 
1905
2073
  **Optional parameters:**
1906
2074
  - `poll_interval`: The number of seconds to wait between polling attempts (default: `1` second).
1907
2075
  - `max_wait`: The maximum number of seconds to wait for the message to complete (default: `60` seconds).
2076
+ - `should_delete_chat`: Setting this flag determines whether the chat should be deleted at the end or not. Default is True.
1908
2077
 
1909
2078
  Example of chatting against a PDF. (The usage can be extended to any supported file type)
1910
2079
 
@@ -1914,8 +2083,8 @@ latest_message = await unique_sdk.utils.chat_in_space.chat_against_file(
1914
2083
  company_id=company_id,
1915
2084
  assistant_id="assistant_hjcdga64bkcjnhu4",
1916
2085
  path_to_file="/files/hello.pdf",
1917
- displayed_filename="hello.pdf"
1918
- mime_type="application/pdf"
2086
+ displayed_filename="hello.pdf",
2087
+ mime_type="application/pdf",
1919
2088
  text="Give me a bullet point summary of the file.",
1920
2089
  )
1921
2090
  ```
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_sdk"
3
- version = "0.10.38"
3
+ version = "0.10.48"
4
4
  description = ""
5
5
  authors = [
6
6
  "Martin Fadler <martin.fadler@unique.ch>",
@@ -83,6 +83,9 @@ 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
88
+ from unique_sdk.api_resources._group import Group as Group
86
89
  from unique_sdk.api_resources._message_assessment import (
87
90
  MessageAssessment as MessageAssessment,
88
91
  )
@@ -19,8 +19,7 @@ class AgenticTableSheetState(StrEnum):
19
19
 
20
20
 
21
21
  class LogDetail(TypedDict, total=False):
22
- text: str
23
- messageId: str | None
22
+ llmRequest: list[dict] | None
24
23
 
25
24
 
26
25
  class LogEntry(TypedDict):
@@ -29,6 +29,7 @@ class Content(APIResource["Content"]):
29
29
  metadata: Optional[Dict[str, Any]]
30
30
  writeUrl: Optional[str]
31
31
  readUrl: Optional[str]
32
+ expiredAt: Optional[str]
32
33
 
33
34
  class QueryMode(Enum):
34
35
  Default = "default"
@@ -351,6 +352,9 @@ class Content(APIResource["Content"]):
351
352
  """
352
353
  if "input" in params:
353
354
  params["input"]["metadata"] = params["input"].get("metadata") or {}
355
+ if "description" in params["input"] and not params["input"]["description"]:
356
+ params["input"].pop("description")
357
+
354
358
  return cast(
355
359
  "Content",
356
360
  cls._static_request(
@@ -374,6 +378,9 @@ class Content(APIResource["Content"]):
374
378
  """
375
379
  if "input" in params:
376
380
  params["input"]["metadata"] = params["input"].get("metadata") or {}
381
+ if "description" in params["input"] and not params["input"]["description"]:
382
+ params["input"].pop("description")
383
+
377
384
  return cast(
378
385
  "Content",
379
386
  await cls._static_request_async(