unique_toolkit 0.7.28__py3-none-any.whl → 0.7.30__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.
@@ -131,8 +131,9 @@ class ChatEventPayload(BaseModel):
131
131
  )
132
132
 
133
133
  @field_validator("raw_scope_rules", mode="before")
134
- def validate_scope_rules(cls, value: dict[str, Any]) -> UniqueQL:
135
- return parse_uniqueql(value)
134
+ def validate_scope_rules(cls, value: dict[str, Any] | None) -> UniqueQL | None:
135
+ if value:
136
+ return parse_uniqueql(value)
136
137
 
137
138
 
138
139
  @deprecated("""Use `ChatEventPayload` instead.
@@ -3,7 +3,6 @@ from typing import Optional
3
3
 
4
4
  from typing_extensions import deprecated
5
5
 
6
- from unique_toolkit._common.validate_required_values import validate_required_values
7
6
  from unique_toolkit.app.schemas import ChatEvent, Event
8
7
  from unique_toolkit.chat.constants import (
9
8
  DEFAULT_MAX_MESSAGES,
@@ -71,13 +70,13 @@ class ChatService:
71
70
 
72
71
  def __init__(self, event: ChatEvent | Event):
73
72
  self._event = event
74
- self._company_id = event.company_id
75
- self._user_id = event.user_id
76
- self._assistant_message_id = event.payload.assistant_message.id
77
- self._user_message_id = event.payload.user_message.id
78
- self._chat_id = event.payload.chat_id
79
- self._assistant_id = event.payload.assistant_id
80
- self._user_message_text = event.payload.user_message.text
73
+ self._company_id: str = event.company_id
74
+ self._user_id: str = event.user_id
75
+ self._assistant_message_id: str = event.payload.assistant_message.id
76
+ self._user_message_id: str = event.payload.user_message.id
77
+ self._chat_id: str = event.payload.chat_id
78
+ self._assistant_id: str = event.payload.assistant_id
79
+ self._user_message_text: str = event.payload.user_message.text
81
80
 
82
81
  @property
83
82
  @deprecated(
@@ -96,7 +95,7 @@ class ChatService:
96
95
  @deprecated(
97
96
  "The company_id property is deprecated and will be removed in a future version."
98
97
  )
99
- def company_id(self) -> str | None:
98
+ def company_id(self) -> str:
100
99
  """
101
100
  Get the company identifier (deprecated).
102
101
 
@@ -109,7 +108,7 @@ class ChatService:
109
108
  @deprecated(
110
109
  "The company_id setter is deprecated and will be removed in a future version."
111
110
  )
112
- def company_id(self, value: str | None) -> None:
111
+ def company_id(self, value: str) -> None:
113
112
  """
114
113
  Set the company identifier (deprecated).
115
114
 
@@ -122,7 +121,7 @@ class ChatService:
122
121
  @deprecated(
123
122
  "The user_id property is deprecated and will be removed in a future version."
124
123
  )
125
- def user_id(self) -> str | None:
124
+ def user_id(self) -> str:
126
125
  """
127
126
  Get the user identifier (deprecated).
128
127
 
@@ -135,7 +134,7 @@ class ChatService:
135
134
  @deprecated(
136
135
  "The user_id setter is deprecated and will be removed in a future version."
137
136
  )
138
- def user_id(self, value: str | None) -> None:
137
+ def user_id(self, value: str) -> None:
139
138
  """
140
139
  Set the user identifier (deprecated).
141
140
 
@@ -148,7 +147,7 @@ class ChatService:
148
147
  @deprecated(
149
148
  "The assistant_message_id property is deprecated and will be removed in a future version."
150
149
  )
151
- def assistant_message_id(self) -> str | None:
150
+ def assistant_message_id(self) -> str:
152
151
  """
153
152
  Get the assistant message identifier (deprecated).
154
153
 
@@ -161,7 +160,7 @@ class ChatService:
161
160
  @deprecated(
162
161
  "The assistant_message_id setter is deprecated and will be removed in a future version."
163
162
  )
164
- def assistant_message_id(self, value: str | None) -> None:
163
+ def assistant_message_id(self, value: str) -> None:
165
164
  """
166
165
  Set the assistant message identifier (deprecated).
167
166
 
@@ -174,7 +173,7 @@ class ChatService:
174
173
  @deprecated(
175
174
  "The user_message_id property is deprecated and will be removed in a future version."
176
175
  )
177
- def user_message_id(self) -> str | None:
176
+ def user_message_id(self) -> str:
178
177
  """
179
178
  Get the user message identifier (deprecated).
180
179
 
@@ -187,7 +186,7 @@ class ChatService:
187
186
  @deprecated(
188
187
  "The user_message_id setter is deprecated and will be removed in a future version."
189
188
  )
190
- def user_message_id(self, value: str | None) -> None:
189
+ def user_message_id(self, value: str) -> None:
191
190
  """
192
191
  Set the user message identifier (deprecated).
193
192
 
@@ -200,7 +199,7 @@ class ChatService:
200
199
  @deprecated(
201
200
  "The chat_id property is deprecated and will be removed in a future version."
202
201
  )
203
- def chat_id(self) -> str | None:
202
+ def chat_id(self) -> str:
204
203
  """
205
204
  Get the chat identifier (deprecated).
206
205
 
@@ -213,7 +212,7 @@ class ChatService:
213
212
  @deprecated(
214
213
  "The chat_id setter is deprecated and will be removed in a future version."
215
214
  )
216
- def chat_id(self, value: str | None) -> None:
215
+ def chat_id(self, value: str) -> None:
217
216
  """
218
217
  Set the chat identifier (deprecated).
219
218
 
@@ -226,7 +225,7 @@ class ChatService:
226
225
  @deprecated(
227
226
  "The assistant_id property is deprecated and will be removed in a future version."
228
227
  )
229
- def assistant_id(self) -> str | None:
228
+ def assistant_id(self) -> str:
230
229
  """
231
230
  Get the assistant identifier (deprecated).
232
231
 
@@ -239,7 +238,7 @@ class ChatService:
239
238
  @deprecated(
240
239
  "The assistant_id setter is deprecated and will be removed in a future version."
241
240
  )
242
- def assistant_id(self, value: str | None) -> None:
241
+ def assistant_id(self, value: str) -> None:
243
242
  """
244
243
  Set the assistant identifier (deprecated).
245
244
 
@@ -252,7 +251,7 @@ class ChatService:
252
251
  @deprecated(
253
252
  "The user_message_text property is deprecated and will be removed in a future version."
254
253
  )
255
- def user_message_text(self) -> str | None:
254
+ def user_message_text(self) -> str:
256
255
  """
257
256
  Get the user message text (deprecated).
258
257
 
@@ -265,7 +264,7 @@ class ChatService:
265
264
  @deprecated(
266
265
  "The user_message_text setter is deprecated and will be removed in a future version."
267
266
  )
268
- def user_message_text(self, value: str | None) -> None:
267
+ def user_message_text(self, value: str) -> None:
269
268
  """
270
269
  Set the user message text (deprecated).
271
270
 
@@ -281,30 +280,13 @@ class ChatService:
281
280
  Args:
282
281
  debug_info (dict): The new debug information.
283
282
  """
284
- [
285
- company_id,
286
- user_id,
287
- assistant_message_id,
288
- user_message_id,
289
- chat_id,
290
- user_message_text,
291
- ] = validate_required_values(
292
- [
293
- self._company_id,
294
- self._user_id,
295
- self._assistant_message_id,
296
- self._user_message_id,
297
- self._chat_id,
298
- self._user_message_text,
299
- ]
300
- )
301
283
  return await modify_message_async(
302
- user_id=user_id,
303
- company_id=company_id,
304
- assistant_message_id=assistant_message_id,
305
- chat_id=chat_id,
306
- user_message_id=user_message_id,
307
- user_message_text=user_message_text,
284
+ user_id=self._user_id,
285
+ company_id=self._company_id,
286
+ assistant_message_id=self._assistant_message_id,
287
+ chat_id=self._chat_id,
288
+ user_message_id=self._user_message_id,
289
+ user_message_text=self._user_message_text,
308
290
  assistant=False,
309
291
  debug_info=debug_info,
310
292
  )
@@ -316,31 +298,14 @@ class ChatService:
316
298
  Args:
317
299
  debug_info (dict): The new debug information.
318
300
  """
319
- [
320
- company_id,
321
- user_id,
322
- assistant_message_id,
323
- user_message_id,
324
- chat_id,
325
- user_message_text,
326
- ] = validate_required_values(
327
- [
328
- self._company_id,
329
- self._user_id,
330
- self._assistant_message_id,
331
- self._user_message_id,
332
- self._chat_id,
333
- self._user_message_text,
334
- ]
335
- )
336
301
 
337
302
  return modify_message(
338
- user_id=user_id,
339
- company_id=company_id,
340
- assistant_message_id=assistant_message_id,
341
- chat_id=chat_id,
342
- user_message_id=user_message_id,
343
- user_message_text=user_message_text,
303
+ user_id=self._user_id,
304
+ company_id=self._company_id,
305
+ assistant_message_id=self._assistant_message_id,
306
+ chat_id=self._chat_id,
307
+ user_message_id=self._user_message_id,
308
+ user_message_text=self._user_message_text,
344
309
  assistant=False,
345
310
  debug_info=debug_info,
346
311
  )
@@ -369,31 +334,14 @@ class ChatService:
369
334
  Raises:
370
335
  Exception: If the modification fails.
371
336
  """
372
- [
373
- company_id,
374
- user_id,
375
- assistant_message_id,
376
- user_message_id,
377
- chat_id,
378
- user_message_text,
379
- ] = validate_required_values(
380
- [
381
- self._company_id,
382
- self._user_id,
383
- self._assistant_message_id,
384
- self._user_message_id,
385
- self._chat_id,
386
- self._user_message_text,
387
- ]
388
- )
389
337
 
390
338
  return modify_message(
391
- user_id=user_id,
392
- company_id=company_id,
393
- assistant_message_id=assistant_message_id,
394
- chat_id=chat_id,
395
- user_message_id=user_message_id,
396
- user_message_text=user_message_text,
339
+ user_id=self._user_id,
340
+ company_id=self._company_id,
341
+ assistant_message_id=self._assistant_message_id,
342
+ chat_id=self._chat_id,
343
+ user_message_id=self._user_message_id,
344
+ user_message_text=self._user_message_text,
397
345
  assistant=False,
398
346
  content=content,
399
347
  references=references,
@@ -427,31 +375,13 @@ class ChatService:
427
375
  Exception: If the modification fails.
428
376
  """
429
377
 
430
- [
431
- company_id,
432
- user_id,
433
- assistant_message_id,
434
- user_message_id,
435
- chat_id,
436
- user_message_text,
437
- ] = validate_required_values(
438
- [
439
- self._company_id,
440
- self._user_id,
441
- self._assistant_message_id,
442
- self._user_message_id,
443
- self._chat_id,
444
- self._user_message_text,
445
- ]
446
- )
447
-
448
378
  return await modify_message_async(
449
- user_id=user_id,
450
- company_id=company_id,
451
- assistant_message_id=assistant_message_id,
452
- chat_id=chat_id,
453
- user_message_id=user_message_id,
454
- user_message_text=user_message_text,
379
+ user_id=self._user_id,
380
+ company_id=self._company_id,
381
+ assistant_message_id=self._assistant_message_id,
382
+ chat_id=self._chat_id,
383
+ user_message_id=self._user_message_id,
384
+ user_message_text=self._user_message_text,
455
385
  assistant=False,
456
386
  content=content,
457
387
  references=references,
@@ -486,31 +416,14 @@ class ChatService:
486
416
  Raises:
487
417
  Exception: If the modification fails.
488
418
  """
489
- [
490
- company_id,
491
- user_id,
492
- assistant_message_id,
493
- user_message_id,
494
- chat_id,
495
- user_message_text,
496
- ] = validate_required_values(
497
- [
498
- self._company_id,
499
- self._user_id,
500
- self._assistant_message_id,
501
- self._user_message_id,
502
- self._chat_id,
503
- self._user_message_text,
504
- ]
505
- )
506
419
 
507
420
  return modify_message(
508
- user_id=user_id,
509
- company_id=company_id,
510
- assistant_message_id=assistant_message_id,
511
- chat_id=chat_id,
512
- user_message_id=user_message_id,
513
- user_message_text=user_message_text,
421
+ user_id=self._user_id,
422
+ company_id=self._company_id,
423
+ assistant_message_id=self._assistant_message_id,
424
+ chat_id=self._chat_id,
425
+ user_message_id=self._user_message_id,
426
+ user_message_text=self._user_message_text,
514
427
  assistant=True,
515
428
  content=content,
516
429
  original_content=original_content,
@@ -546,30 +459,14 @@ class ChatService:
546
459
  Raises:
547
460
  Exception: If the modification fails.
548
461
  """
549
- [
550
- company_id,
551
- user_id,
552
- assistant_message_id,
553
- user_message_id,
554
- chat_id,
555
- user_message_text,
556
- ] = validate_required_values(
557
- [
558
- self._company_id,
559
- self._user_id,
560
- self._assistant_message_id,
561
- self._user_message_id,
562
- self._chat_id,
563
- self._user_message_text,
564
- ]
565
- )
462
+
566
463
  return await modify_message_async(
567
- user_id=user_id,
568
- company_id=company_id,
569
- assistant_message_id=assistant_message_id,
570
- chat_id=chat_id,
571
- user_message_id=user_message_id,
572
- user_message_text=user_message_text,
464
+ user_id=self._user_id,
465
+ company_id=self._company_id,
466
+ assistant_message_id=self._assistant_message_id,
467
+ chat_id=self._chat_id,
468
+ user_message_id=self._user_message_id,
469
+ user_message_text=self._user_message_text,
573
470
  assistant=True,
574
471
  content=content,
575
472
  original_content=original_content,
@@ -701,25 +598,12 @@ class ChatService:
701
598
  Raises:
702
599
  Exception: If the creation fails.
703
600
  """
704
- [
705
- company_id,
706
- user_id,
707
- assistant_id,
708
- chat_id,
709
- ] = validate_required_values(
710
- [
711
- self._company_id,
712
- self._user_id,
713
- self._assistant_id,
714
- self._chat_id,
715
- ]
716
- )
717
601
 
718
602
  chat_message = create_message(
719
- user_id=user_id,
720
- company_id=company_id,
721
- chat_id=chat_id,
722
- assistant_id=assistant_id,
603
+ user_id=self._user_id,
604
+ company_id=self._company_id,
605
+ chat_id=self._chat_id,
606
+ assistant_id=self._assistant_id,
723
607
  role=ChatMessageRole.ASSISTANT,
724
608
  content=content,
725
609
  original_content=original_content,
@@ -728,7 +612,7 @@ class ChatService:
728
612
  set_completed_at=set_completed_at,
729
613
  )
730
614
  # Update the assistant message id
731
- self._assistant_message_id = chat_message.id
615
+ self._assistant_message_id = chat_message.id or "unknown"
732
616
  return chat_message
733
617
 
734
618
  async def create_assistant_message_async(
@@ -755,24 +639,12 @@ class ChatService:
755
639
  Raises:
756
640
  Exception: If the creation fails.
757
641
  """
758
- [
759
- company_id,
760
- user_id,
761
- assistant_id,
762
- chat_id,
763
- ] = validate_required_values(
764
- [
765
- self._company_id,
766
- self._user_id,
767
- self._assistant_id,
768
- self._chat_id,
769
- ]
770
- )
642
+
771
643
  chat_message = await create_message_async(
772
- user_id=user_id,
773
- company_id=company_id,
774
- chat_id=chat_id,
775
- assistant_id=assistant_id,
644
+ user_id=self._user_id,
645
+ company_id=self._company_id,
646
+ chat_id=self._chat_id,
647
+ assistant_id=self._assistant_id,
776
648
  role=ChatMessageRole.ASSISTANT,
777
649
  content=content,
778
650
  original_content=original_content,
@@ -781,7 +653,7 @@ class ChatService:
781
653
  set_completed_at=set_completed_at,
782
654
  )
783
655
  # Update the assistant message id
784
- self._assistant_message_id = chat_message.id
656
+ self._assistant_message_id = chat_message.id or "unknown"
785
657
  return chat_message
786
658
 
787
659
  def create_user_message(
@@ -808,24 +680,12 @@ class ChatService:
808
680
  Raises:
809
681
  Exception: If the creation fails.
810
682
  """
811
- [
812
- company_id,
813
- user_id,
814
- assistant_id,
815
- chat_id,
816
- ] = validate_required_values(
817
- [
818
- self._company_id,
819
- self._user_id,
820
- self._assistant_id,
821
- self._chat_id,
822
- ]
823
- )
683
+
824
684
  chat_message = create_message(
825
- user_id=user_id,
826
- company_id=company_id,
827
- chat_id=chat_id,
828
- assistant_id=assistant_id,
685
+ user_id=self._user_id,
686
+ company_id=self._company_id,
687
+ chat_id=self._chat_id,
688
+ assistant_id=self._assistant_id,
829
689
  role=ChatMessageRole.USER,
830
690
  content=content,
831
691
  original_content=original_content,
@@ -834,7 +694,7 @@ class ChatService:
834
694
  set_completed_at=set_completed_at,
835
695
  )
836
696
  # Update the user message id
837
- self._user_message_id = chat_message.id
697
+ self._user_message_id = chat_message.id or "unknown"
838
698
  return chat_message
839
699
 
840
700
  async def create_user_message_async(
@@ -861,24 +721,12 @@ class ChatService:
861
721
  Raises:
862
722
  Exception: If the creation fails.
863
723
  """
864
- [
865
- company_id,
866
- user_id,
867
- assistant_id,
868
- chat_id,
869
- ] = validate_required_values(
870
- [
871
- self._company_id,
872
- self._user_id,
873
- self._assistant_id,
874
- self._chat_id,
875
- ]
876
- )
724
+
877
725
  chat_message = await create_message_async(
878
- user_id=user_id,
879
- company_id=company_id,
880
- chat_id=chat_id,
881
- assistant_id=assistant_id,
726
+ user_id=self._user_id,
727
+ company_id=self._company_id,
728
+ chat_id=self._chat_id,
729
+ assistant_id=self._assistant_id,
882
730
  role=ChatMessageRole.USER,
883
731
  content=content,
884
732
  original_content=original_content,
@@ -887,7 +735,7 @@ class ChatService:
887
735
  set_completed_at=set_completed_at,
888
736
  )
889
737
  # Update the user message id
890
- self._user_message_id = chat_message.id
738
+ self._user_message_id = chat_message.id or "unknown"
891
739
  return chat_message
892
740
 
893
741
  def create_message_assessment(
@@ -918,19 +766,10 @@ class ChatService:
918
766
  Raises:
919
767
  Exception: If the creation fails
920
768
  """
921
- [
922
- company_id,
923
- user_id,
924
- ] = validate_required_values(
925
- [
926
- self._company_id,
927
- self._user_id,
928
- ]
929
- )
930
769
 
931
770
  return create_message_assessment(
932
- user_id=user_id,
933
- company_id=company_id,
771
+ user_id=self._user_id,
772
+ company_id=self._company_id,
934
773
  assistant_message_id=assistant_message_id,
935
774
  status=status,
936
775
  type=type,
@@ -968,19 +807,10 @@ class ChatService:
968
807
  Raises:
969
808
  Exception: If the creation fails
970
809
  """
971
- [
972
- company_id,
973
- user_id,
974
- ] = validate_required_values(
975
- [
976
- self._company_id,
977
- self._user_id,
978
- ]
979
- )
980
810
 
981
811
  return await create_message_assessment_async(
982
- user_id=user_id,
983
- company_id=company_id,
812
+ user_id=self._user_id,
813
+ company_id=self._company_id,
984
814
  assistant_message_id=assistant_message_id,
985
815
  status=status,
986
816
  type=type,
@@ -1016,19 +846,10 @@ class ChatService:
1016
846
  Raises:
1017
847
  Exception: If the modification fails
1018
848
  """
1019
- [
1020
- company_id,
1021
- user_id,
1022
- ] = validate_required_values(
1023
- [
1024
- self._company_id,
1025
- self._user_id,
1026
- ]
1027
- )
1028
849
 
1029
850
  return modify_message_assessment(
1030
- user_id=user_id,
1031
- company_id=company_id,
851
+ user_id=self._user_id,
852
+ company_id=self._company_id,
1032
853
  assistant_message_id=assistant_message_id,
1033
854
  status=status,
1034
855
  type=type,
@@ -1063,19 +884,9 @@ class ChatService:
1063
884
  Raises:
1064
885
  Exception: If the modification fails
1065
886
  """
1066
- [
1067
- company_id,
1068
- user_id,
1069
- ] = validate_required_values(
1070
- [
1071
- self._company_id,
1072
- self._user_id,
1073
- ]
1074
- )
1075
-
1076
887
  return await modify_message_assessment_async(
1077
- user_id=user_id,
1078
- company_id=company_id,
888
+ user_id=self._user_id,
889
+ company_id=self._company_id,
1079
890
  assistant_message_id=assistant_message_id,
1080
891
  status=status,
1081
892
  type=type,
@@ -1124,31 +935,14 @@ class ChatService:
1124
935
  """
1125
936
  Streams a completion in the chat session synchronously.
1126
937
  """
1127
- [
1128
- company_id,
1129
- user_id,
1130
- assistant_message_id,
1131
- user_message_id,
1132
- chat_id,
1133
- assistant_id,
1134
- ] = validate_required_values(
1135
- [
1136
- self._company_id,
1137
- self._user_id,
1138
- self._assistant_message_id,
1139
- self._user_message_id,
1140
- self._chat_id,
1141
- self._assistant_id,
1142
- ]
1143
- )
1144
938
 
1145
939
  return stream_complete_with_references(
1146
- company_id=company_id,
1147
- user_id=user_id,
1148
- assistant_message_id=assistant_message_id,
1149
- user_message_id=user_message_id,
1150
- chat_id=chat_id,
1151
- assistant_id=assistant_id,
940
+ company_id=self._company_id,
941
+ user_id=self._user_id,
942
+ assistant_message_id=self._assistant_message_id,
943
+ user_message_id=self._user_message_id,
944
+ chat_id=self._chat_id,
945
+ assistant_id=self._assistant_id,
1152
946
  messages=messages,
1153
947
  model_name=model_name,
1154
948
  content_chunks=content_chunks,
@@ -1224,31 +1018,13 @@ class ChatService:
1224
1018
  start_text: Optional[str] = None,
1225
1019
  other_options: Optional[dict] = None,
1226
1020
  ) -> LanguageModelStreamResponse:
1227
- [
1228
- company_id,
1229
- user_id,
1230
- assistant_message_id,
1231
- user_message_id,
1232
- chat_id,
1233
- assistant_id,
1234
- ] = validate_required_values(
1235
- [
1236
- self._company_id,
1237
- self._user_id,
1238
- self._assistant_message_id,
1239
- self._user_message_id,
1240
- self._chat_id,
1241
- self._assistant_id,
1242
- ]
1243
- )
1244
-
1245
1021
  return await stream_complete_with_references_async(
1246
- company_id=company_id,
1247
- user_id=user_id,
1248
- assistant_message_id=assistant_message_id,
1249
- user_message_id=user_message_id,
1250
- chat_id=chat_id,
1251
- assistant_id=assistant_id,
1022
+ company_id=self._company_id,
1023
+ user_id=self._user_id,
1024
+ assistant_message_id=self._assistant_message_id,
1025
+ user_message_id=self._user_message_id,
1026
+ chat_id=self._chat_id,
1027
+ assistant_id=self._assistant_id,
1252
1028
  messages=messages,
1253
1029
  model_name=model_name,
1254
1030
  content_chunks=content_chunks,
@@ -54,16 +54,16 @@ class ContentService:
54
54
  self._event = event # Changed to protected attribute
55
55
  self._metadata_filter = None
56
56
  if event:
57
- self._company_id = event.company_id
58
- self._user_id = event.user_id
57
+ self._company_id: str = event.company_id
58
+ self._user_id: str = event.user_id
59
59
  if isinstance(event, (ChatEvent, Event)):
60
60
  self._metadata_filter = event.payload.metadata_filter
61
- self._chat_id = event.payload.chat_id
61
+ self._chat_id: str | None = event.payload.chat_id
62
62
  else:
63
63
  [company_id, user_id] = validate_required_values([company_id, user_id])
64
- self._company_id = company_id
65
- self._user_id = user_id
66
- self._chat_id = chat_id
64
+ self._company_id: str = company_id
65
+ self._user_id: str = user_id
66
+ self._chat_id: str | None = chat_id
67
67
 
68
68
  @property
69
69
  @deprecated(
@@ -95,7 +95,7 @@ class ContentService:
95
95
  @deprecated(
96
96
  "The company_id setter is deprecated and will be removed in a future version."
97
97
  )
98
- def company_id(self, value: str | None) -> None:
98
+ def company_id(self, value: str) -> None:
99
99
  """
100
100
  Set the company identifier (deprecated).
101
101
 
@@ -121,7 +121,7 @@ class ContentService:
121
121
  @deprecated(
122
122
  "The user_id setter is deprecated and will be removed in a future version."
123
123
  )
124
- def user_id(self, value: str | None) -> None:
124
+ def user_id(self, value: str) -> None:
125
125
  """
126
126
  Set the user identifier (deprecated).
127
127
 
@@ -25,12 +25,12 @@ class EmbeddingService(BaseService):
25
25
  ):
26
26
  self._event = event
27
27
  if event:
28
- self._company_id = event.company_id
29
- self._user_id = event.user_id
28
+ self._company_id: str = event.company_id
29
+ self._user_id: str = event.user_id
30
30
  else:
31
31
  [company_id, user_id] = validate_required_values([company_id, user_id])
32
- self._company_id = company_id
33
- self._user_id = user_id
32
+ self._company_id: str = company_id
33
+ self._user_id: str = user_id
34
34
 
35
35
  @property
36
36
  @deprecated(
@@ -62,7 +62,7 @@ class EmbeddingService(BaseService):
62
62
  @deprecated(
63
63
  "The company_id setter is deprecated and will be removed in a future version."
64
64
  )
65
- def company_id(self, value: str | None) -> None:
65
+ def company_id(self, value: str) -> None:
66
66
  """
67
67
  Set the company identifier (deprecated).
68
68
 
@@ -88,7 +88,7 @@ class EmbeddingService(BaseService):
88
88
  @deprecated(
89
89
  "The user_id setter is deprecated and will be removed in a future version."
90
90
  )
91
- def user_id(self, value: str | None) -> None:
91
+ def user_id(self, value: str) -> None:
92
92
  """
93
93
  Set the user identifier (deprecated).
94
94
 
@@ -34,9 +34,13 @@ class LanguageModelName(StrEnum):
34
34
  ANTHROPIC_CLAUDE_SONNET_4 = "litellm:anthropic-claude-sonnet-4"
35
35
  ANTHROPIC_CLAUDE_OPUS_4 = "litellm:anthropic-claude-opus-4"
36
36
  GEMINI_2_0_FLASH = "litellm:gemini-2-0-flash"
37
+ GEMINI_2_5_FLASH = "litellm:gemini-2-5-flash"
38
+ GEMINI_2_5_FLASH_LITE_PREVIEW_0617 = "litellm:gemini-2-5-flash-lite-preview-06-17"
37
39
  GEMINI_2_5_FLASH_PREVIEW_0417 = "litellm:gemini-2-5-flash-preview-04-17"
38
40
  GEMINI_2_5_FLASH_PREVIEW_0520 = "litellm:gemini-2-5-flash-preview-05-20"
41
+ GEMINI_2_5_PRO = "litellm:gemini-2-5-pro"
39
42
  GEMINI_2_5_PRO_EXP_0325 = "litellm:gemini-2-5-pro-exp-03-25"
43
+ GEMINI_2_5_PRO_PREVIEW_0605 = "litellm:gemini-2-5-pro-preview-06-05"
40
44
 
41
45
 
42
46
  class EncoderName(StrEnum):
@@ -506,6 +510,44 @@ class LanguageModelInfo(BaseModel):
506
510
  info_cutoff_at=date(2024, 8, 1),
507
511
  published_at=date(2025, 2, 1),
508
512
  )
513
+ case LanguageModelName.GEMINI_2_5_FLASH:
514
+ return cls(
515
+ name=model_name,
516
+ capabilities=[
517
+ ModelCapabilities.FUNCTION_CALLING,
518
+ ModelCapabilities.STREAMING,
519
+ ModelCapabilities.VISION,
520
+ ModelCapabilities.STRUCTURED_OUTPUT,
521
+ ModelCapabilities.REASONING,
522
+ ],
523
+ provider=LanguageModelProvider.LITELLM,
524
+ version="gemini-2-5-flash",
525
+ encoder_name=EncoderName.O200K_BASE, # TODO:Replace with LLM tokenizer
526
+ token_limits=LanguageModelTokenLimits(
527
+ token_limit_input=1_048_576, token_limit_output=65_536
528
+ ),
529
+ info_cutoff_at=date(2025, 1, day=1),
530
+ published_at=date(2025, 4, 1),
531
+ )
532
+ case LanguageModelName.GEMINI_2_5_FLASH_LITE_PREVIEW_0617:
533
+ return cls(
534
+ name=model_name,
535
+ capabilities=[
536
+ ModelCapabilities.FUNCTION_CALLING,
537
+ ModelCapabilities.STREAMING,
538
+ ModelCapabilities.VISION,
539
+ ModelCapabilities.STRUCTURED_OUTPUT,
540
+ ModelCapabilities.REASONING,
541
+ ],
542
+ provider=LanguageModelProvider.LITELLM,
543
+ version="gemini-2-5-flash-lite-preview-06-17",
544
+ encoder_name=EncoderName.O200K_BASE, # TODO:Replace with LLM tokenizer
545
+ token_limits=LanguageModelTokenLimits(
546
+ token_limit_input=1_000_000, token_limit_output=64_000
547
+ ),
548
+ info_cutoff_at=date(2025, 1, day=1),
549
+ published_at=date(2025, 6, 17),
550
+ )
509
551
  case LanguageModelName.GEMINI_2_5_FLASH_PREVIEW_0417:
510
552
  return cls(
511
553
  name=model_name,
@@ -544,6 +586,25 @@ class LanguageModelInfo(BaseModel):
544
586
  info_cutoff_at=date(2025, 1, day=1),
545
587
  published_at=date(2025, 4, 1),
546
588
  )
589
+ case LanguageModelName.GEMINI_2_5_PRO:
590
+ return cls(
591
+ name=model_name,
592
+ capabilities=[
593
+ ModelCapabilities.FUNCTION_CALLING,
594
+ ModelCapabilities.STREAMING,
595
+ ModelCapabilities.VISION,
596
+ ModelCapabilities.STRUCTURED_OUTPUT,
597
+ ModelCapabilities.REASONING,
598
+ ],
599
+ provider=LanguageModelProvider.LITELLM,
600
+ version="gemini-2-5-pro",
601
+ encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
602
+ token_limits=LanguageModelTokenLimits(
603
+ token_limit_input=1_048_576, token_limit_output=65_536
604
+ ),
605
+ info_cutoff_at=date(2025, 1, day=1),
606
+ published_at=date(2025, 6, 17),
607
+ )
547
608
  case LanguageModelName.GEMINI_2_5_PRO_EXP_0325:
548
609
  return cls(
549
610
  name=model_name,
@@ -563,6 +624,25 @@ class LanguageModelInfo(BaseModel):
563
624
  info_cutoff_at=date(2025, 1, day=1),
564
625
  published_at=date(2025, 3, 1),
565
626
  )
627
+ case LanguageModelName.GEMINI_2_5_PRO_PREVIEW_0605:
628
+ return cls(
629
+ name=model_name,
630
+ capabilities=[
631
+ ModelCapabilities.FUNCTION_CALLING,
632
+ ModelCapabilities.STREAMING,
633
+ ModelCapabilities.VISION,
634
+ ModelCapabilities.STRUCTURED_OUTPUT,
635
+ ModelCapabilities.REASONING,
636
+ ],
637
+ provider=LanguageModelProvider.LITELLM,
638
+ version="gemini-2-5-pro-preview-06-05",
639
+ encoder_name=EncoderName.O200K_BASE, # TODO: Update encoder with litellm
640
+ token_limits=LanguageModelTokenLimits(
641
+ token_limit_input=1_048_576, token_limit_output=65_536
642
+ ),
643
+ info_cutoff_at=date(2025, 1, day=1),
644
+ published_at=date(2025, 6, 5),
645
+ )
566
646
  case _:
567
647
  if isinstance(model_name, LanguageModelName):
568
648
  raise ValueError(
@@ -50,10 +50,8 @@ class LanguageModelService:
50
50
  assistant_id: str | None = None,
51
51
  ):
52
52
  self._event = event
53
- self._company_id = company_id
54
- self._user_id = user_id
55
- self._chat_id = chat_id
56
- self._assistant_id = assistant_id
53
+ self._chat_id: str | None = chat_id
54
+ self._assistant_id: str | None = assistant_id
57
55
 
58
56
  if event:
59
57
  self._company_id = event.company_id
@@ -61,6 +59,10 @@ class LanguageModelService:
61
59
  if isinstance(event, (ChatEvent, Event)):
62
60
  self._chat_id = event.payload.chat_id
63
61
  self._assistant_id = event.payload.assistant_id
62
+ else:
63
+ [company_id, user_id] = validate_required_values([company_id, user_id])
64
+ self._company_id: str = company_id
65
+ self._user_id: str = user_id
64
66
 
65
67
  @property
66
68
  @deprecated(
@@ -92,7 +94,7 @@ class LanguageModelService:
92
94
  @deprecated(
93
95
  "The company_id setter is deprecated and will be removed in a future version."
94
96
  )
95
- def company_id(self, value: str | None) -> None:
97
+ def company_id(self, value: str) -> None:
96
98
  """
97
99
  Set the company identifier (deprecated).
98
100
 
@@ -118,7 +120,7 @@ class LanguageModelService:
118
120
  @deprecated(
119
121
  "The user_id setter is deprecated and will be removed in a future version."
120
122
  )
121
- def user_id(self, value: str | None) -> None:
123
+ def user_id(self, value: str) -> None:
122
124
  """
123
125
  Set the user identifier (deprecated).
124
126
 
@@ -193,10 +195,9 @@ class LanguageModelService:
193
195
  """
194
196
  Calls the completion endpoint synchronously without streaming the response.
195
197
  """
196
- [company_id] = validate_required_values([self._company_id])
197
198
 
198
199
  return complete(
199
- company_id=company_id,
200
+ company_id=self._company_id,
200
201
  messages=messages,
201
202
  model_name=model_name,
202
203
  temperature=temperature,
@@ -221,10 +222,9 @@ class LanguageModelService:
221
222
  """
222
223
  Calls the completion endpoint asynchronously without streaming the response.
223
224
  """
224
- [company_id] = validate_required_values([self._company_id])
225
225
 
226
226
  return await complete_async(
227
- company_id=company_id,
227
+ company_id=self._company_id,
228
228
  messages=messages,
229
229
  model_name=model_name,
230
230
  temperature=temperature,
@@ -277,10 +277,8 @@ class LanguageModelService:
277
277
  start_text: str | None = None,
278
278
  other_options: dict[str, Any] | None = None,
279
279
  ) -> LanguageModelStreamResponse:
280
- [company_id] = validate_required_values([self._company_id])
281
-
282
280
  return complete_with_references(
283
- company_id=company_id,
281
+ company_id=self._company_id,
284
282
  messages=messages,
285
283
  model_name=model_name,
286
284
  content_chunks=content_chunks,
@@ -303,10 +301,8 @@ class LanguageModelService:
303
301
  start_text: str | None = None,
304
302
  other_options: dict[str, Any] | None = None,
305
303
  ) -> LanguageModelStreamResponse:
306
- [company_id] = validate_required_values([self._company_id])
307
-
308
304
  return await complete_with_references_async(
309
- company_id=company_id,
305
+ company_id=self._company_id,
310
306
  messages=messages,
311
307
  model_name=model_name,
312
308
  content_chunks=content_chunks,
@@ -34,8 +34,8 @@ class ShortTermMemoryService:
34
34
  ):
35
35
  self._event = event
36
36
  if event:
37
- self._company_id = event.company_id
38
- self._user_id = event.user_id
37
+ self._company_id: str = event.company_id
38
+ self._user_id: str = event.user_id
39
39
  if isinstance(event, (ChatEvent, Event)):
40
40
  self._chat_id = event.payload.chat_id
41
41
  self._message_id = event.payload.user_message.id
@@ -44,10 +44,11 @@ class ShortTermMemoryService:
44
44
  assert (
45
45
  chat_id or message_id
46
46
  ), "Either chat_id or message_id must be provided"
47
- self._company_id = company_id
48
- self._user_id = user_id
49
- self._chat_id = chat_id
50
- self._message_id = message_id
47
+
48
+ self._company_id: str = company_id
49
+ self._user_id: str = user_id
50
+ self._chat_id: str | None = chat_id
51
+ self._message_id: str | None = message_id
51
52
 
52
53
  @property
53
54
  @deprecated(
@@ -79,7 +80,7 @@ class ShortTermMemoryService:
79
80
  @deprecated(
80
81
  "The company_id setter is deprecated and will be removed in a future version."
81
82
  )
82
- def company_id(self, value: str | None) -> None:
83
+ def company_id(self, value: str) -> None:
83
84
  """
84
85
  Set the company identifier (deprecated).
85
86
 
@@ -105,7 +106,7 @@ class ShortTermMemoryService:
105
106
  @deprecated(
106
107
  "The user_id setter is deprecated and will be removed in a future version."
107
108
  )
108
- def user_id(self, value: str | None) -> None:
109
+ def user_id(self, value: str) -> None:
109
110
  """
110
111
  Set the user identifier (deprecated).
111
112
 
@@ -26,7 +26,7 @@ class Operator(str, Enum):
26
26
 
27
27
 
28
28
  class BaseStatement(BaseModel):
29
- model_config: ConfigDict = {"serialize_by_alias": True}
29
+ model_config = ConfigDict(serialize_by_alias=True)
30
30
 
31
31
  def with_variables(
32
32
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_toolkit
3
- Version: 0.7.28
3
+ Version: 0.7.30
4
4
  Summary:
5
5
  License: Proprietary
6
6
  Author: Martin Fadler
@@ -17,7 +17,7 @@ Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
17
17
  Requires-Dist: regex (>=2024.5.15,<2025.0.0)
18
18
  Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
19
19
  Requires-Dist: typing-extensions (>=4.9.0,<5.0.0)
20
- Requires-Dist: unique-sdk (>=0.9.31,<0.10.0)
20
+ Requires-Dist: unique-sdk (>=0.9.33,<0.10.0)
21
21
  Description-Content-Type: text/markdown
22
22
 
23
23
  # Unique Toolkit
@@ -111,6 +111,13 @@ All notable changes to this project will be documented in this file.
111
111
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
112
112
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
113
113
 
114
+ ## [0.7.30] - 2025-06-20
115
+ - Adding litellm models `litellm:gemini-2-5-flash`, `gemini-2-5-flash-lite-preview-06-17`, `litellm:gemini-2-5-pro`, `litellm:gemini-2-5-pro-preview-06-05`
116
+
117
+ ## [0.7.29] - 2025-06-19
118
+ - Fix typehintin in services
119
+ - Error on invalid initialization
120
+
114
121
  ## [0.7.28] - 2025-06-17
115
122
  - Revert default factory change on `ChatEventPayload` for attribute `metadata_filter` due to error in `backend-ingestion` on empty dict
116
123
 
@@ -118,7 +125,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
118
125
  - Introduce a protocol for `complete_with_references` to enable testable services
119
126
  - Rename/Create functions `stream_complete` in chat service and llm service accordingly
120
127
 
121
-
122
128
  ## [0.7.26] - 2025-06-05
123
129
  - Add `scope_rules` to `ChatEventPayload`
124
130
  - Added `UniqueQL` compiler and pydantic classes for `UniqueQL`. Note this is functionally equivalent but not identical to `UQLOperator` or `UQLCombinator` in `unique_sdk`.
@@ -9,26 +9,26 @@ unique_toolkit/app/init_logging.py,sha256=Sh26SRxOj8i8dzobKhYha2lLrkrMTHfB1V4jR3
9
9
  unique_toolkit/app/init_sdk.py,sha256=Nv4Now4pMfM0AgRhbtatLpm_39rKxn0WmRLwmPhRl-8,1285
10
10
  unique_toolkit/app/performance/async_tasks.py,sha256=H0l3OAcosLwNHZ8d2pd-Di4wHIXfclEvagi5kfqLFPA,1941
11
11
  unique_toolkit/app/performance/async_wrapper.py,sha256=yVVcRDkcdyfjsxro-N29SBvi-7773wnfDplef6-y8xw,1077
12
- unique_toolkit/app/schemas.py,sha256=2IeOGnjMc9M_3u4ZvPWegMmQVWlW_teTbNFxjjJA_E4,5008
12
+ unique_toolkit/app/schemas.py,sha256=f1WHnEqSMX2C_c9vtOOVNSdlSH--jK22GDbtRAKPVjc,5044
13
13
  unique_toolkit/app/verification.py,sha256=GxFFwcJMy25fCA_Xe89wKW7bgqOu8PAs5y8QpHF0GSc,3861
14
14
  unique_toolkit/chat/__init__.py,sha256=LRs2G-JTVuci4lbtHTkVUiNcZcSR6uqqfnAyo7af6nY,619
15
15
  unique_toolkit/chat/constants.py,sha256=05kq6zjqUVB2d6_P7s-90nbljpB3ryxwCI-CAz0r2O4,83
16
16
  unique_toolkit/chat/functions.py,sha256=QsJVhBXgK6jDWRYpEAt-22jy5NKGsYs4fmHrOEdHAyc,29865
17
17
  unique_toolkit/chat/schemas.py,sha256=ct3BbvdQmpcNeDmJdc-Iz33LX1_3O-SGVgrsuT0B99k,2881
18
- unique_toolkit/chat/service.py,sha256=jAgInqq7wU-erezl-BOS9BQ3DOR1nrbVFlMfACn26XI,42827
18
+ unique_toolkit/chat/service.py,sha256=dRydaABJspU1KlFUQ_Q-rXl9lDkhgeh99SxAguY4s_M,37432
19
19
  unique_toolkit/chat/state.py,sha256=Cjgwv_2vhDFbV69xxsn7SefhaoIAEqLx3ferdVFCnOg,1445
20
20
  unique_toolkit/chat/utils.py,sha256=ihm-wQykBWhB4liR3LnwPVPt_qGW6ETq21Mw4HY0THE,854
21
21
  unique_toolkit/content/__init__.py,sha256=EdJg_A_7loEtCQf4cah3QARQreJx6pdz89Rm96YbMVg,940
22
22
  unique_toolkit/content/constants.py,sha256=1iy4Y67xobl5VTnJB6SxSyuoBWbdLl9244xfVMUZi5o,60
23
23
  unique_toolkit/content/functions.py,sha256=0ELepm3_sl0SD_SYzvQVQ-jTdrcUqK5mVJZv0nQBuAw,18367
24
24
  unique_toolkit/content/schemas.py,sha256=iednldGojmoy9iPZwuIW23BfhWLE9G-fG_qAhxSgr7k,2451
25
- unique_toolkit/content/service.py,sha256=i7Cf6eQUwBjJntzBfQUvO8JiIjGsNLnsSl9FAwij8xw,19461
25
+ unique_toolkit/content/service.py,sha256=jGRTIt0JQKL6qRyZ9-_njWJejKKvIvDOzEQrf8CdMaU,19491
26
26
  unique_toolkit/content/utils.py,sha256=GUVPrkZfMoAj4MRoBs5BD_7vSuLZTZx69hyWzYFrI50,7747
27
27
  unique_toolkit/embedding/__init__.py,sha256=uUyzjonPvuDCYsvXCIt7ErQXopLggpzX-MEQd3_e2kE,250
28
28
  unique_toolkit/embedding/constants.py,sha256=Lj8-Lcy1FvuC31PM9Exq7vaFuxQV4pEI1huUMFX-J2M,52
29
29
  unique_toolkit/embedding/functions.py,sha256=3qp-BfuMAbnp8YB04rh3xH8vsJuCBPizoy-JeaBFtoQ,1944
30
30
  unique_toolkit/embedding/schemas.py,sha256=1GvKCaSk4jixzVQ2PKq8yDqwGEVY_hWclYtoAr6CC2g,96
31
- unique_toolkit/embedding/service.py,sha256=ptwNNe2ji7FGqAb5VayedrB9T5b1T00XABwYtgvlGO8,4076
31
+ unique_toolkit/embedding/service.py,sha256=xdR28rqxCicXN9qGPm0oaw88NAbRXJNIBwTZSARLn2g,4082
32
32
  unique_toolkit/embedding/utils.py,sha256=v86lo__bCJbxZBQ3OcLu5SuwT6NbFfWlcq8iyk6BuzQ,279
33
33
  unique_toolkit/evaluators/__init__.py,sha256=3Rfpnowm7MUXHWmeU4UV4s_3Hk-sw3V20oBwQCYlejQ,50
34
34
  unique_toolkit/evaluators/config.py,sha256=_DIXToJ-hGNpDAdWa7Q6GMjAsxiC_DquLF-SS5s9rTE,717
@@ -48,21 +48,21 @@ unique_toolkit/language_model/__init__.py,sha256=lRQyLlbwHbNFf4-0foBU13UGb09lwEe
48
48
  unique_toolkit/language_model/builder.py,sha256=69WCcmkm2rMP2-YEH_EjHiEp6OzwjwCs8VbhjVJaCe0,3168
49
49
  unique_toolkit/language_model/constants.py,sha256=B-topqW0r83dkC_25DeQfnPk3n53qzIHUCBS7YJ0-1U,119
50
50
  unique_toolkit/language_model/functions.py,sha256=J54mzKs-uOBejpiMDa1YviKvJDcYl0gvEF1CfLb7_S4,12208
51
- unique_toolkit/language_model/infos.py,sha256=peJ4cSJC__jGLWZoOZGRhoersmkwFmclsXTZi-KqYXc,30723
51
+ unique_toolkit/language_model/infos.py,sha256=w5__BVG-IiiEYKG1FwM838wzqNbYI3eCCEDocKezc0I,34801
52
52
  unique_toolkit/language_model/prompt.py,sha256=JSawaLjQg3VR-E2fK8engFyJnNdk21zaO8pPIodzN4Q,3991
53
53
  unique_toolkit/language_model/reference.py,sha256=TrRfnxd-cjpdijmZ1dKII87aEACIbW7iU_cE9gtGuH4,8314
54
54
  unique_toolkit/language_model/schemas.py,sha256=DJD2aoMfs2Irnc4rzOrVuV4Fbt84LQAiDGG5rse1dgk,12770
55
- unique_toolkit/language_model/service.py,sha256=PJ0vOGPxzqsQXTQma8blLT4DfGP4gVZVcX2v1GVYozI,10610
55
+ unique_toolkit/language_model/service.py,sha256=VRkUk2XbijqGlnTTvqU7uCue6qtT7lpLd_Y8f3bWv1I,10486
56
56
  unique_toolkit/language_model/utils.py,sha256=bPQ4l6_YO71w-zaIPanUUmtbXC1_hCvLK0tAFc3VCRc,1902
57
57
  unique_toolkit/protocols/support.py,sha256=V15WEIFKVMyF1QCnR8vIi4GrJy4dfTCB6d6JlqPZ58o,2341
58
58
  unique_toolkit/short_term_memory/__init__.py,sha256=2mI3AUrffgH7Yt-xS57EGqnHf7jnn6xquoKEhJqk3Wg,185
59
59
  unique_toolkit/short_term_memory/constants.py,sha256=698CL6-wjup2MvU19RxSmQk3gX7aqW_OOpZB7sbz_Xg,34
60
60
  unique_toolkit/short_term_memory/functions.py,sha256=3WiK-xatY5nh4Dr5zlDUye1k3E6kr41RiscwtTplw5k,4484
61
61
  unique_toolkit/short_term_memory/schemas.py,sha256=OhfcXyF6ACdwIXW45sKzjtZX_gkcJs8FEZXcgQTNenw,1406
62
- unique_toolkit/short_term_memory/service.py,sha256=vEKFxP1SScPrFniso492fVthWR1sosdFibhiNF3zRvI,8081
62
+ unique_toolkit/short_term_memory/service.py,sha256=cqpXA0nMbi4PhFweg-Cql3u0RvaTi5c8Xjv0uHMiSGc,8112
63
63
  unique_toolkit/smart_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- unique_toolkit/smart_rules/compile.py,sha256=44qDrrKD-bKCjjyUep9qa1IwNkneXoQezfFoVm1QToM,9558
65
- unique_toolkit-0.7.28.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
66
- unique_toolkit-0.7.28.dist-info/METADATA,sha256=CR6v3EWcXcTcDcL05cVP7LjRk9wE1Bwe6qPii5sKFjc,24161
67
- unique_toolkit-0.7.28.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
- unique_toolkit-0.7.28.dist-info/RECORD,,
64
+ unique_toolkit/smart_rules/compile.py,sha256=cxWjb2dxEI2HGsakKdVCkSNi7VK9mr08w5sDcFCQyWI,9553
65
+ unique_toolkit-0.7.30.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
66
+ unique_toolkit-0.7.30.dist-info/METADATA,sha256=GC9KCCAiwU1l1IvyhGM-U9qqRsW_9I47tdNSVGhu5dE,24431
67
+ unique_toolkit-0.7.30.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
+ unique_toolkit-0.7.30.dist-info/RECORD,,