PraisonAI 2.4.2__tar.gz → 2.4.4__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-2.4.2 → praisonai-2.4.4}/PKG-INFO +6 -6
- {praisonai-2.4.2 → praisonai-2.4.4}/PraisonAI.egg-info/PKG-INFO +6 -6
- {praisonai-2.4.2 → praisonai-2.4.4}/PraisonAI.egg-info/SOURCES.txt +16 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-2.4.2 → praisonai-2.4.4}/README.md +4 -4
- praisonai-2.4.4/praisonai/cli/features/observability.py +293 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/deploy.py +1 -1
- praisonai-2.4.4/praisonai/persistence/conversation/async_mysql.py +427 -0
- praisonai-2.4.4/praisonai/persistence/conversation/async_postgres.py +410 -0
- praisonai-2.4.4/praisonai/persistence/conversation/async_sqlite.py +371 -0
- praisonai-2.4.4/praisonai/persistence/conversation/json_store.py +250 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/factory.py +70 -3
- praisonai-2.4.4/praisonai/persistence/knowledge/cosmosdb_vector.py +438 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/couchbase.py +286 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/langchain_adapter.py +291 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/lightrag_adapter.py +212 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/llamaindex_adapter.py +256 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/mongodb_vector.py +306 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/singlestore_vector.py +299 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/surrealdb_vector.py +309 -0
- praisonai-2.4.4/praisonai/persistence/knowledge/upstash_vector.py +266 -0
- praisonai-2.4.4/praisonai/persistence/state/async_mongodb.py +200 -0
- praisonai-2.4.4/praisonai/persistence/state/gcs.py +155 -0
- praisonai-2.4.4/praisonai/version.py +1 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/pyproject.toml +1 -1
- praisonai-2.4.2/praisonai/version.py +0 -1
- {praisonai-2.4.2 → praisonai-2.4.4}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/__main__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/agent_scheduler.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/agents_generator.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/api/call.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/auto.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/chainlit_ui.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/agents.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/background.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/base.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/compare.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/eval.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/image.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/profile.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/router.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/session.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/skills.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/todo.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/tools.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/main.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/agent_tools.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/inc/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/inc/config.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/inc/models.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/integrations/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/integrations/base.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/config.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/base.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/profiler.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler/base.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/scheduler.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/setup/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/setup/build.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/setup/post_install.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/setup.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/test.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/train.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/train_vision.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/agents.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/callbacks.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/chat.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/code.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/colab.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/colab_chainlit.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/context.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/database_config.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/db.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/realtime.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/realtimeclient/__init__.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/realtimeclient/tools.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/ui/sql_alchemy.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/praisonai/upload_vision.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/setup.cfg +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_agents_playbook.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_approval_system.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_basic.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_cli_features.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_double_api_fix.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_n8n_integration.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_phase2_refactor.py +0 -0
- {praisonai-2.4.2 → praisonai-2.4.4}/tests/test_runner.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.4
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=0.2.
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.2.2
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -2860,11 +2860,11 @@ agent.chat("Hello!") # Auto-persists messages, runs, traces
|
|
|
2860
2860
|
| SurrealDB | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2861
2861
|
| Qdrant | Knowledge | `pip install "praisonai[tools]"` | [knowledge_qdrant.py](examples/persistence/knowledge_qdrant.py) | [docs](https://docs.praison.ai/docs/databases/qdrant) |
|
|
2862
2862
|
| ChromaDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2863
|
-
| Pinecone | Knowledge | `pip install
|
|
2864
|
-
| Weaviate | Knowledge | `pip install
|
|
2865
|
-
| LanceDB | Knowledge | `pip install
|
|
2863
|
+
| Pinecone | Knowledge | `pip install pinecone` | [pinecone_wow.py](examples/vector/pinecone_wow.py) | [docs](https://docs.praison.ai/docs/databases/pinecone) |
|
|
2864
|
+
| Weaviate | Knowledge | `pip install weaviate-client` | [weaviate_wow.py](examples/vector/weaviate_wow.py) | [docs](https://docs.praison.ai/docs/databases/weaviate) |
|
|
2865
|
+
| LanceDB | Knowledge | `pip install lancedb` | [lancedb_real_wow.py](examples/vector/lancedb_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/lancedb) |
|
|
2866
2866
|
| Milvus | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2867
|
-
| PGVector | Knowledge | `pip install
|
|
2867
|
+
| PGVector | Knowledge | `pip install psycopg2-binary` | [pgvector_real_wow.py](examples/vector/pgvector_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/pgvector) |
|
|
2868
2868
|
| Redis Vector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2869
2869
|
| Cassandra | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2870
2870
|
| ClickHouse | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.4
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=0.2.
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.2.2
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -2860,11 +2860,11 @@ agent.chat("Hello!") # Auto-persists messages, runs, traces
|
|
|
2860
2860
|
| SurrealDB | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2861
2861
|
| Qdrant | Knowledge | `pip install "praisonai[tools]"` | [knowledge_qdrant.py](examples/persistence/knowledge_qdrant.py) | [docs](https://docs.praison.ai/docs/databases/qdrant) |
|
|
2862
2862
|
| ChromaDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2863
|
-
| Pinecone | Knowledge | `pip install
|
|
2864
|
-
| Weaviate | Knowledge | `pip install
|
|
2865
|
-
| LanceDB | Knowledge | `pip install
|
|
2863
|
+
| Pinecone | Knowledge | `pip install pinecone` | [pinecone_wow.py](examples/vector/pinecone_wow.py) | [docs](https://docs.praison.ai/docs/databases/pinecone) |
|
|
2864
|
+
| Weaviate | Knowledge | `pip install weaviate-client` | [weaviate_wow.py](examples/vector/weaviate_wow.py) | [docs](https://docs.praison.ai/docs/databases/weaviate) |
|
|
2865
|
+
| LanceDB | Knowledge | `pip install lancedb` | [lancedb_real_wow.py](examples/vector/lancedb_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/lancedb) |
|
|
2866
2866
|
| Milvus | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2867
|
-
| PGVector | Knowledge | `pip install
|
|
2867
|
+
| PGVector | Knowledge | `pip install psycopg2-binary` | [pgvector_real_wow.py](examples/vector/pgvector_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/pgvector) |
|
|
2868
2868
|
| Redis Vector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2869
2869
|
| Cassandra | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2870
2870
|
| ClickHouse | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
@@ -51,6 +51,7 @@ praisonai/cli/features/mcp.py
|
|
|
51
51
|
praisonai/cli/features/message_queue.py
|
|
52
52
|
praisonai/cli/features/metrics.py
|
|
53
53
|
praisonai/cli/features/n8n.py
|
|
54
|
+
praisonai/cli/features/observability.py
|
|
54
55
|
praisonai/cli/features/persistence.py
|
|
55
56
|
praisonai/cli/features/profile.py
|
|
56
57
|
praisonai/cli/features/profiling.py
|
|
@@ -95,7 +96,11 @@ praisonai/persistence/config.py
|
|
|
95
96
|
praisonai/persistence/factory.py
|
|
96
97
|
praisonai/persistence/orchestrator.py
|
|
97
98
|
praisonai/persistence/conversation/__init__.py
|
|
99
|
+
praisonai/persistence/conversation/async_mysql.py
|
|
100
|
+
praisonai/persistence/conversation/async_postgres.py
|
|
101
|
+
praisonai/persistence/conversation/async_sqlite.py
|
|
98
102
|
praisonai/persistence/conversation/base.py
|
|
103
|
+
praisonai/persistence/conversation/json_store.py
|
|
99
104
|
praisonai/persistence/conversation/mysql.py
|
|
100
105
|
praisonai/persistence/conversation/postgres.py
|
|
101
106
|
praisonai/persistence/conversation/singlestore.py
|
|
@@ -109,19 +114,30 @@ praisonai/persistence/knowledge/base.py
|
|
|
109
114
|
praisonai/persistence/knowledge/cassandra.py
|
|
110
115
|
praisonai/persistence/knowledge/chroma.py
|
|
111
116
|
praisonai/persistence/knowledge/clickhouse.py
|
|
117
|
+
praisonai/persistence/knowledge/cosmosdb_vector.py
|
|
118
|
+
praisonai/persistence/knowledge/couchbase.py
|
|
112
119
|
praisonai/persistence/knowledge/lancedb.py
|
|
120
|
+
praisonai/persistence/knowledge/langchain_adapter.py
|
|
121
|
+
praisonai/persistence/knowledge/lightrag_adapter.py
|
|
122
|
+
praisonai/persistence/knowledge/llamaindex_adapter.py
|
|
113
123
|
praisonai/persistence/knowledge/milvus.py
|
|
124
|
+
praisonai/persistence/knowledge/mongodb_vector.py
|
|
114
125
|
praisonai/persistence/knowledge/pgvector.py
|
|
115
126
|
praisonai/persistence/knowledge/pinecone.py
|
|
116
127
|
praisonai/persistence/knowledge/qdrant.py
|
|
117
128
|
praisonai/persistence/knowledge/redis_vector.py
|
|
129
|
+
praisonai/persistence/knowledge/singlestore_vector.py
|
|
130
|
+
praisonai/persistence/knowledge/surrealdb_vector.py
|
|
131
|
+
praisonai/persistence/knowledge/upstash_vector.py
|
|
118
132
|
praisonai/persistence/knowledge/weaviate.py
|
|
119
133
|
praisonai/persistence/migrations/__init__.py
|
|
120
134
|
praisonai/persistence/migrations/manager.py
|
|
121
135
|
praisonai/persistence/state/__init__.py
|
|
136
|
+
praisonai/persistence/state/async_mongodb.py
|
|
122
137
|
praisonai/persistence/state/base.py
|
|
123
138
|
praisonai/persistence/state/dynamodb.py
|
|
124
139
|
praisonai/persistence/state/firestore.py
|
|
140
|
+
praisonai/persistence/state/gcs.py
|
|
125
141
|
praisonai/persistence/state/memory.py
|
|
126
142
|
praisonai/persistence/state/mongodb.py
|
|
127
143
|
praisonai/persistence/state/redis.py
|
|
@@ -2763,11 +2763,11 @@ agent.chat("Hello!") # Auto-persists messages, runs, traces
|
|
|
2763
2763
|
| SurrealDB | Conversation | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2764
2764
|
| Qdrant | Knowledge | `pip install "praisonai[tools]"` | [knowledge_qdrant.py](examples/persistence/knowledge_qdrant.py) | [docs](https://docs.praison.ai/docs/databases/qdrant) |
|
|
2765
2765
|
| ChromaDB | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2766
|
-
| Pinecone | Knowledge | `pip install
|
|
2767
|
-
| Weaviate | Knowledge | `pip install
|
|
2768
|
-
| LanceDB | Knowledge | `pip install
|
|
2766
|
+
| Pinecone | Knowledge | `pip install pinecone` | [pinecone_wow.py](examples/vector/pinecone_wow.py) | [docs](https://docs.praison.ai/docs/databases/pinecone) |
|
|
2767
|
+
| Weaviate | Knowledge | `pip install weaviate-client` | [weaviate_wow.py](examples/vector/weaviate_wow.py) | [docs](https://docs.praison.ai/docs/databases/weaviate) |
|
|
2768
|
+
| LanceDB | Knowledge | `pip install lancedb` | [lancedb_real_wow.py](examples/vector/lancedb_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/lancedb) |
|
|
2769
2769
|
| Milvus | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2770
|
-
| PGVector | Knowledge | `pip install
|
|
2770
|
+
| PGVector | Knowledge | `pip install psycopg2-binary` | [pgvector_real_wow.py](examples/vector/pgvector_real_wow.py) | [docs](https://docs.praison.ai/docs/databases/pgvector) |
|
|
2771
2771
|
| Redis Vector | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2772
2772
|
| Cassandra | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
2773
2773
|
| ClickHouse | Knowledge | `pip install "praisonai[tools]"` | - | [docs](https://docs.praison.ai/docs/databases/overview) |
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Observability CLI Handler
|
|
3
|
+
|
|
4
|
+
CLI commands for managing observability providers.
|
|
5
|
+
Usage: praisonai obs <command>
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
10
|
+
|
|
11
|
+
from .base import FlagHandler
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ObservabilityHandler(FlagHandler):
|
|
15
|
+
"""
|
|
16
|
+
Handler for observability CLI commands.
|
|
17
|
+
|
|
18
|
+
Commands:
|
|
19
|
+
praisonai obs list - List available providers
|
|
20
|
+
praisonai obs doctor - Check provider connectivity
|
|
21
|
+
praisonai obs init <name> - Initialize a provider
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def feature_name(self) -> str:
|
|
26
|
+
return "observability"
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def flag_name(self) -> str:
|
|
30
|
+
return "obs"
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def flag_help(self) -> str:
|
|
34
|
+
return "Observability commands (list, doctor, init)"
|
|
35
|
+
|
|
36
|
+
def check_dependencies(self) -> Tuple[bool, str]:
|
|
37
|
+
"""Check if observability module is available."""
|
|
38
|
+
try:
|
|
39
|
+
from praisonai_tools.observability import obs
|
|
40
|
+
return True, ""
|
|
41
|
+
except ImportError:
|
|
42
|
+
return False, "Observability requires praisonai-tools. Install with: pip install praisonai-tools"
|
|
43
|
+
|
|
44
|
+
def list_providers(self) -> Dict[str, Any]:
|
|
45
|
+
"""List all available observability providers."""
|
|
46
|
+
result = {
|
|
47
|
+
"registered": [],
|
|
48
|
+
"available": [],
|
|
49
|
+
"configured": [],
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
from praisonai_tools.observability.manager import ObservabilityManager
|
|
54
|
+
from praisonai_tools.observability.config import PROVIDER_ENV_KEYS
|
|
55
|
+
|
|
56
|
+
mgr = ObservabilityManager()
|
|
57
|
+
|
|
58
|
+
# Get all registered providers
|
|
59
|
+
result["registered"] = mgr.list_providers()
|
|
60
|
+
|
|
61
|
+
# Check which have env vars configured
|
|
62
|
+
for provider, keys in PROVIDER_ENV_KEYS.items():
|
|
63
|
+
if all(os.getenv(key) for key in keys):
|
|
64
|
+
result["configured"].append(provider)
|
|
65
|
+
|
|
66
|
+
# Check which SDKs are available
|
|
67
|
+
for provider in result["registered"]:
|
|
68
|
+
try:
|
|
69
|
+
mgr._load_provider(provider)
|
|
70
|
+
if provider in mgr._providers:
|
|
71
|
+
provider_class = mgr._providers[provider]
|
|
72
|
+
instance = provider_class()
|
|
73
|
+
if instance.is_available():
|
|
74
|
+
result["available"].append(provider)
|
|
75
|
+
except Exception:
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
except ImportError:
|
|
79
|
+
pass
|
|
80
|
+
|
|
81
|
+
return result
|
|
82
|
+
|
|
83
|
+
def doctor(self, provider: Optional[str] = None) -> Dict[str, Any]:
|
|
84
|
+
"""Run diagnostics on observability setup."""
|
|
85
|
+
try:
|
|
86
|
+
from praisonai_tools.observability import obs
|
|
87
|
+
|
|
88
|
+
if provider:
|
|
89
|
+
obs.init(provider=provider)
|
|
90
|
+
|
|
91
|
+
return obs.doctor()
|
|
92
|
+
|
|
93
|
+
except ImportError:
|
|
94
|
+
return {
|
|
95
|
+
"error": "praisonai-tools not installed",
|
|
96
|
+
"enabled": False,
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
def init_provider(self, provider: str, **kwargs) -> bool:
|
|
100
|
+
"""Initialize a specific provider."""
|
|
101
|
+
try:
|
|
102
|
+
from praisonai_tools.observability import obs
|
|
103
|
+
return obs.init(provider=provider, **kwargs)
|
|
104
|
+
except ImportError:
|
|
105
|
+
return False
|
|
106
|
+
|
|
107
|
+
def execute(self, action: str = "list", **kwargs) -> Any:
|
|
108
|
+
"""
|
|
109
|
+
Execute observability command.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
action: Command to execute (list, doctor, init)
|
|
113
|
+
**kwargs: Additional arguments
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
Command result
|
|
117
|
+
"""
|
|
118
|
+
if action == "list":
|
|
119
|
+
return self._execute_list()
|
|
120
|
+
elif action == "doctor":
|
|
121
|
+
return self._execute_doctor(kwargs.get("provider"))
|
|
122
|
+
elif action == "init":
|
|
123
|
+
return self._execute_init(kwargs.get("provider"), **kwargs)
|
|
124
|
+
else:
|
|
125
|
+
self.print_status(f"Unknown action: {action}", "error")
|
|
126
|
+
return None
|
|
127
|
+
|
|
128
|
+
def _execute_list(self) -> Dict[str, Any]:
|
|
129
|
+
"""Execute list command."""
|
|
130
|
+
result = self.list_providers()
|
|
131
|
+
|
|
132
|
+
self.print_status("\n📊 Observability Providers", "info")
|
|
133
|
+
self.print_status("=" * 40, "info")
|
|
134
|
+
|
|
135
|
+
# Provider status table
|
|
136
|
+
all_providers = [
|
|
137
|
+
"agentops", "langfuse", "langsmith", "traceloop",
|
|
138
|
+
"arize_phoenix", "openlit", "langtrace", "langwatch",
|
|
139
|
+
"datadog", "mlflow", "opik", "portkey",
|
|
140
|
+
"braintrust", "maxim", "weave", "neatlogs",
|
|
141
|
+
"langdb", "atla", "patronus", "truefoundry",
|
|
142
|
+
]
|
|
143
|
+
|
|
144
|
+
for provider in all_providers:
|
|
145
|
+
status_parts = []
|
|
146
|
+
if provider in result.get("available", []):
|
|
147
|
+
status_parts.append("✅ SDK")
|
|
148
|
+
else:
|
|
149
|
+
status_parts.append("❌ SDK")
|
|
150
|
+
|
|
151
|
+
if provider in result.get("configured", []):
|
|
152
|
+
status_parts.append("🔑 Keys")
|
|
153
|
+
else:
|
|
154
|
+
status_parts.append("⚪ Keys")
|
|
155
|
+
|
|
156
|
+
status = " | ".join(status_parts)
|
|
157
|
+
self.print_status(f" {provider:20} {status}", "info")
|
|
158
|
+
|
|
159
|
+
self.print_status("\n✅ = Available ❌ = Not installed 🔑 = API key configured", "info")
|
|
160
|
+
|
|
161
|
+
return result
|
|
162
|
+
|
|
163
|
+
def _execute_doctor(self, provider: Optional[str] = None) -> Dict[str, Any]:
|
|
164
|
+
"""Execute doctor command."""
|
|
165
|
+
result = self.doctor(provider)
|
|
166
|
+
|
|
167
|
+
self.print_status("\n🩺 Observability Diagnostics", "info")
|
|
168
|
+
self.print_status("=" * 40, "info")
|
|
169
|
+
|
|
170
|
+
self.print_status(f" Enabled: {result.get('enabled', False)}", "info")
|
|
171
|
+
self.print_status(f" Provider: {result.get('provider', 'None')}", "info")
|
|
172
|
+
|
|
173
|
+
if result.get("connection_status") is not None:
|
|
174
|
+
status = "✅" if result["connection_status"] else "❌"
|
|
175
|
+
self.print_status(f" Connection: {status} {result.get('connection_message', '')}", "info")
|
|
176
|
+
|
|
177
|
+
if result.get("available_providers"):
|
|
178
|
+
self.print_status(f" Available: {', '.join(result['available_providers'])}", "info")
|
|
179
|
+
|
|
180
|
+
return result
|
|
181
|
+
|
|
182
|
+
def _execute_init(self, provider: str, **kwargs) -> bool:
|
|
183
|
+
"""Execute init command."""
|
|
184
|
+
if not provider:
|
|
185
|
+
self.print_status("Provider name required. Usage: praisonai obs init <provider>", "error")
|
|
186
|
+
return False
|
|
187
|
+
|
|
188
|
+
success = self.init_provider(provider, **kwargs)
|
|
189
|
+
|
|
190
|
+
if success:
|
|
191
|
+
self.print_status(f"✅ {provider} initialized successfully", "success")
|
|
192
|
+
else:
|
|
193
|
+
self.print_status(f"❌ Failed to initialize {provider}", "error")
|
|
194
|
+
self.print_status(f" Check that {provider} SDK is installed and API keys are set", "info")
|
|
195
|
+
|
|
196
|
+
return success
|
|
197
|
+
|
|
198
|
+
def apply_to_agent_config(self, config: Dict[str, Any], flag_value: Any) -> Dict[str, Any]:
|
|
199
|
+
"""Apply observability to agent config."""
|
|
200
|
+
if flag_value:
|
|
201
|
+
try:
|
|
202
|
+
from praisonai_tools.observability import obs
|
|
203
|
+
|
|
204
|
+
if isinstance(flag_value, str):
|
|
205
|
+
obs.init(provider=flag_value)
|
|
206
|
+
else:
|
|
207
|
+
obs.init()
|
|
208
|
+
|
|
209
|
+
self.print_status("📊 Observability enabled", "success")
|
|
210
|
+
except ImportError:
|
|
211
|
+
self.print_status("Observability requires praisonai-tools", "warning")
|
|
212
|
+
|
|
213
|
+
return config
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# Provider environment variable reference
|
|
217
|
+
PROVIDER_SETUP_GUIDE = {
|
|
218
|
+
"agentops": {
|
|
219
|
+
"env_vars": ["AGENTOPS_API_KEY"],
|
|
220
|
+
"install": "pip install agentops",
|
|
221
|
+
"docs": "https://agentops.ai/",
|
|
222
|
+
},
|
|
223
|
+
"langfuse": {
|
|
224
|
+
"env_vars": ["LANGFUSE_PUBLIC_KEY", "LANGFUSE_SECRET_KEY"],
|
|
225
|
+
"install": "pip install opentelemetry-sdk opentelemetry-exporter-otlp",
|
|
226
|
+
"docs": "https://langfuse.com/",
|
|
227
|
+
},
|
|
228
|
+
"langsmith": {
|
|
229
|
+
"env_vars": ["LANGSMITH_API_KEY"],
|
|
230
|
+
"install": "pip install opentelemetry-sdk opentelemetry-exporter-otlp",
|
|
231
|
+
"docs": "https://smith.langchain.com/",
|
|
232
|
+
},
|
|
233
|
+
"traceloop": {
|
|
234
|
+
"env_vars": ["TRACELOOP_API_KEY"],
|
|
235
|
+
"install": "pip install traceloop-sdk",
|
|
236
|
+
"docs": "https://traceloop.com/",
|
|
237
|
+
},
|
|
238
|
+
"arize_phoenix": {
|
|
239
|
+
"env_vars": ["PHOENIX_API_KEY"],
|
|
240
|
+
"install": "pip install arize-phoenix openinference-instrumentation",
|
|
241
|
+
"docs": "https://phoenix.arize.com/",
|
|
242
|
+
},
|
|
243
|
+
"openlit": {
|
|
244
|
+
"env_vars": [],
|
|
245
|
+
"install": "pip install openlit",
|
|
246
|
+
"docs": "https://github.com/openlit/openlit",
|
|
247
|
+
},
|
|
248
|
+
"langtrace": {
|
|
249
|
+
"env_vars": ["LANGTRACE_API_KEY"],
|
|
250
|
+
"install": "pip install langtrace-python-sdk",
|
|
251
|
+
"docs": "https://langtrace.ai/",
|
|
252
|
+
},
|
|
253
|
+
"langwatch": {
|
|
254
|
+
"env_vars": ["LANGWATCH_API_KEY"],
|
|
255
|
+
"install": "pip install langwatch",
|
|
256
|
+
"docs": "https://langwatch.ai/",
|
|
257
|
+
},
|
|
258
|
+
"datadog": {
|
|
259
|
+
"env_vars": ["DD_API_KEY"],
|
|
260
|
+
"install": "pip install ddtrace",
|
|
261
|
+
"docs": "https://www.datadoghq.com/product/llm-observability/",
|
|
262
|
+
},
|
|
263
|
+
"mlflow": {
|
|
264
|
+
"env_vars": ["MLFLOW_TRACKING_URI"],
|
|
265
|
+
"install": "pip install mlflow",
|
|
266
|
+
"docs": "https://mlflow.org/",
|
|
267
|
+
},
|
|
268
|
+
"opik": {
|
|
269
|
+
"env_vars": ["OPIK_API_KEY"],
|
|
270
|
+
"install": "pip install opik",
|
|
271
|
+
"docs": "https://www.comet.com/docs/opik/",
|
|
272
|
+
},
|
|
273
|
+
"portkey": {
|
|
274
|
+
"env_vars": ["PORTKEY_API_KEY"],
|
|
275
|
+
"install": "pip install portkey-ai",
|
|
276
|
+
"docs": "https://portkey.ai/",
|
|
277
|
+
},
|
|
278
|
+
"braintrust": {
|
|
279
|
+
"env_vars": ["BRAINTRUST_API_KEY"],
|
|
280
|
+
"install": "pip install braintrust",
|
|
281
|
+
"docs": "https://www.braintrust.dev/",
|
|
282
|
+
},
|
|
283
|
+
"maxim": {
|
|
284
|
+
"env_vars": ["MAXIM_API_KEY"],
|
|
285
|
+
"install": "pip install maxim-py",
|
|
286
|
+
"docs": "https://getmaxim.ai/",
|
|
287
|
+
},
|
|
288
|
+
"weave": {
|
|
289
|
+
"env_vars": ["WANDB_API_KEY"],
|
|
290
|
+
"install": "pip install weave",
|
|
291
|
+
"docs": "https://weave-docs.wandb.ai/",
|
|
292
|
+
},
|
|
293
|
+
}
|
|
@@ -57,7 +57,7 @@ class CloudDeployer:
|
|
|
57
57
|
file.write("FROM python:3.11-slim\n")
|
|
58
58
|
file.write("WORKDIR /app\n")
|
|
59
59
|
file.write("COPY . .\n")
|
|
60
|
-
file.write("RUN pip install flask praisonai==2.4.
|
|
60
|
+
file.write("RUN pip install flask praisonai==2.4.4 gunicorn markdown\n")
|
|
61
61
|
file.write("EXPOSE 8080\n")
|
|
62
62
|
file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
|
|
63
63
|
|