optimizely-opal.opal-tools-sdk 0.1.21.dev0__tar.gz → 0.1.22.dev0__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 (22) hide show
  1. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/PKG-INFO +1 -1
  2. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/proteus.py +65 -44
  3. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/optimizely_opal.opal_tools_sdk.egg-info/PKG-INFO +1 -1
  4. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/pyproject.toml +1 -1
  5. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/setup.py +1 -1
  6. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/README.md +0 -0
  7. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/__init__.py +0 -0
  8. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/_registry.py +0 -0
  9. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/auth.py +0 -0
  10. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/decorators.py +0 -0
  11. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/logging.py +0 -0
  12. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/models.py +0 -0
  13. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/service.py +0 -0
  14. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/opal_tools_sdk/ui.py +0 -0
  15. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/optimizely_opal.opal_tools_sdk.egg-info/SOURCES.txt +0 -0
  16. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/optimizely_opal.opal_tools_sdk.egg-info/dependency_links.txt +0 -0
  17. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/optimizely_opal.opal_tools_sdk.egg-info/requires.txt +0 -0
  18. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/optimizely_opal.opal_tools_sdk.egg-info/top_level.txt +0 -0
  19. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/setup.cfg +0 -0
  20. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/tests/test_integration.py +0 -0
  21. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/tests/test_nested_schema.py +0 -0
  22. {optimizely_opal_opal_tools_sdk-0.1.21.dev0 → optimizely_opal_opal_tools_sdk-0.1.22.dev0}/tests/test_proteus.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.21.dev0
3
+ Version: 0.1.22.dev0
4
4
  Summary: SDK for creating Opal-compatible tools services
5
5
  Home-page: https://github.com/optimizely/opal-tools-sdk
6
6
  Author: Optimizely
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: proteus-document-spec.json
3
- # timestamp: 2026-03-24T13:50:30+00:00
3
+ # timestamp: 2026-03-25T19:30:58+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -24,31 +24,6 @@ class ProteusEventHandler1(BaseModel):
24
24
  tool: str = Field(..., description='Name of registered tool to call')
25
25
 
26
26
 
27
- class ProteusEventHandler2(BaseModel):
28
- """
29
- Client-side message action
30
- """
31
-
32
- model_config = ConfigDict(
33
- extra='forbid',
34
- )
35
- message: str = Field(..., description='Message to send to LLM via sendNewMessage()')
36
-
37
-
38
- class ProteusEventHandler4(BaseModel):
39
- """
40
- Client-side component action - collects name/value pairs from a data array and sends as a message
41
- """
42
-
43
- model_config = ConfigDict(
44
- extra='forbid',
45
- )
46
- action: Literal['message-from'] = Field(default='message-from', description='The action type')
47
- path: str = Field(
48
- ..., description='JSON pointer to an array of objects with name and value fields'
49
- )
50
-
51
-
52
27
  class Series(BaseModel):
53
28
  model_config = ConfigDict(
54
29
  extra='forbid',
@@ -1800,28 +1775,18 @@ class ProteusCondition7(BaseModel):
1800
1775
  )
1801
1776
 
1802
1777
 
1803
- class ProteusEventHandler3(BaseModel):
1778
+ class ProteusCondition8(BaseModel):
1804
1779
  """
1805
- Client-side component action - for downloading a URL
1780
+ Condition for Show component. Can be a comparison operator, logical AND, or logical OR. Supports nesting.
1806
1781
  """
1807
1782
 
1808
1783
  model_config = ConfigDict(
1809
1784
  extra='forbid',
1810
1785
  )
