praisonAI 3.2.0__tar.gz → 3.2.1__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-3.2.0 → praisonai-3.2.1}/PKG-INFO +2 -2
- {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/PKG-INFO +2 -2
- {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/SOURCES.txt +1 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/app.py +6 -2
- praisonai-3.2.1/praisonai/cli/commands/retrieval.py +377 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/main.py +38 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy.py +1 -1
- praisonai-3.2.1/praisonai/version.py +1 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/pyproject.toml +1 -1
- praisonai-3.2.0/praisonai/version.py +0 -1
- {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/README.md +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/__main__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/server.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/session.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/readers.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/agent_scheduler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/agents_generator.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/api/call.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/auto.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/audio.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/batches.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/completions.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/containers.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/files.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/images.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/messages.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/rag.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/responses.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/search.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/skills.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/videos.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/chainlit_ui.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/chat/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/chat/app.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/call.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/code.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/context.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/package.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/research.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/run.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/session.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/train.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/version.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/config_loader.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/core.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/request.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/result.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/acp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/agents.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/background.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/compare.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/debug.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/diag.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/eval.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/image.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/interactive_tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/lite.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/logs.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/observability.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/package.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/performance.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profile.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/recipes.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/router.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/serve.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/session.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/skills.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/templates.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/todo.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/legacy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/session/unified.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/agent_tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/db/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/db/adapter.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/api.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/docker.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/doctor.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/main.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/models.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/schema.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/server.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inc/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inc/config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inc/models.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/executor.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/models.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/router.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/server.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/store.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/llm/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/llm/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/server.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/factory.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/profiler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/bridge.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/core.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/history.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/models.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/operations.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/policy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/runtime.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/security.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/serve.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/server.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/base.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/build.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/post_install.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/cache.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/discovery.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/loader.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/resolver.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/security.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/tool_override.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/test.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/multiedit.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/train.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/train_vision.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/agents.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/callbacks.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/chainlit_compat.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/chat.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/code.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/colab.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/colab_chainlit.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/context.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/database_config.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/db.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/realtime.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/realtimeclient/__init__.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/realtimeclient/tools.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/sql_alchemy.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/upload_vision.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/setup.cfg +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_agents_playbook.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_approval_system.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_basic.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_cli_features.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_double_api_fix.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_n8n_integration.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_phase2_refactor.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_recipe.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_registry.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_runner.py +0 -0
- {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_serve_features.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.1
|
|
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,7 +11,7 @@ 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>=0.7.
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.7.1
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.1
|
|
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,7 +11,7 @@ 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>=0.7.
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.7.1
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -98,6 +98,7 @@ praisonai/cli/commands/realtime.py
|
|
|
98
98
|
praisonai/cli/commands/recipe.py
|
|
99
99
|
praisonai/cli/commands/registry.py
|
|
100
100
|
praisonai/cli/commands/research.py
|
|
101
|
+
praisonai/cli/commands/retrieval.py
|
|
101
102
|
praisonai/cli/commands/rules.py
|
|
102
103
|
praisonai/cli/commands/run.py
|
|
103
104
|
praisonai/cli/commands/schedule.py
|
|
@@ -191,6 +191,7 @@ def register_commands():
|
|
|
191
191
|
from .commands.tools import app as tools_app
|
|
192
192
|
from .commands.knowledge import app as knowledge_app
|
|
193
193
|
from .commands.rag import app as rag_app
|
|
194
|
+
from .commands import retrieval as retrieval_module
|
|
194
195
|
from .commands.deploy import app as deploy_app
|
|
195
196
|
from .commands.agents import app as agents_app
|
|
196
197
|
from .commands.skills import app as skills_app
|
|
@@ -241,8 +242,11 @@ def register_commands():
|
|
|
241
242
|
app.add_typer(memory_app, name="memory", help="Memory management")
|
|
242
243
|
app.add_typer(workflow_app, name="workflow", help="Workflow management")
|
|
243
244
|
app.add_typer(tools_app, name="tools", help="Tool management")
|
|
244
|
-
app.add_typer(knowledge_app, name="knowledge", help="Knowledge base management")
|
|
245
|
-
app.add_typer(rag_app, name="rag", help="RAG (
|
|
245
|
+
app.add_typer(knowledge_app, name="knowledge", help="Knowledge base management (legacy)")
|
|
246
|
+
app.add_typer(rag_app, name="rag", help="RAG commands (legacy - use index/query instead)")
|
|
247
|
+
|
|
248
|
+
# Register unified retrieval commands (Agent-first)
|
|
249
|
+
retrieval_module.register_commands(app)
|
|
246
250
|
app.add_typer(deploy_app, name="deploy", help="Deployment management")
|
|
247
251
|
app.add_typer(agents_app, name="agents", help="Agent management")
|
|
248
252
|
app.add_typer(skills_app, name="skills", help="Skill management")
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Unified Retrieval CLI Commands - Agent-First Experience
|
|
3
|
+
|
|
4
|
+
This module provides the unified CLI commands for knowledge and retrieval:
|
|
5
|
+
- `praisonai index` - Index documents into knowledge base
|
|
6
|
+
- `praisonai query` - Query with structured answer and citations
|
|
7
|
+
- `praisonai chat` - Conversational interface with knowledge (handled by chat.py)
|
|
8
|
+
|
|
9
|
+
These commands replace the separate `knowledge` and `rag` command families.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import typer
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import List, Optional
|
|
15
|
+
from contextlib import contextmanager
|
|
16
|
+
import time
|
|
17
|
+
import sys
|
|
18
|
+
|
|
19
|
+
app = typer.Typer(
|
|
20
|
+
name="retrieval",
|
|
21
|
+
help="Knowledge indexing and retrieval commands",
|
|
22
|
+
no_args_is_help=True,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@contextmanager
|
|
27
|
+
def retrieval_profiler(profile: bool, profile_out: Optional[Path], profile_top: int):
|
|
28
|
+
"""Context manager for profiling retrieval operations."""
|
|
29
|
+
if not profile:
|
|
30
|
+
yield None
|
|
31
|
+
return
|
|
32
|
+
|
|
33
|
+
import json as json_module
|
|
34
|
+
|
|
35
|
+
start_time = time.perf_counter()
|
|
36
|
+
start_modules = set(sys.modules.keys())
|
|
37
|
+
|
|
38
|
+
profile_data = {
|
|
39
|
+
"metrics": {},
|
|
40
|
+
"modules_loaded": [],
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
import tracemalloc
|
|
45
|
+
tracemalloc.start()
|
|
46
|
+
has_tracemalloc = True
|
|
47
|
+
except ImportError:
|
|
48
|
+
has_tracemalloc = False
|
|
49
|
+
|
|
50
|
+
yield profile_data
|
|
51
|
+
|
|
52
|
+
elapsed_ms = (time.perf_counter() - start_time) * 1000
|
|
53
|
+
profile_data["metrics"]["elapsed_ms"] = elapsed_ms
|
|
54
|
+
|
|
55
|
+
if has_tracemalloc:
|
|
56
|
+
current, peak = tracemalloc.get_traced_memory()
|
|
57
|
+
tracemalloc.stop()
|
|
58
|
+
profile_data["metrics"]["peak_memory_mb"] = peak / 1024 / 1024
|
|
59
|
+
|
|
60
|
+
new_modules = set(sys.modules.keys()) - start_modules
|
|
61
|
+
profile_data["modules_loaded"] = sorted(list(new_modules))[:profile_top]
|
|
62
|
+
|
|
63
|
+
if profile_out:
|
|
64
|
+
try:
|
|
65
|
+
profile_out.parent.mkdir(parents=True, exist_ok=True)
|
|
66
|
+
with open(profile_out, "w") as f:
|
|
67
|
+
json_module.dump(profile_data, f, indent=2, default=str)
|
|
68
|
+
except Exception as e:
|
|
69
|
+
print(f"Warning: Failed to save profile: {e}")
|
|
70
|
+
|
|
71
|
+
from rich.console import Console
|
|
72
|
+
console = Console(stderr=True)
|
|
73
|
+
console.print(f"\n[dim]Profile: {elapsed_ms:.2f}ms wall time[/dim]")
|
|
74
|
+
if "peak_memory_mb" in profile_data["metrics"]:
|
|
75
|
+
console.print(f"[dim]Profile: {profile_data['metrics']['peak_memory_mb']:.2f}MB peak memory[/dim]")
|
|
76
|
+
console.print(f"[dim]Profile: {len(new_modules)} modules imported[/dim]")
|
|
77
|
+
if profile_out:
|
|
78
|
+
console.print(f"[dim]Profile saved to: {profile_out}[/dim]")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@app.command("index")
|
|
82
|
+
def index_command(
|
|
83
|
+
sources: List[str] = typer.Argument(..., help="Source files, directories, or URLs to index"),
|
|
84
|
+
collection: str = typer.Option("default", "--collection", "-c", help="Collection/knowledge base name"),
|
|
85
|
+
config: Optional[Path] = typer.Option(None, "--config", "-f", help="Config file path"),
|
|
86
|
+
verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
|
|
87
|
+
profile: bool = typer.Option(False, "--profile", help="Enable performance profiling"),
|
|
88
|
+
profile_out: Optional[Path] = typer.Option(None, "--profile-out", help="Save profile to JSON file"),
|
|
89
|
+
profile_top: int = typer.Option(20, "--profile-top", help="Top N items in profile"),
|
|
90
|
+
):
|
|
91
|
+
"""
|
|
92
|
+
Index documents into a knowledge base.
|
|
93
|
+
|
|
94
|
+
This is the canonical command for adding documents to a knowledge base.
|
|
95
|
+
Use `praisonai query` to get answers with citations from the indexed knowledge.
|
|
96
|
+
|
|
97
|
+
Examples:
|
|
98
|
+
praisonai index ./docs
|
|
99
|
+
praisonai index paper.pdf --collection research
|
|
100
|
+
praisonai index ./data --profile --profile-out ./profile.json
|
|
101
|
+
"""
|
|
102
|
+
from rich.console import Console
|
|
103
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
104
|
+
|
|
105
|
+
console = Console()
|
|
106
|
+
|
|
107
|
+
with retrieval_profiler(profile, profile_out, profile_top) as profile_data:
|
|
108
|
+
try:
|
|
109
|
+
from praisonaiagents.knowledge import Knowledge
|
|
110
|
+
|
|
111
|
+
knowledge_config = {
|
|
112
|
+
"vector_store": {
|
|
113
|
+
"provider": "chroma",
|
|
114
|
+
"config": {
|
|
115
|
+
"collection_name": collection,
|
|
116
|
+
"path": f"./.praison/knowledge/{collection}",
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if config and config.exists():
|
|
122
|
+
import yaml
|
|
123
|
+
with open(config) as f:
|
|
124
|
+
file_config = yaml.safe_load(f)
|
|
125
|
+
if "knowledge" in file_config:
|
|
126
|
+
knowledge_config.update(file_config["knowledge"])
|
|
127
|
+
|
|
128
|
+
knowledge = Knowledge(config=knowledge_config, verbose=verbose)
|
|
129
|
+
|
|
130
|
+
with Progress(
|
|
131
|
+
SpinnerColumn(),
|
|
132
|
+
TextColumn("[progress.description]{task.description}"),
|
|
133
|
+
console=console,
|
|
134
|
+
transient=True,
|
|
135
|
+
) as progress:
|
|
136
|
+
for source in sources:
|
|
137
|
+
task = progress.add_task(f"Indexing {source}...", total=None)
|
|
138
|
+
try:
|
|
139
|
+
result = knowledge.add(source)
|
|
140
|
+
count = len(result.get("results", [])) if isinstance(result, dict) else 0
|
|
141
|
+
console.print(f"[green]✓[/green] Indexed {source}: {count} chunks")
|
|
142
|
+
except Exception as e:
|
|
143
|
+
console.print(f"[red]✗[/red] Failed to index {source}: {e}")
|
|
144
|
+
progress.remove_task(task)
|
|
145
|
+
|
|
146
|
+
console.print(f"\n[bold green]Indexing complete![/bold green] Collection: {collection}")
|
|
147
|
+
if profile_data:
|
|
148
|
+
profile_data["command"] = "index"
|
|
149
|
+
profile_data["collection"] = collection
|
|
150
|
+
profile_data["sources"] = sources
|
|
151
|
+
|
|
152
|
+
except ImportError as e:
|
|
153
|
+
console.print(f"[red]Error:[/red] Missing dependency: {e}")
|
|
154
|
+
console.print("Install with: pip install 'praisonaiagents[knowledge]'")
|
|
155
|
+
raise typer.Exit(1)
|
|
156
|
+
except Exception as e:
|
|
157
|
+
console.print(f"[red]Error:[/red] {e}")
|
|
158
|
+
raise typer.Exit(1)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@app.command("query")
|
|
162
|
+
def query_command(
|
|
163
|
+
question: str = typer.Argument(..., help="Question to answer"),
|
|
164
|
+
collection: str = typer.Option("default", "--collection", "-c", help="Collection to query"),
|
|
165
|
+
top_k: int = typer.Option(5, "--top-k", "-k", help="Number of results to retrieve"),
|
|
166
|
+
min_score: float = typer.Option(0.0, "--min-score", help="Minimum relevance score (0.0-1.0)"),
|
|
167
|
+
hybrid: bool = typer.Option(False, "--hybrid", help="Use hybrid retrieval (dense + keyword)"),
|
|
168
|
+
rerank: bool = typer.Option(False, "--rerank", help="Enable reranking of results"),
|
|
169
|
+
citations: bool = typer.Option(True, "--citations/--no-citations", help="Include citations"),
|
|
170
|
+
citations_mode: str = typer.Option("append", "--citations-mode", help="Citations mode: append, inline, hidden"),
|
|
171
|
+
max_context_tokens: int = typer.Option(4000, "--max-context-tokens", help="Maximum context tokens"),
|
|
172
|
+
config: Optional[Path] = typer.Option(None, "--config", "-f", help="Config file path"),
|
|
173
|
+
verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
|
|
174
|
+
profile: bool = typer.Option(False, "--profile", help="Enable performance profiling"),
|
|
175
|
+
profile_out: Optional[Path] = typer.Option(None, "--profile-out", help="Save profile to JSON file"),
|
|
176
|
+
profile_top: int = typer.Option(20, "--profile-top", help="Top N items in profile"),
|
|
177
|
+
):
|
|
178
|
+
"""
|
|
179
|
+
Query knowledge and get a structured answer with citations.
|
|
180
|
+
|
|
181
|
+
Uses the Agent-first retrieval pipeline with token-aware context building.
|
|
182
|
+
|
|
183
|
+
Examples:
|
|
184
|
+
praisonai query "What is the main finding?"
|
|
185
|
+
praisonai query "Summarize the document" --collection research
|
|
186
|
+
praisonai query "Key points?" --top-k 10 --no-citations
|
|
187
|
+
praisonai query "Summary?" --hybrid --rerank
|
|
188
|
+
"""
|
|
189
|
+
from rich.console import Console
|
|
190
|
+
from rich.panel import Panel
|
|
191
|
+
from rich.markdown import Markdown
|
|
192
|
+
|
|
193
|
+
console = Console()
|
|
194
|
+
|
|
195
|
+
with retrieval_profiler(profile, profile_out, profile_top) as profile_data:
|
|
196
|
+
try:
|
|
197
|
+
from praisonaiagents import Agent
|
|
198
|
+
from praisonaiagents.rag.retrieval_config import RetrievalConfig, RetrievalPolicy, CitationsMode
|
|
199
|
+
|
|
200
|
+
retrieval_config = RetrievalConfig(
|
|
201
|
+
enabled=True,
|
|
202
|
+
policy=RetrievalPolicy.ALWAYS,
|
|
203
|
+
top_k=top_k,
|
|
204
|
+
min_score=min_score,
|
|
205
|
+
max_context_tokens=max_context_tokens,
|
|
206
|
+
rerank=rerank,
|
|
207
|
+
hybrid=hybrid,
|
|
208
|
+
citations=citations,
|
|
209
|
+
citations_mode=CitationsMode(citations_mode),
|
|
210
|
+
vector_store_provider="chroma",
|
|
211
|
+
persist_path=f"./.praison/knowledge/{collection}",
|
|
212
|
+
collection_name=collection,
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
if config and config.exists():
|
|
216
|
+
import yaml
|
|
217
|
+
with open(config) as f:
|
|
218
|
+
file_config = yaml.safe_load(f)
|
|
219
|
+
if "retrieval" in file_config:
|
|
220
|
+
for key, value in file_config["retrieval"].items():
|
|
221
|
+
if hasattr(retrieval_config, key):
|
|
222
|
+
setattr(retrieval_config, key, value)
|
|
223
|
+
|
|
224
|
+
agent = Agent(
|
|
225
|
+
name="QueryAgent",
|
|
226
|
+
instructions="You are a helpful assistant that answers questions based on the provided knowledge.",
|
|
227
|
+
knowledge=[], # Empty - we'll use existing indexed knowledge
|
|
228
|
+
retrieval_config=retrieval_config,
|
|
229
|
+
verbose=verbose,
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
agent._ensure_knowledge_processed = lambda: None
|
|
233
|
+
from praisonaiagents.knowledge import Knowledge
|
|
234
|
+
agent.knowledge = Knowledge(config=retrieval_config.to_knowledge_config(), verbose=verbose)
|
|
235
|
+
agent._knowledge_processed = True
|
|
236
|
+
|
|
237
|
+
if verbose:
|
|
238
|
+
strategy_str = "hybrid (dense + keyword)" if hybrid else "dense"
|
|
239
|
+
rerank_str = " with reranking" if rerank else ""
|
|
240
|
+
console.print(f"[dim]Querying collection '{collection}' using {strategy_str}{rerank_str}, top_k={top_k}...[/dim]")
|
|
241
|
+
|
|
242
|
+
result = agent.query(question)
|
|
243
|
+
|
|
244
|
+
console.print(Panel(
|
|
245
|
+
Markdown(result.answer),
|
|
246
|
+
title="[bold]Answer[/bold]",
|
|
247
|
+
border_style="green",
|
|
248
|
+
))
|
|
249
|
+
|
|
250
|
+
if citations and result.citations:
|
|
251
|
+
console.print("\n[bold]Sources:[/bold]")
|
|
252
|
+
for citation in result.citations:
|
|
253
|
+
score_str = f"[dim](score: {citation.score:.2f})[/dim]" if citation.score else ""
|
|
254
|
+
console.print(f" [{citation.id}] {citation.source} {score_str}")
|
|
255
|
+
if verbose:
|
|
256
|
+
snippet = citation.text[:200] + "..." if len(citation.text) > 200 else citation.text
|
|
257
|
+
console.print(f" [dim]{snippet}[/dim]")
|
|
258
|
+
|
|
259
|
+
if verbose and result.metadata:
|
|
260
|
+
elapsed = result.metadata.get('elapsed_seconds', 0)
|
|
261
|
+
console.print(f"\n[dim]Elapsed: {elapsed:.2f}s[/dim]")
|
|
262
|
+
|
|
263
|
+
if profile_data:
|
|
264
|
+
profile_data["command"] = "query"
|
|
265
|
+
profile_data["collection"] = collection
|
|
266
|
+
profile_data["question"] = question
|
|
267
|
+
|
|
268
|
+
except ImportError as e:
|
|
269
|
+
console.print(f"[red]Error:[/red] Missing dependency: {e}")
|
|
270
|
+
console.print("Install with: pip install 'praisonaiagents[knowledge]'")
|
|
271
|
+
raise typer.Exit(1)
|
|
272
|
+
except Exception as e:
|
|
273
|
+
console.print(f"[red]Error:[/red] {e}")
|
|
274
|
+
if verbose:
|
|
275
|
+
import traceback
|
|
276
|
+
console.print(traceback.format_exc())
|
|
277
|
+
raise typer.Exit(1)
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
@app.command("search")
|
|
281
|
+
def search_command(
|
|
282
|
+
query: str = typer.Argument(..., help="Search query"),
|
|
283
|
+
collection: str = typer.Option("default", "--collection", "-c", help="Collection to search"),
|
|
284
|
+
top_k: int = typer.Option(5, "--top-k", "-k", help="Number of results to retrieve"),
|
|
285
|
+
hybrid: bool = typer.Option(False, "--hybrid", help="Use hybrid retrieval (dense + keyword)"),
|
|
286
|
+
config: Optional[Path] = typer.Option(None, "--config", "-f", help="Config file path"),
|
|
287
|
+
verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
|
|
288
|
+
):
|
|
289
|
+
"""
|
|
290
|
+
Search/retrieve from a knowledge base (no LLM generation).
|
|
291
|
+
|
|
292
|
+
Returns raw search results without generating an answer.
|
|
293
|
+
For answers with citations, use `praisonai query`.
|
|
294
|
+
|
|
295
|
+
Examples:
|
|
296
|
+
praisonai search "capital of France"
|
|
297
|
+
praisonai search "main findings" --collection research --top-k 10
|
|
298
|
+
"""
|
|
299
|
+
from rich.console import Console
|
|
300
|
+
from rich.table import Table
|
|
301
|
+
|
|
302
|
+
console = Console()
|
|
303
|
+
|
|
304
|
+
try:
|
|
305
|
+
from praisonaiagents.knowledge import Knowledge
|
|
306
|
+
|
|
307
|
+
knowledge_config = {
|
|
308
|
+
"vector_store": {
|
|
309
|
+
"provider": "chroma",
|
|
310
|
+
"config": {
|
|
311
|
+
"collection_name": collection,
|
|
312
|
+
"path": f"./.praison/knowledge/{collection}",
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if hybrid:
|
|
318
|
+
knowledge_config["retrieval"] = {"strategy": "hybrid"}
|
|
319
|
+
|
|
320
|
+
if config and config.exists():
|
|
321
|
+
import yaml
|
|
322
|
+
with open(config) as f:
|
|
323
|
+
file_config = yaml.safe_load(f)
|
|
324
|
+
if "knowledge" in file_config:
|
|
325
|
+
knowledge_config.update(file_config["knowledge"])
|
|
326
|
+
|
|
327
|
+
knowledge = Knowledge(config=knowledge_config, verbose=verbose)
|
|
328
|
+
|
|
329
|
+
if verbose:
|
|
330
|
+
console.print(f"[dim]Searching collection '{collection}' for: {query}[/dim]")
|
|
331
|
+
|
|
332
|
+
results = knowledge.search(query)
|
|
333
|
+
|
|
334
|
+
if not results:
|
|
335
|
+
console.print("[yellow]No results found.[/yellow]")
|
|
336
|
+
return
|
|
337
|
+
|
|
338
|
+
if isinstance(results, dict) and 'results' in results:
|
|
339
|
+
result_list = results['results']
|
|
340
|
+
elif isinstance(results, list):
|
|
341
|
+
result_list = results
|
|
342
|
+
else:
|
|
343
|
+
result_list = [results]
|
|
344
|
+
|
|
345
|
+
table = Table(title=f"Search Results ({len(result_list[:top_k])} of {len(result_list)})")
|
|
346
|
+
table.add_column("#", style="dim", width=3)
|
|
347
|
+
table.add_column("Score", width=8)
|
|
348
|
+
table.add_column("Content", overflow="fold")
|
|
349
|
+
|
|
350
|
+
for i, result in enumerate(result_list[:top_k], 1):
|
|
351
|
+
if isinstance(result, dict):
|
|
352
|
+
content = result.get('memory', result.get('text', str(result)))
|
|
353
|
+
score = result.get('score', result.get('distance', 'N/A'))
|
|
354
|
+
else:
|
|
355
|
+
content = str(result)
|
|
356
|
+
score = 'N/A'
|
|
357
|
+
|
|
358
|
+
content_preview = content[:300] + "..." if len(content) > 300 else content
|
|
359
|
+
score_str = f"{score:.3f}" if isinstance(score, float) else str(score)
|
|
360
|
+
table.add_row(str(i), score_str, content_preview)
|
|
361
|
+
|
|
362
|
+
console.print(table)
|
|
363
|
+
|
|
364
|
+
except ImportError as e:
|
|
365
|
+
console.print(f"[red]Error:[/red] Missing dependency: {e}")
|
|
366
|
+
console.print("Install with: pip install 'praisonaiagents[knowledge]'")
|
|
367
|
+
raise typer.Exit(1)
|
|
368
|
+
except Exception as e:
|
|
369
|
+
console.print(f"[red]Error:[/red] {e}")
|
|
370
|
+
raise typer.Exit(1)
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def register_commands(main_app: typer.Typer):
|
|
374
|
+
"""Register unified retrieval commands with the main CLI app."""
|
|
375
|
+
main_app.command("index")(index_command)
|
|
376
|
+
main_app.command("query")(query_command)
|
|
377
|
+
main_app.command("search")(search_command)
|
|
@@ -898,6 +898,30 @@ class PraisonAI:
|
|
|
898
898
|
parser.add_argument("--compare", type=str, help="Compare CLI modes (comma-separated: basic,tools,research,planning)")
|
|
899
899
|
parser.add_argument("--compare-output", type=str, help="Save comparison results to file")
|
|
900
900
|
|
|
901
|
+
# Context Management - context budgeting, optimization, and monitoring
|
|
902
|
+
parser.add_argument("--context-auto-compact", action="store_true", dest="context_auto_compact",
|
|
903
|
+
help="Enable automatic context compaction (default in interactive mode)")
|
|
904
|
+
parser.add_argument("--no-context-auto-compact", action="store_false", dest="context_auto_compact",
|
|
905
|
+
help="Disable automatic context compaction")
|
|
906
|
+
parser.add_argument("--context-strategy", type=str, choices=["truncate", "sliding_window", "prune_tools", "summarize", "smart"],
|
|
907
|
+
help="Context optimization strategy (default: smart)")
|
|
908
|
+
parser.add_argument("--context-threshold", type=float, metavar="0.0-1.0",
|
|
909
|
+
help="Trigger compaction at this utilization (default: 0.8)")
|
|
910
|
+
parser.add_argument("--context-monitor", action="store_true", dest="context_monitor",
|
|
911
|
+
help="Enable real-time context monitoring (writes to context.txt)")
|
|
912
|
+
parser.add_argument("--context-monitor-path", type=str, metavar="PATH",
|
|
913
|
+
help="Path for context monitor output (default: ./context.txt)")
|
|
914
|
+
parser.add_argument("--context-monitor-format", type=str, choices=["human", "json"],
|
|
915
|
+
help="Context monitor output format (default: human)")
|
|
916
|
+
parser.add_argument("--context-monitor-frequency", type=str, choices=["turn", "tool_call", "manual", "overflow"],
|
|
917
|
+
help="Context monitor update frequency (default: turn)")
|
|
918
|
+
parser.add_argument("--context-redact", action="store_true", dest="context_redact",
|
|
919
|
+
help="Redact sensitive data in context monitor output (default: true)")
|
|
920
|
+
parser.add_argument("--no-context-redact", action="store_false", dest="context_redact",
|
|
921
|
+
help="Disable sensitive data redaction in context monitor")
|
|
922
|
+
parser.add_argument("--context-output-reserve", type=int, metavar="TOKENS",
|
|
923
|
+
help="Reserve tokens for model output (default: 8000)")
|
|
924
|
+
|
|
901
925
|
# Agent Scheduler - for schedule command
|
|
902
926
|
parser.add_argument("--interval", dest="schedule_interval", type=str, help="Schedule interval (e.g., 'hourly', '*/30m', 'daily')")
|
|
903
927
|
parser.add_argument("--schedule-max-retries", dest="schedule_max_retries", type=int, help="Maximum retry attempts for scheduled execution")
|
|
@@ -4935,6 +4959,20 @@ Now, {final_instruction.lower()}:"""
|
|
|
4935
4959
|
'session_store': session_store, # Reference to store for saving
|
|
4936
4960
|
}
|
|
4937
4961
|
|
|
4962
|
+
# Initialize context manager with CLI flags
|
|
4963
|
+
context_config = {
|
|
4964
|
+
'auto_compact': getattr(args, 'context_auto_compact', True), # Default True in interactive
|
|
4965
|
+
'strategy': getattr(args, 'context_strategy', 'smart'),
|
|
4966
|
+
'threshold': getattr(args, 'context_threshold', 0.8),
|
|
4967
|
+
'monitor_enabled': getattr(args, 'context_monitor', False),
|
|
4968
|
+
'monitor_path': getattr(args, 'context_monitor_path', './context.txt'),
|
|
4969
|
+
'monitor_format': getattr(args, 'context_monitor_format', 'human'),
|
|
4970
|
+
'monitor_frequency': getattr(args, 'context_monitor_frequency', 'turn'),
|
|
4971
|
+
'redact_sensitive': getattr(args, 'context_redact', True),
|
|
4972
|
+
'output_reserve': getattr(args, 'context_output_reserve', 8000),
|
|
4973
|
+
}
|
|
4974
|
+
session_state['context_config'] = context_config
|
|
4975
|
+
|
|
4938
4976
|
# Start the execution worker thread (TRUE ASYNC - runs in background)
|
|
4939
4977
|
worker_thread = self._start_execution_worker(tools_list, console, session_state)
|
|
4940
4978
|
|
|
@@ -57,7 +57,7 @@ class CloudDeployer:
|
|
|
57
57
|
file.write("FROM python:3.11-slim\n")
|
|
58
58
|
file.write("WORKDIR /app\n")
|
|
59
59
|
file.write("COPY . .\n")
|
|
60
|
-
file.write("RUN pip install flask praisonai==3.2.
|
|
60
|
+
file.write("RUN pip install flask praisonai==3.2.1 gunicorn markdown\n")
|
|
61
61
|
file.write("EXPOSE 8080\n")
|
|
62
62
|
file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
|
|
63
63
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.2.1"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "3.2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|