diff --git a/skyvern/forge/sdk/routes/agent_protocol.py b/skyvern/forge/sdk/routes/agent_protocol.py index 971d6a65..9c3aa402 100644 --- a/skyvern/forge/sdk/routes/agent_protocol.py +++ b/skyvern/forge/sdk/routes/agent_protocol.py @@ -112,6 +112,7 @@ from skyvern.schemas.runs import ( RunType, TaskRunRequest, TaskRunResponse, + UploadFileResponse, WorkflowRunRequest, WorkflowRunResponse, ) @@ -2615,6 +2616,7 @@ async def get_api_keys( "x-fern-sdk-method-name": "upload_file", }, include_in_schema=True, + response_model=UploadFileResponse, ) @base_router.post("/upload_file/", include_in_schema=False) @legacy_base_router.post("/upload_file", include_in_schema=False) @@ -2622,18 +2624,14 @@ async def get_api_keys( async def upload_file( file: UploadFile = Depends(_validate_file_size), current_org: Organization = Depends(org_auth_service.get_current_org), -) -> Response: +) -> UploadFileResponse: uris = await app.STORAGE.save_legacy_file( organization_id=current_org.organization_id, filename=file.filename, fileObj=file.file ) if not uris: raise HTTPException(status_code=500, detail="Failed to upload file to S3.") presigned_url, uploaded_s3_uri = uris - return ORJSONResponse( - content={"s3_uri": uploaded_s3_uri, "presigned_url": presigned_url}, - status_code=200, - media_type="application/json", - ) + return UploadFileResponse(s3_uri=uploaded_s3_uri, presigned_url=presigned_url) @legacy_v2_router.post( diff --git a/skyvern/schemas/runs.py b/skyvern/schemas/runs.py index ae3e6594..61a65388 100644 --- a/skyvern/schemas/runs.py +++ b/skyvern/schemas/runs.py @@ -542,6 +542,11 @@ class ScriptRunResponse(BaseModel): ai_fallback_triggered: bool = False +class UploadFileResponse(BaseModel): + s3_uri: str = Field(description="S3 URI where the file was uploaded") + presigned_url: str = Field(description="Presigned URL to access the uploaded file") + + class BaseRunResponse(BaseModel): run_id: str = Field( description="Unique identifier for this run. Run ID starts with `tsk_` for task runs and `wr_` for workflow runs.",