PraisonAI 4.7.4__tar.gz → 4.7.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {praisonai-4.7.4 → praisonai-4.7.5}/PKG-INFO +9 -9
- {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/PKG-INFO +9 -9
- {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/SOURCES.txt +0 -1
- {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/requires.txt +8 -8
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/__init__.py +7 -2
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/agents.schema.json +38 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/schema.py +5 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/validator.py +29 -63
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/db/adapter.py +70 -5
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/autogen_adapter.py +9 -1
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/base.py +22 -28
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/crewai_adapter.py +8 -1
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/praisonai_adapter.py +12 -12
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inc/models.py +73 -0
- praisonai-4.7.5/praisonai/integrations/__init__.py +168 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/_cli_loaders.py +3 -13
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/__init__.py +21 -0
- praisonai-4.7.5/praisonai/version.py +1 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/pyproject.toml +8 -8
- praisonai-4.7.4/praisonai/integrations/__init__.py +0 -85
- praisonai-4.7.4/praisonai/integrations/_unified_registry.py +0 -211
- praisonai-4.7.4/praisonai/version.py +0 -1
- {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/README.md +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/__main__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_api_auth.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_logging.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/server.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/acp/session.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/agents_generator.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/api/call.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/app/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/app/agentos.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/auto.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/branding.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/_profiling.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/interactive_legacy.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/legacy/workflow_commands.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/main.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/config/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/history_store.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/queue.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/setup.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/db/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/client.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/converter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/inc/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/_sync_base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute/tenki.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/compute_managed_agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/models.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/router.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/server.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/jobs/store.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/env.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/llm/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/client.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/_ops.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/profiler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/push/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/push/client.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/push/transports.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/core.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/history.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/models.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/security.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/recipe/server.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/applier.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/judge.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/plan.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/player.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/reader.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/storage.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/replay/writer.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/_delivery.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/audit.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/injection.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/security/protected.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/build.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/setup.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/models.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/_tool_sources.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/cache.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/loader.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/security.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tool_registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/audio.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/train/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/train.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/train_vision.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/context.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_dashboard/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/praisonai/upload_vision.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/setup.cfg +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_approval_system.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_basic.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_cli_features.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_recipe.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_registry.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_runner.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.7.4 → praisonai-4.7.5}/tests/test_serve_features.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.5
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,14 +11,14 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.7.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.1.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.1.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.1.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.1.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.1.
|
|
20
|
-
Requires-Dist: praisonai-sandbox>=0.1.
|
|
21
|
-
Requires-Dist: praisonai-deploy>=0.1.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.7.3
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.2
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.2
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.2
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.2
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.4
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.2
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.2
|
|
22
22
|
Requires-Dist: python-dotenv>=0.19.0
|
|
23
23
|
Requires-Dist: litellm<2,>=1.83.14
|
|
24
24
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.5
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,14 +11,14 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.7.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.1.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.1.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.1.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.1.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.1.
|
|
20
|
-
Requires-Dist: praisonai-sandbox>=0.1.
|
|
21
|
-
Requires-Dist: praisonai-deploy>=0.1.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.7.3
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.2
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.2
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.2
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.2
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.4
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.2
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.2
|
|
22
22
|
Requires-Dist: python-dotenv>=0.19.0
|
|
23
23
|
Requires-Dist: litellm<2,>=1.83.14
|
|
24
24
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -327,7 +327,6 @@ praisonai/integrations/__init__.py
|
|
|
327
327
|
praisonai/integrations/_cli_loaders.py
|
|
328
328
|
praisonai/integrations/_session_info.py
|
|
329
329
|
praisonai/integrations/_tool_aliases.py
|
|
330
|
-
praisonai/integrations/_unified_registry.py
|
|
331
330
|
praisonai/integrations/backend_registry.py
|
|
332
331
|
praisonai/integrations/base.py
|
|
333
332
|
praisonai/integrations/claude_code.py
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.7.
|
|
5
|
-
praisonai-code>=0.1.
|
|
6
|
-
praisonai-bot>=0.1.
|
|
7
|
-
praisonai-train>=0.1.
|
|
8
|
-
praisonai-browser>=0.1.
|
|
9
|
-
praisonai-mcp>=0.1.
|
|
10
|
-
praisonai-sandbox>=0.1.
|
|
11
|
-
praisonai-deploy>=0.1.
|
|
4
|
+
praisonaiagents>=1.7.3
|
|
5
|
+
praisonai-code>=0.1.2
|
|
6
|
+
praisonai-bot>=0.1.2
|
|
7
|
+
praisonai-train>=0.1.2
|
|
8
|
+
praisonai-browser>=0.1.2
|
|
9
|
+
praisonai-mcp>=0.1.4
|
|
10
|
+
praisonai-sandbox>=0.1.2
|
|
11
|
+
praisonai-deploy>=0.1.2
|
|
12
12
|
python-dotenv>=0.19.0
|
|
13
13
|
litellm<2,>=1.83.14
|
|
14
14
|
PyYAML>=6.0
|
|
@@ -197,8 +197,13 @@ def __getattr__(name):
|
|
|
197
197
|
from .integrations.local_agent import LocalAgentConfig
|
|
198
198
|
return LocalAgentConfig
|
|
199
199
|
elif name in ('DB', 'PraisonAIDB', 'PraisonDB'):
|
|
200
|
-
|
|
201
|
-
|
|
200
|
+
# Route through ``praisonai.db`` (not ``db.adapter`` directly) so the
|
|
201
|
+
# deprecation warning defined on the ``praisonai.db`` import path fires
|
|
202
|
+
# consistently. ``db`` classes are deprecated in favour of the ``db(...)``
|
|
203
|
+
# factory; ``from praisonai import DB`` must warn just like
|
|
204
|
+
# ``from praisonai.db import DB``.
|
|
205
|
+
from . import db as _db
|
|
206
|
+
return getattr(_db, name)
|
|
202
207
|
# Note: n8n is available via direct import: from praisonai.n8n import YAMLToN8nConverter
|
|
203
208
|
# Lazy loading from main package causes recursion, so use direct import for now
|
|
204
209
|
|
|
@@ -1199,6 +1199,19 @@
|
|
|
1199
1199
|
"default": "sequential",
|
|
1200
1200
|
"description": "Process type"
|
|
1201
1201
|
},
|
|
1202
|
+
"type": {
|
|
1203
|
+
"anyOf": [
|
|
1204
|
+
{
|
|
1205
|
+
"type": "string"
|
|
1206
|
+
},
|
|
1207
|
+
{
|
|
1208
|
+
"type": "null"
|
|
1209
|
+
}
|
|
1210
|
+
],
|
|
1211
|
+
"default": null,
|
|
1212
|
+
"description": "Configuration type discriminator",
|
|
1213
|
+
"title": "Type"
|
|
1214
|
+
},
|
|
1202
1215
|
"roles": {
|
|
1203
1216
|
"anyOf": [
|
|
1204
1217
|
{
|
|
@@ -1405,6 +1418,31 @@
|
|
|
1405
1418
|
"default": null,
|
|
1406
1419
|
"description": "Provider configurations",
|
|
1407
1420
|
"title": "Providers"
|
|
1421
|
+
},
|
|
1422
|
+
"deploy": {
|
|
1423
|
+
"anyOf": [
|
|
1424
|
+
{
|
|
1425
|
+
"additionalProperties": true,
|
|
1426
|
+
"type": "object"
|
|
1427
|
+
},
|
|
1428
|
+
{
|
|
1429
|
+
"type": "null"
|
|
1430
|
+
}
|
|
1431
|
+
],
|
|
1432
|
+
"default": null,
|
|
1433
|
+
"description": "Deployment configuration",
|
|
1434
|
+
"title": "Deploy"
|
|
1435
|
+
},
|
|
1436
|
+
"dependencies": {
|
|
1437
|
+
"anyOf": [
|
|
1438
|
+
{},
|
|
1439
|
+
{
|
|
1440
|
+
"type": "null"
|
|
1441
|
+
}
|
|
1442
|
+
],
|
|
1443
|
+
"default": null,
|
|
1444
|
+
"description": "Task dependency declarations",
|
|
1445
|
+
"title": "Dependencies"
|
|
1408
1446
|
}
|
|
1409
1447
|
},
|
|
1410
1448
|
"title": "PraisonAI Agents Configuration",
|
|
@@ -374,6 +374,7 @@ class YAMLConfig(BaseModel):
|
|
|
374
374
|
description: Optional[str] = Field(default=None, description="Configuration description")
|
|
375
375
|
framework: Optional[str] = Field(default="praisonai", description="Framework to use")
|
|
376
376
|
process: Optional[ProcessType] = Field(default=ProcessType.SEQUENTIAL, description="Process type")
|
|
377
|
+
type: Optional[str] = Field(default=None, description="Configuration type discriminator")
|
|
377
378
|
|
|
378
379
|
# Core sections (at least one required)
|
|
379
380
|
roles: Optional[Dict[str, AgentConfig]] = Field(default=None, description="Agent roles (canonical)")
|
|
@@ -397,6 +398,10 @@ class YAMLConfig(BaseModel):
|
|
|
397
398
|
llm: Optional[str] = Field(default=None, description="Default LLM")
|
|
398
399
|
models: Optional[Dict[str, Any]] = Field(default=None, description="Model configurations")
|
|
399
400
|
providers: Optional[Dict[str, Any]] = Field(default=None, description="Provider configurations")
|
|
401
|
+
|
|
402
|
+
# Deployment / dependency declarations
|
|
403
|
+
deploy: Optional[Dict[str, Any]] = Field(default=None, description="Deployment configuration")
|
|
404
|
+
dependencies: Optional[Any] = Field(default=None, description="Task dependency declarations")
|
|
400
405
|
|
|
401
406
|
@model_validator(mode='after')
|
|
402
407
|
def validate_config_structure(self):
|
|
@@ -7,10 +7,22 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Dict, Any, List, Optional
|
|
8
8
|
from pydantic import ValidationError
|
|
9
9
|
|
|
10
|
-
from .schema import YAMLConfig, ValidationResult
|
|
10
|
+
from .schema import YAMLConfig, ValidationResult, AgentConfig
|
|
11
11
|
from ..tool_resolver import ToolResolver
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
# Field names are derived from the Pydantic schema so there is a single source
|
|
15
|
+
# of truth. Adding a field to the schema automatically teaches the validator
|
|
16
|
+
# about it — no parallel hand-maintained set to drift out of sync.
|
|
17
|
+
_KNOWN_TOP_LEVEL = frozenset(YAMLConfig.model_fields.keys())
|
|
18
|
+
# Agent-only fields. TaskConfig fields are intentionally NOT unioned in: an
|
|
19
|
+
# agent declaration with a task-only key (``expected_output``, ``output_file``,
|
|
20
|
+
# ``async_execution``, ``context``, ``condition``) is a genuine mistake the
|
|
21
|
+
# runtime ignores, so it must still warn. ``name`` is accepted as an alias the
|
|
22
|
+
# runtime tolerates but the schema doesn't declare.
|
|
23
|
+
_KNOWN_AGENT_FIELDS = frozenset(AgentConfig.model_fields.keys()) | {"name"}
|
|
24
|
+
|
|
25
|
+
|
|
14
26
|
class ConfigValidator:
|
|
15
27
|
"""Validator for YAML configuration with schema and cross-reference validation."""
|
|
16
28
|
|
|
@@ -218,44 +230,19 @@ class ConfigValidator:
|
|
|
218
230
|
|
|
219
231
|
def _is_known_optional_tool(self, tool_name: str) -> bool:
|
|
220
232
|
"""Check if a tool name is a known optional tool.
|
|
221
|
-
|
|
233
|
+
|
|
234
|
+
The single source of truth is ``praisonaiagents.tools.TOOL_MAPPINGS``:
|
|
235
|
+
adding an optional tool upstream teaches the validator about it with no
|
|
236
|
+
wrapper edit. ``resolve()`` returns None for such tools when their
|
|
237
|
+
optional dependencies aren't installed; that's a "needs deps" warning,
|
|
238
|
+
not an "unknown tool" error.
|
|
239
|
+
|
|
222
240
|
Args:
|
|
223
241
|
tool_name: Tool name to check
|
|
224
|
-
|
|
242
|
+
|
|
225
243
|
Returns:
|
|
226
244
|
True if it's a known optional tool
|
|
227
245
|
"""
|
|
228
|
-
# List of known optional tools that require extra dependencies
|
|
229
|
-
known_optional = {
|
|
230
|
-
# Database tools
|
|
231
|
-
'PostgreSQLTool', 'MySQLTool', 'SQLiteTool', 'MongoDBTool', 'RedisTool',
|
|
232
|
-
'SurrealDBTool', 'CassandraTool', 'ElasticsearchTool',
|
|
233
|
-
|
|
234
|
-
# Web/API tools
|
|
235
|
-
'SlackTool', 'DiscordTool', 'TelegramTool', 'EmailTool',
|
|
236
|
-
'TwitterTool', 'LinkedInTool', 'GitHubTool',
|
|
237
|
-
|
|
238
|
-
# Cloud tools
|
|
239
|
-
'AWSTool', 'AzureTool', 'GCPTool', 'S3Tool',
|
|
240
|
-
|
|
241
|
-
# AI/ML tools
|
|
242
|
-
'HuggingFaceTool', 'OpenAITool', 'AnthropicTool',
|
|
243
|
-
|
|
244
|
-
# Data tools
|
|
245
|
-
'PandasTool', 'NumpyTool', 'ScipyTool',
|
|
246
|
-
|
|
247
|
-
# Other
|
|
248
|
-
'BrowserTool', 'SeleniumTool', 'PlaywrightTool',
|
|
249
|
-
'KubernetesTool', 'DockerTool', 'TerraformTool',
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
if tool_name in known_optional:
|
|
253
|
-
return True
|
|
254
|
-
|
|
255
|
-
# Also treat any tool declared in praisonaiagents' TOOL_MAPPINGS as a
|
|
256
|
-
# known tool. resolve() returns None for such tools when their optional
|
|
257
|
-
# dependencies aren't installed; that's a "needs deps" warning, not an
|
|
258
|
-
# "unknown tool" error.
|
|
259
246
|
try:
|
|
260
247
|
from praisonaiagents import tools as agent_tools
|
|
261
248
|
tool_mappings = getattr(agent_tools, 'TOOL_MAPPINGS', None)
|
|
@@ -263,7 +250,7 @@ class ConfigValidator:
|
|
|
263
250
|
return True
|
|
264
251
|
except Exception:
|
|
265
252
|
pass
|
|
266
|
-
|
|
253
|
+
|
|
267
254
|
return False
|
|
268
255
|
|
|
269
256
|
def _check_unknown_fields(self, config: Dict[str, Any], file_prefix: str = "") -> List[str]:
|
|
@@ -277,46 +264,25 @@ class ConfigValidator:
|
|
|
277
264
|
List of warnings about unknown fields
|
|
278
265
|
"""
|
|
279
266
|
warnings = []
|
|
280
|
-
|
|
281
|
-
#
|
|
282
|
-
known_top_level = {
|
|
283
|
-
'name', 'description', 'framework', 'process', 'type',
|
|
284
|
-
'roles', 'agents', 'tasks', 'workflow', 'steps',
|
|
285
|
-
'input', 'topic', 'tools', 'toolsets',
|
|
286
|
-
'config', 'llm', 'models', 'providers',
|
|
287
|
-
'deploy', # Deployment configuration
|
|
288
|
-
'dependencies', # Task dependency declarations
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
# Known agent/role fields
|
|
292
|
-
known_agent_fields = {
|
|
293
|
-
'role', 'goal', 'instructions', 'backstory', 'tools', 'toolsets', 'tasks', 'llm',
|
|
294
|
-
'function_calling_llm', 'allow_delegation', 'max_iter', 'max_rpm',
|
|
295
|
-
'max_execution_time', 'verbose', 'cache', 'system_template',
|
|
296
|
-
'prompt_template', 'response_template', 'tool_timeout', 'tool_retry_policy',
|
|
297
|
-
'planning_tools', 'planning', 'autonomy', 'guardrails', 'streaming', 'stream',
|
|
298
|
-
'approval', 'skills', 'cli_backend', 'runtime', 'reflection', 'handoff',
|
|
299
|
-
'web', 'web_fetch', 'name', # Sometimes used as alias
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
# Check top-level unknown fields
|
|
267
|
+
|
|
268
|
+
# Check top-level unknown fields (derived from YAMLConfig schema)
|
|
303
269
|
for field in config:
|
|
304
|
-
if field not in
|
|
270
|
+
if field not in _KNOWN_TOP_LEVEL:
|
|
305
271
|
warnings.append(
|
|
306
272
|
f"{file_prefix}Unknown top-level field '{field}'. "
|
|
307
273
|
f"This field will be ignored."
|
|
308
274
|
)
|
|
309
|
-
|
|
310
|
-
# Check agent/role fields
|
|
275
|
+
|
|
276
|
+
# Check agent/role fields (derived from AgentConfig/TaskConfig schema)
|
|
311
277
|
for section in ['agents', 'roles']:
|
|
312
278
|
if section in config and isinstance(config[section], dict):
|
|
313
279
|
for agent_name, agent_config in config[section].items():
|
|
314
280
|
if isinstance(agent_config, dict):
|
|
315
281
|
for field in agent_config:
|
|
316
|
-
if field not in
|
|
282
|
+
if field not in _KNOWN_AGENT_FIELDS:
|
|
317
283
|
warnings.append(
|
|
318
284
|
f"{file_prefix}{section}.{agent_name}: Unknown field '{field}'. "
|
|
319
285
|
f"This field will be ignored."
|
|
320
286
|
)
|
|
321
|
-
|
|
287
|
+
|
|
322
288
|
return warnings
|
|
@@ -16,10 +16,18 @@ import inspect
|
|
|
16
16
|
import time
|
|
17
17
|
import logging
|
|
18
18
|
import threading
|
|
19
|
+
import weakref
|
|
20
|
+
import concurrent.futures
|
|
19
21
|
from typing import Any, Dict, List, Optional
|
|
20
22
|
|
|
21
23
|
logger = logging.getLogger(__name__)
|
|
22
24
|
|
|
25
|
+
# Tracks fire-and-forget store writes submitted from a running event loop so a
|
|
26
|
+
# shutting-down worker can flush in-flight persistence before exit. A WeakSet
|
|
27
|
+
# lets completed futures be garbage-collected without manual bookkeeping.
|
|
28
|
+
_BG_WRITES: "weakref.WeakSet[concurrent.futures.Future]" = weakref.WeakSet()
|
|
29
|
+
_BG_WRITES_LOCK = threading.Lock()
|
|
30
|
+
|
|
23
31
|
|
|
24
32
|
class PraisonAIDB:
|
|
25
33
|
"""
|
|
@@ -833,16 +841,65 @@ class PraisonAIDB:
|
|
|
833
841
|
|
|
834
842
|
@staticmethod
|
|
835
843
|
def _call_store(store, sync_name, async_name, *args, **kwargs):
|
|
836
|
-
"""Call a store from a sync hook without
|
|
844
|
+
"""Call a store from a sync hook without ever blocking or losing a write.
|
|
845
|
+
|
|
846
|
+
A sync hook can be reached from a plain sync caller *or* from inside a
|
|
847
|
+
running event loop (several async chat paths still route through the
|
|
848
|
+
sync ``_persist_message``). When the resolved store method returns a
|
|
849
|
+
coroutine we must handle both:
|
|
850
|
+
|
|
851
|
+
- No running loop: block on the shared bridge via ``run_sync``.
|
|
852
|
+
- Running loop: submitting-then-blocking would park the loop (the
|
|
853
|
+
pathology ``run_sync_or_offload`` forbids), and the old behaviour
|
|
854
|
+
discarded the coroutine entirely — silently dropping every message,
|
|
855
|
+
reply and tool result. Instead we submit the write to the shared
|
|
856
|
+
bridge as tracked fire-and-forget. Store writes are uuid-keyed and
|
|
857
|
+
idempotent per message, so completing them slightly later is safe by
|
|
858
|
+
construction and strictly better than losing them.
|
|
859
|
+
"""
|
|
837
860
|
fn = PraisonAIDB._store_callable(store, sync_name, async_name)
|
|
838
861
|
if fn is None:
|
|
839
862
|
return None
|
|
840
863
|
result = fn(*args, **kwargs)
|
|
841
|
-
if inspect.isawaitable(result):
|
|
842
|
-
|
|
864
|
+
if not inspect.isawaitable(result):
|
|
865
|
+
return result
|
|
866
|
+
|
|
867
|
+
from .._async_bridge import current_bridge, run_sync
|
|
868
|
+
|
|
869
|
+
try:
|
|
870
|
+
asyncio.get_running_loop()
|
|
871
|
+
except RuntimeError:
|
|
872
|
+
return run_sync(result)
|
|
873
|
+
|
|
874
|
+
bridge = current_bridge()
|
|
875
|
+
fut = bridge.submit(result)
|
|
876
|
+
with _BG_WRITES_LOCK:
|
|
877
|
+
_BG_WRITES.add(fut)
|
|
878
|
+
|
|
879
|
+
def _on_done(f, name=sync_name):
|
|
880
|
+
try:
|
|
881
|
+
f.result()
|
|
882
|
+
except Exception:
|
|
883
|
+
logger.warning("Deferred store %s failed", name, exc_info=True)
|
|
884
|
+
|
|
885
|
+
fut.add_done_callback(_on_done)
|
|
886
|
+
return None
|
|
887
|
+
|
|
888
|
+
@staticmethod
|
|
889
|
+
def flush_pending_writes(timeout: Optional[float] = 5.0) -> None:
|
|
890
|
+
"""Give in-flight fire-and-forget store writes a chance to complete.
|
|
843
891
|
|
|
844
|
-
|
|
845
|
-
|
|
892
|
+
Called from :meth:`close`/:meth:`aclose` so a shutting-down worker does
|
|
893
|
+
not exit mid-write. Best-effort: never raises on a slow/failed write.
|
|
894
|
+
"""
|
|
895
|
+
with _BG_WRITES_LOCK:
|
|
896
|
+
pending = [f for f in _BG_WRITES if not f.done()]
|
|
897
|
+
if not pending:
|
|
898
|
+
return
|
|
899
|
+
try:
|
|
900
|
+
concurrent.futures.wait(pending, timeout=timeout)
|
|
901
|
+
except Exception: # pragma: no cover - defensive
|
|
902
|
+
logger.debug("flush_pending_writes wait interrupted", exc_info=True)
|
|
846
903
|
|
|
847
904
|
@staticmethod
|
|
848
905
|
async def _dispatch_async(store, sync_name, async_name, *args, **kwargs):
|
|
@@ -1149,6 +1206,11 @@ class PraisonAIDB:
|
|
|
1149
1206
|
loop) so init/close can never race and leave a half-closed adapter that
|
|
1150
1207
|
reports ``_initialized`` while its stores are shut.
|
|
1151
1208
|
"""
|
|
1209
|
+
# Flush any fire-and-forget writes submitted from a running loop before
|
|
1210
|
+
# tearing stores down, so a shutting-down worker does not drop in-flight
|
|
1211
|
+
# persistence. Runs off the event loop to avoid blocking it.
|
|
1212
|
+
await asyncio.to_thread(self.flush_pending_writes)
|
|
1213
|
+
|
|
1152
1214
|
if self._ainit_lock is None:
|
|
1153
1215
|
self._ainit_lock = asyncio.Lock()
|
|
1154
1216
|
|
|
@@ -1209,6 +1271,9 @@ class PraisonAIDB:
|
|
|
1209
1271
|
reused ``with db: ...`` block) triggers a clean re-initialisation via
|
|
1210
1272
|
``_init_stores()`` instead of dispatching to a closed store.
|
|
1211
1273
|
"""
|
|
1274
|
+
# Flush fire-and-forget writes submitted from a running loop before
|
|
1275
|
+
# tearing stores down so shutdown does not drop in-flight persistence.
|
|
1276
|
+
self.flush_pending_writes()
|
|
1212
1277
|
with self._init_lock:
|
|
1213
1278
|
stores = (
|
|
1214
1279
|
self._conversation_store,
|
|
@@ -11,6 +11,10 @@ from .base import BaseFrameworkAdapter, warn_unsupported_fields
|
|
|
11
11
|
|
|
12
12
|
logger = logging.getLogger(__name__)
|
|
13
13
|
|
|
14
|
+
# Extended YAML fields every AutoGen-family backend consumes. The rest are
|
|
15
|
+
# dropped and surfaced via warn_unsupported_fields.
|
|
16
|
+
_AUTOGEN_SUPPORTED_FIELDS = frozenset({"llm", "function_calling_llm"})
|
|
17
|
+
|
|
14
18
|
|
|
15
19
|
class AutoGenAdapter(BaseFrameworkAdapter):
|
|
16
20
|
"""Adapter for AutoGen v0.2 framework with version resolution."""
|
|
@@ -20,6 +24,7 @@ class AutoGenAdapter(BaseFrameworkAdapter):
|
|
|
20
24
|
requires_tools_extra = True
|
|
21
25
|
# AutoGen v0.2 is sync-only; arun offloads run() to a bounded pool.
|
|
22
26
|
SUPPORTS_ASYNC = False
|
|
27
|
+
SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
|
|
23
28
|
|
|
24
29
|
def is_available(self) -> bool:
|
|
25
30
|
"""Check if AutoGen v0.2 is available for import."""
|
|
@@ -203,7 +208,7 @@ class AutoGenAdapter(BaseFrameworkAdapter):
|
|
|
203
208
|
# Create agents from the normalized specs
|
|
204
209
|
for spec in specs:
|
|
205
210
|
# Surface any extended YAML fields this backend silently drops
|
|
206
|
-
warn_unsupported_fields(self
|
|
211
|
+
warn_unsupported_fields(self, spec.extras)
|
|
207
212
|
|
|
208
213
|
# Create AutoGen assistant agent
|
|
209
214
|
agents[spec.key] = autogen.AssistantAgent(
|
|
@@ -288,6 +293,7 @@ class AutoGenV4Adapter(BaseFrameworkAdapter):
|
|
|
288
293
|
install_hint = 'pip install "praisonai-frameworks[autogen-v4]"'
|
|
289
294
|
requires_tools_extra = True
|
|
290
295
|
implemented: bool = False # explicit marker
|
|
296
|
+
SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
|
|
291
297
|
|
|
292
298
|
def is_available(self) -> bool:
|
|
293
299
|
"""Check if AutoGen v0.4 is available for import."""
|
|
@@ -335,6 +341,7 @@ class AG2Adapter(BaseFrameworkAdapter):
|
|
|
335
341
|
install_hint = 'pip install "praisonai-frameworks[ag2]"'
|
|
336
342
|
requires_tools_extra = False
|
|
337
343
|
implemented: bool = False # explicit marker
|
|
344
|
+
SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
|
|
338
345
|
|
|
339
346
|
def is_available(self) -> bool:
|
|
340
347
|
"""Check if AG2 is available for import."""
|
|
@@ -384,6 +391,7 @@ class AutoGenFamilyAdapter(BaseFrameworkAdapter):
|
|
|
384
391
|
name = "autogen"
|
|
385
392
|
install_hint = 'pip install "praisonai-frameworks[autogen]"'
|
|
386
393
|
is_router = True
|
|
394
|
+
SUPPORTED_YAML_FIELDS = _AUTOGEN_SUPPORTED_FIELDS
|
|
387
395
|
|
|
388
396
|
def is_available(self) -> bool:
|
|
389
397
|
"""Check if any AutoGen variant is runnable.
|
|
@@ -10,7 +10,7 @@ from __future__ import annotations
|
|
|
10
10
|
import logging
|
|
11
11
|
import threading
|
|
12
12
|
from contextlib import contextmanager
|
|
13
|
-
from typing import Any, Callable, Dict, List, Optional
|
|
13
|
+
from typing import Any, Callable, ClassVar, Dict, FrozenSet, List, Optional
|
|
14
14
|
|
|
15
15
|
from praisonaiagents.frameworks.base import BaseFrameworkAdapter as _CoreBaseFrameworkAdapter
|
|
16
16
|
from praisonaiagents.frameworks.protocols import FrameworkAdapterProtocol
|
|
@@ -20,51 +20,45 @@ FrameworkAdapter = FrameworkAdapterProtocol
|
|
|
20
20
|
|
|
21
21
|
logger = logging.getLogger(__name__)
|
|
22
22
|
|
|
23
|
-
# Extended YAML fields each backend actually consumes. Only ``framework:
|
|
24
|
-
# praisonai`` honours the full wrapper feature set (approval, guardrails,
|
|
25
|
-
# autonomy, ...); the other backends read a hand-picked subset. Anything a YAML
|
|
26
|
-
# declares that the target adapter does not read is silently dropped today, so
|
|
27
|
-
# warn the user rather than let a safety-relevant field (e.g. ``approval``) be
|
|
28
|
-
# ignored without any diagnostic.
|
|
29
|
-
_AUTOGEN_SUPPORTED = {"llm", "function_calling_llm"}
|
|
30
|
-
_ADAPTER_SUPPORTED_FIELDS: Dict[str, set] = {
|
|
31
|
-
"crewai": {
|
|
32
|
-
"allow_delegation", "max_iter", "max_rpm", "max_execution_time",
|
|
33
|
-
"verbose", "cache", "system_template", "prompt_template",
|
|
34
|
-
"response_template", "llm", "function_calling_llm",
|
|
35
|
-
},
|
|
36
|
-
"autogen": _AUTOGEN_SUPPORTED,
|
|
37
|
-
"autogen_v2": _AUTOGEN_SUPPORTED,
|
|
38
|
-
"autogen_v4": _AUTOGEN_SUPPORTED,
|
|
39
|
-
"ag2": _AUTOGEN_SUPPORTED,
|
|
40
|
-
}
|
|
41
|
-
|
|
42
23
|
# Structural keys handled by the spec builder itself — never "unsupported".
|
|
43
24
|
_STRUCTURAL_FIELDS = {"tools", "tasks", "role", "goal", "backstory"}
|
|
44
25
|
|
|
45
26
|
|
|
46
|
-
def warn_unsupported_fields(
|
|
27
|
+
def warn_unsupported_fields(adapter: Any, spec_extras: Dict[str, Any]) -> None:
|
|
47
28
|
"""Warn once per agent when a backend ignores declared YAML fields.
|
|
48
29
|
|
|
49
|
-
|
|
50
|
-
|
|
30
|
+
Each adapter declares the extended fields it consumes via the
|
|
31
|
+
``SUPPORTED_YAML_FIELDS`` class attribute (single source of truth: the
|
|
32
|
+
adapter that reads a field owns the fact that it reads it). An empty set
|
|
33
|
+
means "supports everything" — ``framework: praisonai`` honours the full
|
|
34
|
+
feature set, so no warning is emitted there.
|
|
35
|
+
|
|
36
|
+
Non-breaking: pure visibility. Anything a YAML declares that the target
|
|
37
|
+
adapter does not read is silently dropped otherwise, so warn rather than
|
|
38
|
+
let a safety-relevant field (e.g. ``approval``) be ignored without any
|
|
39
|
+
diagnostic.
|
|
51
40
|
"""
|
|
52
|
-
|
|
41
|
+
supported = getattr(adapter, "SUPPORTED_YAML_FIELDS", frozenset())
|
|
42
|
+
if not supported:
|
|
53
43
|
return
|
|
54
|
-
|
|
55
|
-
declared = set(spec_extras.keys())
|
|
56
|
-
unhandled = declared - supported - _STRUCTURAL_FIELDS
|
|
44
|
+
unhandled = set(spec_extras.keys()) - supported - _STRUCTURAL_FIELDS
|
|
57
45
|
if unhandled:
|
|
58
46
|
logger.warning(
|
|
59
47
|
"framework=%r ignores YAML field(s) %s for agent %r; "
|
|
60
48
|
"these are only honoured by framework=praisonai.",
|
|
61
|
-
|
|
49
|
+
getattr(adapter, "name", "?"), sorted(unhandled), spec_extras.get("role"),
|
|
62
50
|
)
|
|
63
51
|
|
|
64
52
|
|
|
65
53
|
class BaseFrameworkAdapter(_CoreBaseFrameworkAdapter):
|
|
66
54
|
"""Wrapper base adapter with PraisonAIModel LLM resolution for CrewAI etc."""
|
|
67
55
|
|
|
56
|
+
# Extended YAML fields this backend actually consumes. The empty default
|
|
57
|
+
# means "supports everything" (the ``praisonai`` backend). Backends that
|
|
58
|
+
# read only a subset override this with the exact set they honour, so
|
|
59
|
+
# ``warn_unsupported_fields`` can surface silently-dropped fields.
|
|
60
|
+
SUPPORTED_YAML_FIELDS: ClassVar[FrozenSet[str]] = frozenset()
|
|
61
|
+
|
|
68
62
|
# CLI runtime capabilities are opt-in. Adapters that do not implement
|
|
69
63
|
# these contracts must fail before dispatch instead of silently ignoring
|
|
70
64
|
# session or structured-stream flags.
|
|
@@ -19,6 +19,13 @@ class CrewAIAdapter(BaseFrameworkAdapter):
|
|
|
19
19
|
requires_tools_extra = True
|
|
20
20
|
# CrewAI's kickoff() is sync-only; arun offloads run() to a bounded pool.
|
|
21
21
|
SUPPORTS_ASYNC = False
|
|
22
|
+
# Extended YAML fields CrewAI actually consumes; the rest are dropped and
|
|
23
|
+
# warned about via warn_unsupported_fields.
|
|
24
|
+
SUPPORTED_YAML_FIELDS = frozenset({
|
|
25
|
+
"allow_delegation", "max_iter", "max_rpm", "max_execution_time",
|
|
26
|
+
"verbose", "cache", "system_template", "prompt_template",
|
|
27
|
+
"response_template", "llm", "function_calling_llm",
|
|
28
|
+
})
|
|
22
29
|
|
|
23
30
|
def is_available(self) -> bool:
|
|
24
31
|
"""Check if CrewAI is available for import."""
|
|
@@ -88,7 +95,7 @@ class CrewAIAdapter(BaseFrameworkAdapter):
|
|
|
88
95
|
details = spec.extras
|
|
89
96
|
|
|
90
97
|
# Surface any extended YAML fields this backend silently drops
|
|
91
|
-
warn_unsupported_fields(self
|
|
98
|
+
warn_unsupported_fields(self, details)
|
|
92
99
|
|
|
93
100
|
# Configure LLM using shared resolver
|
|
94
101
|
llm = self._resolve_llm(details.get('llm'), llm_config)
|
|
@@ -124,25 +124,25 @@ class PraisonAIAdapter(BaseFrameworkAdapter):
|
|
|
124
124
|
if isinstance(model_config, dict) and 'runtime' in model_config:
|
|
125
125
|
return model_config['runtime']
|
|
126
126
|
|
|
127
|
-
# 4. Check provider-scoped runtime
|
|
127
|
+
# 4. Check provider-scoped runtime. Provider inference is data-driven
|
|
128
|
+
# and entry-point-extensible (core SDK), so any declared vendor —
|
|
129
|
+
# groq, deepseek, mistral, cohere, ... — resolves, not just three.
|
|
128
130
|
if agent_model and 'providers' in config:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
provider = agent_model.split('/')[0]
|
|
133
|
-
elif 'claude' in agent_model.lower():
|
|
134
|
-
provider = 'anthropic'
|
|
135
|
-
elif 'gpt' in agent_model.lower():
|
|
136
|
-
provider = 'openai'
|
|
137
|
-
elif 'gemini' in agent_model.lower():
|
|
138
|
-
provider = 'google'
|
|
139
|
-
|
|
131
|
+
from praisonaiagents.llm.model_providers import resolve_provider
|
|
132
|
+
|
|
133
|
+
provider = resolve_provider(agent_model)
|
|
140
134
|
if provider:
|
|
141
135
|
providers_config = config['providers']
|
|
142
136
|
if isinstance(providers_config, dict) and provider in providers_config:
|
|
143
137
|
provider_config = providers_config[provider]
|
|
144
138
|
if isinstance(provider_config, dict) and 'runtime_default' in provider_config:
|
|
145
139
|
return provider_config['runtime_default']
|
|
140
|
+
else:
|
|
141
|
+
logger.debug(
|
|
142
|
+
"runtime resolution: no provider registered for model %r; "
|
|
143
|
+
"provider-scoped 'runtime_default' not consulted",
|
|
144
|
+
agent_model,
|
|
145
|
+
)
|
|
146
146
|
|
|
147
147
|
# 5. Check global config
|
|
148
148
|
global_config = config.get('config', {})
|