From aeeaa9e87bca6fd6412d9d810359989a6c7460d7 Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Tue, 27 May 2025 09:49:57 +0100 Subject: [PATCH 1/6] Remove unused agent files and clean up test directory by deleting obsolete test scripts and configuration files. --- .github/workflows/python-package.yml | 6 +- .github/workflows/test-comprehensive.yml | 16 +- .github/workflows/test-core.yml | 10 +- .github/workflows/test-extended.yml | 2 +- .github/workflows/test-frameworks.yml | 2 +- .github/workflows/test-real.yml | 4 +- .github/workflows/unittest.yml | 2 +- src/praisonai-agents/pyproject.toml | 5 +- .../{ => tests}/.windsurfrules | 0 .../{ => tests}/any-llm-agents-async.py | 0 .../{ => tests}/async-tavily-agents-gemini.py | 0 .../{ => tests}/async-tavily-agents.py | 0 .../{ => tests}/async_example.py | 0 .../{ => tests}/async_example_full.py | 0 .../async_example_full_multigroups.py | 0 .../{ => tests}/auto_agents_example.py | 0 .../{ => tests}/autonomous-agent.py | 0 .../{ => tests}/basic-agents.py | 0 .../{ => tests}/chunking-direct-test.py | 0 .../{ => tests}/code-analysis-agents.py | 0 .../{ => tests}/code-analysis-streamlit.py | 0 .../{ => tests}/code_agents_example.py | 0 .../{ => tests}/code_review.py | 0 .../{ => tests}/context-agents-code.py | 0 .../{ => tests}/context-agents.py | 0 .../{ => tests}/context-multi-tasks.py | 0 .../{ => tests}/cot-agents-batch.py | 0 .../{ => tests}/cot-agents.py | 0 .../{ => tests}/crewai-tools-example.py | 0 src/praisonai-agents/{ => tests}/cv.txt | 0 .../{ => tests}/data-analyst-agent.py | 0 .../{ => tests}/deepseek-agents.py | 0 .../{ => tests}/deepseek-cot-agents.py | 0 .../{ => tests}/deepseek-ollama-rag.py | 0 .../deepseek-rag-agents-streamlit.py | 0 .../{ => tests}/deepseek-rag-agents-task.py | 0 .../{ => tests}/deepseek-rag-agents-ui.py | 0 .../{ => tests}/deepseek-rag-agents.py | 0 .../{ => tests}/deepseek-reasoning-agents.py | 0 .../deepseek-reasoning-multi-agents.py | 0 .../deepseek-reasoning-output-tokens.py | 0 .../{ => tests}/deepseek-think.py | 0 src/praisonai-agents/{ => tests}/document.txt | 0 .../{ => tests}/evaluator-optimiser.py | 0 .../{ => tests}/example_callback.py | 0 .../{ => tests}/example_custom_tools.py | 0 .../{ => tests}/example_sequential.py | 0 .../{ => tests}/finance-agent.py | 0 .../{ => tests}/gradio-agents.py | 0 .../{ => tests}/gradio-multiagents.py | 0 src/praisonai-agents/{ => tests}/groq-mcp.py | 0 .../{ => tests}/hackathon-judge-agent-code.py | 0 .../{ => tests}/hackathon-judge-agent.py | 0 .../{ => tests}/hackathon-judge-streamlit.py | 0 .../{ => tests}/image-agent-async.py | 0 .../{ => tests}/image-agent.py | 0 .../{ => tests}/image-to-text-agent.py | 0 .../{ => tests}/image-understanding-agent.py | 0 src/praisonai-agents/{ => tests}/image.jpg | Bin .../{ => tests}/kag-research-paper.pdf | Bin .../{ => tests}/knowledge-agents-task.py | 0 .../{ => tests}/knowledge-agents.py | 0 .../knowledge-direct-simple-test.py | 0 .../{ => tests}/knowledge-direct-test.py | 0 .../{ => tests}/knowledge-large-pdf-test.py | 0 .../{ => tests}/langchain_example.py | 0 .../{ => tests}/langchain_logs.py | 0 src/praisonai-agents/{ => tests}/large.pdf | Bin .../{ => tests}/litellm-reasoning.py | 0 .../{ => tests}/llamaindex_example.py | 0 .../{ => tests}/llm-anthropic.py | 0 .../{ => tests}/llm-deepseek-agents.py | 0 .../llm-deepseek-reasoning-agents.py | 0 .../llm-deepseek-reasoning-steps.py | 0 .../{ => tests}/llm-gemini-advanced.py | 0 .../{ => tests}/llm-gemini.py | 0 .../{ => tests}/llm-langchain-toolcall.py | 0 .../{ => tests}/llm-tool-call.py | 0 .../{ => tests}/markdown-agent.py | 0 .../{ => tests}/mcp-agents-detailed.py | 0 .../{ => tests}/mcp-agents.py | 0 src/praisonai-agents/{ => tests}/mcp-basic.py | 0 .../{ => tests}/mcp-llama4.py | 0 .../{ => tests}/mcp-mini-airbnb.py | 0 .../{ => tests}/mcp-mini-bravesearch.py | 0 .../{ => tests}/mcp-multiagents.py | 0 .../mcp-npx-airbnb-agent-direct.py | 0 .../{ => tests}/mcp-npx-airbnb-stockprice.py | 0 .../{ => tests}/mcp-npx-airbnb.py | 0 .../{ => tests}/mcp-npx-brave.py | 0 .../mcp-npx-mini-airbnb-stockprice.py | 0 .../{ => tests}/mcp-ollama-python.py | 0 .../{ => tests}/mcp-ollama.py | 0 .../{ => tests}/mcp-python-stockprice.py | 0 .../{ => tests}/mcp-sse-direct-agent.py | 0 .../{ => tests}/mcp-sse-direct-client.py | 0 .../{ => tests}/mcp-sse-direct-server.py | 0 .../{ => tests}/mcp-sse-weather.py | 0 src/praisonai-agents/{ => tests}/mcp-sse.py | 0 .../{ => tests}/mcp_airbnb_client_direct.py | 0 .../{ => tests}/mcp_airbnb_full_direct.py | 0 .../{ => tests}/mcp_client_direct.py | 0 .../{ => tests}/mcp_wrapper.py | 0 src/praisonai-agents/{ => tests}/md.py | 0 .../{ => tests}/memory-add-search.py | 0 .../{ => tests}/memory-search-advanced.py | 0 .../{ => tests}/memory-search-simple-test.py | 0 .../{ => tests}/memory-search-simple.py | 0 .../{ => tests}/memory_example.py | 0 .../{ => tests}/memory_simple.py | 0 .../{ => tests}/mini_agents_example.py | 0 .../{ => tests}/multi-agent-api.py | 0 .../{ => tests}/multi-agents-api.py | 0 .../{ => tests}/multi-agents-group-api.py | 0 .../{ => tests}/multimodal.py | 0 .../{ => tests}/npx_mcp_wrapper_main.py | 0 .../{ => tests}/openai-mcp.py | 0 .../{ => tests}/orchestrator-workers.py | 0 .../{ => tests}/parallelisation.py | 0 .../{ => tests}/pdf_agents_example.py | 0 .../{ => tests}/planning-agent.py | 0 .../{ => tests}/programming-agent.py | 0 .../{ => tests}/prompt_chaining copy.py | 0 .../{ => tests}/prompt_chaining.py | 0 .../{ => tests}/recommendation-agent.py | 0 .../{ => tests}/repetitive-agents.py | 0 .../{ => tests}/repetitive-manual-agents.py | 0 .../{ => tests}/research-agent.py | 0 .../{ => tests}/routing copy.py | 0 src/praisonai-agents/{ => tests}/routing.py | 0 src/praisonai-agents/{ => tests}/sample.docx | Bin src/praisonai-agents/{ => tests}/sample.md | 0 src/praisonai-agents/{ => tests}/sample.txt | 0 .../{ => tests}/shopping-agent.py | 0 .../{ => tests}/simple-api-mcp.py | 0 .../{ => tests}/simple-api.py | 0 .../simple-mcp-multi-agents-server.py | 0 .../{ => tests}/simple-mcp-server.py | 0 .../{ => tests}/single-agent.py | 0 .../{ => tests}/streamlit-agents.py | 0 .../{ => tests}/streamlit-multiagents.py | 0 .../{ => tests}/structured_agents_example.py | 0 .../structured_response_example.py | 0 src/praisonai-agents/{ => tests}/tasks.csv | 0 .../{ => tests}/tesla-stock-price.csv | 0 src/praisonai-agents/{ => tests}/test.py | 0 .../{ => tests}/tools-class.py | 0 .../{ => tests}/tools_example.py | 0 src/praisonai-agents/{ => tests}/ui.py | 0 .../{ => tests}/vector-db-agents.py | 0 .../{ => tests}/video-agent.py | 0 .../{ => tests}/websearch-agent.py | 0 .../{ => tests}/wikipedia-agent.py | 0 .../{ => tests}/workflow-test-agents.py | 0 .../{ => tests}/workflow_example_basic.py | 0 .../{ => tests}/workflow_example_detailed.py | 0 src/praisonai/pyproject.toml | 2 +- pytest.ini => src/praisonai/pytest.ini | 0 {tests => src/praisonai/tests}/README.md | 0 .../praisonai/tests}/TESTING_GUIDE.md | 0 {tests => src/praisonai/tests}/__init__.py | 0 .../praisonai/tests}/advanced_example.py | 0 .../praisonai/tests}/agents-advanced.yaml | 0 {tests => src/praisonai/tests}/agents.yaml | 0 .../praisonai/tests}/auto_example.py | 0 .../praisonai/tests}/autogen-agents.yaml | 0 .../praisonai/tests}/basic_example.py | 0 {tests => src/praisonai/tests}/cl-test.py | 0 {tests => src/praisonai/tests}/conftest.py | 0 .../praisonai/tests}/crewai-agents.yaml | 0 {tests => src/praisonai/tests}/debug.py | 0 {tests => src/praisonai/tests}/e2e/README.md | 0 .../praisonai/tests}/e2e/__init__.py | 0 .../praisonai/tests}/e2e/autogen/__init__.py | 0 .../tests}/e2e/autogen/test_autogen_real.py | 0 .../praisonai/tests}/inbuilt-tool-agents.yaml | 0 .../praisonai/tests}/integration/README.md | 0 .../integration/WORKFLOW_INTEGRATION.md | 0 .../praisonai/tests}/integration/__init__.py | 0 .../tests}/integration/autogen/__init__.py | 0 .../integration/autogen/test_autogen_basic.py | 0 .../integration/test_base_url_api_base_fix.py | 0 .../integration/test_mcp_integration.py | 0 .../integration/test_rag_integration.py | 0 .../praisonai/tests}/search-tool-agents.yaml | 0 .../praisonai/tests}/simple_test_runner.py | 0 .../tests}/source/autogen_function_tools.py | 0 .../tests}/source/autogen_langchain_tools.py | 0 .../praisonai/tests}/source/crewai_tools.py | 0 .../praisonai/tests}/source/radius.txt | 0 {tests => src/praisonai/tests}/test.py | 0 .../praisonai/tests}/test_agents_playbook.py | 0 {tests => src/praisonai/tests}/test_basic.py | 0 {tests => src/praisonai/tests}/test_runner.py | 0 .../praisonai/tests}/tools/__init__.py | 0 .../praisonai/tests}/tools/internet_search.py | 0 .../praisonai/tests}/unit/__init__.py | 0 .../praisonai/tests}/unit/agent/__init__.py | 0 .../tests}/unit/agent/test_mini_agents_fix.py | 0 .../unit/agent/test_mini_agents_sequential.py | 0 .../tests}/unit/agent/test_type_casting.py | 0 .../tests}/unit/test_async_agents.py | 0 .../tests}/unit/test_context_management.py | 0 .../praisonai/tests}/unit/test_core_agents.py | 0 .../tests}/unit/test_tools_and_ui.py | 0 .../praisonai/tests}/yaml_example.py | 0 tests/e2e/crewai/__init__.py | 1 - tests/e2e/crewai/test_crewai_real.py | 216 --------------- tests/integration/crewai/__init__.py | 1 - tests/integration/crewai/test_crewai_basic.py | 255 ------------------ 210 files changed, 26 insertions(+), 496 deletions(-) rename src/praisonai-agents/{ => tests}/.windsurfrules (100%) rename src/praisonai-agents/{ => tests}/any-llm-agents-async.py (100%) rename src/praisonai-agents/{ => tests}/async-tavily-agents-gemini.py (100%) rename src/praisonai-agents/{ => tests}/async-tavily-agents.py (100%) rename src/praisonai-agents/{ => tests}/async_example.py (100%) rename src/praisonai-agents/{ => tests}/async_example_full.py (100%) rename src/praisonai-agents/{ => tests}/async_example_full_multigroups.py (100%) rename src/praisonai-agents/{ => tests}/auto_agents_example.py (100%) rename src/praisonai-agents/{ => tests}/autonomous-agent.py (100%) rename src/praisonai-agents/{ => tests}/basic-agents.py (100%) rename src/praisonai-agents/{ => tests}/chunking-direct-test.py (100%) rename src/praisonai-agents/{ => tests}/code-analysis-agents.py (100%) rename src/praisonai-agents/{ => tests}/code-analysis-streamlit.py (100%) rename src/praisonai-agents/{ => tests}/code_agents_example.py (100%) rename src/praisonai-agents/{ => tests}/code_review.py (100%) rename src/praisonai-agents/{ => tests}/context-agents-code.py (100%) rename src/praisonai-agents/{ => tests}/context-agents.py (100%) rename src/praisonai-agents/{ => tests}/context-multi-tasks.py (100%) rename src/praisonai-agents/{ => tests}/cot-agents-batch.py (100%) rename src/praisonai-agents/{ => tests}/cot-agents.py (100%) rename src/praisonai-agents/{ => tests}/crewai-tools-example.py (100%) rename src/praisonai-agents/{ => tests}/cv.txt (100%) rename src/praisonai-agents/{ => tests}/data-analyst-agent.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-agents.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-cot-agents.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-ollama-rag.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-rag-agents-streamlit.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-rag-agents-task.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-rag-agents-ui.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-rag-agents.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-reasoning-agents.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-reasoning-multi-agents.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-reasoning-output-tokens.py (100%) rename src/praisonai-agents/{ => tests}/deepseek-think.py (100%) rename src/praisonai-agents/{ => tests}/document.txt (100%) rename src/praisonai-agents/{ => tests}/evaluator-optimiser.py (100%) rename src/praisonai-agents/{ => tests}/example_callback.py (100%) rename src/praisonai-agents/{ => tests}/example_custom_tools.py (100%) rename src/praisonai-agents/{ => tests}/example_sequential.py (100%) rename src/praisonai-agents/{ => tests}/finance-agent.py (100%) rename src/praisonai-agents/{ => tests}/gradio-agents.py (100%) rename src/praisonai-agents/{ => tests}/gradio-multiagents.py (100%) rename src/praisonai-agents/{ => tests}/groq-mcp.py (100%) rename src/praisonai-agents/{ => tests}/hackathon-judge-agent-code.py (100%) rename src/praisonai-agents/{ => tests}/hackathon-judge-agent.py (100%) rename src/praisonai-agents/{ => tests}/hackathon-judge-streamlit.py (100%) rename src/praisonai-agents/{ => tests}/image-agent-async.py (100%) rename src/praisonai-agents/{ => tests}/image-agent.py (100%) rename src/praisonai-agents/{ => tests}/image-to-text-agent.py (100%) rename src/praisonai-agents/{ => tests}/image-understanding-agent.py (100%) rename src/praisonai-agents/{ => tests}/image.jpg (100%) rename src/praisonai-agents/{ => tests}/kag-research-paper.pdf (100%) rename src/praisonai-agents/{ => tests}/knowledge-agents-task.py (100%) rename src/praisonai-agents/{ => tests}/knowledge-agents.py (100%) rename src/praisonai-agents/{ => tests}/knowledge-direct-simple-test.py (100%) rename src/praisonai-agents/{ => tests}/knowledge-direct-test.py (100%) rename src/praisonai-agents/{ => tests}/knowledge-large-pdf-test.py (100%) rename src/praisonai-agents/{ => tests}/langchain_example.py (100%) rename src/praisonai-agents/{ => tests}/langchain_logs.py (100%) rename src/praisonai-agents/{ => tests}/large.pdf (100%) rename src/praisonai-agents/{ => tests}/litellm-reasoning.py (100%) rename src/praisonai-agents/{ => tests}/llamaindex_example.py (100%) rename src/praisonai-agents/{ => tests}/llm-anthropic.py (100%) rename src/praisonai-agents/{ => tests}/llm-deepseek-agents.py (100%) rename src/praisonai-agents/{ => tests}/llm-deepseek-reasoning-agents.py (100%) rename src/praisonai-agents/{ => tests}/llm-deepseek-reasoning-steps.py (100%) rename src/praisonai-agents/{ => tests}/llm-gemini-advanced.py (100%) rename src/praisonai-agents/{ => tests}/llm-gemini.py (100%) rename src/praisonai-agents/{ => tests}/llm-langchain-toolcall.py (100%) rename src/praisonai-agents/{ => tests}/llm-tool-call.py (100%) rename src/praisonai-agents/{ => tests}/markdown-agent.py (100%) rename src/praisonai-agents/{ => tests}/mcp-agents-detailed.py (100%) rename src/praisonai-agents/{ => tests}/mcp-agents.py (100%) rename src/praisonai-agents/{ => tests}/mcp-basic.py (100%) rename src/praisonai-agents/{ => tests}/mcp-llama4.py (100%) rename src/praisonai-agents/{ => tests}/mcp-mini-airbnb.py (100%) rename src/praisonai-agents/{ => tests}/mcp-mini-bravesearch.py (100%) rename src/praisonai-agents/{ => tests}/mcp-multiagents.py (100%) rename src/praisonai-agents/{ => tests}/mcp-npx-airbnb-agent-direct.py (100%) rename src/praisonai-agents/{ => tests}/mcp-npx-airbnb-stockprice.py (100%) rename src/praisonai-agents/{ => tests}/mcp-npx-airbnb.py (100%) rename src/praisonai-agents/{ => tests}/mcp-npx-brave.py (100%) rename src/praisonai-agents/{ => tests}/mcp-npx-mini-airbnb-stockprice.py (100%) rename src/praisonai-agents/{ => tests}/mcp-ollama-python.py (100%) rename src/praisonai-agents/{ => tests}/mcp-ollama.py (100%) rename src/praisonai-agents/{ => tests}/mcp-python-stockprice.py (100%) rename src/praisonai-agents/{ => tests}/mcp-sse-direct-agent.py (100%) rename src/praisonai-agents/{ => tests}/mcp-sse-direct-client.py (100%) rename src/praisonai-agents/{ => tests}/mcp-sse-direct-server.py (100%) rename src/praisonai-agents/{ => tests}/mcp-sse-weather.py (100%) rename src/praisonai-agents/{ => tests}/mcp-sse.py (100%) rename src/praisonai-agents/{ => tests}/mcp_airbnb_client_direct.py (100%) rename src/praisonai-agents/{ => tests}/mcp_airbnb_full_direct.py (100%) rename src/praisonai-agents/{ => tests}/mcp_client_direct.py (100%) rename src/praisonai-agents/{ => tests}/mcp_wrapper.py (100%) rename src/praisonai-agents/{ => tests}/md.py (100%) rename src/praisonai-agents/{ => tests}/memory-add-search.py (100%) rename src/praisonai-agents/{ => tests}/memory-search-advanced.py (100%) rename src/praisonai-agents/{ => tests}/memory-search-simple-test.py (100%) rename src/praisonai-agents/{ => tests}/memory-search-simple.py (100%) rename src/praisonai-agents/{ => tests}/memory_example.py (100%) rename src/praisonai-agents/{ => tests}/memory_simple.py (100%) rename src/praisonai-agents/{ => tests}/mini_agents_example.py (100%) rename src/praisonai-agents/{ => tests}/multi-agent-api.py (100%) rename src/praisonai-agents/{ => tests}/multi-agents-api.py (100%) rename src/praisonai-agents/{ => tests}/multi-agents-group-api.py (100%) rename src/praisonai-agents/{ => tests}/multimodal.py (100%) rename src/praisonai-agents/{ => tests}/npx_mcp_wrapper_main.py (100%) rename src/praisonai-agents/{ => tests}/openai-mcp.py (100%) rename src/praisonai-agents/{ => tests}/orchestrator-workers.py (100%) rename src/praisonai-agents/{ => tests}/parallelisation.py (100%) rename src/praisonai-agents/{ => tests}/pdf_agents_example.py (100%) rename src/praisonai-agents/{ => tests}/planning-agent.py (100%) rename src/praisonai-agents/{ => tests}/programming-agent.py (100%) rename src/praisonai-agents/{ => tests}/prompt_chaining copy.py (100%) rename src/praisonai-agents/{ => tests}/prompt_chaining.py (100%) rename src/praisonai-agents/{ => tests}/recommendation-agent.py (100%) rename src/praisonai-agents/{ => tests}/repetitive-agents.py (100%) rename src/praisonai-agents/{ => tests}/repetitive-manual-agents.py (100%) rename src/praisonai-agents/{ => tests}/research-agent.py (100%) rename src/praisonai-agents/{ => tests}/routing copy.py (100%) rename src/praisonai-agents/{ => tests}/routing.py (100%) rename src/praisonai-agents/{ => tests}/sample.docx (100%) rename src/praisonai-agents/{ => tests}/sample.md (100%) rename src/praisonai-agents/{ => tests}/sample.txt (100%) rename src/praisonai-agents/{ => tests}/shopping-agent.py (100%) rename src/praisonai-agents/{ => tests}/simple-api-mcp.py (100%) rename src/praisonai-agents/{ => tests}/simple-api.py (100%) rename src/praisonai-agents/{ => tests}/simple-mcp-multi-agents-server.py (100%) rename src/praisonai-agents/{ => tests}/simple-mcp-server.py (100%) rename src/praisonai-agents/{ => tests}/single-agent.py (100%) rename src/praisonai-agents/{ => tests}/streamlit-agents.py (100%) rename src/praisonai-agents/{ => tests}/streamlit-multiagents.py (100%) rename src/praisonai-agents/{ => tests}/structured_agents_example.py (100%) rename src/praisonai-agents/{ => tests}/structured_response_example.py (100%) rename src/praisonai-agents/{ => tests}/tasks.csv (100%) rename src/praisonai-agents/{ => tests}/tesla-stock-price.csv (100%) rename src/praisonai-agents/{ => tests}/test.py (100%) rename src/praisonai-agents/{ => tests}/tools-class.py (100%) rename src/praisonai-agents/{ => tests}/tools_example.py (100%) rename src/praisonai-agents/{ => tests}/ui.py (100%) rename src/praisonai-agents/{ => tests}/vector-db-agents.py (100%) rename src/praisonai-agents/{ => tests}/video-agent.py (100%) rename src/praisonai-agents/{ => tests}/websearch-agent.py (100%) rename src/praisonai-agents/{ => tests}/wikipedia-agent.py (100%) rename src/praisonai-agents/{ => tests}/workflow-test-agents.py (100%) rename src/praisonai-agents/{ => tests}/workflow_example_basic.py (100%) rename src/praisonai-agents/{ => tests}/workflow_example_detailed.py (100%) rename pytest.ini => src/praisonai/pytest.ini (100%) rename {tests => src/praisonai/tests}/README.md (100%) rename {tests => src/praisonai/tests}/TESTING_GUIDE.md (100%) rename {tests => src/praisonai/tests}/__init__.py (100%) rename {tests => src/praisonai/tests}/advanced_example.py (100%) rename {tests => src/praisonai/tests}/agents-advanced.yaml (100%) rename {tests => src/praisonai/tests}/agents.yaml (100%) rename {tests => src/praisonai/tests}/auto_example.py (100%) rename {tests => src/praisonai/tests}/autogen-agents.yaml (100%) rename {tests => src/praisonai/tests}/basic_example.py (100%) rename {tests => src/praisonai/tests}/cl-test.py (100%) rename {tests => src/praisonai/tests}/conftest.py (100%) rename {tests => src/praisonai/tests}/crewai-agents.yaml (100%) rename {tests => src/praisonai/tests}/debug.py (100%) rename {tests => src/praisonai/tests}/e2e/README.md (100%) rename {tests => src/praisonai/tests}/e2e/__init__.py (100%) rename {tests => src/praisonai/tests}/e2e/autogen/__init__.py (100%) rename {tests => src/praisonai/tests}/e2e/autogen/test_autogen_real.py (100%) rename {tests => src/praisonai/tests}/inbuilt-tool-agents.yaml (100%) rename {tests => src/praisonai/tests}/integration/README.md (100%) rename {tests => src/praisonai/tests}/integration/WORKFLOW_INTEGRATION.md (100%) rename {tests => src/praisonai/tests}/integration/__init__.py (100%) rename {tests => src/praisonai/tests}/integration/autogen/__init__.py (100%) rename {tests => src/praisonai/tests}/integration/autogen/test_autogen_basic.py (100%) rename {tests => src/praisonai/tests}/integration/test_base_url_api_base_fix.py (100%) rename {tests => src/praisonai/tests}/integration/test_mcp_integration.py (100%) rename {tests => src/praisonai/tests}/integration/test_rag_integration.py (100%) rename {tests => src/praisonai/tests}/search-tool-agents.yaml (100%) rename {tests => src/praisonai/tests}/simple_test_runner.py (100%) rename {tests => src/praisonai/tests}/source/autogen_function_tools.py (100%) rename {tests => src/praisonai/tests}/source/autogen_langchain_tools.py (100%) rename {tests => src/praisonai/tests}/source/crewai_tools.py (100%) rename {tests => src/praisonai/tests}/source/radius.txt (100%) rename {tests => src/praisonai/tests}/test.py (100%) rename {tests => src/praisonai/tests}/test_agents_playbook.py (100%) rename {tests => src/praisonai/tests}/test_basic.py (100%) rename {tests => src/praisonai/tests}/test_runner.py (100%) rename {tests => src/praisonai/tests}/tools/__init__.py (100%) rename {tests => src/praisonai/tests}/tools/internet_search.py (100%) rename {tests => src/praisonai/tests}/unit/__init__.py (100%) rename {tests => src/praisonai/tests}/unit/agent/__init__.py (100%) rename {tests => src/praisonai/tests}/unit/agent/test_mini_agents_fix.py (100%) rename {tests => src/praisonai/tests}/unit/agent/test_mini_agents_sequential.py (100%) rename {tests => src/praisonai/tests}/unit/agent/test_type_casting.py (100%) rename {tests => src/praisonai/tests}/unit/test_async_agents.py (100%) rename {tests => src/praisonai/tests}/unit/test_context_management.py (100%) rename {tests => src/praisonai/tests}/unit/test_core_agents.py (100%) rename {tests => src/praisonai/tests}/unit/test_tools_and_ui.py (100%) rename {tests => src/praisonai/tests}/yaml_example.py (100%) delete mode 100644 tests/e2e/crewai/__init__.py delete mode 100644 tests/e2e/crewai/test_crewai_real.py delete mode 100644 tests/integration/crewai/__init__.py delete mode 100644 tests/integration/crewai/test_crewai_basic.py diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index ec9cf309b..4a8b1cbb8 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -37,6 +37,6 @@ jobs: # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - # - name: Test with pytest - # run: | - # pytest + - name: Test with pytest + run: | + cd src/praisonai && python -m pytest diff --git a/.github/workflows/test-comprehensive.yml b/.github/workflows/test-comprehensive.yml index 49bc71ff6..5e1169a6e 100644 --- a/.github/workflows/test-comprehensive.yml +++ b/.github/workflows/test-comprehensive.yml @@ -67,28 +67,28 @@ jobs: case $TEST_TYPE in "unit") - python tests/test_runner.py --pattern unit + cd src/praisonai && python tests/test_runner.py --pattern unit ;; "integration") - python tests/test_runner.py --pattern integration + cd src/praisonai && python tests/test_runner.py --pattern integration ;; "fast") - python tests/test_runner.py --pattern fast + cd src/praisonai && python tests/test_runner.py --pattern fast ;; "performance") - python tests/test_runner.py --pattern "performance" + cd src/praisonai && python tests/test_runner.py --pattern "performance" ;; "frameworks") - python tests/test_runner.py --pattern frameworks + cd src/praisonai && python tests/test_runner.py --pattern frameworks ;; "autogen") - python tests/test_runner.py --pattern autogen + cd src/praisonai && python tests/test_runner.py --pattern autogen ;; "crewai") - python tests/test_runner.py --pattern crewai + cd src/praisonai && python tests/test_runner.py --pattern crewai ;; "all"|*) - python tests/test_runner.py --pattern all + cd src/praisonai && python tests/test_runner.py --pattern all ;; esac diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 639f97a10..8de8740b7 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -43,27 +43,27 @@ jobs: - name: Run Unit Tests run: | - python -m pytest tests/unit/ -v --tb=short --disable-warnings --cov=praisonai --cov-report=term-missing + cd src/praisonai && python -m pytest tests/unit/ -v --tb=short --disable-warnings --cov=praisonai --cov-report=term-missing - name: Run Integration Tests run: | - python -m pytest tests/integration/ -v --tb=short --disable-warnings + cd src/praisonai && python -m pytest tests/integration/ -v --tb=short --disable-warnings - name: Run AutoGen Framework Tests run: | echo "๐Ÿค– Testing AutoGen Framework Integration..." - python tests/test_runner.py --pattern autogen --verbose || echo "โš ๏ธ AutoGen tests completed with issues" + cd src/praisonai && python tests/test_runner.py --pattern autogen --verbose || echo "โš ๏ธ AutoGen tests completed with issues" continue-on-error: true - name: Run CrewAI Framework Tests run: | echo "โ›ต Testing CrewAI Framework Integration..." - python tests/test_runner.py --pattern crewai --verbose || echo "โš ๏ธ CrewAI tests completed with issues" + cd src/praisonai && python tests/test_runner.py --pattern crewai --verbose || echo "โš ๏ธ CrewAI tests completed with issues" continue-on-error: true - name: Run Legacy Tests run: | - python -m pytest tests/test.py -v --tb=short --disable-warnings + cd src/praisonai && python -m pytest tests/test.py -v --tb=short --disable-warnings - name: Upload Coverage Reports if: matrix.python-version == '3.11' diff --git a/.github/workflows/test-extended.yml b/.github/workflows/test-extended.yml index dc6d8ac16..716e1c1e3 100644 --- a/.github/workflows/test-extended.yml +++ b/.github/workflows/test-extended.yml @@ -100,7 +100,7 @@ jobs: import time import sys import statistics - sys.path.insert(0, 'src/praisonai-agents') + sys.path.insert(0, 'src/praisonai') print('๐Ÿƒ Testing agent creation performance...') times = [] diff --git a/.github/workflows/test-frameworks.yml b/.github/workflows/test-frameworks.yml index 4c27ff037..9357c3b85 100644 --- a/.github/workflows/test-frameworks.yml +++ b/.github/workflows/test-frameworks.yml @@ -60,7 +60,7 @@ jobs: - name: Test ${{ matrix.framework }} Framework run: | echo "๐Ÿงช Testing ${{ matrix.framework }} framework integration with Python ${{ matrix.python-version }}" - python tests/test_runner.py --pattern ${{ matrix.framework }} --verbose --coverage + cd src/praisonai && python tests/test_runner.py --pattern ${{ matrix.framework }} --verbose --coverage continue-on-error: false - name: Generate Framework Test Report diff --git a/.github/workflows/test-real.yml b/.github/workflows/test-real.yml index 09566cb19..6c11fcc3b 100644 --- a/.github/workflows/test-real.yml +++ b/.github/workflows/test-real.yml @@ -78,14 +78,14 @@ jobs: if: ${{ github.event.inputs.framework == 'autogen' || github.event.inputs.framework == 'all' }} run: | echo "๐Ÿค– Running REAL AutoGen tests (โš ๏ธ API costs may apply)" - python -m pytest tests/e2e/autogen/ -v -m real --tb=short + cd src/praisonai && python -m pytest tests/e2e/autogen/ -v -m real --tb=short continue-on-error: false - name: Run Real CrewAI Tests if: ${{ github.event.inputs.framework == 'crewai' || github.event.inputs.framework == 'all' }} run: | echo "โ›ต Running REAL CrewAI tests (โš ๏ธ API costs may apply)" - python -m pytest tests/e2e/crewai/ -v -m real --tb=short + cd src/praisonai && python -m pytest tests/e2e/crewai/ -v -m real --tb=short continue-on-error: false - name: Generate Real Test Report diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 13eb10b4d..0d1f3b1e3 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -469,7 +469,7 @@ jobs: - name: Run Legacy Example Tests run: | - python -m pytest tests/test.py -v --tb=short --disable-warnings + cd src/praisonai && python -m pytest tests/test.py -v --tb=short --disable-warnings continue-on-error: true - name: Restore Root Config Files diff --git a/src/praisonai-agents/pyproject.toml b/src/praisonai-agents/pyproject.toml index 9ae2628e9..392e4c1b6 100644 --- a/src/praisonai-agents/pyproject.toml +++ b/src/praisonai-agents/pyproject.toml @@ -53,4 +53,7 @@ all = [ "praisonaiagents[llm]", "praisonaiagents[mcp]", "praisonaiagents[api]" -] \ No newline at end of file +] + +[tool.setuptools] +packages = ["praisonaiagents"] \ No newline at end of file diff --git a/src/praisonai-agents/.windsurfrules b/src/praisonai-agents/tests/.windsurfrules similarity index 100% rename from src/praisonai-agents/.windsurfrules rename to src/praisonai-agents/tests/.windsurfrules diff --git a/src/praisonai-agents/any-llm-agents-async.py b/src/praisonai-agents/tests/any-llm-agents-async.py similarity index 100% rename from src/praisonai-agents/any-llm-agents-async.py rename to src/praisonai-agents/tests/any-llm-agents-async.py diff --git a/src/praisonai-agents/async-tavily-agents-gemini.py b/src/praisonai-agents/tests/async-tavily-agents-gemini.py similarity index 100% rename from src/praisonai-agents/async-tavily-agents-gemini.py rename to src/praisonai-agents/tests/async-tavily-agents-gemini.py diff --git a/src/praisonai-agents/async-tavily-agents.py b/src/praisonai-agents/tests/async-tavily-agents.py similarity index 100% rename from src/praisonai-agents/async-tavily-agents.py rename to src/praisonai-agents/tests/async-tavily-agents.py diff --git a/src/praisonai-agents/async_example.py b/src/praisonai-agents/tests/async_example.py similarity index 100% rename from src/praisonai-agents/async_example.py rename to src/praisonai-agents/tests/async_example.py diff --git a/src/praisonai-agents/async_example_full.py b/src/praisonai-agents/tests/async_example_full.py similarity index 100% rename from src/praisonai-agents/async_example_full.py rename to src/praisonai-agents/tests/async_example_full.py diff --git a/src/praisonai-agents/async_example_full_multigroups.py b/src/praisonai-agents/tests/async_example_full_multigroups.py similarity index 100% rename from src/praisonai-agents/async_example_full_multigroups.py rename to src/praisonai-agents/tests/async_example_full_multigroups.py diff --git a/src/praisonai-agents/auto_agents_example.py b/src/praisonai-agents/tests/auto_agents_example.py similarity index 100% rename from src/praisonai-agents/auto_agents_example.py rename to src/praisonai-agents/tests/auto_agents_example.py diff --git a/src/praisonai-agents/autonomous-agent.py b/src/praisonai-agents/tests/autonomous-agent.py similarity index 100% rename from src/praisonai-agents/autonomous-agent.py rename to src/praisonai-agents/tests/autonomous-agent.py diff --git a/src/praisonai-agents/basic-agents.py b/src/praisonai-agents/tests/basic-agents.py similarity index 100% rename from src/praisonai-agents/basic-agents.py rename to src/praisonai-agents/tests/basic-agents.py diff --git a/src/praisonai-agents/chunking-direct-test.py b/src/praisonai-agents/tests/chunking-direct-test.py similarity index 100% rename from src/praisonai-agents/chunking-direct-test.py rename to src/praisonai-agents/tests/chunking-direct-test.py diff --git a/src/praisonai-agents/code-analysis-agents.py b/src/praisonai-agents/tests/code-analysis-agents.py similarity index 100% rename from src/praisonai-agents/code-analysis-agents.py rename to src/praisonai-agents/tests/code-analysis-agents.py diff --git a/src/praisonai-agents/code-analysis-streamlit.py b/src/praisonai-agents/tests/code-analysis-streamlit.py similarity index 100% rename from src/praisonai-agents/code-analysis-streamlit.py rename to src/praisonai-agents/tests/code-analysis-streamlit.py diff --git a/src/praisonai-agents/code_agents_example.py b/src/praisonai-agents/tests/code_agents_example.py similarity index 100% rename from src/praisonai-agents/code_agents_example.py rename to src/praisonai-agents/tests/code_agents_example.py diff --git a/src/praisonai-agents/code_review.py b/src/praisonai-agents/tests/code_review.py similarity index 100% rename from src/praisonai-agents/code_review.py rename to src/praisonai-agents/tests/code_review.py diff --git a/src/praisonai-agents/context-agents-code.py b/src/praisonai-agents/tests/context-agents-code.py similarity index 100% rename from src/praisonai-agents/context-agents-code.py rename to src/praisonai-agents/tests/context-agents-code.py diff --git a/src/praisonai-agents/context-agents.py b/src/praisonai-agents/tests/context-agents.py similarity index 100% rename from src/praisonai-agents/context-agents.py rename to src/praisonai-agents/tests/context-agents.py diff --git a/src/praisonai-agents/context-multi-tasks.py b/src/praisonai-agents/tests/context-multi-tasks.py similarity index 100% rename from src/praisonai-agents/context-multi-tasks.py rename to src/praisonai-agents/tests/context-multi-tasks.py diff --git a/src/praisonai-agents/cot-agents-batch.py b/src/praisonai-agents/tests/cot-agents-batch.py similarity index 100% rename from src/praisonai-agents/cot-agents-batch.py rename to src/praisonai-agents/tests/cot-agents-batch.py diff --git a/src/praisonai-agents/cot-agents.py b/src/praisonai-agents/tests/cot-agents.py similarity index 100% rename from src/praisonai-agents/cot-agents.py rename to src/praisonai-agents/tests/cot-agents.py diff --git a/src/praisonai-agents/crewai-tools-example.py b/src/praisonai-agents/tests/crewai-tools-example.py similarity index 100% rename from src/praisonai-agents/crewai-tools-example.py rename to src/praisonai-agents/tests/crewai-tools-example.py diff --git a/src/praisonai-agents/cv.txt b/src/praisonai-agents/tests/cv.txt similarity index 100% rename from src/praisonai-agents/cv.txt rename to src/praisonai-agents/tests/cv.txt diff --git a/src/praisonai-agents/data-analyst-agent.py b/src/praisonai-agents/tests/data-analyst-agent.py similarity index 100% rename from src/praisonai-agents/data-analyst-agent.py rename to src/praisonai-agents/tests/data-analyst-agent.py diff --git a/src/praisonai-agents/deepseek-agents.py b/src/praisonai-agents/tests/deepseek-agents.py similarity index 100% rename from src/praisonai-agents/deepseek-agents.py rename to src/praisonai-agents/tests/deepseek-agents.py diff --git a/src/praisonai-agents/deepseek-cot-agents.py b/src/praisonai-agents/tests/deepseek-cot-agents.py similarity index 100% rename from src/praisonai-agents/deepseek-cot-agents.py rename to src/praisonai-agents/tests/deepseek-cot-agents.py diff --git a/src/praisonai-agents/deepseek-ollama-rag.py b/src/praisonai-agents/tests/deepseek-ollama-rag.py similarity index 100% rename from src/praisonai-agents/deepseek-ollama-rag.py rename to src/praisonai-agents/tests/deepseek-ollama-rag.py diff --git a/src/praisonai-agents/deepseek-rag-agents-streamlit.py b/src/praisonai-agents/tests/deepseek-rag-agents-streamlit.py similarity index 100% rename from src/praisonai-agents/deepseek-rag-agents-streamlit.py rename to src/praisonai-agents/tests/deepseek-rag-agents-streamlit.py diff --git a/src/praisonai-agents/deepseek-rag-agents-task.py b/src/praisonai-agents/tests/deepseek-rag-agents-task.py similarity index 100% rename from src/praisonai-agents/deepseek-rag-agents-task.py rename to src/praisonai-agents/tests/deepseek-rag-agents-task.py diff --git a/src/praisonai-agents/deepseek-rag-agents-ui.py b/src/praisonai-agents/tests/deepseek-rag-agents-ui.py similarity index 100% rename from src/praisonai-agents/deepseek-rag-agents-ui.py rename to src/praisonai-agents/tests/deepseek-rag-agents-ui.py diff --git a/src/praisonai-agents/deepseek-rag-agents.py b/src/praisonai-agents/tests/deepseek-rag-agents.py similarity index 100% rename from src/praisonai-agents/deepseek-rag-agents.py rename to src/praisonai-agents/tests/deepseek-rag-agents.py diff --git a/src/praisonai-agents/deepseek-reasoning-agents.py b/src/praisonai-agents/tests/deepseek-reasoning-agents.py similarity index 100% rename from src/praisonai-agents/deepseek-reasoning-agents.py rename to src/praisonai-agents/tests/deepseek-reasoning-agents.py diff --git a/src/praisonai-agents/deepseek-reasoning-multi-agents.py b/src/praisonai-agents/tests/deepseek-reasoning-multi-agents.py similarity index 100% rename from src/praisonai-agents/deepseek-reasoning-multi-agents.py rename to src/praisonai-agents/tests/deepseek-reasoning-multi-agents.py diff --git a/src/praisonai-agents/deepseek-reasoning-output-tokens.py b/src/praisonai-agents/tests/deepseek-reasoning-output-tokens.py similarity index 100% rename from src/praisonai-agents/deepseek-reasoning-output-tokens.py rename to src/praisonai-agents/tests/deepseek-reasoning-output-tokens.py diff --git a/src/praisonai-agents/deepseek-think.py b/src/praisonai-agents/tests/deepseek-think.py similarity index 100% rename from src/praisonai-agents/deepseek-think.py rename to src/praisonai-agents/tests/deepseek-think.py diff --git a/src/praisonai-agents/document.txt b/src/praisonai-agents/tests/document.txt similarity index 100% rename from src/praisonai-agents/document.txt rename to src/praisonai-agents/tests/document.txt diff --git a/src/praisonai-agents/evaluator-optimiser.py b/src/praisonai-agents/tests/evaluator-optimiser.py similarity index 100% rename from src/praisonai-agents/evaluator-optimiser.py rename to src/praisonai-agents/tests/evaluator-optimiser.py diff --git a/src/praisonai-agents/example_callback.py b/src/praisonai-agents/tests/example_callback.py similarity index 100% rename from src/praisonai-agents/example_callback.py rename to src/praisonai-agents/tests/example_callback.py diff --git a/src/praisonai-agents/example_custom_tools.py b/src/praisonai-agents/tests/example_custom_tools.py similarity index 100% rename from src/praisonai-agents/example_custom_tools.py rename to src/praisonai-agents/tests/example_custom_tools.py diff --git a/src/praisonai-agents/example_sequential.py b/src/praisonai-agents/tests/example_sequential.py similarity index 100% rename from src/praisonai-agents/example_sequential.py rename to src/praisonai-agents/tests/example_sequential.py diff --git a/src/praisonai-agents/finance-agent.py b/src/praisonai-agents/tests/finance-agent.py similarity index 100% rename from src/praisonai-agents/finance-agent.py rename to src/praisonai-agents/tests/finance-agent.py diff --git a/src/praisonai-agents/gradio-agents.py b/src/praisonai-agents/tests/gradio-agents.py similarity index 100% rename from src/praisonai-agents/gradio-agents.py rename to src/praisonai-agents/tests/gradio-agents.py diff --git a/src/praisonai-agents/gradio-multiagents.py b/src/praisonai-agents/tests/gradio-multiagents.py similarity index 100% rename from src/praisonai-agents/gradio-multiagents.py rename to src/praisonai-agents/tests/gradio-multiagents.py diff --git a/src/praisonai-agents/groq-mcp.py b/src/praisonai-agents/tests/groq-mcp.py similarity index 100% rename from src/praisonai-agents/groq-mcp.py rename to src/praisonai-agents/tests/groq-mcp.py diff --git a/src/praisonai-agents/hackathon-judge-agent-code.py b/src/praisonai-agents/tests/hackathon-judge-agent-code.py similarity index 100% rename from src/praisonai-agents/hackathon-judge-agent-code.py rename to src/praisonai-agents/tests/hackathon-judge-agent-code.py diff --git a/src/praisonai-agents/hackathon-judge-agent.py b/src/praisonai-agents/tests/hackathon-judge-agent.py similarity index 100% rename from src/praisonai-agents/hackathon-judge-agent.py rename to src/praisonai-agents/tests/hackathon-judge-agent.py diff --git a/src/praisonai-agents/hackathon-judge-streamlit.py b/src/praisonai-agents/tests/hackathon-judge-streamlit.py similarity index 100% rename from src/praisonai-agents/hackathon-judge-streamlit.py rename to src/praisonai-agents/tests/hackathon-judge-streamlit.py diff --git a/src/praisonai-agents/image-agent-async.py b/src/praisonai-agents/tests/image-agent-async.py similarity index 100% rename from src/praisonai-agents/image-agent-async.py rename to src/praisonai-agents/tests/image-agent-async.py diff --git a/src/praisonai-agents/image-agent.py b/src/praisonai-agents/tests/image-agent.py similarity index 100% rename from src/praisonai-agents/image-agent.py rename to src/praisonai-agents/tests/image-agent.py diff --git a/src/praisonai-agents/image-to-text-agent.py b/src/praisonai-agents/tests/image-to-text-agent.py similarity index 100% rename from src/praisonai-agents/image-to-text-agent.py rename to src/praisonai-agents/tests/image-to-text-agent.py diff --git a/src/praisonai-agents/image-understanding-agent.py b/src/praisonai-agents/tests/image-understanding-agent.py similarity index 100% rename from src/praisonai-agents/image-understanding-agent.py rename to src/praisonai-agents/tests/image-understanding-agent.py diff --git a/src/praisonai-agents/image.jpg b/src/praisonai-agents/tests/image.jpg similarity index 100% rename from src/praisonai-agents/image.jpg rename to src/praisonai-agents/tests/image.jpg diff --git a/src/praisonai-agents/kag-research-paper.pdf b/src/praisonai-agents/tests/kag-research-paper.pdf similarity index 100% rename from src/praisonai-agents/kag-research-paper.pdf rename to src/praisonai-agents/tests/kag-research-paper.pdf diff --git a/src/praisonai-agents/knowledge-agents-task.py b/src/praisonai-agents/tests/knowledge-agents-task.py similarity index 100% rename from src/praisonai-agents/knowledge-agents-task.py rename to src/praisonai-agents/tests/knowledge-agents-task.py diff --git a/src/praisonai-agents/knowledge-agents.py b/src/praisonai-agents/tests/knowledge-agents.py similarity index 100% rename from src/praisonai-agents/knowledge-agents.py rename to src/praisonai-agents/tests/knowledge-agents.py diff --git a/src/praisonai-agents/knowledge-direct-simple-test.py b/src/praisonai-agents/tests/knowledge-direct-simple-test.py similarity index 100% rename from src/praisonai-agents/knowledge-direct-simple-test.py rename to src/praisonai-agents/tests/knowledge-direct-simple-test.py diff --git a/src/praisonai-agents/knowledge-direct-test.py b/src/praisonai-agents/tests/knowledge-direct-test.py similarity index 100% rename from src/praisonai-agents/knowledge-direct-test.py rename to src/praisonai-agents/tests/knowledge-direct-test.py diff --git a/src/praisonai-agents/knowledge-large-pdf-test.py b/src/praisonai-agents/tests/knowledge-large-pdf-test.py similarity index 100% rename from src/praisonai-agents/knowledge-large-pdf-test.py rename to src/praisonai-agents/tests/knowledge-large-pdf-test.py diff --git a/src/praisonai-agents/langchain_example.py b/src/praisonai-agents/tests/langchain_example.py similarity index 100% rename from src/praisonai-agents/langchain_example.py rename to src/praisonai-agents/tests/langchain_example.py diff --git a/src/praisonai-agents/langchain_logs.py b/src/praisonai-agents/tests/langchain_logs.py similarity index 100% rename from src/praisonai-agents/langchain_logs.py rename to src/praisonai-agents/tests/langchain_logs.py diff --git a/src/praisonai-agents/large.pdf b/src/praisonai-agents/tests/large.pdf similarity index 100% rename from src/praisonai-agents/large.pdf rename to src/praisonai-agents/tests/large.pdf diff --git a/src/praisonai-agents/litellm-reasoning.py b/src/praisonai-agents/tests/litellm-reasoning.py similarity index 100% rename from src/praisonai-agents/litellm-reasoning.py rename to src/praisonai-agents/tests/litellm-reasoning.py diff --git a/src/praisonai-agents/llamaindex_example.py b/src/praisonai-agents/tests/llamaindex_example.py similarity index 100% rename from src/praisonai-agents/llamaindex_example.py rename to src/praisonai-agents/tests/llamaindex_example.py diff --git a/src/praisonai-agents/llm-anthropic.py b/src/praisonai-agents/tests/llm-anthropic.py similarity index 100% rename from src/praisonai-agents/llm-anthropic.py rename to src/praisonai-agents/tests/llm-anthropic.py diff --git a/src/praisonai-agents/llm-deepseek-agents.py b/src/praisonai-agents/tests/llm-deepseek-agents.py similarity index 100% rename from src/praisonai-agents/llm-deepseek-agents.py rename to src/praisonai-agents/tests/llm-deepseek-agents.py diff --git a/src/praisonai-agents/llm-deepseek-reasoning-agents.py b/src/praisonai-agents/tests/llm-deepseek-reasoning-agents.py similarity index 100% rename from src/praisonai-agents/llm-deepseek-reasoning-agents.py rename to src/praisonai-agents/tests/llm-deepseek-reasoning-agents.py diff --git a/src/praisonai-agents/llm-deepseek-reasoning-steps.py b/src/praisonai-agents/tests/llm-deepseek-reasoning-steps.py similarity index 100% rename from src/praisonai-agents/llm-deepseek-reasoning-steps.py rename to src/praisonai-agents/tests/llm-deepseek-reasoning-steps.py diff --git a/src/praisonai-agents/llm-gemini-advanced.py b/src/praisonai-agents/tests/llm-gemini-advanced.py similarity index 100% rename from src/praisonai-agents/llm-gemini-advanced.py rename to src/praisonai-agents/tests/llm-gemini-advanced.py diff --git a/src/praisonai-agents/llm-gemini.py b/src/praisonai-agents/tests/llm-gemini.py similarity index 100% rename from src/praisonai-agents/llm-gemini.py rename to src/praisonai-agents/tests/llm-gemini.py diff --git a/src/praisonai-agents/llm-langchain-toolcall.py b/src/praisonai-agents/tests/llm-langchain-toolcall.py similarity index 100% rename from src/praisonai-agents/llm-langchain-toolcall.py rename to src/praisonai-agents/tests/llm-langchain-toolcall.py diff --git a/src/praisonai-agents/llm-tool-call.py b/src/praisonai-agents/tests/llm-tool-call.py similarity index 100% rename from src/praisonai-agents/llm-tool-call.py rename to src/praisonai-agents/tests/llm-tool-call.py diff --git a/src/praisonai-agents/markdown-agent.py b/src/praisonai-agents/tests/markdown-agent.py similarity index 100% rename from src/praisonai-agents/markdown-agent.py rename to src/praisonai-agents/tests/markdown-agent.py diff --git a/src/praisonai-agents/mcp-agents-detailed.py b/src/praisonai-agents/tests/mcp-agents-detailed.py similarity index 100% rename from src/praisonai-agents/mcp-agents-detailed.py rename to src/praisonai-agents/tests/mcp-agents-detailed.py diff --git a/src/praisonai-agents/mcp-agents.py b/src/praisonai-agents/tests/mcp-agents.py similarity index 100% rename from src/praisonai-agents/mcp-agents.py rename to src/praisonai-agents/tests/mcp-agents.py diff --git a/src/praisonai-agents/mcp-basic.py b/src/praisonai-agents/tests/mcp-basic.py similarity index 100% rename from src/praisonai-agents/mcp-basic.py rename to src/praisonai-agents/tests/mcp-basic.py diff --git a/src/praisonai-agents/mcp-llama4.py b/src/praisonai-agents/tests/mcp-llama4.py similarity index 100% rename from src/praisonai-agents/mcp-llama4.py rename to src/praisonai-agents/tests/mcp-llama4.py diff --git a/src/praisonai-agents/mcp-mini-airbnb.py b/src/praisonai-agents/tests/mcp-mini-airbnb.py similarity index 100% rename from src/praisonai-agents/mcp-mini-airbnb.py rename to src/praisonai-agents/tests/mcp-mini-airbnb.py diff --git a/src/praisonai-agents/mcp-mini-bravesearch.py b/src/praisonai-agents/tests/mcp-mini-bravesearch.py similarity index 100% rename from src/praisonai-agents/mcp-mini-bravesearch.py rename to src/praisonai-agents/tests/mcp-mini-bravesearch.py diff --git a/src/praisonai-agents/mcp-multiagents.py b/src/praisonai-agents/tests/mcp-multiagents.py similarity index 100% rename from src/praisonai-agents/mcp-multiagents.py rename to src/praisonai-agents/tests/mcp-multiagents.py diff --git a/src/praisonai-agents/mcp-npx-airbnb-agent-direct.py b/src/praisonai-agents/tests/mcp-npx-airbnb-agent-direct.py similarity index 100% rename from src/praisonai-agents/mcp-npx-airbnb-agent-direct.py rename to src/praisonai-agents/tests/mcp-npx-airbnb-agent-direct.py diff --git a/src/praisonai-agents/mcp-npx-airbnb-stockprice.py b/src/praisonai-agents/tests/mcp-npx-airbnb-stockprice.py similarity index 100% rename from src/praisonai-agents/mcp-npx-airbnb-stockprice.py rename to src/praisonai-agents/tests/mcp-npx-airbnb-stockprice.py diff --git a/src/praisonai-agents/mcp-npx-airbnb.py b/src/praisonai-agents/tests/mcp-npx-airbnb.py similarity index 100% rename from src/praisonai-agents/mcp-npx-airbnb.py rename to src/praisonai-agents/tests/mcp-npx-airbnb.py diff --git a/src/praisonai-agents/mcp-npx-brave.py b/src/praisonai-agents/tests/mcp-npx-brave.py similarity index 100% rename from src/praisonai-agents/mcp-npx-brave.py rename to src/praisonai-agents/tests/mcp-npx-brave.py diff --git a/src/praisonai-agents/mcp-npx-mini-airbnb-stockprice.py b/src/praisonai-agents/tests/mcp-npx-mini-airbnb-stockprice.py similarity index 100% rename from src/praisonai-agents/mcp-npx-mini-airbnb-stockprice.py rename to src/praisonai-agents/tests/mcp-npx-mini-airbnb-stockprice.py diff --git a/src/praisonai-agents/mcp-ollama-python.py b/src/praisonai-agents/tests/mcp-ollama-python.py similarity index 100% rename from src/praisonai-agents/mcp-ollama-python.py rename to src/praisonai-agents/tests/mcp-ollama-python.py diff --git a/src/praisonai-agents/mcp-ollama.py b/src/praisonai-agents/tests/mcp-ollama.py similarity index 100% rename from src/praisonai-agents/mcp-ollama.py rename to src/praisonai-agents/tests/mcp-ollama.py diff --git a/src/praisonai-agents/mcp-python-stockprice.py b/src/praisonai-agents/tests/mcp-python-stockprice.py similarity index 100% rename from src/praisonai-agents/mcp-python-stockprice.py rename to src/praisonai-agents/tests/mcp-python-stockprice.py diff --git a/src/praisonai-agents/mcp-sse-direct-agent.py b/src/praisonai-agents/tests/mcp-sse-direct-agent.py similarity index 100% rename from src/praisonai-agents/mcp-sse-direct-agent.py rename to src/praisonai-agents/tests/mcp-sse-direct-agent.py diff --git a/src/praisonai-agents/mcp-sse-direct-client.py b/src/praisonai-agents/tests/mcp-sse-direct-client.py similarity index 100% rename from src/praisonai-agents/mcp-sse-direct-client.py rename to src/praisonai-agents/tests/mcp-sse-direct-client.py diff --git a/src/praisonai-agents/mcp-sse-direct-server.py b/src/praisonai-agents/tests/mcp-sse-direct-server.py similarity index 100% rename from src/praisonai-agents/mcp-sse-direct-server.py rename to src/praisonai-agents/tests/mcp-sse-direct-server.py diff --git a/src/praisonai-agents/mcp-sse-weather.py b/src/praisonai-agents/tests/mcp-sse-weather.py similarity index 100% rename from src/praisonai-agents/mcp-sse-weather.py rename to src/praisonai-agents/tests/mcp-sse-weather.py diff --git a/src/praisonai-agents/mcp-sse.py b/src/praisonai-agents/tests/mcp-sse.py similarity index 100% rename from src/praisonai-agents/mcp-sse.py rename to src/praisonai-agents/tests/mcp-sse.py diff --git a/src/praisonai-agents/mcp_airbnb_client_direct.py b/src/praisonai-agents/tests/mcp_airbnb_client_direct.py similarity index 100% rename from src/praisonai-agents/mcp_airbnb_client_direct.py rename to src/praisonai-agents/tests/mcp_airbnb_client_direct.py diff --git a/src/praisonai-agents/mcp_airbnb_full_direct.py b/src/praisonai-agents/tests/mcp_airbnb_full_direct.py similarity index 100% rename from src/praisonai-agents/mcp_airbnb_full_direct.py rename to src/praisonai-agents/tests/mcp_airbnb_full_direct.py diff --git a/src/praisonai-agents/mcp_client_direct.py b/src/praisonai-agents/tests/mcp_client_direct.py similarity index 100% rename from src/praisonai-agents/mcp_client_direct.py rename to src/praisonai-agents/tests/mcp_client_direct.py diff --git a/src/praisonai-agents/mcp_wrapper.py b/src/praisonai-agents/tests/mcp_wrapper.py similarity index 100% rename from src/praisonai-agents/mcp_wrapper.py rename to src/praisonai-agents/tests/mcp_wrapper.py diff --git a/src/praisonai-agents/md.py b/src/praisonai-agents/tests/md.py similarity index 100% rename from src/praisonai-agents/md.py rename to src/praisonai-agents/tests/md.py diff --git a/src/praisonai-agents/memory-add-search.py b/src/praisonai-agents/tests/memory-add-search.py similarity index 100% rename from src/praisonai-agents/memory-add-search.py rename to src/praisonai-agents/tests/memory-add-search.py diff --git a/src/praisonai-agents/memory-search-advanced.py b/src/praisonai-agents/tests/memory-search-advanced.py similarity index 100% rename from src/praisonai-agents/memory-search-advanced.py rename to src/praisonai-agents/tests/memory-search-advanced.py diff --git a/src/praisonai-agents/memory-search-simple-test.py b/src/praisonai-agents/tests/memory-search-simple-test.py similarity index 100% rename from src/praisonai-agents/memory-search-simple-test.py rename to src/praisonai-agents/tests/memory-search-simple-test.py diff --git a/src/praisonai-agents/memory-search-simple.py b/src/praisonai-agents/tests/memory-search-simple.py similarity index 100% rename from src/praisonai-agents/memory-search-simple.py rename to src/praisonai-agents/tests/memory-search-simple.py diff --git a/src/praisonai-agents/memory_example.py b/src/praisonai-agents/tests/memory_example.py similarity index 100% rename from src/praisonai-agents/memory_example.py rename to src/praisonai-agents/tests/memory_example.py diff --git a/src/praisonai-agents/memory_simple.py b/src/praisonai-agents/tests/memory_simple.py similarity index 100% rename from src/praisonai-agents/memory_simple.py rename to src/praisonai-agents/tests/memory_simple.py diff --git a/src/praisonai-agents/mini_agents_example.py b/src/praisonai-agents/tests/mini_agents_example.py similarity index 100% rename from src/praisonai-agents/mini_agents_example.py rename to src/praisonai-agents/tests/mini_agents_example.py diff --git a/src/praisonai-agents/multi-agent-api.py b/src/praisonai-agents/tests/multi-agent-api.py similarity index 100% rename from src/praisonai-agents/multi-agent-api.py rename to src/praisonai-agents/tests/multi-agent-api.py diff --git a/src/praisonai-agents/multi-agents-api.py b/src/praisonai-agents/tests/multi-agents-api.py similarity index 100% rename from src/praisonai-agents/multi-agents-api.py rename to src/praisonai-agents/tests/multi-agents-api.py diff --git a/src/praisonai-agents/multi-agents-group-api.py b/src/praisonai-agents/tests/multi-agents-group-api.py similarity index 100% rename from src/praisonai-agents/multi-agents-group-api.py rename to src/praisonai-agents/tests/multi-agents-group-api.py diff --git a/src/praisonai-agents/multimodal.py b/src/praisonai-agents/tests/multimodal.py similarity index 100% rename from src/praisonai-agents/multimodal.py rename to src/praisonai-agents/tests/multimodal.py diff --git a/src/praisonai-agents/npx_mcp_wrapper_main.py b/src/praisonai-agents/tests/npx_mcp_wrapper_main.py similarity index 100% rename from src/praisonai-agents/npx_mcp_wrapper_main.py rename to src/praisonai-agents/tests/npx_mcp_wrapper_main.py diff --git a/src/praisonai-agents/openai-mcp.py b/src/praisonai-agents/tests/openai-mcp.py similarity index 100% rename from src/praisonai-agents/openai-mcp.py rename to src/praisonai-agents/tests/openai-mcp.py diff --git a/src/praisonai-agents/orchestrator-workers.py b/src/praisonai-agents/tests/orchestrator-workers.py similarity index 100% rename from src/praisonai-agents/orchestrator-workers.py rename to src/praisonai-agents/tests/orchestrator-workers.py diff --git a/src/praisonai-agents/parallelisation.py b/src/praisonai-agents/tests/parallelisation.py similarity index 100% rename from src/praisonai-agents/parallelisation.py rename to src/praisonai-agents/tests/parallelisation.py diff --git a/src/praisonai-agents/pdf_agents_example.py b/src/praisonai-agents/tests/pdf_agents_example.py similarity index 100% rename from src/praisonai-agents/pdf_agents_example.py rename to src/praisonai-agents/tests/pdf_agents_example.py diff --git a/src/praisonai-agents/planning-agent.py b/src/praisonai-agents/tests/planning-agent.py similarity index 100% rename from src/praisonai-agents/planning-agent.py rename to src/praisonai-agents/tests/planning-agent.py diff --git a/src/praisonai-agents/programming-agent.py b/src/praisonai-agents/tests/programming-agent.py similarity index 100% rename from src/praisonai-agents/programming-agent.py rename to src/praisonai-agents/tests/programming-agent.py diff --git a/src/praisonai-agents/prompt_chaining copy.py b/src/praisonai-agents/tests/prompt_chaining copy.py similarity index 100% rename from src/praisonai-agents/prompt_chaining copy.py rename to src/praisonai-agents/tests/prompt_chaining copy.py diff --git a/src/praisonai-agents/prompt_chaining.py b/src/praisonai-agents/tests/prompt_chaining.py similarity index 100% rename from src/praisonai-agents/prompt_chaining.py rename to src/praisonai-agents/tests/prompt_chaining.py diff --git a/src/praisonai-agents/recommendation-agent.py b/src/praisonai-agents/tests/recommendation-agent.py similarity index 100% rename from src/praisonai-agents/recommendation-agent.py rename to src/praisonai-agents/tests/recommendation-agent.py diff --git a/src/praisonai-agents/repetitive-agents.py b/src/praisonai-agents/tests/repetitive-agents.py similarity index 100% rename from src/praisonai-agents/repetitive-agents.py rename to src/praisonai-agents/tests/repetitive-agents.py diff --git a/src/praisonai-agents/repetitive-manual-agents.py b/src/praisonai-agents/tests/repetitive-manual-agents.py similarity index 100% rename from src/praisonai-agents/repetitive-manual-agents.py rename to src/praisonai-agents/tests/repetitive-manual-agents.py diff --git a/src/praisonai-agents/research-agent.py b/src/praisonai-agents/tests/research-agent.py similarity index 100% rename from src/praisonai-agents/research-agent.py rename to src/praisonai-agents/tests/research-agent.py diff --git a/src/praisonai-agents/routing copy.py b/src/praisonai-agents/tests/routing copy.py similarity index 100% rename from src/praisonai-agents/routing copy.py rename to src/praisonai-agents/tests/routing copy.py diff --git a/src/praisonai-agents/routing.py b/src/praisonai-agents/tests/routing.py similarity index 100% rename from src/praisonai-agents/routing.py rename to src/praisonai-agents/tests/routing.py diff --git a/src/praisonai-agents/sample.docx b/src/praisonai-agents/tests/sample.docx similarity index 100% rename from src/praisonai-agents/sample.docx rename to src/praisonai-agents/tests/sample.docx diff --git a/src/praisonai-agents/sample.md b/src/praisonai-agents/tests/sample.md similarity index 100% rename from src/praisonai-agents/sample.md rename to src/praisonai-agents/tests/sample.md diff --git a/src/praisonai-agents/sample.txt b/src/praisonai-agents/tests/sample.txt similarity index 100% rename from src/praisonai-agents/sample.txt rename to src/praisonai-agents/tests/sample.txt diff --git a/src/praisonai-agents/shopping-agent.py b/src/praisonai-agents/tests/shopping-agent.py similarity index 100% rename from src/praisonai-agents/shopping-agent.py rename to src/praisonai-agents/tests/shopping-agent.py diff --git a/src/praisonai-agents/simple-api-mcp.py b/src/praisonai-agents/tests/simple-api-mcp.py similarity index 100% rename from src/praisonai-agents/simple-api-mcp.py rename to src/praisonai-agents/tests/simple-api-mcp.py diff --git a/src/praisonai-agents/simple-api.py b/src/praisonai-agents/tests/simple-api.py similarity index 100% rename from src/praisonai-agents/simple-api.py rename to src/praisonai-agents/tests/simple-api.py diff --git a/src/praisonai-agents/simple-mcp-multi-agents-server.py b/src/praisonai-agents/tests/simple-mcp-multi-agents-server.py similarity index 100% rename from src/praisonai-agents/simple-mcp-multi-agents-server.py rename to src/praisonai-agents/tests/simple-mcp-multi-agents-server.py diff --git a/src/praisonai-agents/simple-mcp-server.py b/src/praisonai-agents/tests/simple-mcp-server.py similarity index 100% rename from src/praisonai-agents/simple-mcp-server.py rename to src/praisonai-agents/tests/simple-mcp-server.py diff --git a/src/praisonai-agents/single-agent.py b/src/praisonai-agents/tests/single-agent.py similarity index 100% rename from src/praisonai-agents/single-agent.py rename to src/praisonai-agents/tests/single-agent.py diff --git a/src/praisonai-agents/streamlit-agents.py b/src/praisonai-agents/tests/streamlit-agents.py similarity index 100% rename from src/praisonai-agents/streamlit-agents.py rename to src/praisonai-agents/tests/streamlit-agents.py diff --git a/src/praisonai-agents/streamlit-multiagents.py b/src/praisonai-agents/tests/streamlit-multiagents.py similarity index 100% rename from src/praisonai-agents/streamlit-multiagents.py rename to src/praisonai-agents/tests/streamlit-multiagents.py diff --git a/src/praisonai-agents/structured_agents_example.py b/src/praisonai-agents/tests/structured_agents_example.py similarity index 100% rename from src/praisonai-agents/structured_agents_example.py rename to src/praisonai-agents/tests/structured_agents_example.py diff --git a/src/praisonai-agents/structured_response_example.py b/src/praisonai-agents/tests/structured_response_example.py similarity index 100% rename from src/praisonai-agents/structured_response_example.py rename to src/praisonai-agents/tests/structured_response_example.py diff --git a/src/praisonai-agents/tasks.csv b/src/praisonai-agents/tests/tasks.csv similarity index 100% rename from src/praisonai-agents/tasks.csv rename to src/praisonai-agents/tests/tasks.csv diff --git a/src/praisonai-agents/tesla-stock-price.csv b/src/praisonai-agents/tests/tesla-stock-price.csv similarity index 100% rename from src/praisonai-agents/tesla-stock-price.csv rename to src/praisonai-agents/tests/tesla-stock-price.csv diff --git a/src/praisonai-agents/test.py b/src/praisonai-agents/tests/test.py similarity index 100% rename from src/praisonai-agents/test.py rename to src/praisonai-agents/tests/test.py diff --git a/src/praisonai-agents/tools-class.py b/src/praisonai-agents/tests/tools-class.py similarity index 100% rename from src/praisonai-agents/tools-class.py rename to src/praisonai-agents/tests/tools-class.py diff --git a/src/praisonai-agents/tools_example.py b/src/praisonai-agents/tests/tools_example.py similarity index 100% rename from src/praisonai-agents/tools_example.py rename to src/praisonai-agents/tests/tools_example.py diff --git a/src/praisonai-agents/ui.py b/src/praisonai-agents/tests/ui.py similarity index 100% rename from src/praisonai-agents/ui.py rename to src/praisonai-agents/tests/ui.py diff --git a/src/praisonai-agents/vector-db-agents.py b/src/praisonai-agents/tests/vector-db-agents.py similarity index 100% rename from src/praisonai-agents/vector-db-agents.py rename to src/praisonai-agents/tests/vector-db-agents.py diff --git a/src/praisonai-agents/video-agent.py b/src/praisonai-agents/tests/video-agent.py similarity index 100% rename from src/praisonai-agents/video-agent.py rename to src/praisonai-agents/tests/video-agent.py diff --git a/src/praisonai-agents/websearch-agent.py b/src/praisonai-agents/tests/websearch-agent.py similarity index 100% rename from src/praisonai-agents/websearch-agent.py rename to src/praisonai-agents/tests/websearch-agent.py diff --git a/src/praisonai-agents/wikipedia-agent.py b/src/praisonai-agents/tests/wikipedia-agent.py similarity index 100% rename from src/praisonai-agents/wikipedia-agent.py rename to src/praisonai-agents/tests/wikipedia-agent.py diff --git a/src/praisonai-agents/workflow-test-agents.py b/src/praisonai-agents/tests/workflow-test-agents.py similarity index 100% rename from src/praisonai-agents/workflow-test-agents.py rename to src/praisonai-agents/tests/workflow-test-agents.py diff --git a/src/praisonai-agents/workflow_example_basic.py b/src/praisonai-agents/tests/workflow_example_basic.py similarity index 100% rename from src/praisonai-agents/workflow_example_basic.py rename to src/praisonai-agents/tests/workflow_example_basic.py diff --git a/src/praisonai-agents/workflow_example_detailed.py b/src/praisonai-agents/tests/workflow_example_detailed.py similarity index 100% rename from src/praisonai-agents/workflow_example_detailed.py rename to src/praisonai-agents/tests/workflow_example_detailed.py diff --git a/src/praisonai/pyproject.toml b/src/praisonai/pyproject.toml index 4e6fb277d..2c8f55110 100644 --- a/src/praisonai/pyproject.toml +++ b/src/praisonai/pyproject.toml @@ -100,7 +100,7 @@ Homepage = "https://docs.praison.ai" Repository = "https://github.com/mervinpraison/PraisonAI" [tool.setuptools] -packages = ["PraisonAI"] +packages = ["praisonai"] [tool.poetry.dependencies] python = ">=3.10,<3.13" diff --git a/pytest.ini b/src/praisonai/pytest.ini similarity index 100% rename from pytest.ini rename to src/praisonai/pytest.ini diff --git a/tests/README.md b/src/praisonai/tests/README.md similarity index 100% rename from tests/README.md rename to src/praisonai/tests/README.md diff --git a/tests/TESTING_GUIDE.md b/src/praisonai/tests/TESTING_GUIDE.md similarity index 100% rename from tests/TESTING_GUIDE.md rename to src/praisonai/tests/TESTING_GUIDE.md diff --git a/tests/__init__.py b/src/praisonai/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to src/praisonai/tests/__init__.py diff --git a/tests/advanced_example.py b/src/praisonai/tests/advanced_example.py similarity index 100% rename from tests/advanced_example.py rename to src/praisonai/tests/advanced_example.py diff --git a/tests/agents-advanced.yaml b/src/praisonai/tests/agents-advanced.yaml similarity index 100% rename from tests/agents-advanced.yaml rename to src/praisonai/tests/agents-advanced.yaml diff --git a/tests/agents.yaml b/src/praisonai/tests/agents.yaml similarity index 100% rename from tests/agents.yaml rename to src/praisonai/tests/agents.yaml diff --git a/tests/auto_example.py b/src/praisonai/tests/auto_example.py similarity index 100% rename from tests/auto_example.py rename to src/praisonai/tests/auto_example.py diff --git a/tests/autogen-agents.yaml b/src/praisonai/tests/autogen-agents.yaml similarity index 100% rename from tests/autogen-agents.yaml rename to src/praisonai/tests/autogen-agents.yaml diff --git a/tests/basic_example.py b/src/praisonai/tests/basic_example.py similarity index 100% rename from tests/basic_example.py rename to src/praisonai/tests/basic_example.py diff --git a/tests/cl-test.py b/src/praisonai/tests/cl-test.py similarity index 100% rename from tests/cl-test.py rename to src/praisonai/tests/cl-test.py diff --git a/tests/conftest.py b/src/praisonai/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to src/praisonai/tests/conftest.py diff --git a/tests/crewai-agents.yaml b/src/praisonai/tests/crewai-agents.yaml similarity index 100% rename from tests/crewai-agents.yaml rename to src/praisonai/tests/crewai-agents.yaml diff --git a/tests/debug.py b/src/praisonai/tests/debug.py similarity index 100% rename from tests/debug.py rename to src/praisonai/tests/debug.py diff --git a/tests/e2e/README.md b/src/praisonai/tests/e2e/README.md similarity index 100% rename from tests/e2e/README.md rename to src/praisonai/tests/e2e/README.md diff --git a/tests/e2e/__init__.py b/src/praisonai/tests/e2e/__init__.py similarity index 100% rename from tests/e2e/__init__.py rename to src/praisonai/tests/e2e/__init__.py diff --git a/tests/e2e/autogen/__init__.py b/src/praisonai/tests/e2e/autogen/__init__.py similarity index 100% rename from tests/e2e/autogen/__init__.py rename to src/praisonai/tests/e2e/autogen/__init__.py diff --git a/tests/e2e/autogen/test_autogen_real.py b/src/praisonai/tests/e2e/autogen/test_autogen_real.py similarity index 100% rename from tests/e2e/autogen/test_autogen_real.py rename to src/praisonai/tests/e2e/autogen/test_autogen_real.py diff --git a/tests/inbuilt-tool-agents.yaml b/src/praisonai/tests/inbuilt-tool-agents.yaml similarity index 100% rename from tests/inbuilt-tool-agents.yaml rename to src/praisonai/tests/inbuilt-tool-agents.yaml diff --git a/tests/integration/README.md b/src/praisonai/tests/integration/README.md similarity index 100% rename from tests/integration/README.md rename to src/praisonai/tests/integration/README.md diff --git a/tests/integration/WORKFLOW_INTEGRATION.md b/src/praisonai/tests/integration/WORKFLOW_INTEGRATION.md similarity index 100% rename from tests/integration/WORKFLOW_INTEGRATION.md rename to src/praisonai/tests/integration/WORKFLOW_INTEGRATION.md diff --git a/tests/integration/__init__.py b/src/praisonai/tests/integration/__init__.py similarity index 100% rename from tests/integration/__init__.py rename to src/praisonai/tests/integration/__init__.py diff --git a/tests/integration/autogen/__init__.py b/src/praisonai/tests/integration/autogen/__init__.py similarity index 100% rename from tests/integration/autogen/__init__.py rename to src/praisonai/tests/integration/autogen/__init__.py diff --git a/tests/integration/autogen/test_autogen_basic.py b/src/praisonai/tests/integration/autogen/test_autogen_basic.py similarity index 100% rename from tests/integration/autogen/test_autogen_basic.py rename to src/praisonai/tests/integration/autogen/test_autogen_basic.py diff --git a/tests/integration/test_base_url_api_base_fix.py b/src/praisonai/tests/integration/test_base_url_api_base_fix.py similarity index 100% rename from tests/integration/test_base_url_api_base_fix.py rename to src/praisonai/tests/integration/test_base_url_api_base_fix.py diff --git a/tests/integration/test_mcp_integration.py b/src/praisonai/tests/integration/test_mcp_integration.py similarity index 100% rename from tests/integration/test_mcp_integration.py rename to src/praisonai/tests/integration/test_mcp_integration.py diff --git a/tests/integration/test_rag_integration.py b/src/praisonai/tests/integration/test_rag_integration.py similarity index 100% rename from tests/integration/test_rag_integration.py rename to src/praisonai/tests/integration/test_rag_integration.py diff --git a/tests/search-tool-agents.yaml b/src/praisonai/tests/search-tool-agents.yaml similarity index 100% rename from tests/search-tool-agents.yaml rename to src/praisonai/tests/search-tool-agents.yaml diff --git a/tests/simple_test_runner.py b/src/praisonai/tests/simple_test_runner.py similarity index 100% rename from tests/simple_test_runner.py rename to src/praisonai/tests/simple_test_runner.py diff --git a/tests/source/autogen_function_tools.py b/src/praisonai/tests/source/autogen_function_tools.py similarity index 100% rename from tests/source/autogen_function_tools.py rename to src/praisonai/tests/source/autogen_function_tools.py diff --git a/tests/source/autogen_langchain_tools.py b/src/praisonai/tests/source/autogen_langchain_tools.py similarity index 100% rename from tests/source/autogen_langchain_tools.py rename to src/praisonai/tests/source/autogen_langchain_tools.py diff --git a/tests/source/crewai_tools.py b/src/praisonai/tests/source/crewai_tools.py similarity index 100% rename from tests/source/crewai_tools.py rename to src/praisonai/tests/source/crewai_tools.py diff --git a/tests/source/radius.txt b/src/praisonai/tests/source/radius.txt similarity index 100% rename from tests/source/radius.txt rename to src/praisonai/tests/source/radius.txt diff --git a/tests/test.py b/src/praisonai/tests/test.py similarity index 100% rename from tests/test.py rename to src/praisonai/tests/test.py diff --git a/tests/test_agents_playbook.py b/src/praisonai/tests/test_agents_playbook.py similarity index 100% rename from tests/test_agents_playbook.py rename to src/praisonai/tests/test_agents_playbook.py diff --git a/tests/test_basic.py b/src/praisonai/tests/test_basic.py similarity index 100% rename from tests/test_basic.py rename to src/praisonai/tests/test_basic.py diff --git a/tests/test_runner.py b/src/praisonai/tests/test_runner.py similarity index 100% rename from tests/test_runner.py rename to src/praisonai/tests/test_runner.py diff --git a/tests/tools/__init__.py b/src/praisonai/tests/tools/__init__.py similarity index 100% rename from tests/tools/__init__.py rename to src/praisonai/tests/tools/__init__.py diff --git a/tests/tools/internet_search.py b/src/praisonai/tests/tools/internet_search.py similarity index 100% rename from tests/tools/internet_search.py rename to src/praisonai/tests/tools/internet_search.py diff --git a/tests/unit/__init__.py b/src/praisonai/tests/unit/__init__.py similarity index 100% rename from tests/unit/__init__.py rename to src/praisonai/tests/unit/__init__.py diff --git a/tests/unit/agent/__init__.py b/src/praisonai/tests/unit/agent/__init__.py similarity index 100% rename from tests/unit/agent/__init__.py rename to src/praisonai/tests/unit/agent/__init__.py diff --git a/tests/unit/agent/test_mini_agents_fix.py b/src/praisonai/tests/unit/agent/test_mini_agents_fix.py similarity index 100% rename from tests/unit/agent/test_mini_agents_fix.py rename to src/praisonai/tests/unit/agent/test_mini_agents_fix.py diff --git a/tests/unit/agent/test_mini_agents_sequential.py b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py similarity index 100% rename from tests/unit/agent/test_mini_agents_sequential.py rename to src/praisonai/tests/unit/agent/test_mini_agents_sequential.py diff --git a/tests/unit/agent/test_type_casting.py b/src/praisonai/tests/unit/agent/test_type_casting.py similarity index 100% rename from tests/unit/agent/test_type_casting.py rename to src/praisonai/tests/unit/agent/test_type_casting.py diff --git a/tests/unit/test_async_agents.py b/src/praisonai/tests/unit/test_async_agents.py similarity index 100% rename from tests/unit/test_async_agents.py rename to src/praisonai/tests/unit/test_async_agents.py diff --git a/tests/unit/test_context_management.py b/src/praisonai/tests/unit/test_context_management.py similarity index 100% rename from tests/unit/test_context_management.py rename to src/praisonai/tests/unit/test_context_management.py diff --git a/tests/unit/test_core_agents.py b/src/praisonai/tests/unit/test_core_agents.py similarity index 100% rename from tests/unit/test_core_agents.py rename to src/praisonai/tests/unit/test_core_agents.py diff --git a/tests/unit/test_tools_and_ui.py b/src/praisonai/tests/unit/test_tools_and_ui.py similarity index 100% rename from tests/unit/test_tools_and_ui.py rename to src/praisonai/tests/unit/test_tools_and_ui.py diff --git a/tests/yaml_example.py b/src/praisonai/tests/yaml_example.py similarity index 100% rename from tests/yaml_example.py rename to src/praisonai/tests/yaml_example.py diff --git a/tests/e2e/crewai/__init__.py b/tests/e2e/crewai/__init__.py deleted file mode 100644 index e74620993..000000000 --- a/tests/e2e/crewai/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# CrewAI Real Tests \ No newline at end of file diff --git a/tests/e2e/crewai/test_crewai_real.py b/tests/e2e/crewai/test_crewai_real.py deleted file mode 100644 index ab4f4ec4b..000000000 --- a/tests/e2e/crewai/test_crewai_real.py +++ /dev/null @@ -1,216 +0,0 @@ -""" -CrewAI Real End-to-End Test - -โš ๏ธ WARNING: This test makes real API calls and may incur costs! - -This test verifies CrewAI framework integration with actual LLM calls. -Run only when you have: -- Valid API keys set as environment variables -- Understanding that this will consume API credits -""" - -import pytest -import os -import sys -import tempfile -from pathlib import Path - -# Add the src directory to the path -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../src")) - -@pytest.mark.real -@pytest.mark.skipif(not os.getenv("OPENAI_API_KEY"), reason="No API key - skipping real tests") -class TestCrewAIReal: - """Real CrewAI tests with actual API calls""" - - def test_crewai_simple_crew(self): - """Test a simple CrewAI crew with real API calls""" - try: - from praisonai import PraisonAI - - # Create a minimal YAML configuration - yaml_content = """ -framework: crewai -topic: Simple Question Answer -roles: - - name: Helper - goal: Answer simple questions accurately - backstory: I am a helpful assistant who provides clear answers - tasks: - - description: What is the capital of France? Provide just the city name. - expected_output: The capital city of France -""" - - # Create temporary test file - with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f: - f.write(yaml_content) - test_file = f.name - - try: - # Initialize PraisonAI with CrewAI - praisonai = PraisonAI( - agent_file=test_file, - framework="crewai" - ) - - # Verify setup - assert praisonai is not None - assert praisonai.framework == "crewai" - - print("โœ… CrewAI real test setup successful") - - # Note: Full execution would be: - # result = praisonai.run() - # But we keep it minimal to avoid costs - - finally: - # Cleanup - if os.path.exists(test_file): - os.unlink(test_file) - - except ImportError as e: - pytest.skip(f"CrewAI not available: {e}") - except Exception as e: - pytest.fail(f"CrewAI real test failed: {e}") - - def test_crewai_environment_check(self): - """Verify CrewAI environment is properly configured""" - # Check API key is available - assert os.getenv("OPENAI_API_KEY"), "OPENAI_API_KEY required for real tests" - - # Check CrewAI can be imported - try: - import crewai - assert crewai is not None - except ImportError: - pytest.skip("CrewAI not installed") - - print("โœ… CrewAI environment check passed") - - def test_crewai_multi_agent_setup(self): - """Test CrewAI multi-agent setup without execution""" - try: - from praisonai import PraisonAI - - yaml_content = """ -framework: crewai -topic: Multi-Agent Collaboration Test -roles: - - name: Researcher - goal: Gather information - backstory: I research topics thoroughly - tasks: - - description: Research a simple topic - expected_output: Brief research summary - - name: Writer - goal: Write clear content - backstory: I write clear and concise content - tasks: - - description: Write based on research - expected_output: Written content -""" - - with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f: - f.write(yaml_content) - test_file = f.name - - try: - praisonai = PraisonAI( - agent_file=test_file, - framework="crewai" - ) - - assert praisonai.framework == "crewai" - print("โœ… CrewAI multi-agent setup successful") - - finally: - if os.path.exists(test_file): - os.unlink(test_file) - - except ImportError as e: - pytest.skip(f"CrewAI not available: {e}") - except Exception as e: - pytest.fail(f"CrewAI multi-agent test failed: {e}") - - @pytest.mark.skipif(not os.getenv("PRAISONAI_RUN_FULL_TESTS"), - reason="Full execution test requires PRAISONAI_RUN_FULL_TESTS=true") - def test_crewai_full_execution(self): - """ - ๐Ÿ’ฐ EXPENSIVE TEST: Actually runs praisonai.run() with real API calls! - - Set PRAISONAI_RUN_FULL_TESTS=true to enable this test. - This will consume API credits and show real output logs. - """ - try: - from praisonai import PraisonAI - import logging - - # Enable detailed logging to see the output - logging.basicConfig(level=logging.INFO) - - print("\n" + "="*60) - print("๐Ÿ’ฐ STARTING CREWAI FULL EXECUTION TEST (REAL API CALLS!)") - print("="*60) - - # Create a very simple YAML for minimal cost - yaml_content = """ -framework: crewai -topic: Quick Math Test -roles: - - name: Calculator - goal: Do simple math quickly - backstory: I am a calculator that gives brief answers - tasks: - - description: Calculate 3+3. Answer with just the number, nothing else. - expected_output: Just the number -""" - - # Create temporary test file - with tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) as f: - f.write(yaml_content) - test_file = f.name - - try: - # Initialize PraisonAI with CrewAI - praisonai = PraisonAI( - agent_file=test_file, - framework="crewai" - ) - - print(f"โ›ต Initializing CrewAI with file: {test_file}") - print(f"๐Ÿ“‹ Framework: {praisonai.framework}") - - # ๐Ÿ’ฐ ACTUAL EXECUTION - THIS COSTS MONEY! - print("\n๐Ÿ’ฐ EXECUTING REAL CREWAI WORKFLOW...") - print("โš ๏ธ This will make actual API calls!") - - result = praisonai.run() - - print("\n" + "="*60) - print("โœ… CREWAI EXECUTION COMPLETED!") - print("="*60) - print(f"๐Ÿ“Š Result type: {type(result)}") - if result: - print(f"๐Ÿ“„ Result content: {str(result)[:500]}...") - else: - print("๐Ÿ“„ No result returned") - print("="*60) - - # Verify we got some result - assert result is not None or True # Allow empty results - - finally: - # Cleanup - if os.path.exists(test_file): - os.unlink(test_file) - - except ImportError as e: - pytest.skip(f"CrewAI not available: {e}") - except Exception as e: - print(f"\nโŒ CrewAI full execution failed: {e}") - pytest.fail(f"CrewAI full execution test failed: {e}") - -if __name__ == "__main__": - # Enable full tests when running directly - os.environ["PRAISONAI_RUN_FULL_TESTS"] = "true" - pytest.main([__file__, "-v", "-m", "real", "-s"]) \ No newline at end of file diff --git a/tests/integration/crewai/__init__.py b/tests/integration/crewai/__init__.py deleted file mode 100644 index cd992085e..000000000 --- a/tests/integration/crewai/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# CrewAI Integration Tests \ No newline at end of file diff --git a/tests/integration/crewai/test_crewai_basic.py b/tests/integration/crewai/test_crewai_basic.py deleted file mode 100644 index a5a7f2f38..000000000 --- a/tests/integration/crewai/test_crewai_basic.py +++ /dev/null @@ -1,255 +0,0 @@ -""" -CrewAI Integration Test - Basic functionality test - -This test verifies that PraisonAI can successfully integrate with CrewAI -for basic agent crews and task execution. -""" - -import pytest -import os -import sys -from unittest.mock import patch, MagicMock - -# Add the src directory to the path -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../src")) - -@pytest.fixture -def mock_crewai_completion(): - """Mock CrewAI completion responses""" - mock_response = MagicMock() - mock_response.choices = [MagicMock()] - mock_response.choices[0].message = MagicMock() - mock_response.choices[0].message.content = "Task completed successfully using CrewAI framework." - return mock_response - -@pytest.fixture -def crewai_config(): - """Configuration for CrewAI test""" - return { - "framework": "crewai", - "agents": [ - { - "name": "data_analyst", - "role": "Data Analyst", - "goal": "Analyze data and provide insights", - "backstory": "Expert data analyst with statistical background" - }, - { - "name": "report_writer", - "role": "Report Writer", - "goal": "Create comprehensive reports", - "backstory": "Professional report writer with business acumen" - } - ], - "tasks": [ - { - "description": "Analyze the provided dataset for trends", - "expected_output": "Statistical analysis with key findings", - "agent": "data_analyst" - }, - { - "description": "Create a business report based on the analysis", - "expected_output": "Professional business report with recommendations", - "agent": "report_writer" - } - ] - } - -class TestCrewAIIntegration: - """Test CrewAI integration with PraisonAI""" - - @pytest.mark.integration - def test_crewai_import(self): - """Test that CrewAI can be imported and is available""" - try: - import crewai - assert crewai is not None - print("โœ… CrewAI import successful") - except ImportError: - pytest.skip("CrewAI not installed - skipping CrewAI integration tests") - - @pytest.mark.integration - @patch('litellm.completion') - def test_basic_crewai_agent_creation(self, mock_completion, mock_crewai_completion): - """Test creating basic CrewAI agents through PraisonAI""" - mock_completion.return_value = mock_crewai_completion - - try: - from praisonai import PraisonAI - - # Create a simple YAML content for CrewAI - yaml_content = """ -framework: crewai -topic: Test CrewAI Integration -roles: - - name: Analyst - goal: Analyze test data - backstory: I am a skilled analyst for testing purposes - tasks: - - description: Perform basic analysis task - expected_output: Analysis results and summary -""" - - # Create temporary test file - test_file = "test_crewai_agents.yaml" - with open(test_file, "w") as f: - f.write(yaml_content) - - try: - # Initialize PraisonAI with CrewAI framework - praisonai = PraisonAI( - agent_file=test_file, - framework="crewai" - ) - - assert praisonai is not None - assert praisonai.framework == "crewai" - print("โœ… CrewAI PraisonAI instance created successfully") - - finally: - # Cleanup - if os.path.exists(test_file): - os.remove(test_file) - - except ImportError as e: - pytest.skip(f"CrewAI integration dependencies not available: {e}") - except Exception as e: - pytest.fail(f"CrewAI basic test failed: {e}") - - @pytest.mark.integration - @patch('litellm.completion') - def test_crewai_crew_workflow(self, mock_completion, mock_crewai_completion): - """Test CrewAI crew workflow execution""" - mock_completion.return_value = mock_crewai_completion - - try: - from praisonai import PraisonAI - - yaml_content = """ -framework: crewai -topic: Market Research Project -roles: - - name: Market_Researcher - goal: Research market trends - backstory: Expert market researcher with industry knowledge - tasks: - - description: Research current market trends in technology sector - expected_output: Comprehensive market research report - - name: Strategy_Advisor - goal: Provide strategic recommendations - backstory: Senior strategy consultant - tasks: - - description: Analyze research and provide strategic recommendations - expected_output: Strategic recommendations document -""" - - test_file = "test_crewai_workflow.yaml" - with open(test_file, "w") as f: - f.write(yaml_content) - - try: - praisonai = PraisonAI( - agent_file=test_file, - framework="crewai" - ) - - # Test that we can initialize without errors - assert praisonai.framework == "crewai" - print("โœ… CrewAI workflow test passed") - - finally: - if os.path.exists(test_file): - os.remove(test_file) - - except ImportError as e: - pytest.skip(f"CrewAI dependencies not available: {e}") - except Exception as e: - pytest.fail(f"CrewAI workflow test failed: {e}") - - @pytest.mark.integration - def test_crewai_config_validation(self, crewai_config): - """Test CrewAI configuration validation""" - try: - # Test that config has required fields - assert crewai_config["framework"] == "crewai" - assert len(crewai_config["agents"]) > 0 - assert len(crewai_config["tasks"]) > 0 - - # Test agent structure - for agent in crewai_config["agents"]: - assert "name" in agent - assert "role" in agent - assert "goal" in agent - assert "backstory" in agent - - # Test task structure - for task in crewai_config["tasks"]: - assert "description" in task - assert "expected_output" in task - assert "agent" in task - - print("โœ… CrewAI configuration validation passed") - - except Exception as e: - pytest.fail(f"CrewAI config validation failed: {e}") - - @pytest.mark.integration - @patch('litellm.completion') - def test_crewai_agent_collaboration(self, mock_completion, mock_crewai_completion): - """Test CrewAI agents working together in a crew""" - mock_completion.return_value = mock_crewai_completion - - try: - from praisonai import PraisonAI - - yaml_content = """ -framework: crewai -topic: Content Creation Pipeline -roles: - - name: Content_Researcher - goal: Research topics for content creation - backstory: Expert content researcher with SEO knowledge - tasks: - - description: Research trending topics in AI technology - expected_output: List of trending AI topics with analysis - - - name: Content_Writer - goal: Write engaging content - backstory: Professional content writer with technical expertise - tasks: - - description: Write blog post based on research findings - expected_output: Well-structured blog post with SEO optimization - - - name: Content_Editor - goal: Edit and refine content - backstory: Senior editor with publishing experience - tasks: - - description: Review and edit the blog post for quality - expected_output: Polished, publication-ready blog post -""" - - test_file = "test_crewai_collaboration.yaml" - with open(test_file, "w") as f: - f.write(yaml_content) - - try: - praisonai = PraisonAI( - agent_file=test_file, - framework="crewai" - ) - - # Test that we can create a multi-agent crew - assert praisonai.framework == "crewai" - print("โœ… CrewAI collaboration test passed") - - finally: - if os.path.exists(test_file): - os.remove(test_file) - - except ImportError as e: - pytest.skip(f"CrewAI dependencies not available: {e}") - except Exception as e: - pytest.fail(f"CrewAI collaboration test failed: {e}") - -if __name__ == "__main__": - pytest.main([__file__, "-v"]) \ No newline at end of file From 483992fe7f41d672dc79d4e183d0bb8d8d504c71 Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Tue, 27 May 2025 09:57:37 +0100 Subject: [PATCH 2/6] Fix file paths and add test mocking for mini agents sequential tests --- .github/workflows/unittest.yml | 21 +++++++++------- .../unit/agent/test_mini_agents_sequential.py | 24 ++++++++++++++++--- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 0d1f3b1e3..6e56ab519 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -91,13 +91,14 @@ jobs: - name: Find Researcher Role Source run: | echo "๐Ÿ” Hunting for the mysterious 'Researcher' role..." + cd src/praisonai python -c " import os import yaml import glob print('๐Ÿ“‹ Searching for Researcher role in all YAML files:') - yaml_files = glob.glob('tests/*.yaml') + yaml_files = glob.glob('src/praisonai/tests/*.yaml') for yaml_file in yaml_files: try: @@ -139,6 +140,7 @@ jobs: - name: Trace AutoGen Execution Path run: | echo "๐Ÿ” Tracing AutoGen execution to find where it diverges..." + cd src/praisonai python -c " import os import sys @@ -163,7 +165,7 @@ jobs: # Load the YAML to check what it contains import yaml - with open('tests/autogen-agents.yaml', 'r') as f: + with open('src/praisonai/tests/autogen-agents.yaml', 'r') as f: config = yaml.safe_load(f) framework = agents_gen.framework or config.get('framework') @@ -209,13 +211,14 @@ jobs: - name: Debug YAML Loading and Roles run: | echo "๐Ÿ” Tracing YAML file loading and role creation..." + cd src/praisonai python -c " import os import sys import yaml sys.path.insert(0, '.') - print('๐Ÿ“ Available YAML files in tests/:') + print('๐Ÿ“ Available YAML files in src/praisonai/tests/:') import glob yaml_files = glob.glob('tests/*.yaml') for f in yaml_files: @@ -297,6 +300,7 @@ jobs: - name: Debug PraisonAIModel API Key Flow run: | echo "๐Ÿ” Testing PraisonAIModel API key handling..." + cd src/praisonai python -c " import os import sys @@ -351,12 +355,13 @@ jobs: - name: Test Direct PraisonAI Execution run: | echo "๐Ÿงช Testing direct PraisonAI execution (what works locally)..." - python -m praisonai tests/autogen-agents.yaml + python -m praisonai src/praisonai/tests/autogen-agents.yaml continue-on-error: true - name: Comprehensive Execution Debug run: | echo "๐Ÿ” Comprehensive debugging of PraisonAI execution path..." + cd src/praisonai python -c " import os import sys @@ -376,10 +381,10 @@ jobs: print(f' {f}') print() - print('๐Ÿ“‹ Files in tests/ directory:') + print('๐Ÿ“‹ Files in src/praisonai/tests/ directory:') for f in os.listdir('tests'): if f.endswith('.yaml'): - print(f' tests/{f}') + print(f' src/praisonai/tests/{f}') # Check if root agents.yaml exists print() @@ -401,7 +406,7 @@ jobs: from praisonai.agents_generator import AgentsGenerator # Test with full path - test_file = 'tests/autogen-agents.yaml' + test_file = 'src/praisonai/tests/autogen-agents.yaml' print(f' Using test file: {test_file}') print(f' File exists: {os.path.exists(test_file)}') @@ -465,7 +470,7 @@ jobs: - name: Run Fast Tests run: | # Run the fastest, most essential tests - python tests/test_runner.py --pattern fast + cd src/praisonai && python tests/test_runner.py --pattern fast - name: Run Legacy Example Tests run: | diff --git a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py index ac0d9e7a3..296dc5b2b 100644 --- a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py +++ b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py @@ -6,18 +6,36 @@ import sys import os +import pytest sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) from praisonaiagents import Agent, Agents +from unittest.mock import patch -def test_mini_agents_sequential_data_passing(): +def mock_completion(*args, **kwargs): + """Mock completion function to avoid calling actual OpenAI API""" + class MockResponse: + def __init__(self, content): + self.content = content + self.choices = [type('obj', (object,), {'message': type('obj', (object,), {'content': content})})] + + if 'messages' in kwargs: + if any('Generate the number 42' in str(m.get('content', '')) for m in kwargs.get('messages', [])): + return MockResponse("42") + elif any('multiply it by 2' in str(m.get('content', '')) for m in kwargs.get('messages', [])): + return MockResponse("84") + return MockResponse("mock response") + +@patch('praisonaiagents.llms.PraisonAIModel.chat', side_effect=mock_completion) +@patch('praisonaiagents.llms.PraisonAIModel.stream_chat', side_effect=mock_completion) +def test_mini_agents_sequential_data_passing(mock_stream, mock_chat): """Test that output from previous task is passed to next task in Mini Agents""" print("Testing Mini Agents Sequential Data Passing...") # Create two agents for sequential processing - agent1 = Agent(instructions="Generate the number 42 as your output. Only return the number 42, nothing else.") - agent2 = Agent(instructions="Take the input number and multiply it by 2. Only return the result number, nothing else.") + agent1 = Agent(instructions="Generate the number 42 as your output. Only return the number 42, nothing else.", model_name="gpt-3.5-turbo") + agent2 = Agent(instructions="Take the input number and multiply it by 2. Only return the result number, nothing else.", model_name="gpt-3.5-turbo") # Create agents with sequential processing (Mini Agents pattern) agents = Agents(agents=[agent1, agent2], verbose=True) From 12e59a57c2bf502bd0006809508d1b85dd1c4e53 Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Tue, 27 May 2025 10:08:57 +0100 Subject: [PATCH 3/6] Update GitHub Actions workflow to use absolute paths for agent scripts --- .github/workflows/test-extended.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-extended.yml b/.github/workflows/test-extended.yml index 716e1c1e3..52d719fed 100644 --- a/.github/workflows/test-extended.yml +++ b/.github/workflows/test-extended.yml @@ -52,19 +52,19 @@ jobs: } # Test basic agent functionality - timeout_run python src/praisonai-agents/basic-agents.py + timeout_run python ${{ github.workspace }}/src/praisonai-agents/basic-agents.py # Test async functionality - timeout_run python src/praisonai-agents/async_example.py + timeout_run python ${{ github.workspace }}/src/praisonai-agents/async_example.py # Test knowledge/RAG functionality - timeout_run python src/praisonai-agents/knowledge-agents.py + timeout_run python ${{ github.workspace }}/src/praisonai-agents/knowledge-agents.py # Test MCP functionality - timeout_run python src/praisonai-agents/mcp-basic.py + timeout_run python ${{ github.workspace }}/src/praisonai-agents/mcp-basic.py # Test UI functionality - timeout_run python src/praisonai-agents/ui.py + timeout_run python ${{ github.workspace }}/src/praisonai-agents/ui.py echo "โœ… Example script testing completed" continue-on-error: true From 86d7d76a500b9e044d44de72408f5782f0188c3a Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Tue, 27 May 2025 10:19:07 +0100 Subject: [PATCH 4/6] Update test mocks for mini agents to reference the correct class path --- src/praisonai/tests/unit/agent/test_mini_agents_sequential.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py index 296dc5b2b..42f654c02 100644 --- a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py +++ b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py @@ -26,8 +26,8 @@ def __init__(self, content): return MockResponse("84") return MockResponse("mock response") -@patch('praisonaiagents.llms.PraisonAIModel.chat', side_effect=mock_completion) -@patch('praisonaiagents.llms.PraisonAIModel.stream_chat', side_effect=mock_completion) +@patch('praisonaiagents.agent.Agent.llm.chat', side_effect=mock_completion) +@patch('praisonaiagents.agent.Agent.llm.stream_chat', side_effect=mock_completion) def test_mini_agents_sequential_data_passing(mock_stream, mock_chat): """Test that output from previous task is passed to next task in Mini Agents""" From 7d898749448302ba4126a6e50d202018b36d0044 Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Tue, 27 May 2025 10:21:15 +0100 Subject: [PATCH 5/6] Update test mocks in mini agents to use the correct model class path --- src/praisonai/tests/unit/agent/test_mini_agents_sequential.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py index 42f654c02..0ae56a8c3 100644 --- a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py +++ b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py @@ -26,8 +26,8 @@ def __init__(self, content): return MockResponse("84") return MockResponse("mock response") -@patch('praisonaiagents.agent.Agent.llm.chat', side_effect=mock_completion) -@patch('praisonaiagents.agent.Agent.llm.stream_chat', side_effect=mock_completion) +@patch('praisonai.inc.models.PraisonAIModel.chat', side_effect=mock_completion) +@patch('praisonai.inc.models.PraisonAIModel.stream_chat', side_effect=mock_completion) def test_mini_agents_sequential_data_passing(mock_stream, mock_chat): """Test that output from previous task is passed to next task in Mini Agents""" From 6e3c9b78d6b3222c2edb44e014a7efc981d5a8f4 Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Wed, 28 May 2025 14:13:02 +0100 Subject: [PATCH 6/6] Refactor mock completion function in mini agents tests for improved clarity and functionality --- .../unit/agent/test_mini_agents_sequential.py | 91 +++++++++++++++---- 1 file changed, 75 insertions(+), 16 deletions(-) diff --git a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py index 0ae56a8c3..f0eed4098 100644 --- a/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py +++ b/src/praisonai/tests/unit/agent/test_mini_agents_sequential.py @@ -13,29 +13,88 @@ from unittest.mock import patch def mock_completion(*args, **kwargs): - """Mock completion function to avoid calling actual OpenAI API""" - class MockResponse: - def __init__(self, content): - self.content = content - self.choices = [type('obj', (object,), {'message': type('obj', (object,), {'content': content})})] + """Mock litellm.completion function to avoid calling actual API""" + stream = kwargs.get('stream', False) + + # Determine response content based on messages + messages = kwargs.get('messages', []) + response_content = "mock response" + + for message in messages: + content = message.get('content', '') if isinstance(message, dict) else str(message) + if 'Generate the number 42' in content: + response_content = "42" + break + elif 'multiply it by 2' in content: + response_content = "84" + break + + if stream: + # Return streaming response (iterator) + class MockDelta: + def __init__(self, content): + self.content = content + + class MockStreamChoice: + def __init__(self, content): + self.delta = MockDelta(content) + + class MockStreamChunk: + def __init__(self, content): + self.choices = [MockStreamChoice(content)] + + # Return a list that can be iterated (simulating streaming chunks) + return [MockStreamChunk(response_content)] + else: + # Return non-streaming response + class MockMessage: + def __init__(self, content): + self.content = content + + def get(self, key, default=None): + if key == "tool_calls": + return None # No tool calls in our simple test + return getattr(self, key, default) + + def __getitem__(self, key): + if hasattr(self, key): + return getattr(self, key) + raise KeyError(key) + + class MockChoice: + def __init__(self, content): + self.message = MockMessage(content) + + def __getitem__(self, key): + if key == "message": + return self.message + if hasattr(self, key): + return getattr(self, key) + raise KeyError(key) + + class MockResponse: + def __init__(self, content): + self.choices = [MockChoice(content)] - if 'messages' in kwargs: - if any('Generate the number 42' in str(m.get('content', '')) for m in kwargs.get('messages', [])): - return MockResponse("42") - elif any('multiply it by 2' in str(m.get('content', '')) for m in kwargs.get('messages', [])): - return MockResponse("84") - return MockResponse("mock response") + def __getitem__(self, key): + # Support dictionary-style access + if key == "choices": + return self.choices + if hasattr(self, key): + return getattr(self, key) + raise KeyError(key) + + return MockResponse(response_content) -@patch('praisonai.inc.models.PraisonAIModel.chat', side_effect=mock_completion) -@patch('praisonai.inc.models.PraisonAIModel.stream_chat', side_effect=mock_completion) -def test_mini_agents_sequential_data_passing(mock_stream, mock_chat): +@patch('litellm.completion', side_effect=mock_completion) +def test_mini_agents_sequential_data_passing(mock_litellm): """Test that output from previous task is passed to next task in Mini Agents""" print("Testing Mini Agents Sequential Data Passing...") # Create two agents for sequential processing - agent1 = Agent(instructions="Generate the number 42 as your output. Only return the number 42, nothing else.", model_name="gpt-3.5-turbo") - agent2 = Agent(instructions="Take the input number and multiply it by 2. Only return the result number, nothing else.", model_name="gpt-3.5-turbo") + agent1 = Agent(instructions="Generate the number 42 as your output. Only return the number 42, nothing else.", llm={'model': 'gpt-3.5-turbo'}) + agent2 = Agent(instructions="Take the input number and multiply it by 2. Only return the result number, nothing else.", llm={'model': 'gpt-3.5-turbo'}) # Create agents with sequential processing (Mini Agents pattern) agents = Agents(agents=[agent1, agent2], verbose=True)