PraisonAI 3.0.0__py3-none-any.whl
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/__init__.py +54 -0
- praisonai/__main__.py +15 -0
- praisonai/acp/__init__.py +54 -0
- praisonai/acp/config.py +159 -0
- praisonai/acp/server.py +587 -0
- praisonai/acp/session.py +219 -0
- praisonai/adapters/__init__.py +50 -0
- praisonai/adapters/readers.py +395 -0
- praisonai/adapters/rerankers.py +315 -0
- praisonai/adapters/retrievers.py +394 -0
- praisonai/adapters/vector_stores.py +409 -0
- praisonai/agent_scheduler.py +337 -0
- praisonai/agents_generator.py +903 -0
- praisonai/api/call.py +292 -0
- praisonai/auto.py +1197 -0
- praisonai/capabilities/__init__.py +275 -0
- praisonai/capabilities/a2a.py +140 -0
- praisonai/capabilities/assistants.py +283 -0
- praisonai/capabilities/audio.py +320 -0
- praisonai/capabilities/batches.py +469 -0
- praisonai/capabilities/completions.py +336 -0
- praisonai/capabilities/container_files.py +155 -0
- praisonai/capabilities/containers.py +93 -0
- praisonai/capabilities/embeddings.py +158 -0
- praisonai/capabilities/files.py +467 -0
- praisonai/capabilities/fine_tuning.py +293 -0
- praisonai/capabilities/guardrails.py +182 -0
- praisonai/capabilities/images.py +330 -0
- praisonai/capabilities/mcp.py +190 -0
- praisonai/capabilities/messages.py +270 -0
- praisonai/capabilities/moderations.py +154 -0
- praisonai/capabilities/ocr.py +217 -0
- praisonai/capabilities/passthrough.py +204 -0
- praisonai/capabilities/rag.py +207 -0
- praisonai/capabilities/realtime.py +160 -0
- praisonai/capabilities/rerank.py +165 -0
- praisonai/capabilities/responses.py +266 -0
- praisonai/capabilities/search.py +109 -0
- praisonai/capabilities/skills.py +133 -0
- praisonai/capabilities/vector_store_files.py +334 -0
- praisonai/capabilities/vector_stores.py +304 -0
- praisonai/capabilities/videos.py +141 -0
- praisonai/chainlit_ui.py +304 -0
- praisonai/chat/__init__.py +106 -0
- praisonai/chat/app.py +125 -0
- praisonai/cli/__init__.py +26 -0
- praisonai/cli/app.py +213 -0
- praisonai/cli/commands/__init__.py +75 -0
- praisonai/cli/commands/acp.py +70 -0
- praisonai/cli/commands/completion.py +333 -0
- praisonai/cli/commands/config.py +166 -0
- praisonai/cli/commands/debug.py +142 -0
- praisonai/cli/commands/diag.py +55 -0
- praisonai/cli/commands/doctor.py +166 -0
- praisonai/cli/commands/environment.py +179 -0
- praisonai/cli/commands/lsp.py +112 -0
- praisonai/cli/commands/mcp.py +210 -0
- praisonai/cli/commands/profile.py +457 -0
- praisonai/cli/commands/run.py +228 -0
- praisonai/cli/commands/schedule.py +150 -0
- praisonai/cli/commands/serve.py +97 -0
- praisonai/cli/commands/session.py +212 -0
- praisonai/cli/commands/traces.py +145 -0
- praisonai/cli/commands/version.py +101 -0
- praisonai/cli/configuration/__init__.py +18 -0
- praisonai/cli/configuration/loader.py +353 -0
- praisonai/cli/configuration/paths.py +114 -0
- praisonai/cli/configuration/schema.py +164 -0
- praisonai/cli/features/__init__.py +268 -0
- praisonai/cli/features/acp.py +236 -0
- praisonai/cli/features/action_orchestrator.py +546 -0
- praisonai/cli/features/agent_scheduler.py +773 -0
- praisonai/cli/features/agent_tools.py +474 -0
- praisonai/cli/features/agents.py +375 -0
- praisonai/cli/features/at_mentions.py +471 -0
- praisonai/cli/features/auto_memory.py +182 -0
- praisonai/cli/features/autonomy_mode.py +490 -0
- praisonai/cli/features/background.py +356 -0
- praisonai/cli/features/base.py +168 -0
- praisonai/cli/features/capabilities.py +1326 -0
- praisonai/cli/features/checkpoints.py +338 -0
- praisonai/cli/features/code_intelligence.py +652 -0
- praisonai/cli/features/compaction.py +294 -0
- praisonai/cli/features/compare.py +534 -0
- praisonai/cli/features/cost_tracker.py +514 -0
- praisonai/cli/features/debug.py +810 -0
- praisonai/cli/features/deploy.py +517 -0
- praisonai/cli/features/diag.py +289 -0
- praisonai/cli/features/doctor/__init__.py +63 -0
- praisonai/cli/features/doctor/checks/__init__.py +24 -0
- praisonai/cli/features/doctor/checks/acp_checks.py +240 -0
- praisonai/cli/features/doctor/checks/config_checks.py +366 -0
- praisonai/cli/features/doctor/checks/db_checks.py +366 -0
- praisonai/cli/features/doctor/checks/env_checks.py +543 -0
- praisonai/cli/features/doctor/checks/lsp_checks.py +199 -0
- praisonai/cli/features/doctor/checks/mcp_checks.py +349 -0
- praisonai/cli/features/doctor/checks/memory_checks.py +268 -0
- praisonai/cli/features/doctor/checks/network_checks.py +251 -0
- praisonai/cli/features/doctor/checks/obs_checks.py +328 -0
- praisonai/cli/features/doctor/checks/performance_checks.py +235 -0
- praisonai/cli/features/doctor/checks/permissions_checks.py +259 -0
- praisonai/cli/features/doctor/checks/selftest_checks.py +322 -0
- praisonai/cli/features/doctor/checks/serve_checks.py +426 -0
- praisonai/cli/features/doctor/checks/skills_checks.py +231 -0
- praisonai/cli/features/doctor/checks/tools_checks.py +371 -0
- praisonai/cli/features/doctor/engine.py +266 -0
- praisonai/cli/features/doctor/formatters.py +310 -0
- praisonai/cli/features/doctor/handler.py +397 -0
- praisonai/cli/features/doctor/models.py +264 -0
- praisonai/cli/features/doctor/registry.py +239 -0
- praisonai/cli/features/endpoints.py +1019 -0
- praisonai/cli/features/eval.py +560 -0
- praisonai/cli/features/external_agents.py +231 -0
- praisonai/cli/features/fast_context.py +410 -0
- praisonai/cli/features/flow_display.py +566 -0
- praisonai/cli/features/git_integration.py +651 -0
- praisonai/cli/features/guardrail.py +171 -0
- praisonai/cli/features/handoff.py +185 -0
- praisonai/cli/features/hooks.py +583 -0
- praisonai/cli/features/image.py +384 -0
- praisonai/cli/features/interactive_runtime.py +585 -0
- praisonai/cli/features/interactive_tools.py +380 -0
- praisonai/cli/features/interactive_tui.py +603 -0
- praisonai/cli/features/jobs.py +632 -0
- praisonai/cli/features/knowledge.py +531 -0
- praisonai/cli/features/lite.py +244 -0
- praisonai/cli/features/lsp_cli.py +225 -0
- praisonai/cli/features/mcp.py +169 -0
- praisonai/cli/features/message_queue.py +587 -0
- praisonai/cli/features/metrics.py +211 -0
- praisonai/cli/features/n8n.py +673 -0
- praisonai/cli/features/observability.py +293 -0
- praisonai/cli/features/ollama.py +361 -0
- praisonai/cli/features/output_style.py +273 -0
- praisonai/cli/features/package.py +631 -0
- praisonai/cli/features/performance.py +308 -0
- praisonai/cli/features/persistence.py +636 -0
- praisonai/cli/features/profile.py +226 -0
- praisonai/cli/features/profiler/__init__.py +81 -0
- praisonai/cli/features/profiler/core.py +558 -0
- praisonai/cli/features/profiler/optimizations.py +652 -0
- praisonai/cli/features/profiler/suite.py +386 -0
- praisonai/cli/features/profiling.py +350 -0
- praisonai/cli/features/queue/__init__.py +73 -0
- praisonai/cli/features/queue/manager.py +395 -0
- praisonai/cli/features/queue/models.py +286 -0
- praisonai/cli/features/queue/persistence.py +564 -0
- praisonai/cli/features/queue/scheduler.py +484 -0
- praisonai/cli/features/queue/worker.py +372 -0
- praisonai/cli/features/recipe.py +1723 -0
- praisonai/cli/features/recipes.py +449 -0
- praisonai/cli/features/registry.py +229 -0
- praisonai/cli/features/repo_map.py +860 -0
- praisonai/cli/features/router.py +466 -0
- praisonai/cli/features/sandbox_executor.py +515 -0
- praisonai/cli/features/serve.py +829 -0
- praisonai/cli/features/session.py +222 -0
- praisonai/cli/features/skills.py +856 -0
- praisonai/cli/features/slash_commands.py +650 -0
- praisonai/cli/features/telemetry.py +179 -0
- praisonai/cli/features/templates.py +1384 -0
- praisonai/cli/features/thinking.py +305 -0
- praisonai/cli/features/todo.py +334 -0
- praisonai/cli/features/tools.py +680 -0
- praisonai/cli/features/tui/__init__.py +83 -0
- praisonai/cli/features/tui/app.py +580 -0
- praisonai/cli/features/tui/cli.py +566 -0
- praisonai/cli/features/tui/debug.py +511 -0
- praisonai/cli/features/tui/events.py +99 -0
- praisonai/cli/features/tui/mock_provider.py +328 -0
- praisonai/cli/features/tui/orchestrator.py +652 -0
- praisonai/cli/features/tui/screens/__init__.py +50 -0
- praisonai/cli/features/tui/screens/main.py +245 -0
- praisonai/cli/features/tui/screens/queue.py +174 -0
- praisonai/cli/features/tui/screens/session.py +124 -0
- praisonai/cli/features/tui/screens/settings.py +148 -0
- praisonai/cli/features/tui/widgets/__init__.py +56 -0
- praisonai/cli/features/tui/widgets/chat.py +261 -0
- praisonai/cli/features/tui/widgets/composer.py +224 -0
- praisonai/cli/features/tui/widgets/queue_panel.py +200 -0
- praisonai/cli/features/tui/widgets/status.py +167 -0
- praisonai/cli/features/tui/widgets/tool_panel.py +248 -0
- praisonai/cli/features/workflow.py +720 -0
- praisonai/cli/legacy.py +236 -0
- praisonai/cli/main.py +5559 -0
- praisonai/cli/schedule_cli.py +54 -0
- praisonai/cli/state/__init__.py +31 -0
- praisonai/cli/state/identifiers.py +161 -0
- praisonai/cli/state/sessions.py +313 -0
- praisonai/code/__init__.py +93 -0
- praisonai/code/agent_tools.py +344 -0
- praisonai/code/diff/__init__.py +21 -0
- praisonai/code/diff/diff_strategy.py +432 -0
- praisonai/code/tools/__init__.py +27 -0
- praisonai/code/tools/apply_diff.py +221 -0
- praisonai/code/tools/execute_command.py +275 -0
- praisonai/code/tools/list_files.py +274 -0
- praisonai/code/tools/read_file.py +206 -0
- praisonai/code/tools/search_replace.py +248 -0
- praisonai/code/tools/write_file.py +217 -0
- praisonai/code/utils/__init__.py +46 -0
- praisonai/code/utils/file_utils.py +307 -0
- praisonai/code/utils/ignore_utils.py +308 -0
- praisonai/code/utils/text_utils.py +276 -0
- praisonai/db/__init__.py +64 -0
- praisonai/db/adapter.py +531 -0
- praisonai/deploy/__init__.py +62 -0
- praisonai/deploy/api.py +231 -0
- praisonai/deploy/docker.py +454 -0
- praisonai/deploy/doctor.py +367 -0
- praisonai/deploy/main.py +327 -0
- praisonai/deploy/models.py +179 -0
- praisonai/deploy/providers/__init__.py +33 -0
- praisonai/deploy/providers/aws.py +331 -0
- praisonai/deploy/providers/azure.py +358 -0
- praisonai/deploy/providers/base.py +101 -0
- praisonai/deploy/providers/gcp.py +314 -0
- praisonai/deploy/schema.py +208 -0
- praisonai/deploy.py +185 -0
- praisonai/endpoints/__init__.py +53 -0
- praisonai/endpoints/a2u_server.py +410 -0
- praisonai/endpoints/discovery.py +165 -0
- praisonai/endpoints/providers/__init__.py +28 -0
- praisonai/endpoints/providers/a2a.py +253 -0
- praisonai/endpoints/providers/a2u.py +208 -0
- praisonai/endpoints/providers/agents_api.py +171 -0
- praisonai/endpoints/providers/base.py +231 -0
- praisonai/endpoints/providers/mcp.py +263 -0
- praisonai/endpoints/providers/recipe.py +206 -0
- praisonai/endpoints/providers/tools_mcp.py +150 -0
- praisonai/endpoints/registry.py +131 -0
- praisonai/endpoints/server.py +161 -0
- praisonai/inbuilt_tools/__init__.py +24 -0
- praisonai/inbuilt_tools/autogen_tools.py +117 -0
- praisonai/inc/__init__.py +2 -0
- praisonai/inc/config.py +96 -0
- praisonai/inc/models.py +155 -0
- praisonai/integrations/__init__.py +56 -0
- praisonai/integrations/base.py +303 -0
- praisonai/integrations/claude_code.py +270 -0
- praisonai/integrations/codex_cli.py +255 -0
- praisonai/integrations/cursor_cli.py +195 -0
- praisonai/integrations/gemini_cli.py +222 -0
- praisonai/jobs/__init__.py +67 -0
- praisonai/jobs/executor.py +425 -0
- praisonai/jobs/models.py +230 -0
- praisonai/jobs/router.py +314 -0
- praisonai/jobs/server.py +186 -0
- praisonai/jobs/store.py +203 -0
- praisonai/llm/__init__.py +66 -0
- praisonai/llm/registry.py +382 -0
- praisonai/mcp_server/__init__.py +152 -0
- praisonai/mcp_server/adapters/__init__.py +74 -0
- praisonai/mcp_server/adapters/agents.py +128 -0
- praisonai/mcp_server/adapters/capabilities.py +168 -0
- praisonai/mcp_server/adapters/cli_tools.py +568 -0
- praisonai/mcp_server/adapters/extended_capabilities.py +462 -0
- praisonai/mcp_server/adapters/knowledge.py +93 -0
- praisonai/mcp_server/adapters/memory.py +104 -0
- praisonai/mcp_server/adapters/prompts.py +306 -0
- praisonai/mcp_server/adapters/resources.py +124 -0
- praisonai/mcp_server/adapters/tools_bridge.py +280 -0
- praisonai/mcp_server/auth/__init__.py +48 -0
- praisonai/mcp_server/auth/api_key.py +291 -0
- praisonai/mcp_server/auth/oauth.py +460 -0
- praisonai/mcp_server/auth/oidc.py +289 -0
- praisonai/mcp_server/auth/scopes.py +260 -0
- praisonai/mcp_server/cli.py +852 -0
- praisonai/mcp_server/elicitation.py +445 -0
- praisonai/mcp_server/icons.py +302 -0
- praisonai/mcp_server/recipe_adapter.py +573 -0
- praisonai/mcp_server/recipe_cli.py +824 -0
- praisonai/mcp_server/registry.py +703 -0
- praisonai/mcp_server/sampling.py +422 -0
- praisonai/mcp_server/server.py +490 -0
- praisonai/mcp_server/tasks.py +443 -0
- praisonai/mcp_server/transports/__init__.py +18 -0
- praisonai/mcp_server/transports/http_stream.py +376 -0
- praisonai/mcp_server/transports/stdio.py +132 -0
- praisonai/persistence/__init__.py +84 -0
- praisonai/persistence/config.py +238 -0
- praisonai/persistence/conversation/__init__.py +25 -0
- praisonai/persistence/conversation/async_mysql.py +427 -0
- praisonai/persistence/conversation/async_postgres.py +410 -0
- praisonai/persistence/conversation/async_sqlite.py +371 -0
- praisonai/persistence/conversation/base.py +151 -0
- praisonai/persistence/conversation/json_store.py +250 -0
- praisonai/persistence/conversation/mysql.py +387 -0
- praisonai/persistence/conversation/postgres.py +401 -0
- praisonai/persistence/conversation/singlestore.py +240 -0
- praisonai/persistence/conversation/sqlite.py +341 -0
- praisonai/persistence/conversation/supabase.py +203 -0
- praisonai/persistence/conversation/surrealdb.py +287 -0
- praisonai/persistence/factory.py +301 -0
- praisonai/persistence/hooks/__init__.py +18 -0
- praisonai/persistence/hooks/agent_hooks.py +297 -0
- praisonai/persistence/knowledge/__init__.py +26 -0
- praisonai/persistence/knowledge/base.py +144 -0
- praisonai/persistence/knowledge/cassandra.py +232 -0
- praisonai/persistence/knowledge/chroma.py +295 -0
- praisonai/persistence/knowledge/clickhouse.py +242 -0
- praisonai/persistence/knowledge/cosmosdb_vector.py +438 -0
- praisonai/persistence/knowledge/couchbase.py +286 -0
- praisonai/persistence/knowledge/lancedb.py +216 -0
- praisonai/persistence/knowledge/langchain_adapter.py +291 -0
- praisonai/persistence/knowledge/lightrag_adapter.py +212 -0
- praisonai/persistence/knowledge/llamaindex_adapter.py +256 -0
- praisonai/persistence/knowledge/milvus.py +277 -0
- praisonai/persistence/knowledge/mongodb_vector.py +306 -0
- praisonai/persistence/knowledge/pgvector.py +335 -0
- praisonai/persistence/knowledge/pinecone.py +253 -0
- praisonai/persistence/knowledge/qdrant.py +301 -0
- praisonai/persistence/knowledge/redis_vector.py +291 -0
- praisonai/persistence/knowledge/singlestore_vector.py +299 -0
- praisonai/persistence/knowledge/surrealdb_vector.py +309 -0
- praisonai/persistence/knowledge/upstash_vector.py +266 -0
- praisonai/persistence/knowledge/weaviate.py +223 -0
- praisonai/persistence/migrations/__init__.py +10 -0
- praisonai/persistence/migrations/manager.py +251 -0
- praisonai/persistence/orchestrator.py +406 -0
- praisonai/persistence/state/__init__.py +21 -0
- praisonai/persistence/state/async_mongodb.py +200 -0
- praisonai/persistence/state/base.py +107 -0
- praisonai/persistence/state/dynamodb.py +226 -0
- praisonai/persistence/state/firestore.py +175 -0
- praisonai/persistence/state/gcs.py +155 -0
- praisonai/persistence/state/memory.py +245 -0
- praisonai/persistence/state/mongodb.py +158 -0
- praisonai/persistence/state/redis.py +190 -0
- praisonai/persistence/state/upstash.py +144 -0
- praisonai/persistence/tests/__init__.py +3 -0
- praisonai/persistence/tests/test_all_backends.py +633 -0
- praisonai/profiler.py +1214 -0
- praisonai/recipe/__init__.py +134 -0
- praisonai/recipe/bridge.py +278 -0
- praisonai/recipe/core.py +893 -0
- praisonai/recipe/exceptions.py +54 -0
- praisonai/recipe/history.py +402 -0
- praisonai/recipe/models.py +266 -0
- praisonai/recipe/operations.py +440 -0
- praisonai/recipe/policy.py +422 -0
- praisonai/recipe/registry.py +849 -0
- praisonai/recipe/runtime.py +214 -0
- praisonai/recipe/security.py +711 -0
- praisonai/recipe/serve.py +859 -0
- praisonai/recipe/server.py +613 -0
- praisonai/scheduler/__init__.py +45 -0
- praisonai/scheduler/agent_scheduler.py +552 -0
- praisonai/scheduler/base.py +124 -0
- praisonai/scheduler/daemon_manager.py +225 -0
- praisonai/scheduler/state_manager.py +155 -0
- praisonai/scheduler/yaml_loader.py +193 -0
- praisonai/scheduler.py +194 -0
- praisonai/setup/__init__.py +1 -0
- praisonai/setup/build.py +21 -0
- praisonai/setup/post_install.py +23 -0
- praisonai/setup/setup_conda_env.py +25 -0
- praisonai/setup.py +16 -0
- praisonai/templates/__init__.py +116 -0
- praisonai/templates/cache.py +364 -0
- praisonai/templates/dependency_checker.py +358 -0
- praisonai/templates/discovery.py +391 -0
- praisonai/templates/loader.py +564 -0
- praisonai/templates/registry.py +511 -0
- praisonai/templates/resolver.py +206 -0
- praisonai/templates/security.py +327 -0
- praisonai/templates/tool_override.py +498 -0
- praisonai/templates/tools_doctor.py +256 -0
- praisonai/test.py +105 -0
- praisonai/train.py +562 -0
- praisonai/train_vision.py +306 -0
- praisonai/ui/agents.py +824 -0
- praisonai/ui/callbacks.py +57 -0
- praisonai/ui/chainlit_compat.py +246 -0
- praisonai/ui/chat.py +532 -0
- praisonai/ui/code.py +717 -0
- praisonai/ui/colab.py +474 -0
- praisonai/ui/colab_chainlit.py +81 -0
- praisonai/ui/components/aicoder.py +284 -0
- praisonai/ui/context.py +283 -0
- praisonai/ui/database_config.py +56 -0
- praisonai/ui/db.py +294 -0
- praisonai/ui/realtime.py +488 -0
- praisonai/ui/realtimeclient/__init__.py +756 -0
- praisonai/ui/realtimeclient/tools.py +242 -0
- praisonai/ui/sql_alchemy.py +710 -0
- praisonai/upload_vision.py +140 -0
- praisonai/version.py +1 -0
- praisonai-3.0.0.dist-info/METADATA +3493 -0
- praisonai-3.0.0.dist-info/RECORD +393 -0
- praisonai-3.0.0.dist-info/WHEEL +5 -0
- praisonai-3.0.0.dist-info/entry_points.txt +4 -0
- praisonai-3.0.0.dist-info/top_level.txt +1 -0
praisonai/scheduler.py
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"""
|
|
2
|
+
DEPRECATED: This module is deprecated. Use praisonai.scheduler instead.
|
|
3
|
+
|
|
4
|
+
This file is kept for backward compatibility only.
|
|
5
|
+
All new code should import from praisonai.scheduler.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import warnings
|
|
9
|
+
import logging
|
|
10
|
+
import threading
|
|
11
|
+
import time
|
|
12
|
+
from typing import Optional, Dict, Any
|
|
13
|
+
from abc import ABC, abstractmethod
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
# Issue deprecation warning
|
|
18
|
+
warnings.warn(
|
|
19
|
+
"praisonai.scheduler module (root level) is deprecated. "
|
|
20
|
+
"Use 'from praisonai.scheduler import ...' instead.",
|
|
21
|
+
DeprecationWarning,
|
|
22
|
+
stacklevel=2
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Import from new scheduler module for backward compatibility
|
|
26
|
+
from .scheduler.base import ScheduleParser
|
|
27
|
+
|
|
28
|
+
# Keep old classes for backward compatibility
|
|
29
|
+
class DeployerInterface(ABC):
|
|
30
|
+
"""Abstract interface for deployers to ensure provider compatibility."""
|
|
31
|
+
|
|
32
|
+
@abstractmethod
|
|
33
|
+
def deploy(self) -> bool:
|
|
34
|
+
"""Execute deployment. Returns True on success, False on failure."""
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
class CloudDeployerAdapter(DeployerInterface):
|
|
38
|
+
"""Adapter for existing CloudDeployer to match interface."""
|
|
39
|
+
|
|
40
|
+
def __init__(self):
|
|
41
|
+
from .deploy import CloudDeployer
|
|
42
|
+
self._deployer = CloudDeployer()
|
|
43
|
+
|
|
44
|
+
def deploy(self) -> bool:
|
|
45
|
+
"""Execute deployment using CloudDeployer."""
|
|
46
|
+
try:
|
|
47
|
+
self._deployer.run_commands()
|
|
48
|
+
return True
|
|
49
|
+
except Exception as e:
|
|
50
|
+
logger.error(f"Deployment failed: {e}")
|
|
51
|
+
return False
|
|
52
|
+
|
|
53
|
+
class DeploymentScheduler:
|
|
54
|
+
"""
|
|
55
|
+
Minimal deployment scheduler with provider-agnostic design.
|
|
56
|
+
|
|
57
|
+
Features:
|
|
58
|
+
- Simple interval-based scheduling
|
|
59
|
+
- Thread-safe operation
|
|
60
|
+
- Extensible deployer factory pattern
|
|
61
|
+
- Minimal dependencies
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
def __init__(self, schedule_config: Optional[Dict[str, Any]] = None):
|
|
65
|
+
self.config = schedule_config or {}
|
|
66
|
+
self.is_running = False
|
|
67
|
+
self._stop_event = threading.Event()
|
|
68
|
+
self._thread = None
|
|
69
|
+
self._deployer = None
|
|
70
|
+
|
|
71
|
+
def set_deployer(self, deployer: DeployerInterface):
|
|
72
|
+
"""Set custom deployer implementation."""
|
|
73
|
+
self._deployer = deployer
|
|
74
|
+
|
|
75
|
+
def _get_deployer(self) -> DeployerInterface:
|
|
76
|
+
"""Get deployer instance using factory pattern."""
|
|
77
|
+
if self._deployer:
|
|
78
|
+
return self._deployer
|
|
79
|
+
|
|
80
|
+
# Default to CloudDeployer for backward compatibility
|
|
81
|
+
return CloudDeployerAdapter()
|
|
82
|
+
|
|
83
|
+
def start(self, schedule_expr: str, max_retries: int = 3) -> bool:
|
|
84
|
+
"""
|
|
85
|
+
Start scheduled deployment.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
schedule_expr: Schedule expression (e.g., "daily", "*/6h", "3600")
|
|
89
|
+
max_retries: Maximum retry attempts on failure
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
True if scheduler started successfully
|
|
93
|
+
"""
|
|
94
|
+
if self.is_running:
|
|
95
|
+
logger.warning("Scheduler is already running")
|
|
96
|
+
return False
|
|
97
|
+
|
|
98
|
+
try:
|
|
99
|
+
interval = ScheduleParser.parse(schedule_expr)
|
|
100
|
+
self.is_running = True
|
|
101
|
+
self._stop_event.clear()
|
|
102
|
+
|
|
103
|
+
self._thread = threading.Thread(
|
|
104
|
+
target=self._run_schedule,
|
|
105
|
+
args=(interval, max_retries),
|
|
106
|
+
daemon=True
|
|
107
|
+
)
|
|
108
|
+
self._thread.start()
|
|
109
|
+
|
|
110
|
+
logger.info(f"Deployment scheduler started with {interval}s interval")
|
|
111
|
+
return True
|
|
112
|
+
|
|
113
|
+
except Exception as e:
|
|
114
|
+
logger.error(f"Failed to start scheduler: {e}")
|
|
115
|
+
self.is_running = False
|
|
116
|
+
return False
|
|
117
|
+
|
|
118
|
+
def stop(self) -> bool:
|
|
119
|
+
"""Stop the scheduler."""
|
|
120
|
+
if not self.is_running:
|
|
121
|
+
return True
|
|
122
|
+
|
|
123
|
+
self._stop_event.set()
|
|
124
|
+
if self._thread and self._thread.is_alive():
|
|
125
|
+
self._thread.join(timeout=5)
|
|
126
|
+
|
|
127
|
+
self.is_running = False
|
|
128
|
+
logger.info("Deployment scheduler stopped")
|
|
129
|
+
return True
|
|
130
|
+
|
|
131
|
+
def _run_schedule(self, interval: int, max_retries: int):
|
|
132
|
+
"""Internal method to run scheduled deployments."""
|
|
133
|
+
deployer = self._get_deployer()
|
|
134
|
+
|
|
135
|
+
while not self._stop_event.is_set():
|
|
136
|
+
logger.info("Starting scheduled deployment")
|
|
137
|
+
|
|
138
|
+
success = False
|
|
139
|
+
for attempt in range(max_retries):
|
|
140
|
+
try:
|
|
141
|
+
if deployer.deploy():
|
|
142
|
+
logger.info(f"Deployment successful on attempt {attempt + 1}")
|
|
143
|
+
success = True
|
|
144
|
+
break
|
|
145
|
+
else:
|
|
146
|
+
logger.warning(f"Deployment failed on attempt {attempt + 1}")
|
|
147
|
+
except Exception as e:
|
|
148
|
+
logger.error(f"Deployment error on attempt {attempt + 1}: {e}")
|
|
149
|
+
|
|
150
|
+
if attempt < max_retries - 1:
|
|
151
|
+
time.sleep(30) # Wait before retry
|
|
152
|
+
|
|
153
|
+
if not success:
|
|
154
|
+
logger.error(f"Deployment failed after {max_retries} attempts")
|
|
155
|
+
|
|
156
|
+
# Wait for next scheduled time
|
|
157
|
+
self._stop_event.wait(interval)
|
|
158
|
+
|
|
159
|
+
def deploy_once(self) -> bool:
|
|
160
|
+
"""Execute a single deployment immediately."""
|
|
161
|
+
deployer = self._get_deployer()
|
|
162
|
+
try:
|
|
163
|
+
return deployer.deploy()
|
|
164
|
+
except Exception as e:
|
|
165
|
+
logger.error(f"One-time deployment failed: {e}")
|
|
166
|
+
return False
|
|
167
|
+
|
|
168
|
+
def create_scheduler(provider: str = "gcp", config: Optional[Dict[str, Any]] = None) -> DeploymentScheduler:
|
|
169
|
+
"""
|
|
170
|
+
Factory function to create scheduler for different providers.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
provider: Deployment provider ("gcp", "aws", "azure", etc.)
|
|
174
|
+
config: Optional configuration dict
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
Configured DeploymentScheduler instance
|
|
178
|
+
"""
|
|
179
|
+
scheduler = DeploymentScheduler(config)
|
|
180
|
+
|
|
181
|
+
# Provider-specific deployer setup can be added here
|
|
182
|
+
if provider == "gcp":
|
|
183
|
+
# Default CloudDeployer for GCP
|
|
184
|
+
pass
|
|
185
|
+
elif provider == "aws":
|
|
186
|
+
# Future: AWS deployer implementation
|
|
187
|
+
logger.warning("AWS provider not yet implemented, using default")
|
|
188
|
+
elif provider == "azure":
|
|
189
|
+
# Future: Azure deployer implementation
|
|
190
|
+
logger.warning("Azure provider not yet implemented, using default")
|
|
191
|
+
else:
|
|
192
|
+
logger.warning(f"Unknown provider {provider}, using default")
|
|
193
|
+
|
|
194
|
+
return scheduler
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
praisonai/setup/build.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import sys
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
def build(setup_kwargs):
|
|
6
|
+
try:
|
|
7
|
+
# Get the directory of the current script
|
|
8
|
+
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
9
|
+
|
|
10
|
+
# Construct the path to post_install.py
|
|
11
|
+
post_install_script = os.path.join(script_dir, 'post_install.py')
|
|
12
|
+
|
|
13
|
+
# Run the post_install.py script
|
|
14
|
+
subprocess.check_call([sys.executable, post_install_script])
|
|
15
|
+
except subprocess.CalledProcessError as e:
|
|
16
|
+
print(f"Error occurred while running the post-install script: {e}")
|
|
17
|
+
sys.exit(1)
|
|
18
|
+
return setup_kwargs
|
|
19
|
+
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
build({})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
import subprocess
|
|
4
|
+
import logging
|
|
5
|
+
|
|
6
|
+
def install_playwright():
|
|
7
|
+
"""Install playwright browsers."""
|
|
8
|
+
try:
|
|
9
|
+
subprocess.run([sys.executable, "-m", "playwright", "install"], check=True)
|
|
10
|
+
logging.info("Playwright browsers installed successfully")
|
|
11
|
+
except subprocess.CalledProcessError as e:
|
|
12
|
+
logging.error(f"Failed to install playwright browsers: {e}")
|
|
13
|
+
except Exception as e:
|
|
14
|
+
logging.error(f"Unexpected error installing playwright browsers: {e}")
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
"""Post-installation script."""
|
|
18
|
+
# Check if this is a chat or code installation
|
|
19
|
+
if any(extra in sys.argv for extra in ['chat', 'code']):
|
|
20
|
+
install_playwright()
|
|
21
|
+
|
|
22
|
+
if __name__ == "__main__":
|
|
23
|
+
main()
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
import platform
|
|
5
|
+
|
|
6
|
+
def main():
|
|
7
|
+
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
8
|
+
script_path = os.path.join(script_dir, 'setup_conda_env.sh')
|
|
9
|
+
|
|
10
|
+
if platform.system() == 'Windows':
|
|
11
|
+
print("Windows detected. Please run the setup_conda_env.sh script manually in Git Bash or WSL.")
|
|
12
|
+
print(f"Script location: {script_path}")
|
|
13
|
+
sys.exit(1)
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
subprocess.check_call(['bash', script_path])
|
|
17
|
+
except subprocess.CalledProcessError as e:
|
|
18
|
+
print(f"Error occurred while running the setup script: {e}")
|
|
19
|
+
print("Setup failed. Please check the error message above and try to resolve the issue.")
|
|
20
|
+
sys.exit(1)
|
|
21
|
+
|
|
22
|
+
print("Conda environment setup completed successfully!")
|
|
23
|
+
|
|
24
|
+
if __name__ == "__main__":
|
|
25
|
+
main()
|
praisonai/setup.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from setuptools import setup
|
|
2
|
+
from setuptools.command.install import install
|
|
3
|
+
import subprocess
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
class PostInstallCommand(install):
|
|
7
|
+
def run(self):
|
|
8
|
+
install.run(self)
|
|
9
|
+
# Install Playwright browsers
|
|
10
|
+
subprocess.check_call([sys.executable, '-m', 'playwright', 'install'])
|
|
11
|
+
|
|
12
|
+
setup(
|
|
13
|
+
cmdclass={
|
|
14
|
+
'install': PostInstallCommand,
|
|
15
|
+
}
|
|
16
|
+
)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PraisonAI Templates Module
|
|
3
|
+
|
|
4
|
+
Provides template loading, caching, and resolution for Agent/Workflow configurations.
|
|
5
|
+
All imports are lazy to ensure zero performance impact when not used.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"TemplateLoader",
|
|
10
|
+
"TemplateResolver",
|
|
11
|
+
"TemplateCache",
|
|
12
|
+
"TemplateRegistry",
|
|
13
|
+
"TemplateSecurity",
|
|
14
|
+
"TemplateDiscovery",
|
|
15
|
+
"DiscoveredTemplate",
|
|
16
|
+
"DependencyChecker",
|
|
17
|
+
"StrictModeError",
|
|
18
|
+
"ToolsDoctor",
|
|
19
|
+
"ToolOverrideLoader",
|
|
20
|
+
"SecurityError",
|
|
21
|
+
"load_template",
|
|
22
|
+
"list_templates",
|
|
23
|
+
"search_templates",
|
|
24
|
+
"install_template",
|
|
25
|
+
"clear_cache",
|
|
26
|
+
"discover_templates",
|
|
27
|
+
"find_template_path",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
# Lazy loading implementation
|
|
31
|
+
_module_cache = {}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def __getattr__(name):
|
|
35
|
+
"""Lazy load template components to avoid import overhead."""
|
|
36
|
+
if name in _module_cache:
|
|
37
|
+
return _module_cache[name]
|
|
38
|
+
|
|
39
|
+
if name == "TemplateLoader":
|
|
40
|
+
from .loader import TemplateLoader
|
|
41
|
+
_module_cache[name] = TemplateLoader
|
|
42
|
+
return TemplateLoader
|
|
43
|
+
elif name == "TemplateResolver":
|
|
44
|
+
from .resolver import TemplateResolver
|
|
45
|
+
_module_cache[name] = TemplateResolver
|
|
46
|
+
return TemplateResolver
|
|
47
|
+
elif name == "TemplateCache":
|
|
48
|
+
from .cache import TemplateCache
|
|
49
|
+
_module_cache[name] = TemplateCache
|
|
50
|
+
return TemplateCache
|
|
51
|
+
elif name == "TemplateRegistry":
|
|
52
|
+
from .registry import TemplateRegistry
|
|
53
|
+
_module_cache[name] = TemplateRegistry
|
|
54
|
+
return TemplateRegistry
|
|
55
|
+
elif name == "TemplateSecurity":
|
|
56
|
+
from .security import TemplateSecurity
|
|
57
|
+
_module_cache[name] = TemplateSecurity
|
|
58
|
+
return TemplateSecurity
|
|
59
|
+
elif name == "load_template":
|
|
60
|
+
from .loader import load_template
|
|
61
|
+
_module_cache[name] = load_template
|
|
62
|
+
return load_template
|
|
63
|
+
elif name == "list_templates":
|
|
64
|
+
from .registry import list_templates
|
|
65
|
+
_module_cache[name] = list_templates
|
|
66
|
+
return list_templates
|
|
67
|
+
elif name == "search_templates":
|
|
68
|
+
from .registry import search_templates
|
|
69
|
+
_module_cache[name] = search_templates
|
|
70
|
+
return search_templates
|
|
71
|
+
elif name == "install_template":
|
|
72
|
+
from .registry import install_template
|
|
73
|
+
_module_cache[name] = install_template
|
|
74
|
+
return install_template
|
|
75
|
+
elif name == "clear_cache":
|
|
76
|
+
from .cache import clear_cache
|
|
77
|
+
_module_cache[name] = clear_cache
|
|
78
|
+
return clear_cache
|
|
79
|
+
elif name == "TemplateDiscovery":
|
|
80
|
+
from .discovery import TemplateDiscovery
|
|
81
|
+
_module_cache[name] = TemplateDiscovery
|
|
82
|
+
return TemplateDiscovery
|
|
83
|
+
elif name == "DiscoveredTemplate":
|
|
84
|
+
from .discovery import DiscoveredTemplate
|
|
85
|
+
_module_cache[name] = DiscoveredTemplate
|
|
86
|
+
return DiscoveredTemplate
|
|
87
|
+
elif name == "discover_templates":
|
|
88
|
+
from .discovery import discover_templates
|
|
89
|
+
_module_cache[name] = discover_templates
|
|
90
|
+
return discover_templates
|
|
91
|
+
elif name == "find_template_path":
|
|
92
|
+
from .discovery import find_template_path
|
|
93
|
+
_module_cache[name] = find_template_path
|
|
94
|
+
return find_template_path
|
|
95
|
+
elif name == "DependencyChecker":
|
|
96
|
+
from .dependency_checker import DependencyChecker
|
|
97
|
+
_module_cache[name] = DependencyChecker
|
|
98
|
+
return DependencyChecker
|
|
99
|
+
elif name == "StrictModeError":
|
|
100
|
+
from .dependency_checker import StrictModeError
|
|
101
|
+
_module_cache[name] = StrictModeError
|
|
102
|
+
return StrictModeError
|
|
103
|
+
elif name == "ToolsDoctor":
|
|
104
|
+
from .tools_doctor import ToolsDoctor
|
|
105
|
+
_module_cache[name] = ToolsDoctor
|
|
106
|
+
return ToolsDoctor
|
|
107
|
+
elif name == "ToolOverrideLoader":
|
|
108
|
+
from .tool_override import ToolOverrideLoader
|
|
109
|
+
_module_cache[name] = ToolOverrideLoader
|
|
110
|
+
return ToolOverrideLoader
|
|
111
|
+
elif name == "SecurityError":
|
|
112
|
+
from .tool_override import SecurityError
|
|
113
|
+
_module_cache[name] = SecurityError
|
|
114
|
+
return SecurityError
|
|
115
|
+
|
|
116
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|