diff --git a/llama_stack/strong_typing/inspection.py b/llama_stack/strong_typing/inspection.py index c786793a2..42713e371 100644 --- a/llama_stack/strong_typing/inspection.py +++ b/llama_stack/strong_typing/inspection.py @@ -570,15 +570,17 @@ def get_class_properties(typ: type) -> Iterable[Tuple[str, type | str]]: elif hasattr(typ, "model_fields"): # Pydantic BaseModel - use model_fields to exclude ClassVar and other non-field attributes # Reconstruct Annotated type if discriminator exists to preserve metadata - from typing import Annotated + from typing import Annotated, Any, cast from pydantic.fields import FieldInfo - def get_field_type(name: str, field) -> type | str: + def get_field_type(name: str, field: Any) -> type | str: # If field has discriminator, wrap in Annotated to preserve it for schema generation if field.discriminator: field_info = FieldInfo(annotation=None, discriminator=field.discriminator) - return Annotated[field.annotation, field_info] - return field.annotation + # Annotated returns _AnnotatedAlias which isn't a type but is valid here + return Annotated[field.annotation, field_info] # type: ignore[return-value] + # field.annotation can be Union types, Annotated, etc. which aren't type but are valid + return field.annotation # type: ignore[return-value,no-any-return] return ((name, get_field_type(name, field)) for name, field in typ.model_fields.items()) else: diff --git a/llama_stack/strong_typing/schema.py b/llama_stack/strong_typing/schema.py index 1a162c01e..2bfb7033e 100644 --- a/llama_stack/strong_typing/schema.py +++ b/llama_stack/strong_typing/schema.py @@ -92,7 +92,7 @@ def get_class_property_docstrings( :returns: A dictionary mapping property names to descriptions. """ - result = {} + result: Dict[str, str] = {} # Only try to get MRO if data_type is actually a class # Special types like Literal, Union, etc. don't have MRO if not inspect.isclass(data_type):