unique_toolkit 2026.22.0.dev2__py3-none-any.whl → 2026.22.0.dev3__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.
@@ -13,6 +13,7 @@ from unique_toolkit.agentic.history_manager.history_construction_with_contents i
13
13
  get_full_history_with_contents_and_tool_calls_async,
14
14
  get_full_history_with_contents_async,
15
15
  )
16
+ from unique_toolkit.agentic.history_manager.settings import env_settings
16
17
  from unique_toolkit.agentic.history_manager.utils import (
17
18
  get_selected_uploaded_content_ids,
18
19
  serialize_tool_content_json,
@@ -33,10 +34,8 @@ from unique_toolkit.language_model.schemas import (
33
34
  )
34
35
  from unique_toolkit.services.factory import UniqueServiceFactory
35
36
 
36
- MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = (
37
- 0.1 # 10% safety margin for input tokens we need 10% less does not work.
38
- )
39
- SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = 0.9
37
+ MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = env_settings.input_correction_reduction_factor
38
+ SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = env_settings.input_aggressive_reduction_factor
40
39
 
41
40
 
42
41
  class SourceReductionResult(BaseModel):
@@ -0,0 +1,53 @@
1
+ import os
2
+ import sys
3
+ from pathlib import Path
4
+
5
+ from pydantic import Field
6
+ from pydantic_settings import BaseSettings, SettingsConfigDict
7
+
8
+
9
+ class Base(BaseSettings):
10
+ input_correction_reduction_factor: float = Field(
11
+ default=0.1,
12
+ ge=0.0,
13
+ lt=1.0,
14
+ description="The factor by which the input tokens will be reduced.",
15
+ )
16
+ input_aggressive_reduction_factor: float = Field(
17
+ default=0.9,
18
+ ge=0.0,
19
+ lt=1.0,
20
+ description="The safety margin for the input correction.",
21
+ )
22
+
23
+
24
+ def get_model_config(test: bool = False) -> SettingsConfigDict:
25
+ if test:
26
+ env_file = Path(os.getcwd()) / "tests/test.env"
27
+ else:
28
+ env_file = Path(os.getcwd()) / ".env"
29
+
30
+ return SettingsConfigDict(
31
+ extra="ignore",
32
+ env_prefix="TOOLKIT_HISTORY_MANAGER_",
33
+ case_sensitive=False,
34
+ env_file=env_file,
35
+ env_file_encoding="utf-8",
36
+ )
37
+
38
+
39
+ class Settings(Base):
40
+ model_config = get_model_config()
41
+
42
+
43
+ class TestSettings(Base):
44
+ model_config = get_model_config(test=True)
45
+
46
+
47
+ def get_settings() -> Base:
48
+ if "pytest" in sys.modules:
49
+ return TestSettings()
50
+ return Settings()
51
+
52
+
53
+ env_settings: Base = get_settings()
@@ -19,6 +19,7 @@ from unique_toolkit.language_model.schemas import (
19
19
  ReasoningEffort,
20
20
  to_reasoning_effort,
21
21
  )
22
+ from unique_toolkit.language_model.settings import ModelFamily, env_settings
22
23
 
23
24
  _LOGGER = logging.getLogger(__name__)
24
25
 
@@ -278,6 +279,7 @@ class LanguageModelInfo(BaseModel):
278
279
  | SkipJsonSchema[LanguageModelName]
279
280
  ) = Field(title="Model Name", default=LanguageModelName.AZURE_GPT_4o_2024_1120)
280
281
  provider: LanguageModelProvider = LanguageModelProvider.AZURE
282
+ family: ModelFamily = ModelFamily.UNKNOWN
281
283
  version: str = Field(title="Model Version", default="")
282
284
 
