v1.10.0
✨ New Features
File Response Support
You can now build cleaner APIs that return images, PDFs, audio, or any binary content directly — no Base64 encoding or JSON wrapping needed. Just return a FastAPI Response object (e.g. FileResponse, StreamingResponse) from run_api and Hayhooks will serve it straight to the client with the correct Content-Type.
from fastapi.responses import FileResponse
from hayhooks import BasePipelineWrapper
class PipelineWrapper(BasePipelineWrapper):
def setup(self) -> None:
pass
def run_api(self, prompt: str) -> FileResponse:
image_path = generate_image(prompt)
return FileResponse(path=image_path, media_type="image/png", filename="result.png")OpenAPI docs are also automatically updated to reflect the correct response type for these endpoints.
See the File Response Support docs and the Image Generation example for full details.
🏗️ Internal Improvements
Unified Pipeline Deployment Architecture
YAML pipeline handling has been refactored to use the same PipelineWrapper architecture as wrapper-based pipelines. A new internal YAMLPipelineWrapper class now wraps YAML pipelines so both deployment paths share the same code — simplifying the codebase, reducing duplication, and making future improvements easier to implement consistently.
📚 Documentation
- Added File Response Support feature documentation
- Updated the PipelineWrapper docs with file response and
response_classsections - Added an Image Generation example showing how to return images from
run_api
🎨 Other Changes
- Removed the project triaging GitHub Actions workflow
What's Changed
- chore: remove project workflow for triaging by @julian-risch in #213
- Internals refactoring for unify pipeline deployment architecture by @mpangrazzi in #214
- Better handling of Response subclasses by @mpangrazzi in #215
Full Changelog: v1.9.0...v1.10.0