feat: add chunking endpoints (#353)

Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>
This commit is contained in:
Michele Dolfi
2025-09-09 08:38:54 +02:00
committed by GitHub
parent a4fed2d965
commit 9d6def0ec8
9 changed files with 910 additions and 310 deletions

View File

@@ -29,10 +29,15 @@ def is_pydantic_model(type_):
# Adapted from
# https://github.com/fastapi/fastapi/discussions/8971#discussioncomment-7892972
def FormDepends(cls: type[BaseModel]):
def FormDepends(
cls: type[BaseModel], prefix: str = "", excluded_fields: list[str] = []
):
new_parameters = []
for field_name, model_field in cls.model_fields.items():
if field_name in excluded_fields:
continue
annotation = model_field.annotation
description = model_field.description
default = (
@@ -63,7 +68,7 @@ def FormDepends(cls: type[BaseModel]):
new_parameters.append(
inspect.Parameter(
name=field_name,
name=f"{prefix}{field_name}",
kind=inspect.Parameter.POSITIONAL_ONLY,
default=default,
annotation=annotation,
@@ -71,19 +76,23 @@ def FormDepends(cls: type[BaseModel]):
)
async def as_form_func(**data):
newdata = {}
for field_name, model_field in cls.model_fields.items():
value = data.get(field_name)
if field_name in excluded_fields:
continue
value = data.get(f"{prefix}{field_name}")
newdata[field_name] = value
annotation = model_field.annotation
# Parse nested models from JSON string
if value is not None and is_pydantic_model(annotation):
try:
validator = TypeAdapter(annotation)
data[field_name] = validator.validate_json(value)
newdata[field_name] = validator.validate_json(value)
except Exception as e:
raise ValueError(f"Invalid JSON for field '{field_name}': {e}")
return cls(**data)
return cls(**newdata)
sig = inspect.signature(as_form_func)
sig = sig.replace(parameters=new_parameters)