Parity Notices
Which TypeScript SDK options are accepted for Python parity but not yet acted on
Some TypeScript SDK options are accepted for Python-SDK parity but are not yet acted on; when you pass one, the SDK tells you so it’s never silently dropped.
Quick Start
- See the notice fire
typescript import { Task } from 'praisonai'; const task = new Task({ name: 'Research', description: 'Research a topic', memory: true, // accepted for parity, not yet honoured on Task }); // console: [praisonai] Task: option "memory" is accepted for parity // with the Python SDK but is not yet honoured in TypeScript.As of PR #4841 every
Agentconstructor andAgent.chatoption is honoured — see the Agent page — and PR #4836 honoured all eightHandoffoptions. The notice above now fires only for the surfaces still in the queue below. - Silence the notices
Set
PRAISONAI_PARITY_SILENT=1for the process (useful in tests) to mute every parity notice.bash PRAISONAI_PARITY_SILENT=1 node app.js
How It Works
Each surface consults the UNHONOURED_OPTIONS ledger when it is constructed, and warns once per (surface, option) pair if you pass a listed option with a non-default value.
| Concept | Meaning |
|---|---|
| Accepted | The option is typed and takes a value, so Python examples copy-paste. |
| Not yet honoured | The TypeScript behaviour behind the option isn’t ported yet. |
| Notice | A one-time console.warn per (surface, option) so nothing is dropped silently. |
The Remaining Surfaces
These options are accepted for Python-SDK parity but not yet acted on. Pass any with a non-default value and the SDK emits a notice.
| Surface | Count | Options |
|---|---|---|
AgentTeam.__init__ | 8 | autonomy, knowledge, guardrails, web, reflection, caching, learn, toolsRunOn |
Task.__init__ | 4 | autonomy, web, reflection, planning |
| Total | 12 |
AgentTeam.toolsRunOn stays on the list on purpose: team-level placement needs one shared instance across members, and that is not wired.
Plus partial options that work for some inputs and announce themselves for the rest:
| Surface | Option | Honoured when |
|---|---|---|
Agent | context | some inputs |
Agent | guardrails | some inputs |
Agent | knowledge | some inputs |
Agent | memory | some inputs |
Agent | reasoningEffort | some inputs |
Agent | web | some inputs |
Agent | toolConfig.parallel | forwarded as parallel_tool_calls on the OpenAI-compatible backend; the AI SDK backend still emits a notice |
Agent.chat | attachments | honoured on the OpenAI-compatible backend; the AI SDK backend emits a “not yet honoured” notice for multimodal |
Agent.chat | outputPydantic | some inputs |
Agent.chat | seed | some inputs |
AgentTeam | context | some inputs |
AgentTeam | execution | some inputs |
AgentTeam | hooks | some inputs |
AgentTeam | memory | some inputs |
AgentTeam | planning | some inputs |
ChromaMemory | ragDbPath | some inputs |
Task | guardrails | some inputs |
Different defaults, same option
The same Agent(output=…) code is silent in Python and verbose in TypeScript because the two SDKs resolve different defaults for an option that both honour.
The option is honoured on both sides, so this is not a “not yet honoured” surface — only the default differs when you leave it unset.
| Option | Python default | TypeScript default | Effect if unset |
|---|---|---|---|
verbose | False | PRAISON_VERBOSE env var (verbose unless set to "false") | Python quiet; TS verbose unless the env var is "false" |
markdown | False | true | Python returns plain text; TS renders markdown |
stream | False | true | Python returns the full string; TS streams tokens |
Python
from praisonaiagents import Agent
agent = Agent(instructions="You are helpful")
print(agent.start("Say hi"))
# Silent: no verbose logs, plain text returned, full string at onceTypeScript
import { Agent } from 'praisonai';
const agent = new Agent({ instructions: 'You are helpful' });
await agent.start('Say hi');
// Verbose logs, markdown-formatted, tokens streamed as they arriveTo make TypeScript behave like Python’s silent default, set the three fields explicitly:
import { Agent } from 'praisonai';
const agent = new Agent({
instructions: 'You are helpful',
output: { verbose: false, markdown: false, stream: false },
});Best Practices
An option in this list didn't do anything — why?
It’s accepted for API compatibility with the Python SDK, but the TypeScript behaviour behind it hasn’t been implemented yet. Watch the console for a [praisonai] … not yet honoured notice at startup.
How do I silence the notices?
Set the environment variable PRAISONAI_PARITY_SILENT=1 (or PRAISONAI_PARITY_SILENT=true) for the process. This is what test suites use to keep output clean.
How do I know if a specific option works?
Pass it. If you see no notice at startup, it’s honoured. Otherwise check BEHAVIOUR_PARITY.md on main for the current list.
How can I help close a row?
Implement the behaviour, delete the option’s entry from the ledger, add a test that proves the option changes what the code does, and regenerate. See _dev/parity/README.md in the SDK repo.
If you add a waiver in signatures/waivers.yaml, scope it with a kinds: list (e.g. kinds: [default]). A waiver is keyed by parameter, so an unscoped one waiving a default difference also silenced a required-ness change on the same parameter — waivers now take an optional kinds, and required-ness is never covered implicitly.
A green checker report is no longer proof on its own. The checkers previously had eleven blind spots — flattened parameters that were matched but not checked, unrecognised TypeScript default forms silently matching Python’s None, and ts_only required members that were rendered but not evaluated — and PR #4880 closed them, so a clean run now genuinely means the row was inspected. Do not treat pre-#4880 green results as evidence.