PraisonAI 4.6.150__tar.gz → 4.6.151__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.6.150 → praisonai-4.6.151}/PKG-INFO +7 -7
- {praisonai-4.6.150 → praisonai-4.6.151}/PraisonAI.egg-info/PKG-INFO +7 -7
- {praisonai-4.6.150 → praisonai-4.6.151}/PraisonAI.egg-info/SOURCES.txt +0 -2
- {praisonai-4.6.150 → praisonai-4.6.151}/PraisonAI.egg-info/requires.txt +6 -6
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/agents_generator.py +10 -4
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/api/agent_invoke.py +122 -6
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/auto.py +44 -36
- praisonai-4.6.151/praisonai/version.py +1 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/pyproject.toml +6 -6
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_n8n_agent_invoke.py +135 -0
- praisonai-4.6.150/praisonai/ui/callbacks.py +0 -57
- praisonai-4.6.150/praisonai/ui/components/aicoder.py +0 -343
- praisonai-4.6.150/praisonai/version.py +0 -1
- {praisonai-4.6.150 → praisonai-4.6.151}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/README.md +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/__main__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_logging.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/api/call.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/interactive_legacy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/legacy/workflow_commands.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/crewai_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/tests/test_registry_lazy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/profiler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/push/client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/_delivery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/setup.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/train.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/setup.cfg +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_basic.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_runner.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.151}/tests/test_serve_features.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.151
|
|
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,12 +11,12 @@ 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.6.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.0.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.0.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.0.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.0.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.0.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.154
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.50
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.0.35
|
|
17
|
+
Requires-Dist: praisonai-train>=0.0.6
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.0.3
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.0.3
|
|
20
20
|
Requires-Dist: python-dotenv>=0.19.0
|
|
21
21
|
Requires-Dist: litellm<2,>=1.83.14
|
|
22
22
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.151
|
|
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,12 +11,12 @@ 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.6.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.0.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.0.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.0.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.0.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.0.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.154
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.50
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.0.35
|
|
17
|
+
Requires-Dist: praisonai-train>=0.0.6
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.0.3
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.0.3
|
|
20
20
|
Requires-Dist: python-dotenv>=0.19.0
|
|
21
21
|
Requires-Dist: litellm<2,>=1.83.14
|
|
22
22
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -558,10 +558,8 @@ praisonai/tools/skill_manage.py
|
|
|
558
558
|
praisonai/train/__init__.py
|
|
559
559
|
praisonai/ui/_aiui_datastore.py
|
|
560
560
|
praisonai/ui/_external_agents.py
|
|
561
|
-
praisonai/ui/callbacks.py
|
|
562
561
|
praisonai/ui/context.py
|
|
563
562
|
praisonai/ui/database_config.py
|
|
564
|
-
praisonai/ui/components/aicoder.py
|
|
565
563
|
praisonai/ui_agents/__init__.py
|
|
566
564
|
praisonai/ui_agents/default_app.py
|
|
567
565
|
praisonai/ui_bot/__init__.py
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.6.
|
|
5
|
-
praisonai-code>=0.0.
|
|
6
|
-
praisonai-bot>=0.0.
|
|
7
|
-
praisonai-train>=0.0.
|
|
8
|
-
praisonai-browser>=0.0.
|
|
9
|
-
praisonai-mcp>=0.0.
|
|
4
|
+
praisonaiagents>=1.6.154
|
|
5
|
+
praisonai-code>=0.0.50
|
|
6
|
+
praisonai-bot>=0.0.35
|
|
7
|
+
praisonai-train>=0.0.6
|
|
8
|
+
praisonai-browser>=0.0.3
|
|
9
|
+
praisonai-mcp>=0.0.3
|
|
10
10
|
python-dotenv>=0.19.0
|
|
11
11
|
litellm<2,>=1.83.14
|
|
12
12
|
PyYAML>=6.0
|
|
@@ -401,7 +401,7 @@ def _resolve_yaml_cli_backend(cli_backend_config, logger):
|
|
|
401
401
|
|
|
402
402
|
|
|
403
403
|
class AgentsGenerator:
|
|
404
|
-
def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None, tool_timeout_executor=None):
|
|
404
|
+
def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None, tool_timeout_executor=None, tool_resolver=None):
|
|
405
405
|
"""
|
|
406
406
|
Initialize the AgentsGenerator object.
|
|
407
407
|
|
|
@@ -416,6 +416,7 @@ class AgentsGenerator:
|
|
|
416
416
|
tools (dict, optional): A dictionary containing the tools to be used for the agents. Defaults to None.
|
|
417
417
|
cli_config (dict, optional): CLI configuration to override YAML settings. Defaults to None.
|
|
418
418
|
adapter_registry (FrameworkAdapterRegistry, optional): Registry for framework adapters. Defaults to process default.
|
|
419
|
+
tool_resolver (ToolResolver, optional): Canonical tool resolver. Defaults to the shared context-local resolver so discovery runs once per run.
|
|
419
420
|
|
|
420
421
|
Attributes:
|
|
421
422
|
agent_file (str): The path to the agent file.
|
|
@@ -448,9 +449,14 @@ class AgentsGenerator:
|
|
|
448
449
|
elif os.environ.get('LOGLEVEL'):
|
|
449
450
|
self.logger.setLevel(getattr(logging, os.environ.get('LOGLEVEL', 'INFO').upper(), logging.INFO))
|
|
450
451
|
|
|
451
|
-
# Initialize tool resolver (single source of truth for tool resolution)
|
|
452
|
-
|
|
453
|
-
|
|
452
|
+
# Initialize tool resolver (single source of truth for tool resolution).
|
|
453
|
+
# DI-friendly: callers (e.g. AutoGenerator hand-off, tests) may pass a
|
|
454
|
+
# resolver; otherwise share the context-local default so tool discovery
|
|
455
|
+
# runs once per run instead of once per generator construction.
|
|
456
|
+
if tool_resolver is None:
|
|
457
|
+
from .tool_resolver import _get_default_resolver
|
|
458
|
+
tool_resolver = _get_default_resolver()
|
|
459
|
+
self.tool_resolver = tool_resolver
|
|
454
460
|
|
|
455
461
|
# DI-friendly: tests/multi-tenant runtimes pass their own registry;
|
|
456
462
|
# CLI users get the process default.
|
|
@@ -168,6 +168,109 @@ def list_registered_agents() -> list:
|
|
|
168
168
|
return list(_agent_registry.keys())
|
|
169
169
|
|
|
170
170
|
|
|
171
|
+
def _is_real_agent(agent: Any) -> bool:
|
|
172
|
+
"""Return True when ``agent`` is a genuine ``praisonaiagents`` ``Agent``.
|
|
173
|
+
|
|
174
|
+
Uses ``isinstance`` against the real ``Agent`` class so **subclasses defined
|
|
175
|
+
in application code** are recognised too (they inherit the per-session
|
|
176
|
+
machinery and ``clone_for_channel``). Plain mocks / lightweight callables are
|
|
177
|
+
not ``Agent`` instances, so they fall back to the shared instance for
|
|
178
|
+
backward compatibility. If ``praisonaiagents`` cannot be imported we treat
|
|
179
|
+
the object as non-isolatable.
|
|
180
|
+
"""
|
|
181
|
+
try:
|
|
182
|
+
from praisonaiagents import Agent
|
|
183
|
+
except Exception:
|
|
184
|
+
return False
|
|
185
|
+
return isinstance(agent, Agent)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _supports_session_isolation(agent: Any) -> bool:
|
|
189
|
+
"""Return True when ``agent`` can be safely cloned per session.
|
|
190
|
+
|
|
191
|
+
A real ``Agent`` (or any subclass) exposes the per-session machinery
|
|
192
|
+
(``_session_id`` binding, ``chat_history`` and a safe clone path). Plain
|
|
193
|
+
mocks / lightweight callables do not, so they stay on the shared instance to
|
|
194
|
+
preserve backward compatibility.
|
|
195
|
+
"""
|
|
196
|
+
if not _is_real_agent(agent):
|
|
197
|
+
return False
|
|
198
|
+
if not hasattr(agent, "_session_id"):
|
|
199
|
+
return False
|
|
200
|
+
if not hasattr(agent, "chat_history"):
|
|
201
|
+
return False
|
|
202
|
+
return callable(getattr(agent, "clone_for_channel", None))
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def _clone_agent(agent: Any) -> Any:
|
|
206
|
+
"""Create an independent copy of a real ``Agent``.
|
|
207
|
+
|
|
208
|
+
Prefers ``clone_for_channel`` (purpose-built for multi-channel isolation
|
|
209
|
+
with fresh locks), falling back to ``deepcopy``.
|
|
210
|
+
"""
|
|
211
|
+
clone_for_channel = getattr(agent, "clone_for_channel", None)
|
|
212
|
+
if callable(clone_for_channel):
|
|
213
|
+
return clone_for_channel()
|
|
214
|
+
import copy as _copy
|
|
215
|
+
|
|
216
|
+
return _copy.deepcopy(agent)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def resolve_session_agent(agent_id: str, session_id: Optional[str]) -> Any:
|
|
220
|
+
"""Resolve an isolated, session-scoped agent for a single request.
|
|
221
|
+
|
|
222
|
+
The registry holds a *template* agent, not a live conversation. Every
|
|
223
|
+
request gets its own clone so concurrent callers never share mutable
|
|
224
|
+
``chat_history``:
|
|
225
|
+
|
|
226
|
+
- With a ``session_id``: the clone is bound to that session so its history
|
|
227
|
+
is loaded from (and persisted to) the shared, file-locked session store —
|
|
228
|
+
giving continuity across requests and isolation between sessions.
|
|
229
|
+
- Without a ``session_id``: the clone is ephemeral (no session binding), so
|
|
230
|
+
no global state is mutated.
|
|
231
|
+
|
|
232
|
+
Agents that don't support cloning/session binding (e.g. plain mocks) fall
|
|
233
|
+
back to the shared registry instance for backward compatibility.
|
|
234
|
+
"""
|
|
235
|
+
template = get_agent(agent_id)
|
|
236
|
+
if template is None:
|
|
237
|
+
return None
|
|
238
|
+
|
|
239
|
+
if not _supports_session_isolation(template):
|
|
240
|
+
return template
|
|
241
|
+
|
|
242
|
+
try:
|
|
243
|
+
agent = _clone_agent(template)
|
|
244
|
+
except Exception as e:
|
|
245
|
+
# A clone failure must never silently fall back to the shared template:
|
|
246
|
+
# doing so would leak one session's chat_history into another. Fail the
|
|
247
|
+
# request instead so isolation is guaranteed.
|
|
248
|
+
logger.error(
|
|
249
|
+
f"Failed to clone agent '{agent_id}' for session isolation: {e}"
|
|
250
|
+
)
|
|
251
|
+
raise RuntimeError(
|
|
252
|
+
f"Failed to isolate agent '{agent_id}' for session: {e}"
|
|
253
|
+
) from e
|
|
254
|
+
|
|
255
|
+
# Reset per-request conversation state so the clone starts clean and
|
|
256
|
+
# (re)loads the requested session's history lazily on first chat.
|
|
257
|
+
try:
|
|
258
|
+
agent.chat_history = []
|
|
259
|
+
except Exception:
|
|
260
|
+
pass
|
|
261
|
+
if hasattr(agent, "_session_store_initialized"):
|
|
262
|
+
agent._session_store_initialized = False
|
|
263
|
+
if session_id:
|
|
264
|
+
agent._session_id = session_id
|
|
265
|
+
if hasattr(agent, "_history_session_id"):
|
|
266
|
+
agent._history_session_id = session_id
|
|
267
|
+
else:
|
|
268
|
+
agent._session_id = None
|
|
269
|
+
if hasattr(agent, "_history_session_id"):
|
|
270
|
+
agent._history_session_id = None
|
|
271
|
+
return agent
|
|
272
|
+
|
|
273
|
+
|
|
171
274
|
def _supports_async_start(agent: Any) -> bool:
|
|
172
275
|
"""Return True if agent.astart is a coroutine function."""
|
|
173
276
|
astart = getattr(agent, "astart", None)
|
|
@@ -218,8 +321,17 @@ if FASTAPI_AVAILABLE and APIRouter is not None:
|
|
|
218
321
|
}
|
|
219
322
|
```
|
|
220
323
|
"""
|
|
221
|
-
#
|
|
222
|
-
|
|
324
|
+
# Resolve a per-session isolated agent view so concurrent callers never
|
|
325
|
+
# share mutable chat_history. A provided session_id gives continuity via
|
|
326
|
+
# the shared session store; its absence yields an ephemeral conversation.
|
|
327
|
+
try:
|
|
328
|
+
agent = resolve_session_agent(agent_id, request.session_id)
|
|
329
|
+
except Exception as e:
|
|
330
|
+
logger.error(f"Failed to isolate agent {agent_id}: {e}")
|
|
331
|
+
raise HTTPException(
|
|
332
|
+
status_code=500,
|
|
333
|
+
detail=f"Agent execution failed: {str(e)}"
|
|
334
|
+
)
|
|
223
335
|
if not agent:
|
|
224
336
|
logger.error(f"Agent not found: {agent_id}")
|
|
225
337
|
raise HTTPException(
|
|
@@ -228,7 +340,7 @@ if FASTAPI_AVAILABLE and APIRouter is not None:
|
|
|
228
340
|
)
|
|
229
341
|
|
|
230
342
|
try:
|
|
231
|
-
#
|
|
343
|
+
# Session ID echoed back to the caller
|
|
232
344
|
session_id = request.session_id or "default"
|
|
233
345
|
|
|
234
346
|
# Apply agent config overrides if provided
|
|
@@ -362,15 +474,19 @@ async def invoke_agent_standalone(
|
|
|
362
474
|
This can be used in environments where FastAPI is not available
|
|
363
475
|
or when integrating with other web frameworks.
|
|
364
476
|
"""
|
|
365
|
-
|
|
366
|
-
if not agent:
|
|
477
|
+
if get_agent(agent_id) is None:
|
|
367
478
|
return {
|
|
368
479
|
"error": f"Agent '{agent_id}' not found",
|
|
369
480
|
"status": "error",
|
|
370
481
|
"available_agents": list_registered_agents()
|
|
371
482
|
}
|
|
372
|
-
|
|
483
|
+
|
|
373
484
|
try:
|
|
485
|
+
# Per-session isolated agent view (see resolve_session_agent). Done
|
|
486
|
+
# inside the try so a clone/isolation failure returns a clean error
|
|
487
|
+
# rather than leaking one session's history into another.
|
|
488
|
+
agent = resolve_session_agent(agent_id, session_id)
|
|
489
|
+
|
|
374
490
|
# Apply config if provided
|
|
375
491
|
if agent_config:
|
|
376
492
|
logger.debug(f"Agent config provided: {agent_config}")
|
|
@@ -733,10 +733,50 @@ class BaseAutoGenerator:
|
|
|
733
733
|
raise error[0]
|
|
734
734
|
return result[0]
|
|
735
735
|
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
736
|
+
def _get_tool_resolver(self):
|
|
737
|
+
"""Lazily construct the canonical ToolResolver (single source of truth).
|
|
738
|
+
|
|
739
|
+
Uses the shared context-local resolver so every generator in a run
|
|
740
|
+
(auto phase + AgentsGenerator + workflow/job generators) reuses one
|
|
741
|
+
warm cache instead of repeating full tool discovery. Kept lazy so
|
|
742
|
+
importing auto.py stays cheap and so a resolver-construction failure
|
|
743
|
+
never blocks generation — callers fall back to keyword/legacy hints.
|
|
744
|
+
"""
|
|
745
|
+
resolver = getattr(self, "_tool_resolver", None)
|
|
746
|
+
if resolver is None:
|
|
747
|
+
try:
|
|
748
|
+
from .tool_resolver import _get_default_resolver
|
|
749
|
+
resolver = _get_default_resolver()
|
|
750
|
+
except Exception as e: # pragma: no cover - defensive
|
|
751
|
+
logger.debug("ToolResolver unavailable (%s); using keyword hints only.", e)
|
|
752
|
+
resolver = False # sentinel: attempted, not available
|
|
753
|
+
self._tool_resolver = resolver
|
|
754
|
+
return resolver or None
|
|
755
|
+
|
|
756
|
+
def _available_tools(self) -> List[str]:
|
|
757
|
+
"""Return the real, installed tool names from the canonical ToolResolver.
|
|
758
|
+
|
|
759
|
+
This is the single source of truth shared with AgentsGenerator. Returns
|
|
760
|
+
an empty list if the resolver is unavailable so callers can fall back.
|
|
761
|
+
"""
|
|
762
|
+
resolver = self._get_tool_resolver()
|
|
763
|
+
if resolver is None:
|
|
764
|
+
return []
|
|
765
|
+
try:
|
|
766
|
+
return sorted(resolver.list_available().keys())
|
|
767
|
+
except Exception as e: # pragma: no cover - defensive
|
|
768
|
+
logger.debug("ToolResolver.list_available() failed (%s).", e)
|
|
769
|
+
return []
|
|
770
|
+
|
|
771
|
+
def get_available_tools(self) -> List[str]:
|
|
772
|
+
"""Return list of available tools for agent assignment.
|
|
773
|
+
|
|
774
|
+
Routes through the canonical ToolResolver (single source of truth) so
|
|
775
|
+
the LLM is shown only tools that are actually installed. Falls back to
|
|
776
|
+
the frozen ``AVAILABLE_TOOLS`` list solely when the resolver is
|
|
777
|
+
unavailable or returns nothing.
|
|
778
|
+
"""
|
|
779
|
+
return self._available_tools() or AVAILABLE_TOOLS.copy()
|
|
740
780
|
|
|
741
781
|
@staticmethod
|
|
742
782
|
def analyze_complexity(topic: str) -> str:
|
|
@@ -1103,38 +1143,6 @@ class AutoGenerator(BaseAutoGenerator):
|
|
|
1103
1143
|
|
|
1104
1144
|
return merged_data
|
|
1105
1145
|
|
|
1106
|
-
def _get_tool_resolver(self):
|
|
1107
|
-
"""Lazily construct the canonical ToolResolver (single source of truth).
|
|
1108
|
-
|
|
1109
|
-
Kept lazy so importing auto.py stays cheap and so a resolver-construction
|
|
1110
|
-
failure never blocks generation — callers fall back to keyword hints.
|
|
1111
|
-
"""
|
|
1112
|
-
resolver = getattr(self, "_tool_resolver", None)
|
|
1113
|
-
if resolver is None:
|
|
1114
|
-
try:
|
|
1115
|
-
from .tool_resolver import ToolResolver
|
|
1116
|
-
resolver = ToolResolver()
|
|
1117
|
-
except Exception as e: # pragma: no cover - defensive
|
|
1118
|
-
logger.debug("ToolResolver unavailable (%s); using keyword hints only.", e)
|
|
1119
|
-
resolver = False # sentinel: attempted, not available
|
|
1120
|
-
self._tool_resolver = resolver
|
|
1121
|
-
return resolver or None
|
|
1122
|
-
|
|
1123
|
-
def _available_tools(self) -> List[str]:
|
|
1124
|
-
"""Return the real, installed tool names from the canonical ToolResolver.
|
|
1125
|
-
|
|
1126
|
-
This is the single source of truth shared with AgentsGenerator. Returns
|
|
1127
|
-
an empty list if the resolver is unavailable so callers can fall back.
|
|
1128
|
-
"""
|
|
1129
|
-
resolver = self._get_tool_resolver()
|
|
1130
|
-
if resolver is None:
|
|
1131
|
-
return []
|
|
1132
|
-
try:
|
|
1133
|
-
return sorted(resolver.list_available().keys())
|
|
1134
|
-
except Exception as e: # pragma: no cover - defensive
|
|
1135
|
-
logger.debug("ToolResolver.list_available() failed (%s).", e)
|
|
1136
|
-
return []
|
|
1137
|
-
|
|
1138
1146
|
def discover_tools_for_topic(self) -> List[str]:
|
|
1139
1147
|
"""
|
|
1140
1148
|
Discover appropriate tools for the topic.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "4.6.151"
|
|
@@ -12,12 +12,12 @@ dependencies = [
|
|
|
12
12
|
"rich>=13.7",
|
|
13
13
|
"markdown>=3.5",
|
|
14
14
|
"pyparsing>=3.0.0",
|
|
15
|
-
"praisonaiagents>=1.6.
|
|
16
|
-
"praisonai-code>=0.0.
|
|
17
|
-
"praisonai-bot>=0.0.
|
|
18
|
-
"praisonai-train>=0.0.
|
|
19
|
-
"praisonai-browser>=0.0.
|
|
20
|
-
"praisonai-mcp>=0.0.
|
|
15
|
+
"praisonaiagents>=1.6.154",
|
|
16
|
+
"praisonai-code>=0.0.50",
|
|
17
|
+
"praisonai-bot>=0.0.35",
|
|
18
|
+
"praisonai-train>=0.0.6",
|
|
19
|
+
"praisonai-browser>=0.0.3",
|
|
20
|
+
"praisonai-mcp>=0.0.3",
|
|
21
21
|
"python-dotenv>=0.19.0",
|
|
22
22
|
"litellm>=1.83.14,<2",
|
|
23
23
|
"PyYAML>=6.0",
|
|
@@ -333,6 +333,141 @@ class TestAgentInvokeFastAPI:
|
|
|
333
333
|
assert response.status_code == 404
|
|
334
334
|
|
|
335
335
|
|
|
336
|
+
class TestSessionIsolation:
|
|
337
|
+
"""Verify session_id yields isolated + continuous conversations (Issue #3105)."""
|
|
338
|
+
|
|
339
|
+
def test_resolve_session_agent_falls_back_for_mocks(self):
|
|
340
|
+
"""Non-Agent objects (mocks) stay on the shared instance for back-compat."""
|
|
341
|
+
from praisonai.api.agent_invoke import (
|
|
342
|
+
register_agent,
|
|
343
|
+
unregister_agent,
|
|
344
|
+
resolve_session_agent,
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
mock_agent = Mock(spec=["start", "name"])
|
|
348
|
+
register_agent("mock-fallback", mock_agent)
|
|
349
|
+
try:
|
|
350
|
+
resolved = resolve_session_agent("mock-fallback", "s1")
|
|
351
|
+
assert resolved is mock_agent
|
|
352
|
+
finally:
|
|
353
|
+
unregister_agent("mock-fallback")
|
|
354
|
+
|
|
355
|
+
def test_resolve_session_agent_missing_returns_none(self):
|
|
356
|
+
from praisonai.api.agent_invoke import resolve_session_agent
|
|
357
|
+
|
|
358
|
+
assert resolve_session_agent("does-not-exist", "s1") is None
|
|
359
|
+
|
|
360
|
+
def test_real_agent_clones_are_isolated(self, tmp_path, monkeypatch):
|
|
361
|
+
"""Two session_ids produce distinct, isolated agent clones."""
|
|
362
|
+
praisonaiagents = pytest.importorskip("praisonaiagents")
|
|
363
|
+
from praisonai.api.agent_invoke import (
|
|
364
|
+
register_agent,
|
|
365
|
+
unregister_agent,
|
|
366
|
+
resolve_session_agent,
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
agent = praisonaiagents.Agent(
|
|
370
|
+
name="iso-agent",
|
|
371
|
+
instructions="test",
|
|
372
|
+
llm="gpt-4o-mini",
|
|
373
|
+
)
|
|
374
|
+
register_agent("iso-agent", agent)
|
|
375
|
+
try:
|
|
376
|
+
a = resolve_session_agent("iso-agent", "A")
|
|
377
|
+
b = resolve_session_agent("iso-agent", "B")
|
|
378
|
+
|
|
379
|
+
# Distinct clones, distinct histories, correct session binding.
|
|
380
|
+
assert a is not b
|
|
381
|
+
assert a is not agent
|
|
382
|
+
assert a._session_id == "A"
|
|
383
|
+
assert b._session_id == "B"
|
|
384
|
+
assert a.chat_history is not b.chat_history
|
|
385
|
+
|
|
386
|
+
# Mutating one clone's history does not affect the other or template.
|
|
387
|
+
a.chat_history.append({"role": "user", "content": "hi from A"})
|
|
388
|
+
assert b.chat_history == []
|
|
389
|
+
assert agent.chat_history == []
|
|
390
|
+
finally:
|
|
391
|
+
unregister_agent("iso-agent")
|
|
392
|
+
|
|
393
|
+
def test_no_session_id_is_ephemeral(self):
|
|
394
|
+
"""Absent session_id yields an unbound (ephemeral) clone."""
|
|
395
|
+
praisonaiagents = pytest.importorskip("praisonaiagents")
|
|
396
|
+
from praisonai.api.agent_invoke import (
|
|
397
|
+
register_agent,
|
|
398
|
+
unregister_agent,
|
|
399
|
+
resolve_session_agent,
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
agent = praisonaiagents.Agent(
|
|
403
|
+
name="ephemeral-agent",
|
|
404
|
+
instructions="test",
|
|
405
|
+
llm="gpt-4o-mini",
|
|
406
|
+
)
|
|
407
|
+
register_agent("ephemeral-agent", agent)
|
|
408
|
+
try:
|
|
409
|
+
clone = resolve_session_agent("ephemeral-agent", None)
|
|
410
|
+
assert clone is not agent
|
|
411
|
+
assert clone._session_id is None
|
|
412
|
+
assert clone.chat_history == []
|
|
413
|
+
finally:
|
|
414
|
+
unregister_agent("ephemeral-agent")
|
|
415
|
+
|
|
416
|
+
def test_agent_subclass_is_isolated(self):
|
|
417
|
+
"""Application-defined ``Agent`` subclasses are isolated, not shared."""
|
|
418
|
+
praisonaiagents = pytest.importorskip("praisonaiagents")
|
|
419
|
+
from praisonai.api.agent_invoke import (
|
|
420
|
+
register_agent,
|
|
421
|
+
unregister_agent,
|
|
422
|
+
resolve_session_agent,
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
class MyAgent(praisonaiagents.Agent):
|
|
426
|
+
pass
|
|
427
|
+
|
|
428
|
+
agent = MyAgent(name="sub-agent", instructions="test", llm="gpt-4o-mini")
|
|
429
|
+
register_agent("sub-agent", agent)
|
|
430
|
+
try:
|
|
431
|
+
a = resolve_session_agent("sub-agent", "A")
|
|
432
|
+
b = resolve_session_agent("sub-agent", "B")
|
|
433
|
+
# Subclass must be recognised and cloned per session, not shared.
|
|
434
|
+
assert a is not agent
|
|
435
|
+
assert isinstance(a, MyAgent)
|
|
436
|
+
assert a is not b
|
|
437
|
+
assert a._session_id == "A"
|
|
438
|
+
assert b._session_id == "B"
|
|
439
|
+
assert a.chat_history is not b.chat_history
|
|
440
|
+
finally:
|
|
441
|
+
unregister_agent("sub-agent")
|
|
442
|
+
|
|
443
|
+
def test_clone_failure_raises_instead_of_sharing(self, monkeypatch):
|
|
444
|
+
"""A clone failure must raise, never fall back to the shared template."""
|
|
445
|
+
praisonaiagents = pytest.importorskip("praisonaiagents")
|
|
446
|
+
from praisonai.api import agent_invoke
|
|
447
|
+
from praisonai.api.agent_invoke import (
|
|
448
|
+
register_agent,
|
|
449
|
+
unregister_agent,
|
|
450
|
+
resolve_session_agent,
|
|
451
|
+
)
|
|
452
|
+
|
|
453
|
+
agent = praisonaiagents.Agent(
|
|
454
|
+
name="clonefail-agent",
|
|
455
|
+
instructions="test",
|
|
456
|
+
llm="gpt-4o-mini",
|
|
457
|
+
)
|
|
458
|
+
register_agent("clonefail-agent", agent)
|
|
459
|
+
|
|
460
|
+
def _boom(_agent):
|
|
461
|
+
raise RuntimeError("clone exploded")
|
|
462
|
+
|
|
463
|
+
monkeypatch.setattr(agent_invoke, "_clone_agent", _boom)
|
|
464
|
+
try:
|
|
465
|
+
with pytest.raises(RuntimeError):
|
|
466
|
+
resolve_session_agent("clonefail-agent", "A")
|
|
467
|
+
finally:
|
|
468
|
+
unregister_agent("clonefail-agent")
|
|
469
|
+
|
|
470
|
+
|
|
336
471
|
def test_agent_invoke_smoke_test():
|
|
337
472
|
"""Smoke test to verify agent invoke module can be imported and used."""
|
|
338
473
|
try:
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from typing import Dict, Any, Callable, Optional, Union
|
|
3
|
-
import asyncio
|
|
4
|
-
|
|
5
|
-
logger = logging.getLogger(__name__)
|
|
6
|
-
|
|
7
|
-
class CallbackManager:
|
|
8
|
-
"""Manages callbacks for the PraisonAI UI"""
|
|
9
|
-
|
|
10
|
-
def __init__(self):
|
|
11
|
-
self._callbacks: Dict[str, Dict[str, Union[Callable, bool]]] = {}
|
|
12
|
-
|
|
13
|
-
def register(self, name: str, callback: Callable, is_async: bool = False) -> None:
|
|
14
|
-
"""Register a callback function"""
|
|
15
|
-
self._callbacks[name] = {
|
|
16
|
-
'func': callback,
|
|
17
|
-
'is_async': is_async
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async def call(self, name: str, **kwargs) -> None:
|
|
21
|
-
"""Call a registered callback"""
|
|
22
|
-
if name not in self._callbacks:
|
|
23
|
-
logger.warning(f"No callback registered for {name}")
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
callback_info = self._callbacks[name]
|
|
27
|
-
func = callback_info['func']
|
|
28
|
-
is_async = callback_info['is_async']
|
|
29
|
-
|
|
30
|
-
try:
|
|
31
|
-
if is_async:
|
|
32
|
-
await func(**kwargs)
|
|
33
|
-
else:
|
|
34
|
-
if asyncio.iscoroutinefunction(func):
|
|
35
|
-
await func(**kwargs)
|
|
36
|
-
else:
|
|
37
|
-
await asyncio.get_event_loop().run_in_executor(None, lambda: func(**kwargs))
|
|
38
|
-
except Exception as e:
|
|
39
|
-
logger.error(f"Error in callback {name}: {str(e)}")
|
|
40
|
-
|
|
41
|
-
# Global callback manager instance
|
|
42
|
-
callback_manager = CallbackManager()
|
|
43
|
-
|
|
44
|
-
def register_callback(name: str, callback: Callable, is_async: bool = False) -> None:
|
|
45
|
-
"""Register a callback with the global callback manager"""
|
|
46
|
-
callback_manager.register(name, callback, is_async)
|
|
47
|
-
|
|
48
|
-
async def trigger_callback(name: str, **kwargs) -> None:
|
|
49
|
-
"""Trigger a callback from the global callback manager"""
|
|
50
|
-
await callback_manager.call(name, **kwargs)
|
|
51
|
-
|
|
52
|
-
# Decorator for registering callbacks
|
|
53
|
-
def callback(name: str, is_async: bool = False):
|
|
54
|
-
def decorator(func):
|
|
55
|
-
register_callback(name, func, is_async)
|
|
56
|
-
return func
|
|
57
|
-
return decorator
|