- Fixed the
README.mdlink to the documentation
- Enhanced
Stuff.content_as()method with improved type validation logic - now attempts model validation whenisinstancecheck fails
- New
dry-run-pipecli command to dry run a single pipe by its code - New
show-pipecli command to display pipe definitions from the pipe library - New
dry_run_single_pipe()function for running individual pipe dry runs
- Updated
init-librariescommand to accept a directory argument and createpipelex_librariesfolder in specified location - Updated
validatecommand to use-cflag for the config folder path
- Can execute pipelines with
input_memory: It is aCompactMemory: Dict[str, Dict[str, Any]]
- Enhanced
Pipelex.make()method: Complete overhaul of the initialization method with new path configuration options and robust validation:- Added
relative_config_folder_pathandabsolute_config_folder_pathparameters for flexible config folder specification - The
from_fileparameter controls path resolution: ifTrue(default), relative paths are resolved relative to the caller's file location; ifFalse, relative to the current working directory (useful for CLI scenarios)
- Added
- Renamed Makefile targets like
make doctomake docsfor consistency
- Added github action for inference tests
load_json_list_from_pathfunction inpipelex.tools.misc.file_utils: Loads a JSON file and ensures it contains a list.- Added issue templates
- Updated Azure/OpenAI integrations, using dated deployment names systematically
- log a warning when dry running a
PipeFunc - Update Readme.md
- Fixed the
ConceptFactory.make_from_blueprintmethod: Concepts defined in single-line format no longer automatically refineTextContentwhen a structure class with the same name exists ConceptFactory.make_concept_from_definitionis nowConceptFactory.make_concept_from_definition_str
- Bumped
kajsontov0.3.0: IntroducingMetaSingletonfor better singleton management - Unit tests for
ConceptLibrary.is_compatible_by_concept_code
Create AI workflows from natural language without writing code - The combination of Pipelex's declarative language, comprehensive Cursor rules, and robust validation tools enables AI assistants to autonomously iterate on pipelines until all errors are resolved and workflows are ready to run.
- Complete Dry Run & Static Validation System - A comprehensive validation framework that catches configuration and pipeline errors before any expensive inference operations.
- WorkingMemoryFactory Enhancement: New
make_for_dry_run()method creates working memory with realistic mock objects for zero-cost pipeline testing - Enhanced Dry Run System: Complete dry run support for all pipe controllers (
PipeCondition,PipeParallel,PipeBatch) with mock data generation usingpolyfactory - Comprehensive Static Validation: Enhanced static validation with configurable error handling for missing/extraneous input variables and domain validation
- TOML File Validation: Automatic detection and prevention of trailing whitespaces, formatting issues, and compilation blockers in pipeline files
- Pipeline Testing Framework: New
dry_run_all_pipes()method enables comprehensive testing of entire pipeline libraries - Enhanced Library Loading: Improved error handling and validation during TOML file loading with proper exception propagation
- Dry Run Configuration: New
allowed_to_fail_pipessetting allows specific pipes (like infinite loop examples that fail on purpose) to be excluded from dry run validation - Static Validation Control: Configurable error reactions (
raise,log,ignore) for different validation error types
- Cursor Rules Enhancement: Comprehensive pipe controller documentation covering
PipeSequence,PipeCondition,PipeBatch, andPipeParallel, improved PipeOperator documentation forPipeLLM,PipeOCR - Pipeline Validation CLI: Enhanced
pipelex validatecommand with better error reporting and validation coverage - Improved Error Messages: Better formatting and context for pipeline configuration errors
- OCR Input Standardization: Changed OCR pipe input parameter naming to consistently use
ocr_inputfor both image and PDF inputs, improving consistency across the API - Error Message Improvements: Updated PipeCondition error messages to reference
expression_templateinstead of deprecatedexpression_jinja2
- LLM Settings Simplification: Streamlined LLM choice system by removing complex
for_object_direct,for_object_list, andfor_object_list_directoptions. LLM selection now uses a simpler fallback pattern: specific choice → text choice → overrides → defaults. - Image Model Updates: Renamed
image_bytesfield tobase_64inPromptImageTypedBytesfor better consistency. Updated to useCustomBaseModelbase class to benefit from bytes truncation when printing.
- Fixed a bad import statement
Plugin System Refactoring - Complete overhaul of the plugin architecture to support external LLM providers.
- External Plugin Support: New
LLMWorkerAbstractbase class for integrating custom LLM providers, and we don't mean only an OpenAI-SDK-based LLM with a custom endpoint, now the implementation can be anything, as long as it implements theLLMWorkerAbstractinterface. - Plugin SDK Registry: Better management of SDK instances with proper teardown handling
- Enhanced Error Formatting: Improved Pydantic validation error messages for enums
- Plugin Architecture: Moved plugin system to dedicated
pipelex.pluginspackage - LLM Workers: Split into
LLMWorkerInternalAbstract(for built-in providers) andLLMWorkerAbstract(for external plugins) - Configuration: Plugin configs moved from main
pipelex.tomlto separatepipelex_libraries/plugins/plugin_config.toml(⚠️ breaking change) - Error Handling: Standardized credential errors with new
CredentialsErrorbase class
- Added
StorageProviderAbstract - Updated the changelog of
v0.4.7: MovedAdded StorageProviderAbstracttov0.4.8
- Added an API serializer: introducing the
compact_memory, a new way to encode/decode the working memory as json, for the API. - When creating a Concept with no structure specified and no explicit
refines, set it to refinenative.Text JobMetadata: addedjob_name. Removedtop_job_idandwfidPipeOutput: addedpipeline_run_id
- Changed the link to the doc in the
README.md: https://docs.pipelex.com
- Test structure overhaul: Reorganized test directory structure for better organization:
- Tests now separated into
unit/,integration/, ande2e/directories - Created
tests/cases/package for pure test data and constants - Created
tests/helpers/package for test utilities - Cleaned up test imports and removed empty
__init__.pyfiles
- Tests now separated into
- Class registry refactoring: Updated kajson from 0.1.6 to 0.2.0, adapted to changes in Kajson's class registry with new
ClassRegistryUtils(better separation of concerns) - Dependency updates:
- Added pytest-mock to dev dependencies for improved unit testing
- Coverage commands: New Makefile targets for test coverage analysis:
make cov: Run tests with coverage reportmake cov-missing(ormake cm): Show coverage with missing lines
- Test configuration: Set
xfail_strict = truein pytest config for stricter test failure handling - Pydantic validation errors: Enhanced error formatting to properly handle model_type errors
- External links: Removed broken Markdown target="_blank" syntax from MANIFESTO.md links
- Variable naming consistency: Fixed redundant naming in OpenAI config (openai_openai_config → openai_config)
- Makefile optimization: Removed parallel test execution (
-n auto) from codex-tests, works better now
- Unit tests added: New comprehensive unit tests for:
ClassRegistryUtilsFuncRegistryModuleInspector- File finding utilities
- Changed the allowed base branch names in the GHA
guard-branches.yml:doc->docs - Fixed
kajsondependency (see kajson v0.1.6 changelog)
- Added Cursor rules for coding best practices and standards (including linting methods). Added TDD (Test Driven Development) rule on demand.
- Various changes
- Added documentation for referencing images in PipeLLM.
- Fixed typos
- Removed the
imagesfield from PipeLLM - images can now be referenced directly in theinputs - Moved the list-pipes CLI function to the
PipeLibraryclass.
- Removed deprecated Gemini 1.5 models: Removed
gemini-1.5-flashandgemini-1.5-profrom the VertexAI integration as they are no longer supported - Fixed multiple import statements across the codebase
- Enhanced MkDocs search: Added search functionality to the documentation site
- Proofreading improvements: Fixed various typos and improved clarity across documentation
- Mini refactor: changed kajson dependency to
kajson==0.1.5(instead of>=) to tolerate temporary breaking changes from kajson
- Fixed the inheritance config manager method (Undocumented feature, soon to be removed)
- Fixed the
deploy-doc.ymlGitHub Action - Grouped the mkdocs dependencies in a single group
docsin thepyproject.tomlfile
- Changed discord link to the new one: https://go.pipelex.com/discord
- Added
hello-worldexample in thecookbook-examplesof the documentation.
- MkDocs setup for static web docs generation
- Material for MkDocs theme, custom styling and navigation
- Other plugins: meta-manager, glightbox
- GitHub Pages deployment, mapped to docs.pipelex.com
- Added GHA workflows for documentation deployment and validation
- Added to docs:
- Manifesto explaining the Pipelex viewpoint
- The Pipelex Paradigm explaining the fundamentals of Pipelex's solution
- **Cookbook examples** presented and explained, commented code, some event with mermaid flow charts
- And plenty of details about using Pipelex and developing for Pipelex, from structured generation to PipeOperators (LLM, Image generation, OCR…) to PipeControllers (Sequence, Parallel, Batch, Condition…), workflow optimization, workflow static validation and dry run… there's still work to do, but we move fast!
- Also a major update of Cursor rules
- Pipeline tracking: restored visual flowchart generation using Mermaid
- Enhanced dry run configuration: added more granular control with
nb_list_items,nb_ocr_pages, andimage_urls - New feature flags: better control over pipeline tracking, activity tracking, and reporting
- Improved OCR configuration: handle image file type for Mistral-OCR, added
default_page_views_dpisetting - Enhanced LLM configuration: better prompting for structured generation with automatic schema insertion for two-step structuring: generate plain text and then structure via Json
- Better logging: Enhanced log truncation and display for large objects like image bytes (there are still cases to deal with)
Concept system refactoring
- Improved concept code factory with better domain handling, so you no longer need the
nativedomain prefix for native domains, you can just call them by their names:Text,Image,PDF,Page,Number… - Concept
refinesattribute can now be a string for single refined concepts (the most common case)
- File structure changes: documentation moved from
doc/todocs/ - Configuration changes: some configuration keys have been renamed or restructured
StuffFactory.make_stuff()argumentconcept_coderenamed toconcept_strto explicitly support concepts without fully qualified domains (e.g.,TextorPDFimplicitlynative)- Some method signatures have been updated
- Added Concept refinement validation:
TestConceptRefinesValidationFunctionandTestConceptPydanticFieldValidationensure proper concept inheritance and field validation
- Improved automatic insertion of class structure from BaseModel into prompts, based on the PipeLLM's
output_concept. New unit test included. - The ReportingManager now reports costs for all pipeline IDs when no
pipeline_run_idis specified. - The
make_from_strmethod from theStuffFactoryclass now usesTextcontext by default.
- New pytest marker
dry_runnablefor tests that can run without inference. - Enhanced
maketargets with dry-run capabilities for improved test coverage:make test-xdist(ormake t): Runs all non-inference tests plus inference tests that support dry-runs - fast and resource-efficientmake test-inference(ormake ti): Runs tests requiring actual inference, with actual inference (slow and costly)
- Parallel test execution using
pytest-xdist(-n auto) enabled for:- GitHub Actions workflows
- Codex test targets
- Domain validation is now less restrictive in pipeline TOML: the
definitionattribute is nowOptional
- Structured Input Specifications: Pipe inputs are now defined as a dictionary mapping a required variable name to a concept code (
required_variable->concept_code). This replaces the previous singleinputfield and allows for multiple, named inputs, making pipes more powerful and explicit. This is a breaking change. - Static Validation for Inference Pipes: You can now catch configuration and input mistakes in your pipelines before running any operations. This static validation checks
PipeLLM,PipeOcr, andPipeImgGen. Static validation for controller pipes (PipeSequence, PipeParallel…) will come in a future release.- Configure the behavior for different error types using the
static_validation_configsection in your settings. For each error type, choose toraise,log, orignore.
- Configure the behavior for different error types using the
- Dry Run Mode for Zero-Cost Pipeline Validation: A powerful dry-run mode allows you to test entire pipelines without making any actual inference calls. It's fast, costs nothing, works offline, and is perfect for linting and validating pipeline logic.
- The new
dry_run_configlets you control settings, like disabling Jinja2 rendering during a dry run. - This feature leverages
polyfactoryto generate mock Pydantic models for simulated outputs. - Error handling for bad inputs during
run_pipehas been improved and is fully effective in dry-run mode. - One limitation: currently, dry running doesn't work when the pipeline uses a PipeCondition. This will be fixed in a future release.
- The new
native.AnythingConcept: A new flexible native concept that is compatible with any other concept, simplifying pipe definitions where input types can vary.- Added dependency on
polyfactoryfor mock Pydantic model generation in dry-run mode.
- Refactored Cognitive Workers: The abstraction for
LLM,Imgg, andOcrworkers has been elegantly simplified. The old decorator-based approach (..._job_func) has been replaced with a more robust pattern: a public base method now handles pre- and post-execution logic while calling a private abstract method that each worker implements. - The
b64_image_bytesfield inPromptImageByteswas renamed tobase_64for better consistency.
- Resolved a logged error related to the pipe stack when using
PipeParallel. - The pipe tracker functionality has been restored. It no longer crashes when using nested object attributes (e.g.,
my_object.attribute) as pipe inputs.
- A new pytest command-line option
--pipe-run-modehas been added to switch betweenliveanddryruns (default isdry). All pipe tests now respect this mode. - Introduced the
pipelex_apipytest marker for tests related to the Pipelex API client, separating them from generalinferenceorllmtests. - Added a
make test-pipelex-apitarget (shorthand:make ta) to exclusively run these new API client tests.
- The
llm_job_func.pyfile and the associated decorators have been removed as part of the cognitive worker refactoring.
- Added a feature flag for the
ReportingManagerin the config:
[pipelex]
[pipelex.feature_config]
is_reporting_enabled = true- Moved the reporting config form the
cogtconfig to the Pipelex config.
- Added Discord badge on the Readme. Join the community! -> https://go.pipelex.com/discord
- Added a client for the Pipelex API. Join the waitlist -> https://www.pipelex.com/signup
- Removed the
run_pipe_codefunction. Replaced byexecute_pipelineinpipelex.pipeline.execute. - Added llm deck
llm_for_img_to_text. - Renamed
InferenceReportManagertoReportingManager: It can report more than Inference cost. RenamedInferenceReportDelegatetoReportingProtocol. - Added an injection of dependency for
ReportingManager - pipelex cli: fixed some bugs
- pipelex cli: Split
pipelex initinto 2 separate functions:pipelex init-librariesandpipelex init-config - Fixed the inheritance config manager method
- Rename Mission to Pipeline
- Enable to start a pipeline and let in run in the background, getting it's run id, but not waiting for the output
Makefile: avoid defaulting pytest to verbose. Setup targetmake test-xdist= Run unit tests withxdist, make it the default for shorthandmake t. The oldmake tis nowmake tp(test-with-prints)- Added
mistral-small-3.1andqwen3:8b - Fix template pre-processor: don't try and substitute a dollar numerical like $10 or @25
- Refactor with less "OpenAI" naming for non-openai stuff that just uses the OpenAI SDK
- HotFix for v0.2.10 👇 regarding the new pipelex/pipelex_init.toml`
Python Support Expansion - We're no longer tied to Python 3.11! Now supporting Python 3.10, 3.11, 3.12, and 3.13 with full CI coverage across all versions.
Major Model Additions - Claude 4 (Opus & Sonnet), Grok-3, and GPT-4 image generation are now in the house.
- New pipe -
extract_page_contents_and_views_from_pdftransferred from cookbook to base library (congrats on the promotion!). This pipe extracts text, linked images, AND page_view images (rendered pages) - it's very useful if you want to use Vision in follow-up pipes
- Template preprocessor - New
@?token prefix for optional variable insertion - if a variable doesn't exist, we gracefully skip it instead of throwing exceptions - Claude 4 support - Both Opus and Sonnet variants, available through Anthropic SDK (direct & Bedrock) plus Bedrock SDK. Includes specific max_tokens limit reduction to prevent timeout/streaming issues (temporary workaround)
- Grok-3 family support - Full support via OpenAI SDK for X.AI's latest models
- GPT-4 image generation - New
gpt-image-1model through OpenAI SDK, available via PipeImgGen. Currently saves local files (addressing in next release) - Gemini update - Added latest
gemini-2.5-proto the lineup - Image generation enhancements - Better quality controls, improved background handling options, auto-adapts to different models: Flux, SDXL and now gpt-image-1
- Moved subpackage
pluginto the same level ascogtwithin pipelex for better visibility - Major cleanup in the unit tests, hierarchy significantly flattened
- Strengthened error handling throughout inference flows and template preprocessing
- Added
make test-quiet(shorthandtq) to Makefile to run tests without capturing outputs (i.e. without pytest-soption) - Stopped using Fixtures for
pipe_routerandcontent_generator: we're now always getting the singleton frompipelex.hub
- Perplexity integration - Fixed breaking changes from recent updates
- Added pytest-xdist to run unit tests in parallel on multiple CPUs. Not yet integrated into the Makefile, so run it manually with
pytest -n auto(without inference) orpytest -n auto -m "inference"(inference only). - Swapped pytest-pretty for pytest-sugar - because readable test names > pretty tables
- Updated instructor to v1.8.3
- All dependencies tested against Python 3.10, 3.11, 3.12, and 3.13
- TestTemplatePreprocessor
- TestImggByOpenAIGpt
- TestImageGeneration
- TestPipeImgg
- Include
pyproject.tomlinside the project build. - Fix
ImggEngineFactory: image generation (imgg) handle required format isplatform/model_name - pipelex cli: Added
list-pipesmethod that can list all the available pipes along with their descriptions. - Use a minimum version for
uvinstead of a fixed version - Implement
AGENTS.mdfor Codex - Add tests for some of the
tools.misc - pipelex cli: Rename
pipelex run-setuptopipelex validate
- Replaced
poetrybyuvfor dependency management. - Simplify llm provider config: All the API keys, urls, and regions now live in the
.env. - Added logging level
OFF, prevents any log from hitting the console
- Reboot repository
- Refactor: use
ActivityManagerProtocol, renameBaseModelTypeVar
- Add custom LLM integration via OpenAI sdk with custom
base_url
- Tidy tools
- Tidy inference API plugins
- Tidy WIP feature
ActivityManager
- Simplify the use of native concepts
- Include "page views" in the outputs of Ocr features
- Added
OcrWorkerAbstractandMistralOcrWorker, along withPipeOcrfor OCR processing of images and PDFs. - Introduced
MissionManagerfor managing missions, cost reports, and activity tracking. - Added detection and handling for pipe stack overflow, configurable with
pipe_stack_limit. - More possibilities for dependency injection and better class structure.
- Misc updates including simplified PR template, LLM deck overrides, removal of unused config vars, and disabling of an LLM platform id.
- Added OCR, thanks to Mistral
- Refactoring and cleanup
- Initial release 🎉