PraisonAI 2.2.99__tar.gz → 2.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {praisonai-2.2.99 → praisonai-2.3.1}/PKG-INFO +50 -13
  2. {praisonai-2.2.99 → praisonai-2.3.1}/PraisonAI.egg-info/PKG-INFO +50 -13
  3. {praisonai-2.2.99 → praisonai-2.3.1}/PraisonAI.egg-info/requires.txt +1 -1
  4. {praisonai-2.2.99 → praisonai-2.3.1}/README.md +48 -11
  5. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/cli.py +96 -0
  6. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/deploy.py +1 -1
  7. praisonai-2.3.1/praisonai/version.py +1 -0
  8. {praisonai-2.2.99 → praisonai-2.3.1}/pyproject.toml +1 -1
  9. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test.py +5 -2
  10. praisonai-2.2.99/praisonai/version.py +0 -1
  11. {praisonai-2.2.99 → praisonai-2.3.1}/PraisonAI.egg-info/SOURCES.txt +0 -0
  12. {praisonai-2.2.99 → praisonai-2.3.1}/PraisonAI.egg-info/dependency_links.txt +0 -0
  13. {praisonai-2.2.99 → praisonai-2.3.1}/PraisonAI.egg-info/entry_points.txt +0 -0
  14. {praisonai-2.2.99 → praisonai-2.3.1}/PraisonAI.egg-info/top_level.txt +0 -0
  15. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/__init__.py +0 -0
  16. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/__main__.py +0 -0
  17. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/agents_generator.py +0 -0
  18. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/api/call.py +0 -0
  19. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/auto.py +0 -0
  20. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/chainlit_ui.py +0 -0
  21. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/inbuilt_tools/__init__.py +0 -0
  22. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  23. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/inc/__init__.py +0 -0
  24. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/inc/config.py +0 -0
  25. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/inc/models.py +0 -0
  26. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/scheduler.py +0 -0
  27. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/setup/__init__.py +0 -0
  28. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/setup/build.py +0 -0
  29. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/setup/post_install.py +0 -0
  30. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/setup/setup_conda_env.py +0 -0
  31. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/setup.py +0 -0
  32. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/test.py +0 -0
  33. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/train.py +0 -0
  34. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/train_vision.py +0 -0
  35. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/agents.py +0 -0
  36. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/callbacks.py +0 -0
  37. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/chat.py +0 -0
  38. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/code.py +0 -0
  39. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/colab.py +0 -0
  40. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/colab_chainlit.py +0 -0
  41. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/components/aicoder.py +0 -0
  42. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/context.py +0 -0
  43. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/database_config.py +0 -0
  44. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/db.py +0 -0
  45. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/realtime.py +0 -0
  46. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/realtimeclient/__init__.py +0 -0
  47. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/realtimeclient/tools.py +0 -0
  48. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/ui/sql_alchemy.py +0 -0
  49. {praisonai-2.2.99 → praisonai-2.3.1}/praisonai/upload_vision.py +0 -0
  50. {praisonai-2.2.99 → praisonai-2.3.1}/setup.cfg +0 -0
  51. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test_agents_playbook.py +0 -0
  52. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test_basic.py +0 -0
  53. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test_custom_tools_fix.py +0 -0
  54. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test_double_api_fix.py +0 -0
  55. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test_phase2_refactor.py +0 -0
  56. {praisonai-2.2.99 → praisonai-2.3.1}/tests/test_runner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 2.2.99
3
+ Version: 2.3.1
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=0.0.169
14
+ Requires-Dist: praisonaiagents>=0.0.175
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: instructor>=1.3.3
17
17
  Requires-Dist: PyYAML>=6.0
@@ -152,6 +152,9 @@ PraisonAI is a production-ready Multi-AI Agents framework with self-reflection,
152
152
  - 💯 100+ LLM Support
153
153
  - 🔬 **Deep Research Agents** (OpenAI & Gemini)
154
154
  - 🔄 **Query Rewriter Agent** (HyDE, Step-back, Multi-query)
155
+ - 🌐 **Native Web Search** (OpenAI, Gemini, Anthropic, xAI, Perplexity)
156
+ - 📥 **Web Fetch** (Retrieve full content from URLs - Anthropic)
157
+ - 💾 **Prompt Caching** (Reduce costs & latency - OpenAI, Anthropic, Bedrock, Deepseek)
155
158
 
156
159
  ## Using Python Code
157
160
 