1811
- action: Literal['download'] = Field(default='download', description='The action type')
1812
- url: ProteusValue | str = Field(..., description='URL to download')
1813
-
1814
-
1815
- class ProteusEventHandler(
1816
- RootModel[
1817
- ProteusEventHandler1 | ProteusEventHandler2 | ProteusEventHandler3 | ProteusEventHandler4
1818
- ]
1819
- ):
1820
- root: (
1821
- ProteusEventHandler1 | ProteusEventHandler2 | ProteusEventHandler3 | ProteusEventHandler4
1822
- ) = Field(
1786
+ field_: str | float | bool | ProteusValue | None = Field(
1823
1787
  ...,
1824
- description='Handler for user interactions - a server-side tool call, client-side message, or client-side component action',
1788
+ alias='!',
1789
+ description='Falsy check - returns true if value is falsy (null, undefined, false, 0, or empty string)',
1825
1790
  )
1826
1791
 
1827
1792
 
@@ -2368,7 +2333,7 @@ class ProteusTime(BaseModel):
2368
2333
  z: SprinklePropZ | None = None
2369
2334
 
2370
2335
 
2371
- class ProteusCondition8(BaseModel):
2336
+ class ProteusCondition9(BaseModel):
2372
2337
  """
2373
2338
  Condition for Show component. Can be a comparison operator, logical AND, or logical OR. Supports nesting.
2374
2339
  """
@@ -2384,7 +2349,7 @@ class ProteusCondition8(BaseModel):
2384
2349
  )
2385
2350
 
2386
2351
 
2387
- class ProteusCondition9(BaseModel):
2352
+ class ProteusCondition10(BaseModel):
2388
2353
  """
2389
2354
  Condition for Show component. Can be a comparison operator, logical AND, or logical OR. Supports nesting.
2390
2355
  """
@@ -2432,6 +2397,34 @@ class ProteusDocument(BaseModel):
2432
2397
  )
2433
2398
 
2434
2399
 
2400
+ class ProteusEventHandler2(BaseModel):
2401
+ """
2402
+ Client-side message action
2403
+ """
2404
+
2405
+ model_config = ConfigDict(
2406
+ extra='forbid',
2407
+ )
2408
+ message: ProteusMap | ProteusValue | str = Field(
2409
+ ...,
2410
+ description='Message to send to LLM via sendNewMessage(). Can be a string, a Value reference, or a Map expression.',
2411
+ )
2412
+
2413
+
2414
+ class ProteusEventHandler3(BaseModel):
2415
+ """
2416
+ Client-side component action - for downloading a URL
2417
+ """
2418
+
2419
+ model_config = ConfigDict(
2420
+ extra='forbid',
2421
+ )
2422
+ action: Literal['download'] = Field(default='download', description='The action type')
2423
+ url: ProteusMap | ProteusValue | str = Field(
2424
+ ..., description='URL to download, or a Map expression resolving to multiple URLs'
2425
+ )
2426
+
2427
+
2435
2428
  class ProteusAction(BaseModel):
