Add Form() annotations and fix OpenAPI generation for multipart params

- Add Form() annotations to purpose and expires_after parameters in file upload endpoints
- Add support for optional multipart form parameters in OpenAPI generator
- Generated spec now properly mirrors OpenAI format with schema refs
This commit is contained in:
Ashwin Bharambe 2025-09-29 20:14:39 -07:00
parent 8288122146
commit f676c48a97
8 changed files with 705 additions and 362 deletions

View file

@ -7,7 +7,7 @@
from enum import StrEnum
from typing import Annotated, ClassVar, Literal, Protocol, runtime_checkable
from fastapi import File, Response, UploadFile
from fastapi import File, Form, Response, UploadFile
from pydantic import BaseModel, Field
from llama_stack.apis.common.responses import Order
@ -110,9 +110,8 @@ class Files(Protocol):
async def openai_upload_file(
self,
file: Annotated[UploadFile, File()],
purpose: OpenAIFilePurpose,
expires_after: ExpiresAfter | None = None,
# TODO: expires_after is producing strange openapi spec, params are showing up as a required w/ oneOf being null
purpose: Annotated[OpenAIFilePurpose, Form()],
expires_after: Annotated[ExpiresAfter | None, Form()] = None,
) -> OpenAIFileObject:
"""
Upload a file that can be used across various endpoints.