25 KiB
25 KiB
Changelog
All notable changes to Parlant will be documented here.
[Unreleased]
Added
- Add
HealthReporter(parlant.core.health_reporter) — a generic, per-process health-reporting service registered in the container. Subsystems callreport(kind, attributes); registeredHealthViewobjects interpret reports per kind and contribute to the/healthzsnapshot. Each kind has a configurable retention policy (window+max_count). Views declareCriticality.CRITICALorINFORMATIONAL; only critical views feed the worst-of overall status rollup - Add
NLPHealthViewreporting NLP request health sliced by schema (success rate, p50/p95 latency, recent error breakdown) with configurable thresholds fordegraded/unhealthyclassification - Instrument
BaseSchematicGenerator.generate()andBaseEmbedder.embed()to emitnlp.request/nlp.embedhealth reports on success and failure, providing dashboard visibility into LLM and embedding behavior across all adapters - Wrap the existing event-loop check as
EventLoopHealthViewso/healthzrollup is uniform across all health views - Add per-decision debug logs to journey node selection (
Journey '<title>': advanced/stayed/exited/completed/backtracked/auto-advanced/...) so journey progression is visible at debug level alongside guideline matching - Add a warning log for invalid condition ids returned during journey next-step selection
Changed
- Rename journey
conditionstotriggersthroughout the codebase, REST API, CLI, and SDKs to better reflect their role as activation signals. The REST API field, query parameter, and request bodies usetriggers(no aliases). The Python SDKServer.create_journey(...)keepsconditions=as a deprecated keyword that emits aDeprecationWarning; passing bothtriggers=andconditions=raises an error. Existing journey records are migrated automatically byparlant-prepare-migrationfrom thejourney_conditionscollection (with aconditionfield) to a newjourney_triggerscollection (with atriggerfield). LLM prompt strings that include "Journey activation condition" are intentionally preserved - Rename SDK callback
on_matchtoon_selectedon guidelines and journey state transitions to reflect that it fires post-resolution, when the entity is selected for message generation;EngineHooks.on_guideline_match_handlersandon_journey_match_handlersare renamed toon_guideline_selected_handlersandon_journey_selected_handlersaccordingly - Standardize guideline matcher log vocabulary:
"Activated"→"Matched","Skipped"→"Not matched", and"Not applied"→"Unapplied" - Standardize relational resolver log vocabulary:
"Skipped: ... deactivated due to ..."→"Dropped (<reason>): ..."with reasonslower priority,unmet dependency,dependency on dropped entity,deprioritized by guideline, anddeprioritized by journey - Disambiguation batch now uses the standard matcher vocabulary (
"Matched (disambiguation)"/"Not matched (disambiguation)") and emits a log on the negative branch (previously silent) - Normalize observational batch rationale to plain
match.rationale(no longer wrapped withCondition Application Rationale: "...") for consistency with other batches - Normalize low-criticality batch warning string to
"No checks generated"to match other batches
Removed
- Remove redundant
glm_service.pyNLP adapter andNLPServices.glm()factory method — the GLM/bigmodel.cn API is already covered by the existing Zhipu adapter (zhipu_service.py), which uses the officialzhipuaiSDK and supports GLM-4 model variants. UseNLPServices.zhipu()instead.
Fixed
- Fix low-criticality matcher logging the entire inference blob once per guideline in a batch (N copies of the same payload at debug level); now logs a single per-item entry
- Fix WebSocketLogger event loop starvation — when no WebSocket clients are subscribed, the drain loop processed queued messages without yielding, progressively blocking the async event loop and causing increasing latency over time
- Fix journey reachable-follow-ups evaluation being order-dependent at fan-in nodes —
JourneyReachableNodesEvaluatorcaptured a child's path list by reference and then prepended to it in place, so a node with multiple parents had its stored routes mutated by whichever parent was visited first; the second parent then lost routes (or double-counted a hop) depending purely on graph/DFS order. The child's routes are now snapshotted per parent, making the result depend only on journey structure. This intentionally changes the computed follow-ups for existing fan-in journeys: a shared child's later parent now retains the routes it previously lost
Security
- Upgrade dependencies to address known CVEs: authlib (>=1.6.11), requests (>=2.33.0), fastmcp (>=3.2.0), litellm (>=1.83.0), pytest (>=9.0.3), pyjwt (>=2.11.1), and constrain transitive deps — aiohttp, cryptography, pillow, pyopenssl, werkzeug, Mako, pyasn1, python-multipart, orjson, Pygments, diskcache
- Upgrade chat frontend: vite (>=7.3.2) and override transitive deps — picomatch, lodash, flatted, brace-expansion, immutable, yaml
[3.3.1] - 2026-04-14
Added
- Allow passing ToolId when attaching tools throughout the SDK
- Add
AnyOf(tag)andAllOf(tag)modifiers for explicit control over tag dependency semantics independ_on()—AnyOfrequires at least one tagged member to be active,AllOfrequires all of them (bareTagdefaults toAllOf) - Add
depend_on_any()toGuideline,Tag, andJourneyfor OR dependency relationships — at least one target must be active. Multipledepend_on_any()calls create independent OR groups that are AND'd together - Add event loop health monitoring to
/healthzendpoint — measures callback latency and reportshealthy,degraded, orunhealthystatus with peak latency over a configurable window - Add resolution tracking to the relational resolver — every entity that enters resolution gets a
Resolutionwith aResolutionKind(NONE,DEPRIORITIZED,UNMET_DEPENDENCY_ALL,UNMET_DEPENDENCY_ANY,ENTAILED) and structuredResolutionDetails(relationship ID, target IDs) explaining why
Changed
- Split
RelationshipEntityKind.TAGintoTAG_ALLandTAG_ANYto support explicit tag dependency semantics at the core level (existingTAGentries treated asTAG_ALLfor backwards compatibility)
Fixed
- Fix priority and dependency relationships propagating through inactive intermediaries — only direct relationships now affect resolution, consistent with the reinstatement principle from argumentation theory
- Fix entailment recording only the highest-scoring source when multiple guidelines entail the same target — all entailing relationships are now recorded in resolution details
- Fix dep-failed guidelines not recovering when entailment satisfies their dependency target in a later iteration
- Fix SDK startup appearing stuck at 100% after evaluations — add "Applying evaluations" progress bar for the metadata-writing phase
- Fix
Variable.get_value()returningNonewhen called from a retriever, caused by retrievers starting before context variables were loaded - Fix journey tool-state auto-advancing even when the tool did not run
[3.3.0] - 2026-03-15
Added
- Add per-agent planners via
Server.create_agent(planner=...), allowing each agent to use a customPlannerimplementation - Accept
Tagas a target independ_on(),exclude(), andprioritize_over()on bothGuidelineandTag, enabling relationships that target all guidelines sharing a custom tag - Add
Tag.depend_on(),Tag.exclude(), andTag.prioritize_over()methods to the SDK, enabling tag-based dependency and priority relationships with guidelines and journeys - Support custom TAG as source for DEPENDENCY relationships in the relational resolver
- Add
tagsparameter tocreate_guideline,create_observation, andcreate_journeyon bothAgentandJourney, allowing custom tags to be attached to entities at creation time - Add
Tag.reevaluate_after()method to the SDK, enabling tag-based reevaluation relationships with tools - Add tag-based reevaluation support in the engine: when a tool fires, all guidelines carrying a tag that has a reevaluation relationship with that tool are now re-evaluated
- Add staged_events to GuidelineMatchingContext in SDK
- Add
priorityproperty to guidelines and journeys for priority-based filtering in the relational resolver - Add transient guidelines (renamed from tool-provided guidelines), allowing tools to dynamically inject behavioral guidelines into the agent's context
- Add
Agent.utter()to the SDK, enabling programmatic agent message generation with transient guidelines - Add
Customer.update()andCustomerMetadatato the SDK, allowing tools to update customer name and metadata - Add
Session.update(),SessionMetadata, andSessionLabelsto the SDK, allowing tools to update session properties, metadata, and labels - Add
customer,agent,mode, andtitleproperties to SDKSessionclass - Add
Server.get_tag()to the SDK, supporting lookup by eitheridorname - Add name-based filtering to
TagStore.list_tags()and theGET /tagsAPI endpoint via an optionalnamequery parameter - Enforce tag name uniqueness in
TagStore, raising an error when creating a tag with a duplicate name
Changed
- Made extended thinking indicator optional in perceived performance policy
- Change
reevaluate_after()onTagandGuidelineto accept multiple tools (*tools) and returnSequence[Relationship] - Change
tagsfield type fromSequence[TagId]toSequence[Tag]onGuideline,Journey,Capability,Term,Variable,Customer, andAgentin the SDK - Change
Tag.preamble()to return a fullTagobject instead of aTagId - Upgrade MCP service and bump dependency versions to resolve security vulnerabilities
Deprecated
- OpenAPI tool services are now deprecated; please migrate to SDK tool services
Fixed
- Fix deadlock when sending a new message right after a preamble
- Fix transitive filtering in relational resolver for custom tag dependency targets (guidelines depending on a custom tag are now correctly deactivated when a tagged member is deprioritized)
- Fix SSE
read_eventendpoint stalling after first streaming chunk until full completion - Fix response analysis logs not always reaching the integrated UI
- Fix guideline formatting in canned response and streaming modes when condition is absent
- Fix AzureService small text embedding dimension size
- Fix onnxruntime compatibility with Python 3.10 and transformers 5.x type changes
- Fix agent intention proposer prompt clarification
- Fix embedding LRU cache eviction corrupting the length index when entries share the same text length
- Fix LiteLLMEmbedder failing to resolve via lagom container when LITELLM_EMBEDDING_MODEL_NAME is set
- Fix non-consequential tool calls being rejected when optional parameters are missing
Removed
- Remove stale
parlant-testentry point and testing framework documentation from README
[3.2.2] - 2026-02-18
Added
- Added p.MATCH_ALWAYS, now the preferred alias to p.Guideline.MATCH_ALWAYS
- Added
loggerproperty to p.Server
Changed
- Adjusted log levels of relational resolver to trace instead of debug
- Allow tool context parameter names to be all of 'context', 'ctx', and 'c'
Fixed
- Fix completed streamed messages re-animating on page refresh
- Propagate
Server.currentcontext to tool functions in hosted plugin server
[3.2.1] - 2026-02-17
Added
- Add optional
dependenciesparameter to guideline, observation, and journey creation methods - Add
exclude()as an alias forprioritize_over()on guidelines and journeys - Add
toolsparameter tocreate_observationmethods
Changed
- Deprecate
attach_tool()in favor ofcreate_guideline()/create_observation()withtoolsparameter
Fixed
- Preserve draft message language during canned response recomposition
- Fix server hang when an exception occurs during setup
- Fix canned response field extraction to handle falsy values
[3.2.0] - 2026-02-08
Added
- Add labels to Guidelines, Journeys, JourneyNodes, and Sessions for categorization and filtering
- Add automatic session label propagation from matched entities (guidelines, observations, journeys)
- Add
trackparameter to guidelines to control "previously applied" tracking - Support multiple targets in
prioritize_over()anddepend_on()methods - Add
field_dependenciesto canned responses for explicit field availability requirements - Add
attach_retriever()to Guideline, Journey, and JourneyState for conditional data retrieval - Add
on_matchandon_messagehooks to journeys for lifecycle callbacks - Add per-agent preamble configuration (custom examples and instructions)
- Add separate default greeting responses for first agent message in fluid mode
- Add streaming message output mode
- Allow specifying custom journey node ID
- Add matched guidelines/journey states to completion ready event
Changed
- Make condition optional for SDK guidelines
- Tweak default preamble examples
- Soften log levels for relational guideline resolver
- Add activated/skipped logs to custom guideline matcher batches
Fixed
- Fix websocket warning upon startup
- Fix agent intention proposer (guidelines were getting rewritten incorrectly)
- Fix multiple customer guideline matchers not working
- Fix bug with context variable access in SDK
[3.1.0] - 2026-01-05
Added
- Add .current property for Server, Agent, and Customer in SDK
- Add /healthz endpoint
- Add API for CRUD operations on session metadata
- Add EmcieService
- Add GLM service
- Add Mistral service
- Add OpenRouter service
- Add OpenTelemetry integration for Meter, Logger and Tracer
- Add Qdrant VectorDatabase adapter
- Add Snowflake Cortex service
- Add ability to configure and extend the FastAPI app object
- Add deferred retrievers
- Add dynamic composition mode
- Add follow-up canned responses
- Add guideline criticality level
- Add guideline on_match() hooks
- Add persistence option for context variable values (variable store)
- Added guideline descriptions
- Allow bailing out of canned response selection and utilize the draft directly, using a hook
- Allow controlling max tool result payload via environment variable
- Allow controlling perceived performance policy per agent
- Allow journey transitions from one tool state to another
- Allow specifying custom IDs when creating agents via SDK and API
- Allow specifying custom IDs when creating customers via SDK and API
- Allow specifying custom IDs when creating guidelines, journeys, and glossary terms via SDK and API
- Expose IoC container in server object
- Support adding custom canrep fields to matched guidelines and journey states
- Support code-based, custom guideline matchers
Changed
- Changed default NLPService to EmcieService
- Improved efficiency of journey state matching when first state is a tool state
- Rename ContextualCorrelator to Tracer
- Rename LoadedContext to EngineContext
- Support proxy URL for LiteLLM
Fixed
- Fix critical bug with cancellation during response analysis
- Fix critical similarity calculation error in TransientVectorDatabase
- Fix unnecessary extra evaluation of journeys and tools in some edge cases
- Improved Gemini Flash 2.5 output consistency by using function call trick instead of structured outputs
[3.0.4] - 2025-11-18
Fixed
- Fix bug where NanoDB query failed when no filters matched
- Extend tool insights across iterations
- Fix deprecated status.HTTP_422_UNPROCESSABLE_ENTITY to status.HTTP_422_UNPROCESSABLE_CONTENT
- Fix broken CLI by adding missing websocket-client dependency
- Added specific classes for embedder initialisation
- Make base url once in OllamaEmbedder
- Update dependencies for security, upgrade FastAPI, fix mypy in hugging_face.py
- Bump torch for fixing vulnerability
[3.0.3] - 2025-10-23
Fixed
- Fix installation issue in some environments, failing due to an older FastMCP version
- Bump versions of OpenTelemetry
- Made ChromaDB an extra package parlant[chroma]
- Update NPM dependencies for integrated UI
[3.0.2] - 2025-08-27
Added
- Added docs/* and llms.txt
- Added Vertex NLP service
- Added Ollama NLP service
- Added LiteLLM support to the SDK
- Added Gemini support to the SDK
- Added Journey.create_observation() helper
- Added auth permission READ_AGENT_DESCRIPTION
- Added optional AWS_SESSION_TOKEN to BedrockService
- Support creating status events via the API
Changed
- Moved tool call success log to DEBUG level
- Optimized canrep to not generate a draft in strict mode if no canrep candidates found
- Removed
acknowledged_event_offsetfrom status events - Removed
last_known_event_offsetfromLoadedContext.interaction
Fixed
- Fixed presentation of missing API keys for built-in NLP services
- Improvements to canned response generation
- Fixed bug with null journey paths in some cases
- Fixed tiny bug with terminal nodes in journey node selection
- Fixed evaluations not showing properly after version upgrade
[3.0.1] - 2025-08-16
Changed
- Move tool call success log to DEBUG level
Fixed
- Fix tool-based variable not enabling the associated tool on the server
- Fix authorization errors throwing 500 instead of 403
- Changed OpenAI LLM request operation level to TRACE to fix evaluation progress bars
[3.0.0] - 2025-08-15
- Please see the announcement at https://parlant.io/blog/parlant-3-0-release
[2.2.0] - 2025-05-20
Added
- Add journeys
- Add of guideline properties evaluation
- Add automatic guideline action deduction when adding direct tool guidelines
- Added choices of invalid and missing tool parameters to tool insights
Changed
- Make guideline action optional
[2.1.2] - 2025-05-07
Changed
- Remove interaction history from utterance recomposition prompt
- Use tool calls from the entire interaction for utterance field substitution
- Improve error handling and reporting with utterance rendering failures
Fixed
- Always reason about utterance selection to improve performance
[2.1.1] - 2025-04-30
Fixed
- Fixed rendering relationships in CLI
- Fixed parlant client using old imports from python client SDK
[2.1.0] - 2025-04-29
Added
- ToolParameterOptions.choice_provider can now access ToolContext
- Added utterance/draft toggle in the integrated UI
- Added new guideline relationship: Dependency
- Added tool relationships and the OVERLAP relationship
- Added the 'overlap' property to tools. By default, tools will be assumed not to overlap with each other, simplifying their evaluation at runtime.
- Introduce ToolBatchers
- Introduce Journey
Changed
- Improved tool calling efficiency by adjusting the prompt to the tool at hand
- Revised completion schema (ARQs) for tool calling
- Utterances now follow a 2-stage process: draft + select
- Changed guest customer name to Guest
Fixed
- Fixed deprioritized guidelines always being skipped
- Fixed agent creation with tags
- Fixed client CLI exit status when encountering an error
- Fixed agent update
Known Issues
- OpenAPI tool services sometimes run into issues due to a version update in aiopenapi3
[2.0.0] - 2025-04-09
Added
- Improved tool parameter flexibility: custom types, Pydantic models, and annotated ToolParameterOptions
- Allow returning a new (modified) container in modules using configure_module()
- Added Tool Insights with tool parameter options
- Added support for default values for tool parameters in tool calling
- Added WebSocket logger feature for streaming logs in real time
- Added a log viewer to the sandbox UI
- Added API and CLI for Utterances
- Added support for the --migrate CLI flag to enable seamless store version upgrades during server startup
- Added clear rate limit error logs for NLP adapters
- Added enabled/disabled flag for guidelines to facilitate experimentation without deletion
- Allow different schematic generators to adjust incoming prompts in a structured manner
- Added tags to context variables, guidelines, glossary and agents
- Added guideline matching strategies
- Added guideline relationships
- Added support for tool parameters choice provider using the tool context as argument
Changed
- Made the message generator slightly more polite by default, following user feedback
- Allow only specifying guideline condition or action when updating guideline from CLI
- Renamed guideline proposer with guideline matcher
Fixed
- Lowered likelihood of the agent hallucinating facts in fluid mode
- Lowered likelihood of the agent offering services that were not specifically mentioned by the business
[1.6.2] - 2025-01-29
Fixed
- Fix loading DeepSeek service during server boot
[1.6.1] - 2025-01-20
Fixed
- Fix ToolCaller not getting clear information on a parameter being optional
- Ensure ToolCaller only calls a tool if all required args were given
- Improve valid JSON generation likelihood in MessageEventGenerator
- Improve ToolCaller's ability to correctly run multiple tools at once
[1.6.0] - 2025-01-19
Added
- Add shot creation helper functions under Shot
- Add ContextEvaluation in MessageEventGenerator
- Add a log command under client CLI for streaming logs
- Add engine lifecycle hooks
Changed
- Split vendor dependencies to extra packages to avoid reduce installation time
- Modified ToolCaller shot schema
- Disable coherence and connection checking by default in the CLI for now
Fixed
- Improved GuidelineProposer's ability to handle compound actions
- Improved GuidelineProposer's ability to distinguish between a fulfilled and unfulfilled action
- Improved GuidelineProposer's ability to detect a previously applied guideline's application to new information
- Reduced likelihood of agent offering hallucinated services
- Fix ToolCaller false-negative argument validation from int to float
- Fix ToolCaller accuracy
- Fix ToolCaller making up argument values when it doesn't have them
- Fix some cases where the ToolCaller also calls a less-fitting tool
- Fix mistake in coherence checker few shots
- Fix markdown tables in sandbox UI
- Fix wrong import of RateLimitError
- Fix PluginServer validation for optional tool arguments when they're passed None
- Fix utterances sometimes not producing a message
[1.5.1] - 2025-01-05
Fixed
- Fix server CLI boot
[1.5.1] - 2025-01-05
Fixed
- Fix server CLI boot
[1.5.0] - 2025-01-04
Added
- Add DeepSeek provider support (via DeepSeekService)
Changed
- Change default home dir from runtime-data to parlant-data
Fixed
- Fix tool-calling test
- Fix HuggingFace model loading issues
[1.4.3] - 2025-01-02
Fixed
- Upgraded dependency "tiktoken" to 0.8.0 to fix installation errors on some environments
[1.4.2] - 2024-12-31
Fixed
- Fix race condition in JSONFileDocumentDatabase when deleting or updating documents
[1.4.1] - 2024-12-31
Changed
- Remove tool metadata from prompts - agents are now only aware of the data itself
Fixed
- Fix tool calling in scenarios where a guideline has multiple tools where more than one should run
[1.4.0] - 2024-12-31
Added
- Support custom plugin data for PluginServer
- Allow specifying custom logger ID when creating loggers
- Add 'hosted' parameter to PluginServer, for running inside modules
Fixed
- Fix the tool caller's few shots to include better rationales and arguments.
[1.3.1] - 2024-12-27
Changed
- Return event ID instead of trace ID from utterance API
- Improve and normalize entity update messages in client CLI
[1.3.0] - 2024-12-26
Added
- Add manual utterance requests
- Refactor few-shot examples and allow adding more examples from a module
- Allow tapping into the PluginServer FastAPI app to provide additional custom endpoints
- Support for union parameters ("T | None") in tool functions
Changed
- Made all stores thread-safe with reader/writer locks
- Reverted GPT version for guideline connection proposer to 2024-08-06
- Changed definition of causal connection to take the source's when statement into account. The connection proposer now assumes the source's condition is true when examining if it entails other guideline.
Fixed
- Fix 404 not being returned if a tool service isn't found
- Fix having direct calls to asyncio.gather() instead of safe_gather()
Removed
- Removed connection kind (entails / suggests) from the guideline connection proposer and all places downstream. the connection_kind argument is no longer needed or supported for all guideline connections.
[1.2.0] - 2024-12-19
Added
- Expose deletion flag for events in Session API
Changed
- Print traceback when reporting server boot errors
- Make cancelled operations issue a warning rather than an error
Fixed
- Fixed tool calling with optional parameters
- Fixed sandbox UI issues with message regeneration and status icon
- Fixed case where guideline is applied due to condition being partially applied
Removed
None
[1.1.0] - 2024-12-18
Added
- Customer selection in sandbox Chat UI
- Support tool calls with freshness rules for context variables
- Add support for loading external modules for changing engine behavior programmatically
- CachedSchematicGenerator to run the test suite more quickly
- TransientVectorDatabase to run the test suite more quickly
Changed
- Changed model path for Chroma documents. You may need to delete your
runtime-datadir.
Fixed
- Improve handling of partially fulfilled guidelines
Removed
None