283
285
  encoder_name: EncoderName | Annotated[str, Field(title="Custom Encoder Name")] = (
@@ -523,6 +525,28 @@ class LanguageModelInfo(BaseModel):
523
525
 
524
526
  @classmethod
525
527
  def from_name(cls, model_name: LanguageModelName | str) -> Self:
528
+ """Build a ``LanguageModelInfo`` for ``model_name`` and apply the per-family
529
+ input-token correction exactly once.
530
+
531
+ ``token_limits.token_limit_input`` declared in the case branches below is
532
+ the *advertised* limit. The family multiplier (see
533
+ ``settings.token_limit_multiplier``) compensates for tokenizer mismatches
534
+ and is applied here, at the single bottleneck through which every
535
+ ``from_name`` result flows. Other construction paths
536
+ (``cls(...)`` direct, ``cls.model_validate(dump)``) are intentionally
537
+ *not* corrected, so a corrected info round-trips through pydantic
538
+ without re-shrinking when nested inside parent configs.
539
+ """
540
+ info = cls._construct_from_name(model_name)
541
+ multiplier = env_settings.token_limit_multiplier.get(info.family, 1.0)
542
+ if multiplier != 1.0:
543
+ info.token_limits.token_limit_input = int(
544
+ info.token_limits.token_limit_input * multiplier
545
+ )
546
+ return info
547
+
548
+ @classmethod
549
+ def _construct_from_name(cls, model_name: LanguageModelName | str) -> Self:
526
550
  if model_name in [name.value for name in LanguageModelName]:
527
551
  model_name = LanguageModelName(model_name)
528
552
 
@@ -548,6 +572,7 @@ class LanguageModelInfo(BaseModel):
548
572
  return cls(
549
573
  name=model_name,
550
574
  provider=LanguageModelProvider.AZURE,
575
+ family=ModelFamily.OPENAI,
551
576
  capabilities=[
552
577
  ModelCapabilities.FUNCTION_CALLING,
553
578
  ModelCapabilities.PARALLEL_FUNCTION_CALLING,
@@ -567,6 +592,7 @@ class LanguageModelInfo(BaseModel):
567
592
  return cls(
568
593
  name=model_name,
569
594
  provider=LanguageModelProvider.AZURE,
595
+ family=ModelFamily.OPENAI,
570
596
  version="0613",
571
597
  encoder_name=EncoderName.CL100K_BASE,
572
598
  capabilities=[
@@ -584,6 +610,7 @@ class LanguageModelInfo(BaseModel):
584
610
  return cls(
585
611
  name=model_name,
586
612
  provider=LanguageModelProvider.AZURE,
613
+ family=ModelFamily.OPENAI,
587
614
  version="1106-preview",
588
615
  capabilities=[
589
616
  ModelCapabilities.FUNCTION_CALLING,
@@ -601,6 +628,7 @@ class LanguageModelInfo(BaseModel):
601
628
  return cls(
602
629
  name=model_name,
603
630
  provider=LanguageModelProvider.AZURE,
631
+ family=ModelFamily.OPENAI,
604
632
  version="2025-08-07",
605
633
  encoder_name=EncoderName.O200K_BASE,
606
634
  capabilities=[
@@ -632,6 +660,7 @@ class LanguageModelInfo(BaseModel):
632
660
  return cls(
633
661
  name=model_name,
634
662
  provider=LanguageModelProvider.AZURE,
663
+ family=ModelFamily.OPENAI,
635
664
  version="2025-08-07",
636
665
  encoder_name=EncoderName.O200K_BASE,
637
666
  capabilities=[
@@ -663,6 +692,7 @@ class LanguageModelInfo(BaseModel):
663
692
  return cls(
664
693
  name=model_name,
665
694
  provider=LanguageModelProvider.AZURE,
695
+ family=ModelFamily.OPENAI,
666
696
  version="2025-08-07",
667
697
  encoder_name=EncoderName.O200K_BASE,
668
698
  capabilities=[
@@ -694,6 +724,7 @@ class LanguageModelInfo(BaseModel):
694
724
  return cls(
695
725
  name=model_name,
696
726
  provider=LanguageModelProvider.AZURE,
727
+ family=ModelFamily.OPENAI,
697
728
  version="2025-08-07",
698
729
  encoder_name=EncoderName.O200K_BASE,
699
730
  capabilities=[
@@ -714,6 +745,7 @@ class LanguageModelInfo(BaseModel):
714
745
  return cls(
715
746
  name=model_name,
716
747
  provider=LanguageModelProvider.AZURE,
748
+ family=ModelFamily.OPENAI,
717
749
  version="2025-10-06",
718
750
  encoder_name=EncoderName.O200K_BASE,
719
751
  capabilities=[
@@ -740,6 +772,7 @@ class LanguageModelInfo(BaseModel):
740
772
  return cls(
741
773
  name=model_name,
742
774
  provider=LanguageModelProvider.AZURE,
775
+ family=ModelFamily.OPENAI,
743
776
  version="2025-11-13",
744
777
  encoder_name=EncoderName.O200K_BASE,
745
778
  capabilities=[
@@ -769,6 +802,7 @@ class LanguageModelInfo(BaseModel):
769
802
  return cls(
770
803
  name=model_name,
771
804
  provider=LanguageModelProvider.AZURE,
805
+ family=ModelFamily.OPENAI,
772
806
  version="2025-11-13",
773
807
  encoder_name=EncoderName.O200K_BASE,
774
808
  capabilities=[
@@ -798,6 +832,7 @@ class LanguageModelInfo(BaseModel):
798
832
  return cls(
799
833
  name=model_name,
800
834
  provider=LanguageModelProvider.AZURE,
835
+ family=ModelFamily.OPENAI,
801
836
  version="2025-11-13",
802
837
  encoder_name=EncoderName.O200K_BASE,
803
838
  capabilities=[
@@ -827,6 +862,7 @@ class LanguageModelInfo(BaseModel):
827
862
  return cls(
828
863
  name=model_name,
829
864
  provider=LanguageModelProvider.AZURE,
865
+ family=ModelFamily.OPENAI,
830
866
  version="2025-11-13",
831
867
  encoder_name=EncoderName.O200K_BASE,
832
868
  capabilities=[
@@ -855,6 +891,7 @@ class LanguageModelInfo(BaseModel):
855
891
  return cls(
856
892
  name=model_name,
857
893
  provider=LanguageModelProvider.AZURE,
894
+ family=ModelFamily.OPENAI,
858
895
  version="2025-11-13",
859
896
  encoder_name=EncoderName.O200K_BASE,
860
897
  capabilities=[
@@ -883,6 +920,7 @@ class LanguageModelInfo(BaseModel):
883
920
  return cls(
884
921
  name=model_name,
885
922
  provider=LanguageModelProvider.AZURE,
923
+ family=ModelFamily.OPENAI,
886
924
  version="2025-12-11",
887
925
  encoder_name=EncoderName.O200K_BASE,
888
926
  capabilities=[
@@ -918,6 +956,7 @@ class LanguageModelInfo(BaseModel):
918
956
  return cls(
919
957
  name=model_name,
920
958
  provider=LanguageModelProvider.AZURE,
959
+ family=ModelFamily.OPENAI,
921
960
  version="2025-12-11",
922
961
  encoder_name=EncoderName.O200K_BASE,
923
962
  capabilities=[
@@ -945,6 +984,7 @@ class LanguageModelInfo(BaseModel):
945
984
  return cls(
946
985
  name=model_name,
947
986
  provider=LanguageModelProvider.AZURE,
987
+ family=ModelFamily.OPENAI,
948
988
  version="2026-03-05",
949
989
  encoder_name=EncoderName.O200K_BASE,
950
990
  capabilities=[
@@ -980,6 +1020,7 @@ class LanguageModelInfo(BaseModel):
980
1020
  return cls(
981
1021
  name=model_name,
982
1022
  provider=LanguageModelProvider.AZURE,
1023
+ family=ModelFamily.OPENAI,
983
1024
  version="2026-03-05",
984
1025
  encoder_name=EncoderName.O200K_BASE,
985
1026
  capabilities=[
@@ -1009,6 +1050,7 @@ class LanguageModelInfo(BaseModel):
1009
1050
  return cls(
1010
1051
  name=model_name,
1011
1052
  provider=LanguageModelProvider.AZURE,
1053
+ family=ModelFamily.OPENAI,
1012
1054
  version="2026-04-24",
1013
1055
  encoder_name=EncoderName.O200K_BASE,
1014
1056
  capabilities=[
@@ -1044,6 +1086,7 @@ class LanguageModelInfo(BaseModel):
1044
1086
  return cls(
1045
1087
  name=model_name,
1046
1088
  provider=LanguageModelProvider.AZURE,
1089
+ family=ModelFamily.OPENAI,
1047
1090
  version="2026-04-24",
1048
1091
  encoder_name=EncoderName.O200K_BASE,
1049
1092
  capabilities=[
@@ -1081,6 +1124,7 @@ class LanguageModelInfo(BaseModel):
1081
1124
  ModelCapabilities.VISION,
1082
1125
  ],
1083
1126
  provider=LanguageModelProvider.AZURE,
1127
+ family=ModelFamily.OPENAI,
1084
1128
  version="turbo-2024-04-09",
1085
1129
  token_limits=LanguageModelTokenLimits(
1086
1130
  token_limit_input=128000, token_limit_output=4096
@@ -1102,6 +1146,7 @@ class LanguageModelInfo(BaseModel):
1102
1146
  ModelCapabilities.VISION,
1103
1147
  ],
1104
1148
  provider=LanguageModelProvider.AZURE,
1149
+ family=ModelFamily.OPENAI,
1105
1150
  version="2024-05-13",
1106
1151
  token_limits=LanguageModelTokenLimits(
1107
1152
  token_limit_input=128_000, token_limit_output=4_096
@@ -1124,6 +1169,7 @@ class LanguageModelInfo(BaseModel):
1124
1169
  ModelCapabilities.VISION,
1125
1170
  ],
1126
1171
  provider=LanguageModelProvider.AZURE,
1172
+ family=ModelFamily.OPENAI,
1127
1173
  version="2024-08-06",
1128
1174
  token_limits=LanguageModelTokenLimits(
1129
1175
  token_limit_input=128_000, token_limit_output=16_384
@@ -1146,6 +1192,7 @@ class LanguageModelInfo(BaseModel):
1146
1192
  ModelCapabilities.VISION,
1147
1193
  ],
1148
1194
  provider=LanguageModelProvider.AZURE,
1195
+ family=ModelFamily.OPENAI,
1149
1196
  version="2024-11-20",
1150
1197
  token_limits=LanguageModelTokenLimits(
1151
1198
  token_limit_input=128_000, token_limit_output=16_384
@@ -1166,6 +1213,7 @@ class LanguageModelInfo(BaseModel):
1166
1213
  ModelCapabilities.VISION,
1167
1214
  ],
1168
1215
  provider=LanguageModelProvider.AZURE,
1216
+ family=ModelFamily.OPENAI,
1169
1217
  version="2024-07-18",
1170
1218
  encoder_name=EncoderName.O200K_BASE,
1171
1219
  token_limits=LanguageModelTokenLimits(
@@ -1187,6 +1235,7 @@ class LanguageModelInfo(BaseModel):
1187
1235
  ModelCapabilities.REASONING,
1188
1236
  ],
1189
1237
  provider=LanguageModelProvider.AZURE,
1238
+ family=ModelFamily.OPENAI,
1190
1239
  version="2024-09-12",
1191
1240
  encoder_name=EncoderName.O200K_BASE,
1192
1241
  token_limits=LanguageModelTokenLimits(
@@ -1212,6 +1261,7 @@ class LanguageModelInfo(BaseModel):
1212
1261
  ModelCapabilities.VISION,
1213
1262
  ],
1214
1263
  provider=LanguageModelProvider.AZURE,
1264
+ family=ModelFamily.OPENAI,
1215
1265
  version="2024-12-17",
1216
1266
  encoder_name=EncoderName.O200K_BASE,
1217
1267
  token_limits=LanguageModelTokenLimits(
@@ -1236,6 +1286,7 @@ class LanguageModelInfo(BaseModel):
1236
1286
  ModelCapabilities.STRUCTURED_OUTPUT,
1237
1287
  ],
1238
1288
  provider=LanguageModelProvider.AZURE,
1289
+ family=ModelFamily.OPENAI,
1239
1290
  version="2025-01-31",
1240
1291
  encoder_name=EncoderName.O200K_BASE,
1241
1292
  token_limits=LanguageModelTokenLimits(
@@ -1261,6 +1312,7 @@ class LanguageModelInfo(BaseModel):
1261
1312
  ModelCapabilities.VISION,
1262
1313
  ],
1263
1314
  provider=LanguageModelProvider.AZURE,
1315
+ family=ModelFamily.OPENAI,
1264
1316
  version="2025-04-16",
1265
1317
  encoder_name=EncoderName.O200K_BASE,
1266
1318
  token_limits=LanguageModelTokenLimits(
@@ -1286,6 +1338,7 @@ class LanguageModelInfo(BaseModel):
1286
1338
  ModelCapabilities.VISION,
1287
1339
  ],
1288
1340
  provider=LanguageModelProvider.AZURE,
1341
+ family=ModelFamily.OPENAI,
1289
1342
  version="2025-04-16",
1290
1343
  encoder_name=EncoderName.O200K_BASE,
1291
1344
  token_limits=LanguageModelTokenLimits(
@@ -1309,6 +1362,7 @@ class LanguageModelInfo(BaseModel):
1309
1362
  ModelCapabilities.VISION,
1310
1363
  ],
1311
1364
  provider=LanguageModelProvider.AZURE,
1365
+ family=ModelFamily.OPENAI,
1312
1366
  version="2025-02-27",
1313
1367
  encoder_name=EncoderName.O200K_BASE,
1314
1368
  token_limits=LanguageModelTokenLimits(
@@ -1330,6 +1384,7 @@ class LanguageModelInfo(BaseModel):
1330
1384
  ModelCapabilities.VISION,
1331
1385
  ],
1332
1386
  provider=LanguageModelProvider.AZURE,
1387
+ family=ModelFamily.OPENAI,
1333
1388
  version="2025-04-14",
1334
1389
  encoder_name=EncoderName.O200K_BASE,
1335
1390
  token_limits=LanguageModelTokenLimits(
@@ -1351,6 +1406,7 @@ class LanguageModelInfo(BaseModel):
1351
1406
  ModelCapabilities.VISION,
1352
1407
  ],
1353
1408
  provider=LanguageModelProvider.AZURE,
1409
+ family=ModelFamily.OPENAI,
1354
1410
  version="2025-04-14",
1355
1411
  encoder_name=EncoderName.O200K_BASE,
1356
1412
  token_limits=LanguageModelTokenLimits(
@@ -1372,6 +1428,7 @@ class LanguageModelInfo(BaseModel):
1372
1428
  ModelCapabilities.VISION,
1373
1429
  ],
1374
1430
  provider=LanguageModelProvider.AZURE,
1431
+ family=ModelFamily.OPENAI,
1375
1432
  version="2025-04-14",
1376
1433
  encoder_name=EncoderName.O200K_BASE,
1377
1434
  token_limits=LanguageModelTokenLimits(
@@ -1393,6 +1450,7 @@ class LanguageModelInfo(BaseModel):
1393
1450
  ModelCapabilities.VISION,
1394
1451
  ],
1395
1452
  provider=LanguageModelProvider.AZURE,
1453
+ family=ModelFamily.OPENAI,
1396
1454
  version="2025-11-18",
1397
1455
  encoder_name=EncoderName.O200K_BASE,
1398
1456
  token_limits=LanguageModelTokenLimits(
@@ -1411,11 +1469,11 @@ class LanguageModelInfo(BaseModel):
1411
1469
  ModelCapabilities.VISION,
1412
1470
  ],
1413
1471
  provider=LanguageModelProvider.LITELLM,
1472
+ family=ModelFamily.ANTHROPIC,
1414
1473
  version="claude-3-7-sonnet",
1415
1474
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1416
1475
  token_limits=LanguageModelTokenLimits(
1417
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1418
- token_limit_input=180_000,
1476
+ token_limit_input=200_000,
1419
1477
  token_limit_output=64_000,
1420
1478
  ),
1421
1479
  info_cutoff_at=date(2024, 10, 31),
@@ -1432,11 +1490,11 @@ class LanguageModelInfo(BaseModel):
1432
1490
  ModelCapabilities.REASONING,
1433
1491
  ],
1434
1492
  provider=LanguageModelProvider.LITELLM,
1493
+ family=ModelFamily.ANTHROPIC,
1435
1494
  version="claude-3-7-sonnet-thinking",
1436
1495
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1437
1496
  token_limits=LanguageModelTokenLimits(
1438
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1439
- token_limit_input=180_000,
1497
+ token_limit_input=200_000,
1440
1498
  token_limit_output=64_000,
1441
1499
  ),
1442
1500
  info_cutoff_at=date(2024, 10, 31),
@@ -1453,11 +1511,11 @@ class LanguageModelInfo(BaseModel):
1453
1511
  ModelCapabilities.REASONING,
1454
1512
  ],
1455
1513
  provider=LanguageModelProvider.LITELLM,
1514
+ family=ModelFamily.ANTHROPIC,
1456
1515
  version="claude-haiku-4-5",
1457
1516
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1458
1517
  token_limits=LanguageModelTokenLimits(
1459
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1460
- token_limit_input=180_000,
1518
+ token_limit_input=200_000,
1461
1519
  token_limit_output=64_000,
1462
1520
  ),
1463
1521
  info_cutoff_at=date(2025, 2, 1),
@@ -1474,11 +1532,11 @@ class LanguageModelInfo(BaseModel):
1474
1532
  ModelCapabilities.REASONING,
1475
1533
  ],
1476
1534
  provider=LanguageModelProvider.LITELLM,
1535
+ family=ModelFamily.ANTHROPIC,
1477
1536
  version="claude-sonnet-4",
1478
1537
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1479
1538
  token_limits=LanguageModelTokenLimits(
1480
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1481
- token_limit_input=180_000,
1539
+ token_limit_input=200_000,
1482
1540
  token_limit_output=64_000,
1483
1541
  ),
1484
1542
  info_cutoff_at=date(2025, 3, 1),
@@ -1495,11 +1553,11 @@ class LanguageModelInfo(BaseModel):
1495
1553
  ModelCapabilities.REASONING,
1496
1554
  ],
1497
1555
  provider=LanguageModelProvider.LITELLM,
1556
+ family=ModelFamily.ANTHROPIC,
1498
1557
  version="claude-sonnet-4-5",
1499
1558
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1500
1559
  token_limits=LanguageModelTokenLimits(
1501
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1502
- token_limit_input=180_000,
1560
+ token_limit_input=200_000,
1503
1561
  token_limit_output=64_000,
1504
1562
  ),
1505
1563
  info_cutoff_at=date(2025, 7, 1),
@@ -1519,11 +1577,11 @@ class LanguageModelInfo(BaseModel):
1519
1577
  ModelCapabilities.REASONING,
1520
1578
  ],
1521
1579
  provider=LanguageModelProvider.LITELLM,
1580
+ family=ModelFamily.ANTHROPIC,
1522
1581
  version="claude-sonnet-4-6",
1523
1582
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1524
1583
  token_limits=LanguageModelTokenLimits(
1525
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1526
- token_limit_input=180_000,
1584
+ token_limit_input=200_000,
1527
1585
  token_limit_output=64_000,
1528
1586
  ),
1529
1587
  info_cutoff_at=date(2026, 1, 1),
@@ -1540,11 +1598,11 @@ class LanguageModelInfo(BaseModel):
1540
1598
  ModelCapabilities.REASONING,
1541
1599
  ],
1542
1600
  provider=LanguageModelProvider.LITELLM,
1601
+ family=ModelFamily.ANTHROPIC,
1543
1602
  version="claude-opus-4",
1544
1603
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1545
1604
  token_limits=LanguageModelTokenLimits(
1546
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1547
- token_limit_input=180_000,
1605
+ token_limit_input=200_000,
1548
1606
  token_limit_output=32_000,
1549
1607
  ),
1550
1608
  info_cutoff_at=date(2025, 3, 1),
@@ -1561,11 +1619,11 @@ class LanguageModelInfo(BaseModel):
1561
1619
  ModelCapabilities.REASONING,
1562
1620
  ],
1563
1621
  provider=LanguageModelProvider.LITELLM,
1622
+ family=ModelFamily.ANTHROPIC,
1564
1623
  version="claude-opus-4-1",
1565
1624
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1566
1625
  token_limits=LanguageModelTokenLimits(
1567
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1568
- token_limit_input=180_000,
1626
+ token_limit_input=200_000,
1569
1627
  token_limit_output=32_000,
1570
1628
  ),
1571
1629
  info_cutoff_at=date(2025, 3, 1),
@@ -1582,11 +1640,11 @@ class LanguageModelInfo(BaseModel):
1582
1640
  ModelCapabilities.REASONING,
1583
1641
  ],
1584
1642
  provider=LanguageModelProvider.LITELLM,
1643
+ family=ModelFamily.ANTHROPIC,
1585
1644
  version="claude-opus-4-5",
1586
1645
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1587
1646
  token_limits=LanguageModelTokenLimits(
1588
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1589
- token_limit_input=180_000,
1647
+ token_limit_input=200_000,
1590
1648
  token_limit_output=64_000,
1591
1649
  ),
1592
1650
  info_cutoff_at=date(2025, 8, 1),
@@ -1606,11 +1664,11 @@ class LanguageModelInfo(BaseModel):
1606
1664
  ModelCapabilities.REASONING,
1607
1665
  ],
1608
1666
  provider=LanguageModelProvider.LITELLM,
1667
+ family=ModelFamily.ANTHROPIC,
1609
1668
  version="claude-opus-4-6",
1610
1669
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1611
1670
  token_limits=LanguageModelTokenLimits(
1612
- # Input limit is 200_000, we leave 20_000 tokens as buffer due to tokenizer mismatch
1613
- token_limit_input=180_000,
1671
+ token_limit_input=200_000,
1614
1672
  token_limit_output=128_000,
1615
1673
  ),
1616
1674
  info_cutoff_at=date(2025, 8, 1),
@@ -1630,11 +1688,11 @@ class LanguageModelInfo(BaseModel):
1630
1688
  ModelCapabilities.REASONING,
1631
1689
  ],
1632
1690
  provider=LanguageModelProvider.LITELLM,
1691
+ family=ModelFamily.ANTHROPIC,
1633
1692
  version="claude-opus-4-7",
1634
1693
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1635
1694
  token_limits=LanguageModelTokenLimits(
1636
- # Input limit is 1_000_000, we leave 100_000 tokens as buffer due to tokenizer mismatch
1637
- token_limit_input=900_000,
1695
+ token_limit_input=1_000_000,
1638
1696
  token_limit_output=128_000,
1639
1697
  ),
1640
1698
  info_cutoff_at=date(2026, 1, 1),
@@ -1652,6 +1710,7 @@ class LanguageModelInfo(BaseModel):
1652
1710
  ModelCapabilities.REASONING,
1653
1711
  ],
1654
1712
  provider=LanguageModelProvider.LITELLM,
1713
+ family=ModelFamily.GOOGLE,
1655
1714
  version="gemini-2-0-flash",
1656
1715
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1657
1716
  token_limits=LanguageModelTokenLimits(
@@ -1672,6 +1731,7 @@ class LanguageModelInfo(BaseModel):
1672
1731
  ModelCapabilities.REASONING,
1673
1732
  ],
1674
1733
  provider=LanguageModelProvider.LITELLM,
1734
+ family=ModelFamily.GOOGLE,
1675
1735
  version="gemini-2-5-flash",
1676
1736
  encoder_name=EncoderName.O200K_BASE, # TODO:Replace with LLM tokenizer
1677
1737
  token_limits=LanguageModelTokenLimits(
@@ -1692,6 +1752,7 @@ class LanguageModelInfo(BaseModel):
1692
1752
  ModelCapabilities.REASONING,
1693
1753
  ],
1694
1754
  provider=LanguageModelProvider.LITELLM,
1755
+ family=ModelFamily.GOOGLE,
1695
1756
  version="gemini-2-5-flash-lite",
1696
1757
  encoder_name=EncoderName.O200K_BASE, # TODO:Replace with LLM tokenizer
1697
1758
  token_limits=LanguageModelTokenLimits(
@@ -1712,6 +1773,7 @@ class LanguageModelInfo(BaseModel):
1712
1773
  ModelCapabilities.REASONING,
1713
1774
  ],
1714
1775
  provider=LanguageModelProvider.LITELLM,
1776
+ family=ModelFamily.GOOGLE,
1715
1777
  version="gemini-2-5-flash-lite-preview-06-17",
1716
1778
  encoder_name=EncoderName.O200K_BASE, # TODO:Replace with LLM tokenizer
1717
1779
  token_limits=LanguageModelTokenLimits(
@@ -1732,6 +1794,7 @@ class LanguageModelInfo(BaseModel):
1732
1794
  ModelCapabilities.REASONING,
1733
1795
  ],
1734
1796
  provider=LanguageModelProvider.LITELLM,
1797
+ family=ModelFamily.GOOGLE,
1735
1798
  version="gemini-2-5-flash-preview-05-20",
1736
1799
  encoder_name=EncoderName.O200K_BASE, # TODO:Replace with LLM tokenizer
1737
1800
  token_limits=LanguageModelTokenLimits(
@@ -1752,6 +1815,7 @@ class LanguageModelInfo(BaseModel):
1752
1815
  ModelCapabilities.REASONING,
1753
1816
  ],
1754
1817
  provider=LanguageModelProvider.LITELLM,
1818
+ family=ModelFamily.GOOGLE,
1755
1819
  version="gemini-2-5-pro",
1756
1820
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1757
1821
  token_limits=LanguageModelTokenLimits(
@@ -1772,6 +1836,7 @@ class LanguageModelInfo(BaseModel):
1772
1836
  ModelCapabilities.REASONING,
1773
1837
  ],
1774
1838
  provider=LanguageModelProvider.LITELLM,
1839
+ family=ModelFamily.GOOGLE,
1775
1840
  version="gemini-2-5-pro-exp-0325",
1776
1841
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1777
1842
  token_limits=LanguageModelTokenLimits(
@@ -1792,6 +1857,7 @@ class LanguageModelInfo(BaseModel):
1792
1857
  ModelCapabilities.REASONING,
1793
1858
  ],
1794
1859
  provider=LanguageModelProvider.LITELLM,
1860
+ family=ModelFamily.GOOGLE,
1795
1861
  version="gemini-2-5-pro-preview-06-05",
1796
1862
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1797
1863
  token_limits=LanguageModelTokenLimits(
@@ -1812,6 +1878,7 @@ class LanguageModelInfo(BaseModel):
1812
1878
  ModelCapabilities.REASONING,
1813
1879
  ],
1814
1880
  provider=LanguageModelProvider.LITELLM,
1881
+ family=ModelFamily.GOOGLE,
1815
1882
  version="gemini-3-1-pro-preview",
1816
1883
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1817
1884
  token_limits=LanguageModelTokenLimits(
@@ -1832,6 +1899,7 @@ class LanguageModelInfo(BaseModel):
1832
1899
  ModelCapabilities.REASONING,
1833
1900
  ],
1834
1901
  provider=LanguageModelProvider.LITELLM,
1902
+ family=ModelFamily.GOOGLE,
1835
1903
  version="gemini-3-flash-preview",
1836
1904
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1837
1905
  token_limits=LanguageModelTokenLimits(
@@ -1852,6 +1920,7 @@ class LanguageModelInfo(BaseModel):
1852
1920
  ModelCapabilities.REASONING,
1853
1921
  ],
1854
1922
  provider=LanguageModelProvider.LITELLM,
1923
+ family=ModelFamily.GOOGLE,
1855
1924
  version="gemini-3-pro-preview",
1856
1925
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
1857
1926
  token_limits=LanguageModelTokenLimits(
@@ -1870,6 +1939,7 @@ class LanguageModelInfo(BaseModel):
1870
1939
  ModelCapabilities.STRUCTURED_OUTPUT,
1871
1940
  ],
1872
1941
  provider=LanguageModelProvider.LITELLM,
1942
+ family=ModelFamily.XAI,
1873
1943
  version="grok-4-1-fast-non-reasoning",
1874
1944
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with grok tokenizer
1875
1945
  token_limits=LanguageModelTokenLimits(
@@ -1892,6 +1962,7 @@ class LanguageModelInfo(BaseModel):
1892
1962
  ModelCapabilities.REASONING,
1893
1963
  ],
1894
1964
  provider=LanguageModelProvider.LITELLM,
1965
+ family=ModelFamily.XAI,
1895
1966
  version="grok-4-1-fast-reasoning",
1896
1967
  encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with grok tokenizer
1897
1968
  token_limits=LanguageModelTokenLimits(
@@ -1908,6 +1979,7 @@ class LanguageModelInfo(BaseModel):
1908
1979
  return cls(
1909
1980
  name=model_name,
1910
1981
  provider=LanguageModelProvider.LITELLM,
1982
+ family=ModelFamily.OPENAI,
1911
1983
  version="gpt-5",
1912
1984
  encoder_name=EncoderName.O200K_BASE,
1913
1985
  capabilities=[
@@ -1939,6 +2011,7 @@ class LanguageModelInfo(BaseModel):
1939
2011
  return cls(
1940
2012
  name=model_name,
1941
2013
  provider=LanguageModelProvider.LITELLM,
2014
+ family=ModelFamily.OPENAI,
1942
2015
  version="gpt-5-mini",
1943
2016
  encoder_name=EncoderName.O200K_BASE,
1944
2017
  capabilities=[
@@ -1970,6 +2043,7 @@ class LanguageModelInfo(BaseModel):
1970
2043
  return cls(
1971
2044
  name=model_name,
1972
2045
  provider=LanguageModelProvider.LITELLM,
2046
+ family=ModelFamily.OPENAI,
1973
2047
  version="gpt-5-nano",
1974
2048
  encoder_name=EncoderName.O200K_BASE,
1975
2049
  capabilities=[
@@ -2001,6 +2075,7 @@ class LanguageModelInfo(BaseModel):
2001
2075
  return cls(
2002
2076
  name=model_name,
2003
2077
  provider=LanguageModelProvider.LITELLM,
2078
+ family=ModelFamily.OPENAI,
2004
2079
  version="gpt-5-chat",
2005
2080
  encoder_name=EncoderName.O200K_BASE,
2006
2081
  capabilities=[
@@ -2021,6 +2096,7 @@ class LanguageModelInfo(BaseModel):
2021
2096
  return cls(
2022
2097
  name=model_name,
2023
2098
  provider=LanguageModelProvider.LITELLM,
2099
+ family=ModelFamily.OPENAI,
2024
2100
  version="2025-10-06",
2025
2101
  encoder_name=EncoderName.O200K_BASE,
2026
2102
  capabilities=[
@@ -2047,6 +2123,7 @@ class LanguageModelInfo(BaseModel):
2047
2123
  return cls(
2048
2124
  name=model_name,
2049
2125
  provider=LanguageModelProvider.LITELLM,
2126
+ family=ModelFamily.OPENAI,
2050
2127
  version="2025-11-13",
2051
2128
  encoder_name=EncoderName.O200K_BASE,
2052
2129
  capabilities=[
@@ -2076,6 +2153,7 @@ class LanguageModelInfo(BaseModel):
2076
2153
  return cls(
2077
2154
  name=model_name,
2078
2155
  provider=LanguageModelProvider.LITELLM,
2156
+ family=ModelFamily.OPENAI,
2079
2157
  version="2025-11-13",
2080
2158
  encoder_name=EncoderName.O200K_BASE,
2081
2159
  capabilities=[
@@ -2105,6 +2183,7 @@ class LanguageModelInfo(BaseModel):
2105
2183
  return cls(
2106
2184
  name=model_name,
2107
2185
  provider=LanguageModelProvider.LITELLM,
2186
+ family=ModelFamily.OPENAI,
2108
2187
  version="2025-12-11",
2109
2188
  encoder_name=EncoderName.O200K_BASE,
2110
2189
  capabilities=[
@@ -2140,6 +2219,7 @@ class LanguageModelInfo(BaseModel):
2140
2219
  return cls(
2141
2220
  name=model_name,
2142
2221
  provider=LanguageModelProvider.LITELLM,
2222
+ family=ModelFamily.OPENAI,
2143
2223
  version="2025-12-11",
2144
2224
  encoder_name=EncoderName.O200K_BASE,
2145
2225
  capabilities=[
@@ -2169,6 +2249,7 @@ class LanguageModelInfo(BaseModel):
2169
2249
  return cls(
2170
2250
  name=model_name,
2171
2251
  provider=LanguageModelProvider.LITELLM,
2252
+ family=ModelFamily.OPENAI,
2172
2253
  version="2026-03-05",
2173
2254
  encoder_name=EncoderName.O200K_BASE,
2174
2255
  capabilities=[
@@ -2204,6 +2285,7 @@ class LanguageModelInfo(BaseModel):
2204
2285
  return cls(
2205
2286
  name=model_name,
2206
2287
  provider=LanguageModelProvider.LITELLM,
2288
+ family=ModelFamily.OPENAI,
2207
2289
  version="2026-03-05",
2208
2290
  encoder_name=EncoderName.O200K_BASE,
2209
2291
  capabilities=[
@@ -2233,6 +2315,7 @@ class LanguageModelInfo(BaseModel):
2233
2315
  return cls(
2234
2316
  name=model_name,
2235
2317
  provider=LanguageModelProvider.LITELLM,
2318
+ family=ModelFamily.OPENAI,
2236
2319
  version="2026-04-24",
2237
2320
  encoder_name=EncoderName.O200K_BASE,
2238
2321
  capabilities=[
@@ -2268,6 +2351,7 @@ class LanguageModelInfo(BaseModel):
2268
2351
  return cls(
2269
2352
  name=model_name,
2270
2353
  provider=LanguageModelProvider.LITELLM,
2354
+ family=ModelFamily.OPENAI,
2271
2355
  version="2026-04-24",
2272
2356
  encoder_name=EncoderName.O200K_BASE,
2273
2357
  capabilities=[
@@ -2297,6 +2381,7 @@ class LanguageModelInfo(BaseModel):
2297
2381
  return cls(
2298
2382
  name=model_name,
2299
2383
  provider=LanguageModelProvider.LITELLM,
2384
+ family=ModelFamily.OPENAI,
2300
2385
  version="2024-12-17",
2301
2386
  encoder_name=EncoderName.O200K_BASE,
2302
2387
  capabilities=[
@@ -2322,6 +2407,7 @@ class LanguageModelInfo(BaseModel):
2322
2407
  return cls(
2323
2408
  name=model_name,
2324
2409
  provider=LanguageModelProvider.LITELLM,
2410
+ family=ModelFamily.OPENAI,
2325
2411
  version="2025-04-16",
2326
2412
  encoder_name=EncoderName.O200K_BASE,
2327
2413
  capabilities=[
@@ -2347,6 +2433,7 @@ class LanguageModelInfo(BaseModel):
2347
2433
  return cls(
2348
2434
  name=model_name,
2349
2435
  provider=LanguageModelProvider.LITELLM,
2436
+ family=ModelFamily.OPENAI,
2350
2437
  version="2025-06-26",
2351
2438
  encoder_name=EncoderName.O200K_BASE,
2352
2439
  capabilities=[
@@ -2369,6 +2456,7 @@ class LanguageModelInfo(BaseModel):
2369
2456
  return cls(
2370
2457
  name=model_name,
2371
2458
  provider=LanguageModelProvider.LITELLM,
2459
+ family=ModelFamily.OPENAI,
2372
2460
  version="2025-06-10",
2373
2461
  encoder_name=EncoderName.O200K_BASE,
2374
2462
  capabilities=[
@@ -2387,6 +2475,7 @@ class LanguageModelInfo(BaseModel):
2387
2475
  return cls(
2388
2476
  name=model_name,
2389
2477
  provider=LanguageModelProvider.LITELLM,
2478
+ family=ModelFamily.OPENAI,
2390
2479
  version="2025-04-16",
2391
2480
  encoder_name=EncoderName.O200K_BASE,
2392
2481
  capabilities=[
@@ -2412,6 +2501,7 @@ class LanguageModelInfo(BaseModel):
2412
2501
  return cls(
2413
2502
  name=model_name,
2414
2503
  provider=LanguageModelProvider.LITELLM,
2504
+ family=ModelFamily.OPENAI,
2415
2505
  version="2025-06-26",
2416
2506
  encoder_name=EncoderName.O200K_BASE,
2417
2507
  capabilities=[
@@ -2434,6 +2524,7 @@ class LanguageModelInfo(BaseModel):
2434
2524
  return cls(
2435
2525
  name=model_name,
2436
2526
  provider=LanguageModelProvider.LITELLM,
2527
+ family=ModelFamily.OPENAI,
2437
2528
  version="2025-04-14",
2438
2529
  encoder_name=EncoderName.O200K_BASE,
2439
2530
  published_at=date(2025, 4, 14),
@@ -2455,6 +2546,7 @@ class LanguageModelInfo(BaseModel):
2455
2546
  return cls(
2456
2547
  name=model_name,
2457
2548
  provider=LanguageModelProvider.LITELLM,
2549
+ family=ModelFamily.OPENAI,
2458
2550
  version="2025-04-14",
2459
2551
  encoder_name=EncoderName.O200K_BASE,
2460
2552
  published_at=date(2025, 4, 14),
@@ -2476,6 +2568,7 @@ class LanguageModelInfo(BaseModel):
2476
2568
  return cls(
2477
2569
  name=model_name,
2478
2570
  provider=LanguageModelProvider.LITELLM,
2571
+ family=ModelFamily.DEEPSEEK,
2479
2572
  version="deepseek-r1",
2480
2573
  encoder_name=EncoderName.DEEPSEEK,
2481
2574
  capabilities=[
@@ -2494,6 +2587,7 @@ class LanguageModelInfo(BaseModel):
2494
2587
  return cls(
2495
2588
  name=model_name,
2496
2589
  provider=LanguageModelProvider.LITELLM,
2590
+ family=ModelFamily.DEEPSEEK,
2497
2591
  version="deepseek-v3-1",
2498
2592
  encoder_name=EncoderName.DEEPSEEK,
2499
2593
  capabilities=[
@@ -2511,6 +2605,7 @@ class LanguageModelInfo(BaseModel):
2511
2605
  return cls(
2512
2606
  name=model_name,
2513
2607
  provider=LanguageModelProvider.LITELLM,
2608
+ family=ModelFamily.QWEN,
2514
2609
  version="qwen-3",
2515
2610
  encoder_name=EncoderName.QWEN,
2516
2611
  capabilities=[
@@ -2529,6 +2624,7 @@ class LanguageModelInfo(BaseModel):
2529
2624
  return cls(
2530
2625
  name=model_name,
2531
2626
  provider=LanguageModelProvider.LITELLM,
2627
+ family=ModelFamily.QWEN,
2532
2628
  version="qwen-3-thinking",
2533
2629
  encoder_name=EncoderName.QWEN,
2534
2630
  capabilities=[
@@ -0,0 +1,65 @@
1
+ import os
2
+ import sys
3
+ from enum import StrEnum
4
+ from pathlib import Path
5
+
6
+ from pydantic import Field
7
+ from pydantic_settings import BaseSettings, SettingsConfigDict
8
+
9
+
10
+ class ModelFamily(StrEnum):
11
+ """Model lineage / who built the model.
12
+
13
+ Distinct from ``LanguageModelProvider`` (AZURE / LITELLM / CUSTOM), which
14
+ describes how the model is served. A Claude on Vertex and a Claude on
15
+ Anthropic share the same family but have different providers.
16
+ """
17
+
18
+ OPENAI = "openai"
19
+ ANTHROPIC = "anthropic"
20
+ GOOGLE = "google"
21
+ XAI = "xai"
22
+ DEEPSEEK = "deepseek"
23
+ QWEN = "qwen"
24
+ MISTRAL = "mistral"
25
+ UNKNOWN = "unknown"
26
+
27
+
28
+ class Base(BaseSettings):
29
+ token_limit_multiplier: dict[ModelFamily, float] = Field(
30
+ default={
31
+ ModelFamily.ANTHROPIC: 0.75,
32
+ },
33
+ )
34
+
35
+
36
+ def get_model_config(test: bool = False) -> SettingsConfigDict:
37
+ if test:
38
+ env_file = Path(os.getcwd()) / "tests/test.env"
39
+ else:
40
+ env_file = Path(os.getcwd()) / ".env"
41
+
42
+ return SettingsConfigDict(
43
+ extra="ignore",
44
+ env_prefix="TOOLKIT_LANGUAGE_MODEL_",
45
+ case_sensitive=False,
46
+ env_file=env_file,
47
+ env_file_encoding="utf-8",
48
+ )
49
+
50
+
51
+ class Settings(Base):
52
+ model_config = get_model_config()
53
+
54
+
55
+ class TestSettings(Base):
56
+ model_config = get_model_config(test=True)
57
+
58
+
59
+ def get_settings() -> Base:
60
+ if "pytest" in sys.modules:
61
+ return TestSettings()
62
+ return Settings()
63
+
64
+
65
+ env_settings: Base = get_settings()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-toolkit
3
- Version: 2026.22.0.dev2
3
+ Version: 2026.22.0.dev3
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>
@@ -114,7 +114,8 @@ unique_toolkit/agentic/feature_flags/__init__.py,sha256=LhE2cHoa9AYBOR7TjiIToOn4
114
114
  unique_toolkit/agentic/feature_flags/feature_flags.py,sha256=fYMWDbv6Yjyb52KofGQM97KEkw7mOCzoRa9UHeul4BU,5125
115
115
  unique_toolkit/agentic/history_manager/history_construction_with_contents.py,sha256=yqaG_tqyijgW6DEpfulg1zKtzQLewgWEegWnvZvE4P4,25849
116
116
  unique_toolkit/agentic/history_manager/history_manager.py,sha256=1W9908BoKzBRwxaLx_AVQE4QsMHj4mq3rdeNunTpHfY,15739
117
- unique_toolkit/agentic/history_manager/loop_token_reducer.py,sha256=6AOJvQkz6NhOg33lLtxhHrrEMXqCL5CIBsq0AyI_-dw,26765
117
+ unique_toolkit/agentic/history_manager/loop_token_reducer.py,sha256=egXlsiN6QxoWM3R4DAjsuhSap7RU3DqBJeDGfw9Ndc0,26846
118
+ unique_toolkit/agentic/history_manager/settings.py,sha256=Lrx3a8yXeU0MXrWlV6RZSHsgYWF9Zrs8LyR96OpqQ_k,1216
118
119
  unique_toolkit/agentic/history_manager/utils.py,sha256=hYgaahQq9gKm7V2Q5qnyZtqw5opO-MKH7wTGq9-iEgE,6455
119
120
  unique_toolkit/agentic/loop_runner/__init__.py,sha256=KPZLJ9fCzR9mwnvAgrA_dPsDJlcQS8o0r0amNdmBljY,1352
120
121
  unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py,sha256=et9GRfzgXc50zUJ1ptWTQvZvEWx23fXJHV6JTp2AW14,3673
@@ -366,11 +367,12 @@ unique_toolkit/language_model/builder.py,sha256=KwBzsD6-fvQnB4p2I7M-5Tk6j4tmQ973
366
367
  unique_toolkit/language_model/constants.py,sha256=B-topqW0r83dkC_25DeQfnPk3n53qzIHUCBS7YJ0-1U,119
367
368
  unique_toolkit/language_model/default_language_model.py,sha256=mcyuFs_V6tp52C8xJSHiEHO4kFGj6xed1gvozvCRD7k,1181
368
369
  unique_toolkit/language_model/functions.py,sha256=iTxCpcavUp1kAitJi16SIL33Y442aWKWH4W2qPpLfts,23054
369
- unique_toolkit/language_model/infos.py,sha256=hkww_crEuJtt6slspYb0kJEAbLvPaWCev2lEjagYN2U,124909
370
+ unique_toolkit/language_model/infos.py,sha256=WHhMhFEnysf7g6bX3OfZdJy0TapHROW24vXcrIJ4CIY,128890
370
371
  unique_toolkit/language_model/prompt.py,sha256=JSawaLjQg3VR-E2fK8engFyJnNdk21zaO8pPIodzN4Q,3991
371
372
  unique_toolkit/language_model/reference.py,sha256=T3wr2jP_uRg5wKVIbKqLbxJlcgxfbZQGq3XdjbQ2kSo,6984
372
373
  unique_toolkit/language_model/schemas.py,sha256=JQv3HmQ9WwuxC86QYVAAW0ms-cd1oyp_6rRhAmZEgIQ,29141
373
374
  unique_toolkit/language_model/service.py,sha256=mzHYppmbFxXRHzsmQ4i_z9N4fheIEjomJeuGaEOFs9Y,12025
375
+ unique_toolkit/language_model/settings.py,sha256=xkoMv3ATb2ft5V3MA8JvqW-EO8AnZ5t-6rvdbTx6lFU,1490
374
376
  unique_toolkit/language_model/stream_transform.py,sha256=iNNGpLY_7G6Bpp9Y4KtbIkQm3WB4yZt75BXcqx0DVkI,2775
375
377
  unique_toolkit/language_model/utils.py,sha256=bPQ4l6_YO71w-zaIPanUUmtbXC1_hCvLK0tAFc3VCRc,1902
376
378
  unique_toolkit/monitoring/__init__.py,sha256=z1gkOCLxGcg936MFuLSeWFa0tREcBFSUbV09NxilBw4,1065
@@ -389,6 +391,6 @@ unique_toolkit/short_term_memory/service.py,sha256=Ncw0_0CNM6kmzJSLVJGG5GcKpBduI
389
391
  unique_toolkit/smart_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
390
392
  unique_toolkit/smart_rules/compile.py,sha256=Ozhh70qCn2yOzRWr9d8WmJeTo7AQurwd3tStgBMPFLA,1246
391
393
  unique_toolkit/test_utilities/events.py,sha256=FLrhMh0A_mQutAUjoD0FdMcVQ4Gq31r35OVGzRjvLro,6760
392
- unique_toolkit-2026.22.0.dev2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
393
- unique_toolkit-2026.22.0.dev2.dist-info/METADATA,sha256=9DS-bUXQiWARM-CYKxgXojwInieEhuzFrG85noCy83M,7392
394
- unique_toolkit-2026.22.0.dev2.dist-info/RECORD,,
394
+ unique_toolkit-2026.22.0.dev3.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
395
+ unique_toolkit-2026.22.0.dev3.dist-info/METADATA,sha256=ql-F_dmlVgC4sPIkrVZHlim4r7zkcVkUytxOiIltzew,7392
396
+ unique_toolkit-2026.22.0.dev3.dist-info/RECORD,,