@@ -815,6 +818,47 @@ agent = Agent(tools=["my_tool"]) # Works automatically!
815
818
  ```
816
819
 
817
820
 
821
+ ## Prompt Expansion
822
+
823
+ Expand short prompts into detailed, actionable prompts:
824
+
825
+ ### CLI Usage
826
+
827
+ ```bash
828
+ # Expand a short prompt into detailed prompt
829
+ praisonai "write a movie script in 3 lines" --expand-prompt
830
+
831
+ # With verbose output
832
+ praisonai "blog about AI" --expand-prompt -v
833
+
834
+ # With tools for context gathering
835
+ praisonai "latest AI trends" --expand-prompt --expand-tools tools.py
836
+
837
+ # Combine with query rewrite
838
+ praisonai "AI news" --query-rewrite --expand-prompt
839
+ ```
840
+
841
+ ### Programmatic Usage
842
+
843
+ ```python
844
+ from praisonaiagents import PromptExpanderAgent, ExpandStrategy
845
+
846
+ # Basic usage
847
+ agent = PromptExpanderAgent()
848
+ result = agent.expand("write a movie script in 3 lines")
849
+ print(result.expanded_prompt)
850
+
851
+ # With specific strategy
852
+ result = agent.expand("blog about AI", strategy=ExpandStrategy.DETAILED)
853
+
854
+ # Available strategies: BASIC, DETAILED, STRUCTURED, CREATIVE, AUTO
855
+ ```
856
+
857
+ **Key Difference:**
858
+ - `--query-rewrite`: Optimizes queries for **search/retrieval** (RAG)
859
+ - `--expand-prompt`: Expands prompts for **detailed task execution**
860
+
861
+
818
862
  ## Development:
819
863
 
820
864
  Below is used for development only.
@@ -832,21 +876,14 @@ uv pip install -r pyproject.toml --extra code
832
876
  uv pip install -r pyproject.toml --extra "crewai,autogen"
833
877
  ```
834
878
 
835
- ### Version Bump
879
+ ### Bump and Release
836
880
 
837
881
  ```bash
838
- # From project root
839
- python src/praisonai/scripts/bump_version.py 2.2.96
882
+ # From project root - bumps version and releases in one command
883
+ python src/praisonai/scripts/bump_and_release.py 2.2.99
840
884
 
841
885
  # With praisonaiagents dependency
842
- python src/praisonai/scripts/bump_version.py 2.2.96 --agents 0.0.167
843
- ```
844
-
845
- ### Release
846
-
847
- ```bash
848
- # From project root (runs uv lock, build, git tag, gh release)
849
- python src/praisonai/scripts/release.py
886
+ python src/praisonai/scripts/bump_and_release.py 2.2.99 --agents 0.0.169
850
887
 
851
888
  # Then publish
852
889
  cd src/praisonai && uv publish
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 2.2.99
3
+ Version: 2.3.1
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=0.0.169
14
+ Requires-Dist: praisonaiagents>=0.0.175
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: instructor>=1.3.3
17
17
  Requires-Dist: PyYAML>=6.0
@@ -152,6 +152,9 @@ PraisonAI is a production-ready Multi-AI Agents framework with self-reflection,
152
152
  - 💯 100+ LLM Support
153
153
  - 🔬 **Deep Research Agents** (OpenAI & Gemini)
154
154
  - 🔄 **Query Rewriter Agent** (HyDE, Step-back, Multi-query)
155
+ - 🌐 **Native Web Search** (OpenAI, Gemini, Anthropic, xAI, Perplexity)
156
+ - 📥 **Web Fetch** (Retrieve full content from URLs - Anthropic)
157
+ - 💾 **Prompt Caching** (Reduce costs & latency - OpenAI, Anthropic, Bedrock, Deepseek)
155
158
 
156
159
  ## Using Python Code
157
160
 
@@ -815,6 +818,47 @@ agent = Agent(tools=["my_tool"]) # Works automatically!
815
818
  ```
816
819
 
817
820
 