2436
2429
  model_config = ConfigDict(
2437
2430
  extra='forbid',
@@ -2958,6 +2951,17 @@ class ProteusCardLink(BaseModel):
2958
2951
  z: SprinklePropZ | None = None
2959
2952
 
2960
2953
 
2954
+ class ProteusConcat(BaseModel):
2955
+ model_config = ConfigDict(
2956
+ extra='forbid',
2957
+ )
2958
+ field_type: Literal['Concat'] = Field(default='Concat', alias='$type')
2959
+ children: list[ProteusNode | str | None] | None = Field(
2960
+ default=None,
2961
+ description='Array of values to concatenate into a single string. Each item is resolved and joined together.',
2962
+ )
2963
+
2964
+
2961
2965
  class ProteusField(BaseModel):
2962
2966
  model_config = ConfigDict(
2963
2967
  extra='forbid',
@@ -3636,6 +3640,7 @@ class ProteusCondition(
3636
3640
  | ProteusCondition7
3637
3641
  | ProteusCondition8
3638
3642
  | ProteusCondition9
3643
+ | ProteusCondition10
3639
3644
  ]
3640
3645
  ):
3641
3646
  root: (
@@ -3648,12 +3653,22 @@ class ProteusCondition(
3648
3653
  | ProteusCondition7
3649
3654
  | ProteusCondition8
3650
3655
  | ProteusCondition9
3656
+ | ProteusCondition10
3651
3657
  ) = Field(
3652
3658
  ...,
3653
3659
  description='Condition for Show component. Can be a comparison operator, logical AND, or logical OR. Supports nesting.',
3654
3660
  )
3655
3661
 
3656
3662
 
3663
+ class ProteusEventHandler(
3664
+ RootModel[ProteusEventHandler1 | ProteusEventHandler2 | ProteusEventHandler3]
3665
+ ):
3666
+ root: ProteusEventHandler1 | ProteusEventHandler2 | ProteusEventHandler3 = Field(
3667
+ ...,
3668
+ description='Handler for user interactions - a server-side tool call, client-side message, or client-side component action',
3669
+ )
3670
+
3671
+
3657
3672
  class ProteusElement(
3658
3673
  RootModel[
3659
3674
  ProteusAction
@@ -3664,6 +3679,7 @@ class ProteusElement(
3664
3679
  | ProteusCardHeader
3665
3680
  | ProteusCardLink
3666
3681
  | ProteusChart
3682
+ | ProteusConcat
3667
3683
  | ProteusDataTable
3668
3684
  | ProteusField
3669
3685
  | ProteusGroup
@@ -3696,6 +3712,7 @@ class ProteusElement(
3696
3712
  | ProteusCardHeader
3697
3713
  | ProteusCardLink
3698
3714
  | ProteusChart
3715
+ | ProteusConcat
3699
3716
  | ProteusDataTable
3700
3717
  | ProteusField
3701
3718
  | ProteusGroup
@@ -3746,9 +3763,11 @@ class ProteusNode(
3746
3763
  )
3747
3764
 
3748
3765
 
3749
- ProteusCondition8.model_rebuild()
3750
3766
  ProteusCondition9.model_rebuild()
3767
+ ProteusCondition10.model_rebuild()
3751
3768
  ProteusDocument.model_rebuild()
3769
+ ProteusEventHandler2.model_rebuild()
3770
+ ProteusEventHandler3.model_rebuild()
3752
3771
  ProteusAction.model_rebuild()
3753
3772
  ProteusAvatar.model_rebuild()
3754
3773
  ProteusBadge.model_rebuild()
@@ -3756,6 +3775,7 @@ ProteusCancelAction.model_rebuild()
3756
3775
  ProteusCard.model_rebuild()
3757
3776
  ProteusCardHeader.model_rebuild()
3758
3777
  ProteusCardLink.model_rebuild()
3778
+ ProteusConcat.model_rebuild()
3759
3779
  ProteusField.model_rebuild()
3760
3780
  ProteusGroup.model_rebuild()
3761
3781
  ProteusHeading.model_rebuild()
@@ -3789,6 +3809,7 @@ class UI:
3789
3809
  CardHeader = ProteusCardHeader
3790
3810
  CardLink = ProteusCardLink
3791
3811
  Chart = ProteusChart
3812
+ Concat = ProteusConcat
3792
3813
  DataTable = ProteusDataTable
3793
3814
  Document = ProteusDocument
3794
3815
  Field = ProteusField
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.21.dev0
3
+ Version: 0.1.22.dev0
4
4
  Summary: SDK for creating Opal-compatible tools services
5
5
  Home-page: https://github.com/optimizely/opal-tools-sdk
6
6
  Author: Optimizely
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "optimizely-opal.opal-tools-sdk"
7
- version = "0.1.21-dev"
7
+ version = "0.1.22-dev"
8
8
  description = "SDK for creating Opal-compatible tools services"
9
9
  authors = [{ name = "Optimizely", email = "opal-team@optimizely.com" }]
10
10
  readme = "README.md"
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="optimizely-opal.opal-tools-sdk",
5
- version="0.1.21-dev",
5
+ version="0.1.22-dev",
6
6
  packages=find_packages(),
7
7
  install_requires=[
8
8
  "fastapi>=0.100.0",