PraisonAI 4.7.5__tar.gz → 4.7.7__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.5 → praisonai-4.7.7}/PKG-INFO +53 -13
- {praisonai-4.7.5 → praisonai-4.7.7}/PraisonAI.egg-info/PKG-INFO +53 -13
- {praisonai-4.7.5 → praisonai-4.7.7}/PraisonAI.egg-info/SOURCES.txt +0 -12
- {praisonai-4.7.5 → praisonai-4.7.7}/PraisonAI.egg-info/requires.txt +10 -9
- {praisonai-4.7.5 → praisonai-4.7.7}/README.md +42 -3
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/__main__.py +28 -30
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_async_bridge.py +152 -14
- praisonai-4.7.7/praisonai/_lazy_cache.py +95 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/agents_generator.py +26 -20
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/api/agent_invoke.py +50 -13
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/api/call.py +3 -7
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/auto.py +115 -57
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/context.py +42 -4
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/rag.py +45 -3
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/recipe.py +10 -2
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/serve.py +47 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/interactive_legacy.py +19 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/subcommand_handlers.py +30 -10
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/workflow_commands.py +61 -32
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/db/adapter.py +131 -83
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/a2u_server.py +137 -31
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/autogen_adapter.py +33 -13
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/crewai_adapter.py +97 -16
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/registry.py +11 -1
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/__init__.py +2 -2
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/registry.py +17 -4
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/observability/hooks.py +59 -23
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/judge.py +13 -3
- praisonai-4.7.7/praisonai/setup/build.py +13 -0
- praisonai-4.7.7/praisonai/setup/post_install.py +21 -0
- praisonai-4.7.7/praisonai/setup.py +9 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/tool_override.py +20 -14
- praisonai-4.7.7/praisonai/version.py +1 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/pyproject.toml +11 -10
- praisonai-4.7.5/praisonai/_dev/parity/__init__.py +0 -42
- praisonai-4.7.5/praisonai/_dev/parity/docs_extractor.py +0 -183
- praisonai-4.7.5/praisonai/_dev/parity/docs_generator.py +0 -1029
- praisonai-4.7.5/praisonai/_dev/parity/generator.py +0 -803
- praisonai-4.7.5/praisonai/_dev/parity/python_docs_extractor.py +0 -167
- praisonai-4.7.5/praisonai/_dev/parity/python_extractor.py +0 -252
- praisonai-4.7.5/praisonai/_dev/parity/rust_docs_extractor.py +0 -55
- praisonai-4.7.5/praisonai/_dev/parity/rust_extractor.py +0 -332
- praisonai-4.7.5/praisonai/_dev/parity/topic_normalizer.py +0 -170
- praisonai-4.7.5/praisonai/_dev/parity/ts_docs_extractor.py +0 -55
- praisonai-4.7.5/praisonai/_dev/parity/typescript_extractor.py +0 -225
- praisonai-4.7.5/praisonai/_lazy_cache.py +0 -51
- praisonai-4.7.5/praisonai/setup/build.py +0 -21
- praisonai-4.7.5/praisonai/setup/post_install.py +0 -23
- praisonai-4.7.5/praisonai/setup.py +0 -16
- praisonai-4.7.5/praisonai/standardise/manifest.py +0 -201
- praisonai-4.7.5/praisonai/version.py +0 -1
- {praisonai-4.7.5 → praisonai-4.7.7}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_api_auth.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_logging.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/acp/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/acp/server.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/acp/session.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/app/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/app/agentos.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/branding.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/_profiling.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/main.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/config/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/config/agents.schema.json +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/config/schema.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/config/validator.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/history_store.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/queue.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/setup.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/db/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/client.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/converter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/inc/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/inc/models.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/_sync_base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute/tenki.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/compute_managed_agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/models.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/router.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/server.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/jobs/store.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/env.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/n8n/client.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/_ops.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/profiler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/push/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/push/client.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/push/transports.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/core.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/history.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/models.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/security.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/recipe/server.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/applier.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/plan.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/player.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/reader.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/storage.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/replay/writer.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/_delivery.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/security/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/security/audit.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/security/injection.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/security/protected.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/models.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/_tool_sources.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/cache.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/loader.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/security.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tool_registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/audio.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/train/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/train.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/train_vision.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui/context.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_dashboard/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/praisonai/upload_vision.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/setup.cfg +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_approval_system.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_basic.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_cli_features.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_recipe.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_registry.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_runner.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.7.5 → praisonai-4.7.7}/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.7
|
|
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.5
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.4
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.4
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.4
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.4
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.6
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.4
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.4
|
|
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
|
|
@@ -129,7 +129,8 @@ Provides-Extra: agno
|
|
|
129
129
|
Requires-Dist: praisonai-frameworks[agno]>=0.1.8; extra == "agno"
|
|
130
130
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "agno"
|
|
131
131
|
Provides-Extra: google-adk
|
|
132
|
-
Requires-Dist: praisonai-frameworks
|
|
132
|
+
Requires-Dist: praisonai-frameworks>=0.1.8; extra == "google-adk"
|
|
133
|
+
Requires-Dist: google-adk[extensions]<3,>=2.5; extra == "google-adk"
|
|
133
134
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "google-adk"
|
|
134
135
|
Provides-Extra: pydantic-ai
|
|
135
136
|
Requires-Dist: praisonai-frameworks[pydantic-ai]>=0.1.9; extra == "pydantic-ai"
|
|
@@ -247,6 +248,19 @@ curl -fsSL https://praison.ai/install.sh | bash
|
|
|
247
248
|
<img src="https://img.shields.io/badge/Highlighted_by_Elon_Musk-000000?style=for-the-badge&logo=x&logoColor=white" alt="Highlighted by Elon Musk" />
|
|
248
249
|
</a>
|
|
249
250
|
<br>
|
|
251
|
+
<br>
|
|
252
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
253
|
+
<img src="https://img.shields.io/badge/Download_for_macOS-000000?style=for-the-badge&logo=apple&logoColor=white" alt="Download for macOS" />
|
|
254
|
+
</a>
|
|
255
|
+
|
|
256
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
257
|
+
<img src="https://img.shields.io/badge/Download_for_Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white" alt="Download for Windows" />
|
|
258
|
+
</a>
|
|
259
|
+
|
|
260
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
261
|
+
<img src="https://img.shields.io/badge/Download_for_Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black" alt="Download for Linux" />
|
|
262
|
+
</a>
|
|
263
|
+
<br>
|
|
250
264
|
</div>
|
|
251
265
|
|
|
252
266
|
<p align="center">
|
|
@@ -1311,13 +1325,39 @@ For other providers, see [Models docs](https://docs.praison.ai/docs/models).
|
|
|
1311
1325
|
<summary><strong>How do I use a local model (Ollama)?</strong></summary>
|
|
1312
1326
|
|
|
1313
1327
|
```bash
|
|
1314
|
-
# Start Ollama
|
|
1328
|
+
# Start Ollama and pull a model
|
|
1315
1329
|
ollama serve
|
|
1330
|
+
ollama pull llama3.2
|
|
1331
|
+
```
|
|
1316
1332
|
|
|
1317
|
-
|
|
1318
|
-
|
|
1333
|
+
```python
|
|
1334
|
+
from praisonaiagents import Agent
|
|
1335
|
+
|
|
1336
|
+
agent = Agent(instructions="You are a helpful assistant", llm="ollama/llama3.2")
|
|
1337
|
+
agent.start("Why is the sky blue?")
|
|
1319
1338
|
```
|
|
1320
1339
|
|
|
1340
|
+
The `ollama/` prefix is what selects Ollama's handling — tool-call repair,
|
|
1341
|
+
tool-result formatting and the streaming rules small local models need. Or set
|
|
1342
|
+
it by environment instead:
|
|
1343
|
+
|
|
1344
|
+
```bash
|
|
1345
|
+
export OPENAI_MODEL_NAME=ollama/llama3.2
|
|
1346
|
+
```
|
|
1347
|
+
|
|
1348
|
+
Setting only `OPENAI_BASE_URL` is not enough: with no model named, the OpenAI
|
|
1349
|
+
default (`gpt-4o-mini`) is sent to Ollama, which answers
|
|
1350
|
+
`404 model 'gpt-4o-mini' not found`. Always name the model.
|
|
1351
|
+
|
|
1352
|
+
Point at a non-default host with `base_url=` or `OLLAMA_HOST`:
|
|
1353
|
+
|
|
1354
|
+
```python
|
|
1355
|
+
agent = Agent(instructions="...", llm="ollama/llama3.2", base_url="http://192.168.1.10:11434")
|
|
1356
|
+
```
|
|
1357
|
+
|
|
1358
|
+
The same shape works for other local runtimes — `lm_studio/`, `vllm/` and
|
|
1359
|
+
`hosted_vllm/` with their server's `base_url`.
|
|
1360
|
+
|
|
1321
1361
|
See [Models docs](https://docs.praison.ai/docs/models) for more details.
|
|
1322
1362
|
|
|
1323
1363
|
</details>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.7
|
|
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.5
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.4
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.4
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.4
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.4
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.6
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.4
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.4
|
|
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
|
|
@@ -129,7 +129,8 @@ Provides-Extra: agno
|
|
|
129
129
|
Requires-Dist: praisonai-frameworks[agno]>=0.1.8; extra == "agno"
|
|
130
130
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "agno"
|
|
131
131
|
Provides-Extra: google-adk
|
|
132
|
-
Requires-Dist: praisonai-frameworks
|
|
132
|
+
Requires-Dist: praisonai-frameworks>=0.1.8; extra == "google-adk"
|
|
133
|
+
Requires-Dist: google-adk[extensions]<3,>=2.5; extra == "google-adk"
|
|
133
134
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "google-adk"
|
|
134
135
|
Provides-Extra: pydantic-ai
|
|
135
136
|
Requires-Dist: praisonai-frameworks[pydantic-ai]>=0.1.9; extra == "pydantic-ai"
|
|
@@ -247,6 +248,19 @@ curl -fsSL https://praison.ai/install.sh | bash
|
|
|
247
248
|
<img src="https://img.shields.io/badge/Highlighted_by_Elon_Musk-000000?style=for-the-badge&logo=x&logoColor=white" alt="Highlighted by Elon Musk" />
|
|
248
249
|
</a>
|
|
249
250
|
<br>
|
|
251
|
+
<br>
|
|
252
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
253
|
+
<img src="https://img.shields.io/badge/Download_for_macOS-000000?style=for-the-badge&logo=apple&logoColor=white" alt="Download for macOS" />
|
|
254
|
+
</a>
|
|
255
|
+
|
|
256
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
257
|
+
<img src="https://img.shields.io/badge/Download_for_Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white" alt="Download for Windows" />
|
|
258
|
+
</a>
|
|
259
|
+
|
|
260
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
261
|
+
<img src="https://img.shields.io/badge/Download_for_Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black" alt="Download for Linux" />
|
|
262
|
+
</a>
|
|
263
|
+
<br>
|
|
250
264
|
</div>
|
|
251
265
|
|
|
252
266
|
<p align="center">
|
|
@@ -1311,13 +1325,39 @@ For other providers, see [Models docs](https://docs.praison.ai/docs/models).
|
|
|
1311
1325
|
<summary><strong>How do I use a local model (Ollama)?</strong></summary>
|
|
1312
1326
|
|
|
1313
1327
|
```bash
|
|
1314
|
-
# Start Ollama
|
|
1328
|
+
# Start Ollama and pull a model
|
|
1315
1329
|
ollama serve
|
|
1330
|
+
ollama pull llama3.2
|
|
1331
|
+
```
|
|
1316
1332
|
|
|
1317
|
-
|
|
1318
|
-
|
|
1333
|
+
```python
|
|
1334
|
+
from praisonaiagents import Agent
|
|
1335
|
+
|
|
1336
|
+
agent = Agent(instructions="You are a helpful assistant", llm="ollama/llama3.2")
|
|
1337
|
+
agent.start("Why is the sky blue?")
|
|
1319
1338
|
```
|
|
1320
1339
|
|
|
1340
|
+
The `ollama/` prefix is what selects Ollama's handling — tool-call repair,
|
|
1341
|
+
tool-result formatting and the streaming rules small local models need. Or set
|
|
1342
|
+
it by environment instead:
|
|
1343
|
+
|
|
1344
|
+
```bash
|
|
1345
|
+
export OPENAI_MODEL_NAME=ollama/llama3.2
|
|
1346
|
+
```
|
|
1347
|
+
|
|
1348
|
+
Setting only `OPENAI_BASE_URL` is not enough: with no model named, the OpenAI
|
|
1349
|
+
default (`gpt-4o-mini`) is sent to Ollama, which answers
|
|
1350
|
+
`404 model 'gpt-4o-mini' not found`. Always name the model.
|
|
1351
|
+
|
|
1352
|
+
Point at a non-default host with `base_url=` or `OLLAMA_HOST`:
|
|
1353
|
+
|
|
1354
|
+
```python
|
|
1355
|
+
agent = Agent(instructions="...", llm="ollama/llama3.2", base_url="http://192.168.1.10:11434")
|
|
1356
|
+
```
|
|
1357
|
+
|
|
1358
|
+
The same shape works for other local runtimes — `lm_studio/`, `vllm/` and
|
|
1359
|
+
`hosted_vllm/` with their server's `base_url`.
|
|
1360
|
+
|
|
1321
1361
|
See [Models docs](https://docs.praison.ai/docs/models) for more details.
|
|
1322
1362
|
|
|
1323
1363
|
</details>
|
|
@@ -33,17 +33,6 @@ praisonai/upload_vision.py
|
|
|
33
33
|
praisonai/version.py
|
|
34
34
|
praisonai/_dev/__init__.py
|
|
35
35
|
praisonai/_dev/api_md.py
|
|
36
|
-
praisonai/_dev/parity/__init__.py
|
|
37
|
-
praisonai/_dev/parity/docs_extractor.py
|
|
38
|
-
praisonai/_dev/parity/docs_generator.py
|
|
39
|
-
praisonai/_dev/parity/generator.py
|
|
40
|
-
praisonai/_dev/parity/python_docs_extractor.py
|
|
41
|
-
praisonai/_dev/parity/python_extractor.py
|
|
42
|
-
praisonai/_dev/parity/rust_docs_extractor.py
|
|
43
|
-
praisonai/_dev/parity/rust_extractor.py
|
|
44
|
-
praisonai/_dev/parity/topic_normalizer.py
|
|
45
|
-
praisonai/_dev/parity/ts_docs_extractor.py
|
|
46
|
-
praisonai/_dev/parity/typescript_extractor.py
|
|
47
36
|
praisonai/acp/__init__.py
|
|
48
37
|
praisonai/acp/config.py
|
|
49
38
|
praisonai/acp/safe_edit.py
|
|
@@ -497,7 +486,6 @@ praisonai/standardise/discovery.py
|
|
|
497
486
|
praisonai/standardise/drift.py
|
|
498
487
|
praisonai/standardise/engine.py
|
|
499
488
|
praisonai/standardise/example_verifier.py
|
|
500
|
-
praisonai/standardise/manifest.py
|
|
501
489
|
praisonai/standardise/models.py
|
|
502
490
|
praisonai/standardise/reports.py
|
|
503
491
|
praisonai/standardise/templates.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.5
|
|
5
|
+
praisonai-code>=0.1.4
|
|
6
|
+
praisonai-bot>=0.1.4
|
|
7
|
+
praisonai-train>=0.1.4
|
|
8
|
+
praisonai-browser>=0.1.4
|
|
9
|
+
praisonai-mcp>=0.1.6
|
|
10
|
+
praisonai-sandbox>=0.1.4
|
|
11
|
+
praisonai-deploy>=0.1.4
|
|
12
12
|
python-dotenv>=0.19.0
|
|
13
13
|
litellm<2,>=1.83.14
|
|
14
14
|
PyYAML>=6.0
|
|
@@ -158,7 +158,8 @@ requests>=2.31.0
|
|
|
158
158
|
praisonai-bot[gateway]
|
|
159
159
|
|
|
160
160
|
[google-adk]
|
|
161
|
-
praisonai-frameworks
|
|
161
|
+
praisonai-frameworks>=0.1.8
|
|
162
|
+
google-adk[extensions]<3,>=2.5
|
|
162
163
|
praisonai-tools>=0.1.0
|
|
163
164
|
|
|
164
165
|
[gradio]
|
|
@@ -35,6 +35,19 @@ curl -fsSL https://praison.ai/install.sh | bash
|
|
|
35
35
|
<img src="https://img.shields.io/badge/Highlighted_by_Elon_Musk-000000?style=for-the-badge&logo=x&logoColor=white" alt="Highlighted by Elon Musk" />
|
|
36
36
|
</a>
|
|
37
37
|
<br>
|
|
38
|
+
<br>
|
|
39
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
40
|
+
<img src="https://img.shields.io/badge/Download_for_macOS-000000?style=for-the-badge&logo=apple&logoColor=white" alt="Download for macOS" />
|
|
41
|
+
</a>
|
|
42
|
+
|
|
43
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
44
|
+
<img src="https://img.shields.io/badge/Download_for_Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white" alt="Download for Windows" />
|
|
45
|
+
</a>
|
|
46
|
+
|
|
47
|
+
<a href="https://github.com/MervinPraison/PraisonAI/releases/latest">
|
|
48
|
+
<img src="https://img.shields.io/badge/Download_for_Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black" alt="Download for Linux" />
|
|
49
|
+
</a>
|
|
50
|
+
<br>
|
|
38
51
|
</div>
|
|
39
52
|
|
|
40
53
|
<p align="center">
|
|
@@ -1099,13 +1112,39 @@ For other providers, see [Models docs](https://docs.praison.ai/docs/models).
|
|
|
1099
1112
|
<summary><strong>How do I use a local model (Ollama)?</strong></summary>
|
|
1100
1113
|
|
|
1101
1114
|
```bash
|
|
1102
|
-
# Start Ollama
|
|
1115
|
+
# Start Ollama and pull a model
|
|
1103
1116
|
ollama serve
|
|
1117
|
+
ollama pull llama3.2
|
|
1118
|
+
```
|
|
1104
1119
|
|
|
1105
|
-
|
|
1106
|
-
|
|
1120
|
+
```python
|
|
1121
|
+
from praisonaiagents import Agent
|
|
1122
|
+
|
|
1123
|
+
agent = Agent(instructions="You are a helpful assistant", llm="ollama/llama3.2")
|
|
1124
|
+
agent.start("Why is the sky blue?")
|
|
1107
1125
|
```
|
|
1108
1126
|
|
|
1127
|
+
The `ollama/` prefix is what selects Ollama's handling — tool-call repair,
|
|
1128
|
+
tool-result formatting and the streaming rules small local models need. Or set
|
|
1129
|
+
it by environment instead:
|
|
1130
|
+
|
|
1131
|
+
```bash
|
|
1132
|
+
export OPENAI_MODEL_NAME=ollama/llama3.2
|
|
1133
|
+
```
|
|
1134
|
+
|
|
1135
|
+
Setting only `OPENAI_BASE_URL` is not enough: with no model named, the OpenAI
|
|
1136
|
+
default (`gpt-4o-mini`) is sent to Ollama, which answers
|
|
1137
|
+
`404 model 'gpt-4o-mini' not found`. Always name the model.
|
|
1138
|
+
|
|
1139
|
+
Point at a non-default host with `base_url=` or `OLLAMA_HOST`:
|
|
1140
|
+
|
|
1141
|
+
```python
|
|
1142
|
+
agent = Agent(instructions="...", llm="ollama/llama3.2", base_url="http://192.168.1.10:11434")
|
|
1143
|
+
```
|
|
1144
|
+
|
|
1145
|
+
The same shape works for other local runtimes — `lm_studio/`, `vllm/` and
|
|
1146
|
+
`hosted_vllm/` with their server's `base_url`.
|
|
1147
|
+
|
|
1109
1148
|
See [Models docs](https://docs.praison.ai/docs/models) for more details.
|
|
1110
1149
|
|
|
1111
1150
|
</details>
|
|
@@ -85,6 +85,32 @@ _global_option_names_lock = threading.Lock()
|
|
|
85
85
|
_LEGACY_COLLIDING_SHORT_OPTS = frozenset({"-s", "-f"})
|
|
86
86
|
|
|
87
87
|
|
|
88
|
+
def _introspect_option_names(command):
|
|
89
|
+
"""Derive ``(all_opts, value_opts)`` from a Click command's parameters.
|
|
90
|
+
|
|
91
|
+
Single owner for the parse loop shared by :func:`_get_run_option_names` and
|
|
92
|
+
:func:`_get_global_option_names`; ``all_opts`` is every long/short option
|
|
93
|
+
string and ``value_opts`` is the non-flag subset that consumes a value.
|
|
94
|
+
"""
|
|
95
|
+
all_opts = set()
|
|
96
|
+
value_opts = set()
|
|
97
|
+
for param in command.params:
|
|
98
|
+
is_flag = getattr(param, "is_flag", False) or getattr(
|
|
99
|
+
param, "is_bool_flag", False
|
|
100
|
+
)
|
|
101
|
+
for opt in getattr(param, "opts", []):
|
|
102
|
+
if opt.startswith("-"):
|
|
103
|
+
all_opts.add(opt)
|
|
104
|
+
if not is_flag:
|
|
105
|
+
value_opts.add(opt)
|
|
106
|
+
# Secondary opts are the negated forms of bool flags
|
|
107
|
+
# (e.g. ``--no-stream``); never value-consuming.
|
|
108
|
+
for opt in getattr(param, "secondary_opts", []):
|
|
109
|
+
if opt.startswith("-"):
|
|
110
|
+
all_opts.add(opt)
|
|
111
|
+
return all_opts, value_opts
|
|
112
|
+
|
|
113
|
+
|
|
88
114
|
def _get_run_option_names():
|
|
89
115
|
"""Return the option names accepted by the Typer ``run`` command.
|
|
90
116
|
|
|
@@ -110,22 +136,7 @@ def _get_run_option_names():
|
|
|
110
136
|
from typer.main import get_command as _get_command
|
|
111
137
|
|
|
112
138
|
command = _get_command(run_app)
|
|
113
|
-
all_opts =
|
|
114
|
-
value_opts = set()
|
|
115
|
-
for param in command.params:
|
|
116
|
-
is_flag = getattr(param, "is_flag", False) or getattr(
|
|
117
|
-
param, "is_bool_flag", False
|
|
118
|
-
)
|
|
119
|
-
for opt in getattr(param, "opts", []):
|
|
120
|
-
if opt.startswith("-"):
|
|
121
|
-
all_opts.add(opt)
|
|
122
|
-
if not is_flag:
|
|
123
|
-
value_opts.add(opt)
|
|
124
|
-
# Secondary opts are the negated forms of bool flags
|
|
125
|
-
# (e.g. ``--no-stream``); never value-consuming.
|
|
126
|
-
for opt in getattr(param, "secondary_opts", []):
|
|
127
|
-
if opt.startswith("-"):
|
|
128
|
-
all_opts.add(opt)
|
|
139
|
+
all_opts, value_opts = _introspect_option_names(command)
|
|
129
140
|
except Exception:
|
|
130
141
|
# Introspection depends only on the static command definition, so a
|
|
131
142
|
# failure here is structural — cache it (as ``False``) to avoid
|
|
@@ -157,20 +168,7 @@ def _get_global_option_names():
|
|
|
157
168
|
from typer.main import get_command as _get_command
|
|
158
169
|
|
|
159
170
|
command = _get_command(root_app)
|
|
160
|
-
all_opts =
|
|
161
|
-
value_opts = set()
|
|
162
|
-
for param in command.params:
|
|
163
|
-
is_flag = getattr(param, "is_flag", False) or getattr(
|
|
164
|
-
param, "is_bool_flag", False
|
|
165
|
-
)
|
|
166
|
-
for opt in getattr(param, "opts", []):
|
|
167
|
-
if opt.startswith("-"):
|
|
168
|
-
all_opts.add(opt)
|
|
169
|
-
if not is_flag:
|
|
170
|
-
value_opts.add(opt)
|
|
171
|
-
for opt in getattr(param, "secondary_opts", []):
|
|
172
|
-
if opt.startswith("-"):
|
|
173
|
-
all_opts.add(opt)
|
|
171
|
+
all_opts, value_opts = _introspect_option_names(command)
|
|
174
172
|
except Exception:
|
|
175
173
|
_global_option_names_cache = False
|
|
176
174
|
return None
|
|
@@ -9,15 +9,66 @@ import asyncio
|
|
|
9
9
|
import atexit
|
|
10
10
|
import contextlib
|
|
11
11
|
import contextvars
|
|
12
|
+
import enum
|
|
13
|
+
import inspect
|
|
14
|
+
import logging
|
|
12
15
|
import os
|
|
13
16
|
import threading
|
|
17
|
+
import weakref
|
|
14
18
|
import concurrent.futures
|
|
15
19
|
from concurrent.futures import CancelledError as FutureCancelledError, Future
|
|
16
|
-
from typing import Awaitable, Iterator, Optional, TypeVar
|
|
20
|
+
from typing import Any, Awaitable, Iterator, Optional, TypeVar
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
17
23
|
|
|
18
24
|
T = TypeVar("T")
|
|
19
25
|
|
|
20
|
-
|
|
26
|
+
|
|
27
|
+
class _Unset:
|
|
28
|
+
"""Sentinel for an *omitted* timeout argument.
|
|
29
|
+
|
|
30
|
+
Distinguishes "caller did not pass a timeout" (resolve the configured
|
|
31
|
+
default via :func:`_default_timeout`) from an explicit ``timeout=None``
|
|
32
|
+
(an intentional request for an *unbounded* wait). The scheduler bridges
|
|
33
|
+
(``integration/bridges/schedules_runner.py``, ``cli/commands/schedule.py``)
|
|
34
|
+
rely on the latter so a long-running claimed job is never cancelled after
|
|
35
|
+
the 300s default.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
__slots__ = ()
|
|
39
|
+
|
|
40
|
+
def __repr__(self) -> str: # pragma: no cover - debug aid only
|
|
41
|
+
return "<unset>"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
_UNSET = _Unset()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _resolve_timeout(timeout: "float | None | _Unset") -> Optional[float]:
|
|
48
|
+
"""Map an omitted timeout to the configured default, preserving explicit None.
|
|
49
|
+
|
|
50
|
+
- ``_UNSET`` (argument omitted) → :func:`_default_timeout` (e.g. 300s).
|
|
51
|
+
- explicit ``None`` → ``None`` (unbounded wait; caller opted in).
|
|
52
|
+
- a number → itself.
|
|
53
|
+
"""
|
|
54
|
+
if isinstance(timeout, _Unset):
|
|
55
|
+
return _default_timeout()
|
|
56
|
+
return timeout
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _default_timeout() -> float:
|
|
60
|
+
"""Resolve the default run_sync timeout lazily, per call.
|
|
61
|
+
|
|
62
|
+
Read at call time (not import time) so a malformed ``PRAISONAI_RUN_SYNC_TIMEOUT``
|
|
63
|
+
cannot crash ``import praisonai`` with an unrelated ``ValueError``, and so a
|
|
64
|
+
value set after import (dotenv loaded late, per-request reconfig) is honoured.
|
|
65
|
+
Falls back to 300s on a malformed value.
|
|
66
|
+
"""
|
|
67
|
+
raw = os.environ.get("PRAISONAI_RUN_SYNC_TIMEOUT", "300")
|
|
68
|
+
try:
|
|
69
|
+
return float(raw)
|
|
70
|
+
except ValueError:
|
|
71
|
+
return 300.0
|
|
21
72
|
|
|
22
73
|
class AsyncBridge:
|
|
23
74
|
"""Per-instance async runner. The module-level `run_sync()` keeps the
|
|
@@ -38,6 +89,9 @@ class AsyncBridge:
|
|
|
38
89
|
# lock by ``get()``/``submit()`` so ``_spawn_locked()`` can verify the
|
|
39
90
|
# *caller* (not merely *someone*) owns the lock.
|
|
40
91
|
self._lock_owner: int | None = None
|
|
92
|
+
# The shared default registers its atexit teardown lazily, on first use,
|
|
93
|
+
# so a bare ``import praisonai`` installs no process-wide hook.
|
|
94
|
+
self._atexit_registered = False
|
|
41
95
|
|
|
42
96
|
def _spawn_locked(self) -> asyncio.AbstractEventLoop:
|
|
43
97
|
"""Create the loop+thread; caller must hold ``self._lock``.
|
|
@@ -74,6 +128,13 @@ class AsyncBridge:
|
|
|
74
128
|
daemon=True,
|
|
75
129
|
)
|
|
76
130
|
self._thread.start()
|
|
131
|
+
# Register the process-exit teardown lazily and only for the shared
|
|
132
|
+
# default. Doing it here (first real use) rather than at import keeps
|
|
133
|
+
# ``import praisonai`` free of an unrequested atexit hook that would
|
|
134
|
+
# compete with hosts like Django/Airflow/Streamlit for shutdown order.
|
|
135
|
+
if not self._atexit_registered and self is globals().get("_BG"):
|
|
136
|
+
atexit.register(self.shutdown)
|
|
137
|
+
self._atexit_registered = True
|
|
77
138
|
return self._loop
|
|
78
139
|
|
|
79
140
|
def get(self) -> asyncio.AbstractEventLoop:
|
|
@@ -94,7 +155,11 @@ class AsyncBridge:
|
|
|
94
155
|
finally:
|
|
95
156
|
self._lock_owner = None
|
|
96
157
|
|
|
97
|
-
def run_sync(
|
|
158
|
+
def run_sync(
|
|
159
|
+
self, coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET
|
|
160
|
+
) -> T:
|
|
161
|
+
# Omitted → configured default; explicit ``None`` → unbounded wait.
|
|
162
|
+
timeout = _resolve_timeout(timeout)
|
|
98
163
|
try:
|
|
99
164
|
asyncio.get_running_loop()
|
|
100
165
|
except RuntimeError:
|
|
@@ -245,19 +310,18 @@ def scoped_bridge(bridge: Optional[AsyncBridge] = None) -> Iterator[AsyncBridge]
|
|
|
245
310
|
def _shutdown_default() -> None:
|
|
246
311
|
"""Private process-exit hook: tear down the shared default bridge.
|
|
247
312
|
|
|
248
|
-
Registered with :mod:`atexit
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
313
|
+
Registered with :mod:`atexit` lazily (on the shared default's first real use
|
|
314
|
+
in :meth:`AsyncBridge._spawn_locked`), not at import, so a bare
|
|
315
|
+
``import praisonai`` installs no process-wide hook. This is the ONLY
|
|
316
|
+
sanctioned way the shared default is shut down; it is deliberately absent
|
|
317
|
+
from the public module surface so a single caller cannot terminate async
|
|
318
|
+
work for the whole process. Embedders needing explicit lifecycle control own
|
|
319
|
+
their own :class:`AsyncBridge` instance.
|
|
253
320
|
"""
|
|
254
321
|
_BG.shutdown()
|
|
255
322
|
|
|
256
323
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) -> T:
|
|
324
|
+
def run_sync(coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET) -> T:
|
|
261
325
|
"""
|
|
262
326
|
Run a coroutine synchronously using the background loop.
|
|
263
327
|
|
|
@@ -282,7 +346,7 @@ def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) ->
|
|
|
282
346
|
def run_sync_or_offload(
|
|
283
347
|
coro: Awaitable[T],
|
|
284
348
|
*,
|
|
285
|
-
timeout: float | None =
|
|
349
|
+
timeout: "float | None | _Unset" = _UNSET,
|
|
286
350
|
thread_name: str = "praisonai-sync-offload",
|
|
287
351
|
) -> T:
|
|
288
352
|
"""Run ``coro`` to completion from *any* calling context.
|
|
@@ -303,6 +367,8 @@ def run_sync_or_offload(
|
|
|
303
367
|
(it fails loudly inside a loop). Async callers should ``await``
|
|
304
368
|
:func:`arun_sync_or_offload`, which never blocks the loop.
|
|
305
369
|
"""
|
|
370
|
+
# Omitted → configured default; explicit ``None`` → unbounded wait.
|
|
371
|
+
timeout = _resolve_timeout(timeout)
|
|
306
372
|
try:
|
|
307
373
|
asyncio.get_running_loop()
|
|
308
374
|
except RuntimeError:
|
|
@@ -383,7 +449,7 @@ def run_sync_or_offload(
|
|
|
383
449
|
async def arun_sync_or_offload(
|
|
384
450
|
coro: Awaitable[T],
|
|
385
451
|
*,
|
|
386
|
-
timeout: float | None =
|
|
452
|
+
timeout: "float | None | _Unset" = _UNSET,
|
|
387
453
|
) -> T:
|
|
388
454
|
"""Awaitable sibling of :func:`run_sync_or_offload` for async callers.
|
|
389
455
|
|
|
@@ -397,6 +463,9 @@ async def arun_sync_or_offload(
|
|
|
397
463
|
``asyncio.new_event_loop()``), so a caller-installed :func:`scoped_bridge`
|
|
398
464
|
binding still wins and per-loop connection pools are preserved.
|
|
399
465
|
"""
|
|
466
|
+
# Omitted → configured default; explicit ``None`` → unbounded wait
|
|
467
|
+
# (``asyncio.wait_for(..., timeout=None)`` waits indefinitely).
|
|
468
|
+
timeout = _resolve_timeout(timeout)
|
|
400
469
|
fut = _default_bridge().submit(coro)
|
|
401
470
|
wrapped = asyncio.wrap_future(fut)
|
|
402
471
|
try:
|
|
@@ -404,3 +473,72 @@ async def arun_sync_or_offload(
|
|
|
404
473
|
except (asyncio.TimeoutError, asyncio.CancelledError):
|
|
405
474
|
fut.cancel()
|
|
406
475
|
raise
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
class DispatchKind(str, enum.Enum):
|
|
479
|
+
"""How a sync caller consumes the result of a (possibly async) store op.
|
|
480
|
+
|
|
481
|
+
Making read-vs-write intent explicit at the *call site* removes the need for
|
|
482
|
+
a name-string allow-list (the old ``_READ_OPS`` frozenset) that silently
|
|
483
|
+
dropped a new read-shaped method's return value under a running loop.
|
|
484
|
+
"""
|
|
485
|
+
|
|
486
|
+
READ = "read" #: caller consumes the returned value (never fire-and-forget)
|
|
487
|
+
WRITE = "write" #: caller only cares that it eventually completes
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
def dispatch_maybe_awaitable(
|
|
491
|
+
value: Any,
|
|
492
|
+
*,
|
|
493
|
+
kind: DispatchKind,
|
|
494
|
+
tracker: "weakref.WeakSet | None" = None,
|
|
495
|
+
tracker_lock: "threading.Lock | None" = None,
|
|
496
|
+
op_name: str = "op",
|
|
497
|
+
) -> Any:
|
|
498
|
+
"""Single owner of "a sync call may return a coroutine; run it correctly".
|
|
499
|
+
|
|
500
|
+
This consolidates the submit/track/callback scaffolding that lifecycle hooks
|
|
501
|
+
would otherwise hand-roll per op. Behaviour:
|
|
502
|
+
|
|
503
|
+
- **Not awaitable**: returned as-is.
|
|
504
|
+
- **No running loop**: block on the shared bridge via :func:`run_sync`.
|
|
505
|
+
- **Running loop + READ**: route through :func:`run_sync_or_offload`, which
|
|
506
|
+
returns the value on a sync path and fails loudly inside a loop instead of
|
|
507
|
+
corrupting a read-modify-write with a silent ``None``.
|
|
508
|
+
- **Running loop + WRITE**: submit to the active bridge as tracked
|
|
509
|
+
fire-and-forget (uuid-keyed store writes are idempotent, so completing them
|
|
510
|
+
slightly later is safe), attach a warning done-callback, and return
|
|
511
|
+
``None``.
|
|
512
|
+
|
|
513
|
+
Args:
|
|
514
|
+
value: The result of calling the store method (may be a coroutine).
|
|
515
|
+
kind: :class:`DispatchKind.READ` or :class:`DispatchKind.WRITE`.
|
|
516
|
+
tracker: Optional ``WeakSet`` of in-flight futures so a ``close()`` path
|
|
517
|
+
can flush them; only used on the running-loop WRITE branch.
|
|
518
|
+
tracker_lock: Lock guarding ``tracker``.
|
|
519
|
+
op_name: Human-readable op name for log/thread naming.
|
|
520
|
+
"""
|
|
521
|
+
if not inspect.isawaitable(value):
|
|
522
|
+
return value
|
|
523
|
+
|
|
524
|
+
try:
|
|
525
|
+
asyncio.get_running_loop()
|
|
526
|
+
except RuntimeError:
|
|
527
|
+
return run_sync(value)
|
|
528
|
+
|
|
529
|
+
if kind is DispatchKind.READ:
|
|
530
|
+
return run_sync_or_offload(value, thread_name=f"praisonai-db-read-{op_name}")
|
|
531
|
+
|
|
532
|
+
fut = current_bridge().submit(value)
|
|
533
|
+
if tracker is not None and tracker_lock is not None:
|
|
534
|
+
with tracker_lock:
|
|
535
|
+
tracker.add(fut)
|
|
536
|
+
|
|
537
|
+
def _on_done(f, name=op_name):
|
|
538
|
+
try:
|
|
539
|
+
f.result()
|
|
540
|
+
except Exception:
|
|
541
|
+
logger.warning("Deferred %s failed", name, exc_info=True)
|
|
542
|
+
|
|
543
|
+
fut.add_done_callback(_on_done)
|
|
544
|
+
return None
|