821
+ ## Prompt Expansion
822
+
823
+ Expand short prompts into detailed, actionable prompts:
824
+
825
+ ### CLI Usage
826
+
827
+ ```bash
828
+ # Expand a short prompt into detailed prompt
829
+ praisonai "write a movie script in 3 lines" --expand-prompt
830
+
831
+ # With verbose output
832
+ praisonai "blog about AI" --expand-prompt -v
833
+
834
+ # With tools for context gathering
835
+ praisonai "latest AI trends" --expand-prompt --expand-tools tools.py
836
+
837
+ # Combine with query rewrite
838
+ praisonai "AI news" --query-rewrite --expand-prompt
839
+ ```
840
+
841
+ ### Programmatic Usage
842
+
843
+ ```python
844
+ from praisonaiagents import PromptExpanderAgent, ExpandStrategy
845
+
846
+ # Basic usage
847
+ agent = PromptExpanderAgent()
848
+ result = agent.expand("write a movie script in 3 lines")
849
+ print(result.expanded_prompt)
850
+
851
+ # With specific strategy
852
+ result = agent.expand("blog about AI", strategy=ExpandStrategy.DETAILED)
853
+
854
+ # Available strategies: BASIC, DETAILED, STRUCTURED, CREATIVE, AUTO
855
+ ```
856
+
857
+ **Key Difference:**
858
+ - `--query-rewrite`: Optimizes queries for **search/retrieval** (RAG)
859
+ - `--expand-prompt`: Expands prompts for **detailed task execution**
860
+
861
+
818
862
  ## Development:
819
863
 
820
864
  Below is used for development only.
@@ -832,21 +876,14 @@ uv pip install -r pyproject.toml --extra code
832
876
  uv pip install -r pyproject.toml --extra "crewai,autogen"
833
877
  ```
834
878
 
835
- ### Version Bump
879
+ ### Bump and Release
836
880
 
837
881
  ```bash
838
- # From project root
839
- python src/praisonai/scripts/bump_version.py 2.2.96
882
+ # From project root - bumps version and releases in one command
883
+ python src/praisonai/scripts/bump_and_release.py 2.2.99
840
884
 
841
885
  # With praisonaiagents dependency
842
- python src/praisonai/scripts/bump_version.py 2.2.96 --agents 0.0.167
843
- ```
844
-
845
- ### Release
846
-
847
- ```bash
848
- # From project root (runs uv lock, build, git tag, gh release)
849
- python src/praisonai/scripts/release.py
886
+ python src/praisonai/scripts/bump_and_release.py 2.2.99 --agents 0.0.169
850
887
 
851
888
  # Then publish
852
889
  cd src/praisonai && uv publish
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=0.0.169
4
+ praisonaiagents>=0.0.175
5
5
  python-dotenv>=0.19.0
6
6
  instructor>=1.3.3
7
7
  PyYAML>=6.0
@@ -55,6 +55,9 @@ PraisonAI is a production-ready Multi-AI Agents framework with self-reflection,
55
55
  - 💯 100+ LLM Support
56
56
  - 🔬 **Deep Research Agents** (OpenAI & Gemini)
57
57
  - 🔄 **Query Rewriter Agent** (HyDE, Step-back, Multi-query)
58
+ - 🌐 **Native Web Search** (OpenAI, Gemini, Anthropic, xAI, Perplexity)
59
+ - 📥 **Web Fetch** (Retrieve full content from URLs - Anthropic)
60
+ - 💾 **Prompt Caching** (Reduce costs & latency - OpenAI, Anthropic, Bedrock, Deepseek)
58
61
 
59
62
  ## Using Python Code
60
63
 
@@ -718,6 +721,47 @@ agent = Agent(tools=["my_tool"]) # Works automatically!
718
721
  ```
719
722
 
720
723
 
724
+ ## Prompt Expansion
725
+
726
+ Expand short prompts into detailed, actionable prompts:
727
+
728
+ ### CLI Usage
729
+
730
+ ```bash
731
+ # Expand a short prompt into detailed prompt
732
+ praisonai "write a movie script in 3 lines" --expand-prompt
733
+
734
+ # With verbose output
735
+ praisonai "blog about AI" --expand-prompt -v
736
+
737
+ # With tools for context gathering
738
+ praisonai "latest AI trends" --expand-prompt --expand-tools tools.py
739
+
740
+ # Combine with query rewrite
741
+ praisonai "AI news" --query-rewrite --expand-prompt
742
+ ```
743
+
744
+ ### Programmatic Usage
745
+
746
+ ```python
747
+ from praisonaiagents import PromptExpanderAgent, ExpandStrategy
748
+
749
+ # Basic usage
750
+ agent = PromptExpanderAgent()
751
+ result = agent.expand("write a movie script in 3 lines")
752
+ print(result.expanded_prompt)
753
+
754
+ # With specific strategy
755
+ result = agent.expand("blog about AI", strategy=ExpandStrategy.DETAILED)
756
+
757
+ # Available strategies: BASIC, DETAILED, STRUCTURED, CREATIVE, AUTO
758
+ ```
759
+
760
+ **Key Difference:**
761
+ - `--query-rewrite`: Optimizes queries for **search/retrieval** (RAG)
762
+ - `--expand-prompt`: Expands prompts for **detailed task execution**
763
+
764
+
721
765
  ## Development:
722
766
 
723
767
  Below is used for development only.
@@ -735,21 +779,14 @@ uv pip install -r pyproject.toml --extra code
735
779
  uv pip install -r pyproject.toml --extra "crewai,autogen"
736
780
  ```
