PraisonAI 4.7.9__tar.gz → 4.7.10__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.9 → praisonai-4.7.10}/PKG-INFO +9 -9
- {praisonai-4.7.9 → praisonai-4.7.10}/PraisonAI.egg-info/PKG-INFO +9 -9
- {praisonai-4.7.9 → praisonai-4.7.10}/PraisonAI.egg-info/SOURCES.txt +1 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/PraisonAI.egg-info/requires.txt +8 -8
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_entrypoint.py +16 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/adapters/readers.py +23 -13
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/adapters/rerankers.py +14 -7
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/adapters/retrievers.py +16 -7
- praisonai-4.7.10/praisonai/integrations/_managed_base.py +87 -0
- praisonai-4.7.10/praisonai/integrations/backend_registry.py +129 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/managed_agents.py +27 -41
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/managed_local.py +34 -45
- praisonai-4.7.10/praisonai/version.py +1 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/pyproject.toml +8 -8
- praisonai-4.7.9/praisonai/integrations/backend_registry.py +0 -87
- praisonai-4.7.9/praisonai/version.py +0 -1
- {praisonai-4.7.9 → praisonai-4.7.10}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/README.md +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/__main__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_api_auth.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_logging.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/acp/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/acp/server.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/acp/session.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/agents_generator.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/api/call.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/app/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/app/agentos.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/auto.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/branding.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/_profiling.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/interactive_legacy.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/legacy/workflow_commands.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/main.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/config/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/config/agents.schema.json +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/config/schema.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/config/validator.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/history_store.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/queue.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/setup.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/db/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/db/adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/client.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/converter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/crewai_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/inc/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/inc/models.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/_sync_base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute/tenki.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/compute_managed_agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/models.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/router.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/server.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/jobs/store.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/env.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/llm/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/n8n/client.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/_ops.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/profiler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/push/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/push/client.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/push/transports.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/core.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/history.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/models.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/security.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/recipe/server.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/applier.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/judge.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/plan.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/player.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/reader.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/storage.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/replay/writer.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/_delivery.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/security/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/security/audit.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/security/injection.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/security/protected.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/setup/build.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/setup.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/models.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/_tool_sources.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/cache.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/loader.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/security.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tool_registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/audio.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/train/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/train.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/train_vision.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui/context.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_dashboard/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/praisonai/upload_vision.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/setup.cfg +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_approval_system.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_basic.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_cli_features.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_recipe.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_registry.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_runner.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.7.9 → praisonai-4.7.10}/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.10
|
|
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.8
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.7
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.7
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.7
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.7
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.9
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.7
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.7
|
|
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.10
|
|
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.8
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.7
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.7
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.7
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.7
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.9
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.7
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.7
|
|
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
|
|
@@ -314,6 +314,7 @@ praisonai/integration/pages/bot_health.py
|
|
|
314
314
|
praisonai/integration/pages/workflow_runs.py
|
|
315
315
|
praisonai/integrations/__init__.py
|
|
316
316
|
praisonai/integrations/_cli_loaders.py
|
|
317
|
+
praisonai/integrations/_managed_base.py
|
|
317
318
|
praisonai/integrations/_session_info.py
|
|
318
319
|
praisonai/integrations/_tool_aliases.py
|
|
319
320
|
praisonai/integrations/backend_registry.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.8
|
|
5
|
+
praisonai-code>=0.1.7
|
|
6
|
+
praisonai-bot>=0.1.7
|
|
7
|
+
praisonai-train>=0.1.7
|
|
8
|
+
praisonai-browser>=0.1.7
|
|
9
|
+
praisonai-mcp>=0.1.9
|
|
10
|
+
praisonai-sandbox>=0.1.7
|
|
11
|
+
praisonai-deploy>=0.1.7
|
|
12
12
|
python-dotenv>=0.19.0
|
|
13
13
|
litellm<2,>=1.83.14
|
|
14
14
|
PyYAML>=6.0
|
|
@@ -100,6 +100,14 @@ def run(agent_file: str,
|
|
|
100
100
|
"""
|
|
101
101
|
from .agents_generator import AgentsGenerator
|
|
102
102
|
|
|
103
|
+
# Wire the built-in readers/retrievers/rerankers into the core-SDK
|
|
104
|
+
# registries so YAML/CLI declarations (e.g. `retriever: fusion`,
|
|
105
|
+
# `reranker: llm`) resolve. Idempotent + thread-safe, and register-only-if-
|
|
106
|
+
# absent: a custom adapter already registered under a built-in name (e.g. a
|
|
107
|
+
# multi-tenant host's own `fusion`) is preserved, never overwritten.
|
|
108
|
+
from .adapters import register_default_adapters
|
|
109
|
+
register_default_adapters()
|
|
110
|
+
|
|
103
111
|
adapter, config_list = _resolve_run_inputs(framework)
|
|
104
112
|
_apply_model_override(config_list, kwargs)
|
|
105
113
|
cli_config = _merge_cli_config(cli_config, kwargs)
|
|
@@ -134,6 +142,14 @@ async def arun(agent_file: str,
|
|
|
134
142
|
|
|
135
143
|
from .agents_generator import AgentsGenerator
|
|
136
144
|
|
|
145
|
+
# Wire the built-in readers/retrievers/rerankers into the core-SDK
|
|
146
|
+
# registries so YAML/CLI declarations resolve. Run off the event loop since
|
|
147
|
+
# registration performs lazy imports. Idempotent + thread-safe, and
|
|
148
|
+
# register-only-if-absent: a custom adapter already registered under a
|
|
149
|
+
# built-in name is preserved, never overwritten.
|
|
150
|
+
from .adapters import register_default_adapters
|
|
151
|
+
await asyncio.to_thread(register_default_adapters)
|
|
152
|
+
|
|
137
153
|
# Resolve framework + build config_list off the caller's event loop so the
|
|
138
154
|
# synchronous credential/config-file I/O does not block it. This is the
|
|
139
155
|
# reason arun exists: a FastAPI handler awaiting arun must not stall the loop.
|
|
@@ -389,25 +389,35 @@ def register_default_readers():
|
|
|
389
389
|
from praisonaiagents.knowledge.readers import get_reader_registry
|
|
390
390
|
|
|
391
391
|
registry = get_reader_registry()
|
|
392
|
-
|
|
392
|
+
|
|
393
|
+
# Preserve any existing entry: an application (or a multi-tenant host) may
|
|
394
|
+
# have already registered a custom reader under a built-in name. Wiring the
|
|
395
|
+
# wrapper defaults must never silently replace it, so register only names
|
|
396
|
+
# that are not already present.
|
|
397
|
+
existing = set(registry.list_readers())
|
|
398
|
+
|
|
399
|
+
def _register(name, factory, extensions=None):
|
|
400
|
+
if name not in existing:
|
|
401
|
+
registry.register(name, factory, extensions)
|
|
402
|
+
|
|
393
403
|
# Register text reader
|
|
394
|
-
|
|
395
|
-
|
|
404
|
+
_register("text", TextReader, ["txt", "text", "log"])
|
|
405
|
+
|
|
396
406
|
# Register markitdown reader
|
|
397
|
-
|
|
398
|
-
|
|
407
|
+
_register("markitdown", MarkItDownReader, MarkItDownReader.supported_extensions)
|
|
408
|
+
|
|
399
409
|
# Register directory reader
|
|
400
|
-
|
|
401
|
-
|
|
410
|
+
_register("directory", DirectoryReader)
|
|
411
|
+
|
|
402
412
|
# Register glob reader
|
|
403
|
-
|
|
404
|
-
|
|
413
|
+
_register("glob", GlobReader)
|
|
414
|
+
|
|
405
415
|
# Register URL reader
|
|
406
|
-
|
|
407
|
-
|
|
416
|
+
_register("url", URLReader)
|
|
417
|
+
|
|
408
418
|
# Register auto reader
|
|
409
|
-
|
|
410
|
-
|
|
419
|
+
_register("auto", AutoReader)
|
|
420
|
+
|
|
411
421
|
logger.debug("Registered default readers")
|
|
412
422
|
|
|
413
423
|
|
|
@@ -324,18 +324,25 @@ def register_default_rerankers():
|
|
|
324
324
|
from praisonaiagents.knowledge.rerankers import get_reranker_registry
|
|
325
325
|
|
|
326
326
|
registry = get_reranker_registry()
|
|
327
|
-
|
|
327
|
+
|
|
328
|
+
# Preserve any existing entry: an application (or a multi-tenant host) may
|
|
329
|
+
# have already registered a custom reranker under a built-in name. Wiring
|
|
330
|
+
# the wrapper defaults must never silently replace it, so register only
|
|
331
|
+
# names that are not already present.
|
|
332
|
+
existing = set(registry.list_rerankers())
|
|
333
|
+
|
|
328
334
|
# LLM reranker is always available
|
|
329
|
-
|
|
330
|
-
|
|
335
|
+
if "llm" not in existing:
|
|
336
|
+
registry.register("llm", LLMReranker)
|
|
337
|
+
|
|
331
338
|
# Cross-encoder if available
|
|
332
|
-
if _check_sentence_transformers():
|
|
339
|
+
if "cross_encoder" not in existing and _check_sentence_transformers():
|
|
333
340
|
registry.register("cross_encoder", CrossEncoderReranker)
|
|
334
|
-
|
|
341
|
+
|
|
335
342
|
# Cohere if available
|
|
336
|
-
if _check_cohere():
|
|
343
|
+
if "cohere" not in existing and _check_cohere():
|
|
337
344
|
registry.register("cohere", CohereReranker)
|
|
338
|
-
|
|
345
|
+
|
|
339
346
|
logger.debug("Registered default rerankers")
|
|
340
347
|
|
|
341
348
|
|
|
@@ -595,13 +595,22 @@ def register_default_retrievers():
|
|
|
595
595
|
from praisonaiagents.knowledge.retrieval import get_retriever_registry
|
|
596
596
|
|
|
597
597
|
registry = get_retriever_registry()
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
registry.
|
|
604
|
-
|
|
598
|
+
|
|
599
|
+
# Preserve any existing entry: an application (or a multi-tenant host) may
|
|
600
|
+
# have already registered a custom retriever under a built-in name. Wiring
|
|
601
|
+
# the wrapper defaults must never silently replace it, so register only
|
|
602
|
+
# names that are not already present.
|
|
603
|
+
existing = set(registry.list_retrievers())
|
|
604
|
+
for name, factory in (
|
|
605
|
+
("basic", BasicRetriever),
|
|
606
|
+
("fusion", FusionRetriever),
|
|
607
|
+
("recursive", RecursiveRetriever),
|
|
608
|
+
("auto_merge", AutoMergeRetriever),
|
|
609
|
+
("hybrid", HybridRetriever),
|
|
610
|
+
):
|
|
611
|
+
if name not in existing:
|
|
612
|
+
registry.register(name, factory)
|
|
613
|
+
|
|
605
614
|
logger.debug("Registered default retrievers")
|
|
606
615
|
|
|
607
616
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""Shared scaffolding for ``ManagedBackendProtocol`` implementations.
|
|
2
|
+
|
|
3
|
+
``AnthropicManagedAgent`` (managed_agents.py) and ``LocalManagedAgent``
|
|
4
|
+
(managed_local.py) implement the same protocol contract and historically
|
|
5
|
+
re-implemented the same ``stream()`` producer/queue/sentinel scaffolding twice.
|
|
6
|
+
That duplication meant the async-safety fix for ``loop.run_in_executor`` and any
|
|
7
|
+
future protocol change had to be edited — and kept in sync — in two places.
|
|
8
|
+
|
|
9
|
+
``ManagedBackendBase`` owns that single copy of the queue pump. Concrete
|
|
10
|
+
backends implement only what actually differs:
|
|
11
|
+
|
|
12
|
+
- ``_ensure_session()`` -> return a session id (already present on
|
|
13
|
+
both concrete backends).
|
|
14
|
+
- ``_iter_events(session_id, prompt)`` -> a *synchronous* iterator of text
|
|
15
|
+
chunks. Runs on the producer thread, so blocking SDK calls are fine here.
|
|
16
|
+
- ``_after_stream(full)`` [optional] -> post-stream bookkeeping (e.g. the
|
|
17
|
+
local backend persists the assembled assistant turn + usage). Default is a
|
|
18
|
+
no-op.
|
|
19
|
+
|
|
20
|
+
A third managed backend then implements two methods rather than copying the
|
|
21
|
+
whole streaming loop.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import asyncio
|
|
27
|
+
import logging
|
|
28
|
+
import queue
|
|
29
|
+
import threading
|
|
30
|
+
from typing import AsyncIterator, Iterator, Optional
|
|
31
|
+
|
|
32
|
+
logger = logging.getLogger(__name__)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ManagedBackendBase:
|
|
36
|
+
"""Mixin providing the shared ``stream()`` queue pump.
|
|
37
|
+
|
|
38
|
+
Subclasses supply the session provider and the (synchronous) event source;
|
|
39
|
+
this class turns them into an async generator without each backend shipping
|
|
40
|
+
its own copy of the producer-thread + sentinel-queue plumbing.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def _ensure_session(self) -> str: # pragma: no cover - implemented by subclass
|
|
44
|
+
raise NotImplementedError
|
|
45
|
+
|
|
46
|
+
def _iter_events(self, session_id: str, prompt: str) -> Iterator[str]: # pragma: no cover
|
|
47
|
+
"""Yield text chunks for ``prompt`` on ``session_id`` (runs on a thread)."""
|
|
48
|
+
raise NotImplementedError
|
|
49
|
+
|
|
50
|
+
def _after_stream(self, full: str) -> None:
|
|
51
|
+
"""Hook for post-stream bookkeeping. Default: no-op."""
|
|
52
|
+
|
|
53
|
+
async def stream(self, prompt: str, **kwargs) -> AsyncIterator[str]:
|
|
54
|
+
"""Yield text chunks as the managed agent produces them.
|
|
55
|
+
|
|
56
|
+
The synchronous ``_iter_events`` producer runs on a daemon thread and
|
|
57
|
+
feeds a sentinel-terminated queue; the event loop is never blocked.
|
|
58
|
+
"""
|
|
59
|
+
loop = asyncio.get_running_loop()
|
|
60
|
+
q: "queue.Queue[Optional[str]]" = queue.Queue()
|
|
61
|
+
|
|
62
|
+
def _producer() -> None:
|
|
63
|
+
full = ""
|
|
64
|
+
try:
|
|
65
|
+
session_id = self._ensure_session()
|
|
66
|
+
for chunk in self._iter_events(session_id, prompt):
|
|
67
|
+
if chunk:
|
|
68
|
+
text = str(chunk)
|
|
69
|
+
q.put(text)
|
|
70
|
+
full += text
|
|
71
|
+
except Exception as e: # noqa: BLE001 - surface, don't crash the loop
|
|
72
|
+
logger.error("[managed] stream error: %s", e)
|
|
73
|
+
finally:
|
|
74
|
+
try:
|
|
75
|
+
self._after_stream(full)
|
|
76
|
+
except Exception as e: # noqa: BLE001
|
|
77
|
+
logger.error("[managed] post-stream hook error: %s", e)
|
|
78
|
+
q.put(None) # sentinel
|
|
79
|
+
|
|
80
|
+
thread = threading.Thread(target=_producer, daemon=True)
|
|
81
|
+
thread.start()
|
|
82
|
+
|
|
83
|
+
while True:
|
|
84
|
+
chunk = await loop.run_in_executor(None, q.get)
|
|
85
|
+
if chunk is None:
|
|
86
|
+
break
|
|
87
|
+
yield chunk
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""Registry of managed agent-runtime backends.
|
|
2
|
+
|
|
3
|
+
This moves provider -> backend resolution off the hardcoded ``if provider !=
|
|
4
|
+
"anthropic"`` switch in :mod:`hosted_agent` and onto the same plugin-registry
|
|
5
|
+
primitive used for framework adapters. A third-party package can register a
|
|
6
|
+
``praisonai.managed_backends`` entry point and have ``HostedAgent(provider=...)``
|
|
7
|
+
resolve it with no core change.
|
|
8
|
+
|
|
9
|
+
Builtins:
|
|
10
|
+
- ``anthropic`` -> :class:`AnthropicManagedAgent`
|
|
11
|
+
|
|
12
|
+
Future entry-point backends (e.g. ``e2b``, ``modal``, ``flyio``) register
|
|
13
|
+
themselves under the ``praisonai.managed_backends`` group.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import logging
|
|
19
|
+
import threading
|
|
20
|
+
from typing import Type
|
|
21
|
+
|
|
22
|
+
from .._registry import PluginRegistry
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _anthropic_loader() -> Type:
|
|
28
|
+
from .managed_agents import AnthropicManagedAgent
|
|
29
|
+
return AnthropicManagedAgent
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Compute places that cannot host a whole agent loop, so they are never
|
|
33
|
+
# registered as managed backends: `ssh` needs an object rather than a name;
|
|
34
|
+
# `local`/`native`/`subprocess` would run the agent in your own shell (which is
|
|
35
|
+
# what you get by passing nothing); `sandlock` isolates tools rather than
|
|
36
|
+
# hosting a runtime.
|
|
37
|
+
_COMPUTE_SKIP = {"ssh", "local", "native", "subprocess", "sandlock"}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
_BUILTIN_BACKENDS = {
|
|
41
|
+
"anthropic": _anthropic_loader,
|
|
42
|
+
# Compute-backed loaders (docker + every other compute place able to host a
|
|
43
|
+
# whole agent loop) are registered lazily inside the registry -- see
|
|
44
|
+
# ``_ensure_compute_registered`` -- so a bare import of this module pays
|
|
45
|
+
# nothing: no entry-point walk, no core-SDK import, no closure minting.
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class ManagedBackendRegistry(PluginRegistry):
|
|
50
|
+
"""Registry for managed agent-runtime backends with entry-point support."""
|
|
51
|
+
|
|
52
|
+
def __init__(self) -> None:
|
|
53
|
+
super().__init__(
|
|
54
|
+
entry_point_group="praisonai.managed_backends",
|
|
55
|
+
builtins=_BUILTIN_BACKENDS,
|
|
56
|
+
)
|
|
57
|
+
self._compute_registered = False
|
|
58
|
+
self._compute_lock = threading.Lock()
|
|
59
|
+
|
|
60
|
+
def _ensure_compute_registered(self) -> None:
|
|
61
|
+
"""Discover compute-backed backends on first lookup, not at import.
|
|
62
|
+
|
|
63
|
+
``run_on=`` accepted two names while ``tools_run_on=`` accepted twelve,
|
|
64
|
+
which was an implementation detail leaking into the vocabulary: a place
|
|
65
|
+
that can run a command can run the agent loop, which is just one more
|
|
66
|
+
command. One generic backend covers them all. `docker` used to be
|
|
67
|
+
excluded here in favour of a bespoke backend, but that named its
|
|
68
|
+
containers in a shape ``DockerCompute``'s lookup did not recognise, so
|
|
69
|
+
the generic path is used for reclaim.
|
|
70
|
+
|
|
71
|
+
The probe (an entry-point walk plus a core-SDK import) runs at most once
|
|
72
|
+
and only when a backend is actually requested by name.
|
|
73
|
+
"""
|
|
74
|
+
if self._compute_registered:
|
|
75
|
+
return
|
|
76
|
+
with self._compute_lock:
|
|
77
|
+
if self._compute_registered:
|
|
78
|
+
return
|
|
79
|
+
try:
|
|
80
|
+
from .compute_managed_agent import make_loader
|
|
81
|
+
from praisonaiagents.managed._compute_bridge import (
|
|
82
|
+
available_providers,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
for name in available_providers():
|
|
86
|
+
if name in _COMPUTE_SKIP or name in _BUILTIN_BACKENDS:
|
|
87
|
+
continue
|
|
88
|
+
# Never clobber a name an entry-point plugin already claimed.
|
|
89
|
+
# A third-party ``praisonai.managed_backends`` plugin using a
|
|
90
|
+
# compute-provider name (e.g. ``docker``, ``modal``, ``e2b``)
|
|
91
|
+
# is loaded when the registry is constructed; the generic
|
|
92
|
+
# compute loader must not replace it on first lookup. Use the
|
|
93
|
+
# base membership check (``PluginRegistry.has``) rather than
|
|
94
|
+
# our own overridden ``has``, which would re-enter
|
|
95
|
+
# ``_ensure_compute_registered`` and deadlock on the
|
|
96
|
+
# (non-reentrant) compute lock.
|
|
97
|
+
if super().has(name):
|
|
98
|
+
logger.debug(
|
|
99
|
+
"compute provider %r already registered (entry-point "
|
|
100
|
+
"plugin or builtin); keeping the existing backend",
|
|
101
|
+
name,
|
|
102
|
+
)
|
|
103
|
+
continue
|
|
104
|
+
self._add_loader(name, make_loader(name))
|
|
105
|
+
except Exception:
|
|
106
|
+
# A broken/absent compute plugin must not be silently invisible.
|
|
107
|
+
logger.debug(
|
|
108
|
+
"compute backend discovery failed; falling back to the "
|
|
109
|
+
"anthropic-only registry",
|
|
110
|
+
exc_info=True,
|
|
111
|
+
)
|
|
112
|
+
self._compute_registered = True
|
|
113
|
+
|
|
114
|
+
def resolve(self, name: str) -> Type:
|
|
115
|
+
self._ensure_compute_registered()
|
|
116
|
+
return super().resolve(name)
|
|
117
|
+
|
|
118
|
+
def list_names(self) -> list[str]:
|
|
119
|
+
self._ensure_compute_registered()
|
|
120
|
+
return super().list_names()
|
|
121
|
+
|
|
122
|
+
def has(self, name: str) -> bool:
|
|
123
|
+
self._ensure_compute_registered()
|
|
124
|
+
return super().has(name)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def get_backend_registry() -> "ManagedBackendRegistry":
|
|
128
|
+
"""Return the process-default managed-backend registry."""
|
|
129
|
+
return ManagedBackendRegistry.default()
|
|
@@ -35,6 +35,8 @@ from dataclasses import dataclass, field
|
|
|
35
35
|
from typing import AsyncIterator, Callable, Dict, Any, Optional, List, Union
|
|
36
36
|
from enum import Enum
|
|
37
37
|
|
|
38
|
+
from ._managed_base import ManagedBackendBase
|
|
39
|
+
|
|
38
40
|
logger = logging.getLogger(__name__)
|
|
39
41
|
|
|
40
42
|
|
|
@@ -235,7 +237,7 @@ class ManagedConfig:
|
|
|
235
237
|
vault_ids: List[str] = field(default_factory=list)
|
|
236
238
|
|
|
237
239
|
|
|
238
|
-
class AnthropicManagedAgent:
|
|
240
|
+
class AnthropicManagedAgent(ManagedBackendBase):
|
|
239
241
|
"""Anthropic Managed Agents backend for PraisonAI.
|
|
240
242
|
|
|
241
243
|
Satisfies ``ManagedBackendProtocol`` (Core SDK). All heavy SDK usage
|
|
@@ -783,48 +785,32 @@ class AnthropicManagedAgent:
|
|
|
783
785
|
emitter.agent_end(agent_name)
|
|
784
786
|
|
|
785
787
|
# ------------------------------------------------------------------
|
|
786
|
-
# stream() — ManagedBackendProtocol
|
|
788
|
+
# stream() — ManagedBackendProtocol (via ManagedBackendBase)
|
|
787
789
|
# ------------------------------------------------------------------
|
|
788
|
-
|
|
789
|
-
"""Yield text chunks
|
|
790
|
-
loop = asyncio.get_running_loop()
|
|
791
|
-
import queue
|
|
792
|
-
import threading
|
|
790
|
+
def _iter_events(self, session_id: str, prompt: str):
|
|
791
|
+
"""Yield agent-message text chunks off the Anthropic SSE stream.
|
|
793
792
|
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
elif etype == "session.status_idle":
|
|
816
|
-
break
|
|
817
|
-
finally:
|
|
818
|
-
q.put(None) # sentinel
|
|
819
|
-
|
|
820
|
-
thread = threading.Thread(target=_producer, daemon=True)
|
|
821
|
-
thread.start()
|
|
822
|
-
|
|
823
|
-
while True:
|
|
824
|
-
chunk = await loop.run_in_executor(None, q.get)
|
|
825
|
-
if chunk is None:
|
|
826
|
-
break
|
|
827
|
-
yield chunk
|
|
793
|
+
Runs on ``ManagedBackendBase.stream``'s producer thread, so the blocking
|
|
794
|
+
SDK stream context is fine here.
|
|
795
|
+
"""
|
|
796
|
+
client = self._get_client()
|
|
797
|
+
with client.beta.sessions.events.stream(session_id) as s:
|
|
798
|
+
client.beta.sessions.events.send(
|
|
799
|
+
session_id,
|
|
800
|
+
events=[{
|
|
801
|
+
"type": "user.message",
|
|
802
|
+
"content": [{"type": "text", "text": prompt}],
|
|
803
|
+
}],
|
|
804
|
+
)
|
|
805
|
+
for event in s:
|
|
806
|
+
etype = getattr(event, "type", None)
|
|
807
|
+
if etype == "agent.message":
|
|
808
|
+
for block in getattr(event, "content", []):
|
|
809
|
+
text = getattr(block, "text", None)
|
|
810
|
+
if text:
|
|
811
|
+
yield text
|
|
812
|
+
elif etype == "session.status_idle":
|
|
813
|
+
return
|
|
828
814
|
|
|
829
815
|
# ------------------------------------------------------------------
|
|
830
816
|
# Session management — ManagedBackendProtocol
|
|
@@ -57,6 +57,7 @@ _DEFAULT_TOOLS = [
|
|
|
57
57
|
"search_web",
|
|
58
58
|
]
|
|
59
59
|
|
|
60
|
+
from ._managed_base import ManagedBackendBase
|
|
60
61
|
from ._tool_aliases import TOOL_ALIAS_MAP
|
|
61
62
|
|
|
62
63
|
|
|
@@ -198,7 +199,7 @@ def _build_custom_tool_fn(
|
|
|
198
199
|
return _custom_fn
|
|
199
200
|
|
|
200
201
|
|
|
201
|
-
class LocalManagedAgent:
|
|
202
|
+
class LocalManagedAgent(ManagedBackendBase):
|
|
202
203
|
"""Provider-agnostic local managed agent backend.
|
|
203
204
|
|
|
204
205
|
Satisfies ``ManagedBackendProtocol`` (Core SDK). Uses PraisonAI's own
|
|
@@ -756,9 +757,18 @@ class LocalManagedAgent:
|
|
|
756
757
|
return self._inner_agent
|
|
757
758
|
|
|
758
759
|
def _ensure_session(self) -> str:
|
|
759
|
-
"""Create a session ID if not set.
|
|
760
|
+
"""Create a session ID if not set.
|
|
761
|
+
|
|
762
|
+
Creates the inner agent *before* persisting the session so ``agent_id``
|
|
763
|
+
and ``environment_id`` are populated in the first persisted snapshot.
|
|
764
|
+
The shared ``ManagedBackendBase.stream`` calls ``_ensure_session`` ahead
|
|
765
|
+
of ``_iter_events``; without this the local backend would persist an
|
|
766
|
+
orphaned session with null IDs, and a subsequent ``_ensure_agent``
|
|
767
|
+
failure would leave that incomplete state behind.
|
|
768
|
+
"""
|
|
760
769
|
if self._session_id:
|
|
761
770
|
return self._session_id
|
|
771
|
+
self._ensure_agent()
|
|
762
772
|
self._session_id = f"session_{uuid.uuid4().hex[:12]}"
|
|
763
773
|
self._session_history.append({
|
|
764
774
|
"id": self._session_id,
|
|
@@ -852,51 +862,30 @@ class LocalManagedAgent:
|
|
|
852
862
|
emitter.agent_end(agent_name)
|
|
853
863
|
|
|
854
864
|
# ------------------------------------------------------------------
|
|
855
|
-
# stream() — ManagedBackendProtocol
|
|
865
|
+
# stream() — ManagedBackendProtocol (via ManagedBackendBase)
|
|
856
866
|
# ------------------------------------------------------------------
|
|
857
|
-
|
|
858
|
-
"""Yield text chunks
|
|
859
|
-
import queue
|
|
860
|
-
import threading
|
|
861
|
-
|
|
862
|
-
loop = asyncio.get_running_loop()
|
|
863
|
-
q: queue.Queue[Optional[str]] = queue.Queue()
|
|
867
|
+
def _iter_events(self, session_id: str, prompt: str):
|
|
868
|
+
"""Yield text chunks from the local ``Agent.chat`` loop.
|
|
864
869
|
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
logger.error("[local_managed] stream error: %s", e)
|
|
885
|
-
finally:
|
|
886
|
-
if full:
|
|
887
|
-
self._persist_message("assistant", full)
|
|
888
|
-
self._sync_usage()
|
|
889
|
-
self._persist_state()
|
|
890
|
-
q.put(None)
|
|
891
|
-
|
|
892
|
-
thread = threading.Thread(target=_producer, daemon=True)
|
|
893
|
-
thread.start()
|
|
894
|
-
|
|
895
|
-
while True:
|
|
896
|
-
chunk = await loop.run_in_executor(None, q.get)
|
|
897
|
-
if chunk is None:
|
|
898
|
-
break
|
|
899
|
-
yield chunk
|
|
870
|
+
Runs on ``ManagedBackendBase.stream``'s producer thread. Ensures the
|
|
871
|
+
inner agent exists and persists the user turn before streaming.
|
|
872
|
+
"""
|
|
873
|
+
agent = self._ensure_agent()
|
|
874
|
+
self._persist_message("user", prompt)
|
|
875
|
+
gen = agent.chat(prompt, stream=True)
|
|
876
|
+
if hasattr(gen, '__iter__'):
|
|
877
|
+
for chunk in gen:
|
|
878
|
+
if chunk:
|
|
879
|
+
yield str(chunk)
|
|
880
|
+
elif gen:
|
|
881
|
+
yield str(gen)
|
|
882
|
+
|
|
883
|
+
def _after_stream(self, full: str) -> None:
|
|
884
|
+
"""Persist the assembled assistant turn + usage after streaming."""
|
|
885
|
+
if full:
|
|
886
|
+
self._persist_message("assistant", full)
|
|
887
|
+
self._sync_usage()
|
|
888
|
+
self._persist_state()
|
|
900
889
|
|
|
901
890
|
# ------------------------------------------------------------------
|
|
902
891
|
# Session management — ManagedBackendProtocol
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "4.7.10"
|