unique_toolkit 2026.36.0.dev9__py3-none-any.whl → 2026.36.0.dev11__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.
@@ -26,11 +26,13 @@ from .schemas import (
26
26
  MagicTableGenerateArtifactPayload,
27
27
  MagicTableLibrarySheetRowVerifiedPayload,
28
28
  MagicTableRerunRowPayload,
29
+ MagicTableRerunRowsPayload,
29
30
  MagicTableSheet,
30
31
  MagicTableSheetCompletedPayload,
31
32
  MagicTableSheetCreatedPayload,
32
33
  MagicTableUpdateCellPayload,
33
34
  RerunRowMetadata,
35
+ RerunRowsMetadata,
34
36
  RowMetadataEntry,
35
37
  RowMetadataEntryInput,
36
38
  SelectionMethod,
@@ -74,11 +76,13 @@ __all__ = [
74
76
  "MagicTableGenerateArtifactPayload",
75
77
  "MagicTableLibrarySheetRowVerifiedPayload",
76
78
  "MagicTableRerunRowPayload",
79
+ "MagicTableRerunRowsPayload",
77
80
  "MagicTableSheet",
78
81
  "MagicTableSheetCompletedPayload",
79
82
  "MagicTableSheetCreatedPayload",
80
83
  "MagicTableUpdateCellPayload",
81
84
  "RerunRowMetadata",
85
+ "RerunRowsMetadata",
82
86
  "RowMetadataEntry",
83
87
  "RowMetadataEntryInput",
84
88
  "RowVerificationStatus",
@@ -22,7 +22,10 @@ from unique_sdk.api_resources._agentic_table import (
22
22
  )
23
23
 
24
24
  from unique_toolkit._common.exception import ConfigurationException
25
- from unique_toolkit._common.pydantic_helpers import get_configuration_dict
25
+ from unique_toolkit._common.pydantic_helpers import (
26
+ NoneToDefault,
27
+ get_configuration_dict,
28
+ )
26
29
  from unique_toolkit.app.schemas import (
27
30
  AssistantWebhookEvent,
28
31
  BaseEventPayload,
@@ -44,6 +47,7 @@ class MagicTableEventTypes(StrEnum):
44
47
  LIBRARY_SHEET_ROW_VERIFIED = "unique.magic-table.library-sheet-row.verified"
45
48
  SHEET_CREATED = "unique.magic-table.sheet-created"
46
49
  RERUN_ROW = "unique.magic-table.rerun-row"
50
+ RERUN_ROWS = "unique.magic-table.rerun-rows"
47
51
 
48
52
 
49
53
  class BaseMetadata(BaseModel):
@@ -248,6 +252,48 @@ class MagicTableRerunRowPayload(
248
252
  ): ...
249
253
 
250
254
 
255
+ ########## Rerun Rows Payload ##########
256
+
257
+
258
+ class RerunRowsMetadata(BaseMetadata):
259
+ """Metadata of a bulk re-run: one event carrying N rows of the same sheet."""
260
+
261
+ model_config = get_configuration_dict()
262
+ source_file_ids: Annotated[list[str], NoneToDefault] = Field(
263
+ default_factory=list,
264
+ description=(
265
+ "Source file IDs for this rerun. Optional: a user-triggered bulk "
266
+ "rerun may omit sources when none changed. Null and omitted become []."
267
+ ),
268
+ )
269
+ row_orders: Annotated[list[int], NoneToDefault] = Field(
270
+ default_factory=list,
271
+ description=(
272
+ "1-based content row indices to rerun, in first-seen selection order. "
273
+ "Duplicates are dropped. Row 0 is the header and negatives address "
274
+ "nothing, so non-positive values are discarded. Empty means no work."
275
+ ),
276
+ )
277
+ context: str = Field(default="", description="The context text for the rerun.")
278
+
279
+ @field_validator("row_orders", mode="after")
280
+ @classmethod
281
+ def normalize_row_orders(cls, v: list[int]) -> list[int]:
282
+ return list(dict.fromkeys(row for row in v if row > 0))
283
+
284
+ @field_validator("context", mode="before")
285
+ @classmethod
286
+ def normalize_context(cls, v):
287
+ if v is None:
288
+ return ""
289
+ return v
290
+
291
+
292
+ class MagicTableRerunRowsPayload(
293
+ MagicTableBasePayload[Literal[MagicTableAction.RERUN_ROWS], RerunRowsMetadata]
294
+ ): ...
295
+
296
+
251
297
  ########### Magic Table Event definition ###########
252
298
 
253
299
 
@@ -259,6 +305,7 @@ PayloadTypes = (
259
305
  | MagicTableLibrarySheetRowVerifiedPayload
260
306
  | MagicTableSheetCreatedPayload
261
307
  | MagicTableRerunRowPayload
308
+ | MagicTableRerunRowsPayload
262
309
  )
263
310
 
264
311
  MagicTablePayloadTypes = Annotated[PayloadTypes, Field(discriminator="action")]
@@ -139,6 +139,9 @@ class LanguageModelName(StrEnum):
139
139
  LITELLM_DEEPSEEK_V4_PRO = "litellm:deepseek-v4-pro"
140
140
  LITELLM_GLM_5_1 = "litellm:glm-5.1"
141
141
  LITELLM_GLM_5_2 = "litellm:glm-5.2"
142
+ LITELLM_PHOENIQS_DEEPSEEK_V4_FLASH = "litellm:phoeniqs-deepseek-v4-flash"
143
+ LITELLM_PHOENIQS_GEMMA_4_31B = "litellm:phoeniqs-gemma-4-31b"
144
+ LITELLM_PHOENIQS_GLM_5_2 = "litellm:phoeniqs-glm-5.2"
142
145
  LITELLM_KIMI_K2_6 = "litellm:kimi-k2.6"
143
146
  LITELLM_KIMI_K3 = "litellm:kimi-k3"
144
147
  LITELLM_QWEN_3 = "litellm:qwen-3-235B-A22B"
@@ -2915,6 +2918,64 @@ class LanguageModelInfo(BaseModel):
2915
2918
  published_at=date(2026, 1, 1),
2916
2919
  supported_reasoning_efforts=[],
2917
2920
  )
2921
+ # Phoeniqs publishes one combined context-window figure (max tokens per API call), not separate input/output limits, so token_limit_input==token_limit_output below — note the deprecated `LanguageModelTokenLimits.token_limit` sums these to 2x Phoeniqs' real per-call cap. https://documentation.phoeniqs.com/maas/active-models/
2922
+ case LanguageModelName.LITELLM_PHOENIQS_DEEPSEEK_V4_FLASH:
2923
+ return cls(
2924
+ name=model_name,
2925
+ provider=LanguageModelProvider.LITELLM,
2926
+ family=ModelFamily.DEEPSEEK,
2927
+ version="deepseek-v4-flash-0731",
2928
+ encoder_name=EncoderName.DEEPSEEK,
2929
+ capabilities=[
2930
+ ModelCapabilities.FUNCTION_CALLING,
2931
+ ModelCapabilities.REASONING,
2932
+ ModelCapabilities.STREAMING,
2933
+ ],
2934
+ token_limits=LanguageModelTokenLimits(
2935
+ token_limit_input=1_000_000, token_limit_output=1_000_000
2936
+ ),
2937
+ published_at=date(2026, 7, 31), # HF repo creation date
2938
+ supported_reasoning_efforts=[],
2939
+ )
2940
+ case LanguageModelName.LITELLM_PHOENIQS_GEMMA_4_31B:
2941
+ return cls(
2942
+ name=model_name,
2943
+ provider=LanguageModelProvider.LITELLM,
2944
+ family=ModelFamily.GOOGLE,
2945
+ version="gemma-4-31b-it-fp8-block",
2946
+ encoder_name=EncoderName.O200K_BASE,
2947
+ capabilities=[
2948
+ ModelCapabilities.VISION,
2949
+ ModelCapabilities.STREAMING,
2950
+ ],
2951
+ token_limits=LanguageModelTokenLimits(
2952
+ token_limit_input=131_072, token_limit_output=131_072
2953
+ ),
2954
+ published_at=date(2026, 4, 3), # HF repo creation date
2955
+ supported_reasoning_efforts=[],
2956
+ )
2957
+ case LanguageModelName.LITELLM_PHOENIQS_GLM_5_2:
2958
+ return cls(
2959
+ name=model_name,
2960
+ provider=LanguageModelProvider.LITELLM,
2961
+ family=ModelFamily.ZAI,
2962
+ version="glm-5.2",
2963
+ encoder_name=EncoderName.O200K_BASE,
2964
+ capabilities=[
2965
+ ModelCapabilities.FUNCTION_CALLING,
2966
+ ModelCapabilities.STRUCTURED_OUTPUT,
2967
+ ModelCapabilities.REASONING,
2968
+ ModelCapabilities.STREAMING,
2969
+ ],
2970
+ token_limits=LanguageModelTokenLimits(
2971
+ token_limit_input=131_072, token_limit_output=131_072
2972
+ ),
2973
+ published_at=date(
2974
+ 2026, 6, 16
2975
+ ), # HF repo creation date — unlike the
2976
+ # Together AI entry above, not an unsourced placeholder.
2977
+ supported_reasoning_efforts=[],
2978
+ )
2918
2979
  case LanguageModelName.LITELLM_KIMI_K2_6:
2919
2980
  return cls(
2920
2981
  name=model_name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-toolkit
3
- Version: 2026.36.0.dev9
3
+ Version: 2026.36.0.dev11
4
4
  Summary:
5
5
  Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
6
6
  Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
16
16
  Requires-Dist: openai>=1.105.0,<3
17
17
  Requires-Dist: platformdirs>=4.0.0,<5
18
18
  Requires-Dist: pillow>=12.1.1
19
- Requires-Dist: unique-sdk>=2026.36.0.dev2,<2026.36.0rc0
19
+ Requires-Dist: unique-sdk>=2026.36.0.dev3,<2026.36.0rc0
20
20
  Requires-Dist: jambo>=0.1.2,<0.2
21
21
  Requires-Dist: jinja2>=3.1.6,<4
22
22
  Requires-Dist: docxtpl>=0.20.1,<0.21
@@ -237,8 +237,8 @@ unique_toolkit/agentic/tools/utils/source_handling/__init__.py,sha256=47DEQpj8HB
237
237
  unique_toolkit/agentic/tools/utils/source_handling/schema.py,sha256=iHBKuks6tUy8tvian4Pd0B6_-8__SehVVNcxIUAUjEA,882
238
238
  unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py,sha256=uZ0QXqrPWgId3ZA67dvjHQ6xrW491LK1xxx_sVJmFHg,9160
239
239
  unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py,sha256=EA8iVvb3L91OFk2XMbGcFuhe2etqm3Sx9QCYDGiOSOM,6995
240
- unique_toolkit/agentic_table/__init__.py,sha256=wjnkj46HWTOThu9yl6ptWghi9HwucthnJwXeqR5woEA,2296
241
- unique_toolkit/agentic_table/schemas.py,sha256=9YBTC3lSYEqjHshCUnZHBasTotFp7EWYzUnHR7nzAyE,14824
240
+ unique_toolkit/agentic_table/__init__.py,sha256=jUO15EKDit_x10Eb1bCSzTaBaNmh2iJ4y2aaSYhQ4o4,2410
241
+ unique_toolkit/agentic_table/schemas.py,sha256=a6el5jTDImY-f5WH4JgJoOKd2_rXvTQYhBS1bwj8kBQ,16384
242
242
  unique_toolkit/agentic_table/service.py,sha256=LvmjPyuXK5PrsAjgwN04_qY6tks4j7f_8PWs_0ioyxQ,40346
243
243
  unique_toolkit/agentic_table/synthetic_chat_event.py,sha256=MylvYuhx5CVt2DbPetzV0sR8GlkL218DmNFi7A6RYVs,2373
244
244
  unique_toolkit/app/__init__.py,sha256=qear5ErW3smLDATxtnUsgkX3f177zsn65ixVW8T0JVE,1641
@@ -394,7 +394,7 @@ unique_toolkit/language_model/builder.py,sha256=KwBzsD6-fvQnB4p2I7M-5Tk6j4tmQ973
394
394
  unique_toolkit/language_model/constants.py,sha256=B-topqW0r83dkC_25DeQfnPk3n53qzIHUCBS7YJ0-1U,119
395
395
  unique_toolkit/language_model/default_language_model.py,sha256=mcyuFs_V6tp52C8xJSHiEHO4kFGj6xed1gvozvCRD7k,1181
396
396
  unique_toolkit/language_model/functions.py,sha256=W6JC4LUh-LZ9waDgph--xVmKeQ7Ls6NRAqDx9DwQdeY,26691
397
- unique_toolkit/language_model/infos.py,sha256=zs0UFhds4UkSRr3zxyTJ-jJ9u2O2x9VgZx3a9d4zbYU,146221
397
+ unique_toolkit/language_model/infos.py,sha256=TY4HtNbOxwokq3YW4QNiAyA8eq2ZvzzaRhGAfDkKG3M,149525
398
398
  unique_toolkit/language_model/invocation_stats.py,sha256=CQbpUz394IsVd8eNTB1gPSMt5f0UXmkN1amNsqtAW6U,5857
399
399
  unique_toolkit/language_model/model_costs.py,sha256=WM1u2fWAKpPB_creS-ew8YAzc1V8oiaCbvhpSJaO8B0,3789
400
400
  unique_toolkit/language_model/prompt.py,sha256=JSawaLjQg3VR-E2fK8engFyJnNdk21zaO8pPIodzN4Q,3991
@@ -422,6 +422,6 @@ unique_toolkit/short_term_memory/service.py,sha256=2JMBEBn6GoyK-a0xvdcWpPft-3C74
422
422
  unique_toolkit/smart_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
423
423
  unique_toolkit/smart_rules/compile.py,sha256=vRe0aMJWuVIK-VsqomgxQImzke7MDmwgSxxJfYCa7zw,1386
424
424
  unique_toolkit/test_utilities/events.py,sha256=FLrhMh0A_mQutAUjoD0FdMcVQ4Gq31r35OVGzRjvLro,6760
425
- unique_toolkit-2026.36.0.dev9.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
426
- unique_toolkit-2026.36.0.dev9.dist-info/METADATA,sha256=q4b8vnepKWZ7_3qifLr20ol4KpEa94PnSy-UD8Agirg,7821
427
- unique_toolkit-2026.36.0.dev9.dist-info/RECORD,,
425
+ unique_toolkit-2026.36.0.dev11.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
426
+ unique_toolkit-2026.36.0.dev11.dist-info/METADATA,sha256=I9TKoZvLaVx9C8U-O2Pk2e62x1-zlbOqeuFwJW_PnsE,7822
427
+ unique_toolkit-2026.36.0.dev11.dist-info/RECORD,,