737
781
 
738
- ### Version Bump
782
+ ### Bump and Release
739
783
 
740
784
  ```bash
741
- # From project root
742
- python src/praisonai/scripts/bump_version.py 2.2.96
785
+ # From project root - bumps version and releases in one command
786
+ python src/praisonai/scripts/bump_and_release.py 2.2.99
743
787
 
744
788
  # With praisonaiagents dependency
745
- python src/praisonai/scripts/bump_version.py 2.2.96 --agents 0.0.167
746
- ```
747
-
748
- ### Release
749
-
750
- ```bash
751
- # From project root (runs uv lock, build, git tag, gh release)
752
- python src/praisonai/scripts/release.py
789
+ python src/praisonai/scripts/bump_and_release.py 2.2.99 --agents 0.0.169
753
790
 
754
791
  # Then publish
755
792
  cd src/praisonai && uv publish
@@ -579,6 +579,8 @@ class PraisonAI:
579
579
  parser.add_argument("--research", action="store_true", help="Run deep research on a topic")
580
580
  parser.add_argument("--query-rewrite", action="store_true", help="Rewrite query for better results (works with any command)")
581
581
  parser.add_argument("--rewrite-tools", type=str, help="Tools for query rewriter (e.g., 'internet_search' or path to tools.py)")
582
+ parser.add_argument("--expand-prompt", action="store_true", help="Expand short prompt into detailed prompt (works with any command)")
583
+ parser.add_argument("--expand-tools", type=str, help="Tools for prompt expander (e.g., 'internet_search' or path to tools.py)")
582
584
  parser.add_argument("--tools", "-t", type=str, help="Path to tools.py file for research agent")
583
585
  parser.add_argument("--save", "-s", action="store_true", help="Save research output to file (output/research/)")
584
586
  parser.add_argument("--verbose", "-v", action="store_true", help="Enable verbose output for research")
@@ -839,12 +841,106 @@ class PraisonAI:
839
841
  verbose = getattr(self.args, 'verbose', False)
840
842
  return self._rewrite_query(query, rewrite_tools, verbose)
841
843
 
844
+ def _expand_prompt(self, prompt: str, expand_tools: str = None, verbose: bool = False) -> str:
845
+ """
846
+ Expand prompt using PromptExpanderAgent.
847
+
848
+ Args:
849
+ prompt: The prompt to expand
850
+ expand_tools: Tool names (comma-separated) or path to tools.py
851
+ verbose: Enable verbose output
852
+
853
+ Returns:
854
+ Expanded prompt or original if expansion fails
855
+ """
856
+ try:
857
+ from praisonaiagents import PromptExpanderAgent, ExpandStrategy
858
+ from rich import print
859
+
860
+ print("[bold cyan]Expanding prompt for detailed execution...[/bold cyan]")
861
+
862
+ # Load expand tools if specified
863
+ expand_tools_list = []
864
+ if expand_tools:
865
+ if os.path.isfile(expand_tools):
866
+ # Load from file
867
+ try:
868
+ import inspect
869
+ import importlib.util
870
+ spec = importlib.util.spec_from_file_location("expand_tools_module", expand_tools)
871
+ if spec and spec.loader:
872
+ module = importlib.util.module_from_spec(spec)
873
+ spec.loader.exec_module(module)
874
+ for name, obj in inspect.getmembers(module):
875
+ if inspect.isfunction(obj) and not name.startswith('_'):
876
+ expand_tools_list.append(obj)
877
+ if expand_tools_list:
878
+ print(f"[cyan]Loaded {len(expand_tools_list)} tools for prompt expander[/cyan]")
879
+ except Exception as e:
880
+ print(f"[yellow]Warning: Failed to load expand tools: {e}[/yellow]")
881
+ else:
882
+ # Treat as comma-separated tool names
883
+ try:
884
+ from praisonaiagents.tools import TOOL_MAPPINGS
885
+ import praisonaiagents.tools as tools_module
886
+
887
+ tool_names = [t.strip() for t in expand_tools.split(',')]
888
+ for tool_name in tool_names:
889
+ if tool_name in TOOL_MAPPINGS:
890
+ try:
891
+ tool = getattr(tools_module, tool_name)
892
+ expand_tools_list.append(tool)
893
+ except Exception as e:
894
+ print(f"[yellow]Warning: Failed to load expand tool '{tool_name}': {e}[/yellow]")
895
+ else:
896
+ print(f"[yellow]Warning: Unknown expand tool '{tool_name}'[/yellow]")
897
+ if expand_tools_list:
898
+ print(f"[cyan]Using expand tools: {', '.join(tool_names)}[/cyan]")
899
+ except ImportError:
900
+ print("[yellow]Warning: Could not import tools module[/yellow]")
901
+
902
+ expander = PromptExpanderAgent(
903
+ model="gpt-4o-mini",
904
+ verbose=verbose,
905
+ tools=expand_tools_list if expand_tools_list else None
906
+ )
907
+ result = expander.expand(prompt, strategy=ExpandStrategy.AUTO)
908
+ expanded = result.expanded_prompt
909
+
910
+ print(f"[cyan]Original:[/cyan] {prompt}")
911
+ print(f"[cyan]Expanded:[/cyan] {expanded}")
912
+
913
+ return expanded
914
+
915
+ except ImportError:
916
+ from rich import print
917
+ print("[yellow]Warning: PromptExpanderAgent not available, using original prompt[/yellow]")
918
+ return prompt
919
+ except Exception as e:
920
+ from rich import print
921
+ print(f"[yellow]Warning: Prompt expansion failed ({e}), using original prompt[/yellow]")
922
+ return prompt
923
+
924
+ def _expand_prompt_if_enabled(self, prompt: str) -> str:
925
+ """
926
+ Expand prompt using PromptExpanderAgent if --expand-prompt is enabled.
927
+ Returns the expanded prompt or original if expansion is disabled/fails.
928
+ """
929
+ if not hasattr(self, 'args') or not getattr(self.args, 'expand_prompt', False):
930
+ return prompt
931
+
932
+ expand_tools = getattr(self.args, 'expand_tools', None)
933
+ verbose = getattr(self.args, 'verbose', False)
934
+ return self._expand_prompt(prompt, expand_tools, verbose)
935
+
842
936
  def handle_direct_prompt(self, prompt):
843
937
  """
844
938
  Handle direct prompt by creating a single agent and running it.
845
939
  """
846
940
  # Apply query rewriting if enabled
847
941
  prompt = self._rewrite_query_if_enabled(prompt)
942
+ # Apply prompt expansion if enabled
943
+ prompt = self._expand_prompt_if_enabled(prompt)
848
944
 
849
945
  if PRAISONAI_AVAILABLE:
850
946
  agent_config = {
@@ -57,7 +57,7 @@ class CloudDeployer:
57
57
  file.write("FROM python:3.11-slim\n")
58
58
  file.write("WORKDIR /app\n")
59
59
  file.write("COPY . .\n")
60
- file.write("RUN pip install flask praisonai==2.2.99 gunicorn markdown\n")
60
+ file.write("RUN pip install flask praisonai==2.3.1 gunicorn markdown\n")
61
61
  file.write("EXPOSE 8080\n")
62
62
  file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
63
63
 
@@ -0,0 +1 @@
1
+ __version__ = "2.3.1"
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "rich>=13.7",
13
13
  "markdown>=3.5",
14
14
  "pyparsing>=3.0.0",
15
- "praisonaiagents>=0.0.169",
15
+ "praisonaiagents>=0.0.175",
16
16
  "python-dotenv>=0.19.0",
17
17
  "instructor>=1.3.3",
18
18
  "PyYAML>=6.0",
@@ -59,8 +59,11 @@ class TestPraisonAICommandLine(unittest.TestCase):
59
59
  # In CI, it should be set by the workflow
60
60
  print("Warning: OPENAI_API_KEY not found in CLI test environment. API calls might fail if not mocked.")
61
61
 
62
- result = subprocess.run(command, shell=True, capture_output=True, text=True, env=env)
63
- return result.stdout + result.stderr
62
+ try:
63
+ result = subprocess.run(command, shell=True, capture_output=True, text=True, env=env, timeout=120)
64
+ return result.stdout + result.stderr
65
+ except subprocess.TimeoutExpired:
66
+ return "TIMEOUT: Command exceeded 120 seconds"
64
67
 
65
68
  @pytest.mark.real
66
69
  def test_praisonai_command(self):
@@ -1 +0,0 @@
1
- __version__ = "2.2.99"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes