11from __future__ import annotations
22
3+ from collections .abc import Sequence
34from typing import Generic , Literal , Optional , overload
45
6+ from pydantic import BaseModel , ConfigDict
57from typing_extensions import TypeVar
68
79from pangea .config import PangeaConfig
1921PiiEntityAction = Literal ["disabled" , "report" , "block" , "mask" , "partial_masking" , "replacement" , "hash" , "fpe" ]
2022
2123
24+ class Message (BaseModel ):
25+ model_config = ConfigDict (extra = "forbid" )
26+
27+ role : str
28+ content : str
29+
30+
2231class CodeDetectionOverride (APIRequestModel ):
2332 disabled : Optional [bool ] = None
2433 action : Optional [Literal ["report" , "block" ]] = None
@@ -276,14 +285,14 @@ class TextGuardDetectors(APIResponseModel):
276285 code_detection : Optional [TextGuardDetector [CodeDetectionResult ]] = None
277286
278287
279- class TextGuardResult (PangeaResponseResult , Generic [ _T ] ):
288+ class TextGuardResult (PangeaResponseResult ):
280289 detectors : TextGuardDetectors
281290 """Result of the recipe analyzing and input prompt."""
282291
283292 prompt_text : Optional [str ] = None
284293 """Updated prompt text, if applicable."""
285294
286- prompt_messages : Optional [_T ] = None
295+ prompt_messages : Optional [object ] = None
287296 """Updated structured prompt, if applicable."""
288297
289298 blocked : bool
@@ -347,7 +356,7 @@ def guard_text(
347356 debug : bool | None = None ,
348357 overrides : Overrides | None = None ,
349358 log_fields : LogFields | None = None ,
350- ) -> PangeaResponse [TextGuardResult [ None ] ]:
359+ ) -> PangeaResponse [TextGuardResult ]:
351360 """
352361 Text Guard for scanning LLM inputs and outputs
353362
@@ -375,12 +384,12 @@ def guard_text(
375384 def guard_text (
376385 self ,
377386 * ,
378- messages : _T ,
387+ messages : Sequence [ Message ] ,
379388 recipe : str | None = None ,
380389 debug : bool | None = None ,
381390 overrides : Overrides | None = None ,
382391 log_fields : LogFields | None = None ,
383- ) -> PangeaResponse [TextGuardResult [ _T ] ]:
392+ ) -> PangeaResponse [TextGuardResult ]:
384393 """
385394 Text Guard for scanning LLM inputs and outputs
386395
@@ -402,19 +411,19 @@ def guard_text(
402411 log_field: Additional fields to include in activity log
403412
404413 Examples:
405- response = ai_guard.guard_text(messages=[{" role": " user", " content": " hello world"} ])
414+ response = ai_guard.guard_text(messages=[Message( role=" user", content=" hello world") ])
406415 """
407416
408- def guard_text ( # type: ignore[misc]
417+ def guard_text (
409418 self ,
410419 text : str | None = None ,
411420 * ,
412- messages : _T | None = None ,
421+ messages : Sequence [ Message ] | None = None ,
413422 recipe : str | None = None ,
414423 debug : bool | None = None ,
415424 overrides : Overrides | None = None ,
416425 log_fields : LogFields | None = None ,
417- ) -> PangeaResponse [TextGuardResult [ None ] ]:
426+ ) -> PangeaResponse [TextGuardResult ]:
418427 """
419428 Text Guard for scanning LLM inputs and outputs
420429
0 commit comments