PraisonAI 2.3.75__tar.gz → 2.3.76__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {praisonai-2.3.75 → praisonai-2.3.76}/PKG-INFO +2 -2
- {praisonai-2.3.75 → praisonai-2.3.76}/PraisonAI.egg-info/PKG-INFO +2 -2
- {praisonai-2.3.75 → praisonai-2.3.76}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/auto_memory.py +29 -20
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/main.py +80 -7
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/deploy.py +1 -1
- praisonai-2.3.76/praisonai/version.py +1 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/pyproject.toml +1 -1
- praisonai-2.3.75/praisonai/version.py +0 -1
- {praisonai-2.3.75 → praisonai-2.3.76}/PraisonAI.egg-info/SOURCES.txt +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/README.md +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/__main__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/agent_scheduler.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/agents_generator.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/api/call.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/auto.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/chainlit_ui.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/base.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/compare.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/eval.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/image.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/router.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/session.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/skills.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/todo.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/tools.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/agent_tools.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/inc/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/inc/config.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/inc/models.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/integrations/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/integrations/base.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/profiler.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler/base.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/scheduler.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/setup/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/setup/build.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/setup/post_install.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/setup.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/test.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/train.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/train_vision.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/agents.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/callbacks.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/chat.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/code.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/colab.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/colab_chainlit.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/context.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/database_config.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/db.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/realtime.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/realtimeclient/__init__.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/realtimeclient/tools.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/ui/sql_alchemy.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/praisonai/upload_vision.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/setup.cfg +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_agents_playbook.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_approval_system.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_basic.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_cli_features.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_double_api_fix.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_n8n_integration.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_phase2_refactor.py +0 -0
- {praisonai-2.3.75 → praisonai-2.3.76}/tests/test_runner.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.76
|
|
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.1.
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.1.24
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.76
|
|
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.1.
|
|
14
|
+
Requires-Dist: praisonaiagents>=0.1.24
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: instructor>=1.3.3
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -45,8 +45,10 @@ class AutoMemoryHandler(FlagHandler):
|
|
|
45
45
|
def _get_auto_memory(self, user_id: str = None):
|
|
46
46
|
"""Get AutoMemory instance lazily."""
|
|
47
47
|
try:
|
|
48
|
-
from praisonaiagents.memory import AutoMemory
|
|
49
|
-
|
|
48
|
+
from praisonaiagents.memory import AutoMemory, FileMemory
|
|
49
|
+
# AutoMemory requires a FileMemory instance
|
|
50
|
+
memory = FileMemory(user_id=user_id or "default")
|
|
51
|
+
return AutoMemory(memory=memory)
|
|
50
52
|
except ImportError:
|
|
51
53
|
self.print_status(
|
|
52
54
|
"AutoMemory requires praisonaiagents. Install with: pip install praisonaiagents",
|
|
@@ -71,33 +73,36 @@ class AutoMemoryHandler(FlagHandler):
|
|
|
71
73
|
config['auto_memory_user_id'] = flag_value.get('user_id', 'default')
|
|
72
74
|
return config
|
|
73
75
|
|
|
74
|
-
def extract_memories(self, text: str, user_id: str = None) ->
|
|
76
|
+
def extract_memories(self, text: str, user_id: str = None, user_message: str = None) -> list:
|
|
75
77
|
"""
|
|
76
|
-
Extract memories from text.
|
|
78
|
+
Extract and store memories from text.
|
|
77
79
|
|
|
78
80
|
Args:
|
|
79
|
-
text:
|
|
81
|
+
text: Assistant response text to extract memories from
|
|
80
82
|
user_id: User ID for memory isolation
|
|
83
|
+
user_message: Original user message (for context)
|
|
81
84
|
|
|
82
85
|
Returns:
|
|
83
|
-
|
|
86
|
+
List of extracted memories
|
|
84
87
|
"""
|
|
85
88
|
auto_memory = self._get_auto_memory(user_id)
|
|
86
89
|
if not auto_memory:
|
|
87
|
-
return
|
|
90
|
+
return []
|
|
88
91
|
|
|
89
92
|
try:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
# Use process_interaction which extracts AND stores memories
|
|
94
|
+
memories = auto_memory.process_interaction(
|
|
95
|
+
user_message=user_message or text,
|
|
96
|
+
assistant_response=text if user_message else None,
|
|
97
|
+
store=True # Store the memories
|
|
98
|
+
)
|
|
99
|
+
if memories:
|
|
100
|
+
self.print_status(f"🧠 Extracted and stored {len(memories)} memories", "success")
|
|
101
|
+
return memories
|
|
97
102
|
except Exception as e:
|
|
98
103
|
self.log(f"Memory extraction failed: {e}", "error")
|
|
99
104
|
|
|
100
|
-
return
|
|
105
|
+
return []
|
|
101
106
|
|
|
102
107
|
def store_memory(self, content: str, user_id: str = None, importance: float = 0.5) -> bool:
|
|
103
108
|
"""
|
|
@@ -127,13 +132,14 @@ class AutoMemoryHandler(FlagHandler):
|
|
|
127
132
|
self.log(f"Memory storage failed: {e}", "error")
|
|
128
133
|
return False
|
|
129
134
|
|
|
130
|
-
def post_process_result(self, result: Any, flag_value: Any) -> Any:
|
|
135
|
+
def post_process_result(self, result: Any, flag_value: Any, user_message: str = None) -> Any:
|
|
131
136
|
"""
|
|
132
137
|
Post-process result to extract and store memories.
|
|
133
138
|
|
|
134
139
|
Args:
|
|
135
140
|
result: Agent output
|
|
136
141
|
flag_value: Boolean or dict with configuration
|
|
142
|
+
user_message: Original user message for context
|
|
137
143
|
|
|
138
144
|
Returns:
|
|
139
145
|
Original result (memories are stored)
|
|
@@ -144,15 +150,18 @@ class AutoMemoryHandler(FlagHandler):
|
|
|
144
150
|
user_id = None
|
|
145
151
|
if isinstance(flag_value, dict):
|
|
146
152
|
user_id = flag_value.get('user_id')
|
|
153
|
+
user_message = flag_value.get('user_message', user_message)
|
|
147
154
|
|
|
148
|
-
# Extract memories from result
|
|
155
|
+
# Extract and store memories from result
|
|
149
156
|
text = str(result)
|
|
150
|
-
memories = self.extract_memories(text, user_id)
|
|
157
|
+
memories = self.extract_memories(text, user_id, user_message=user_message)
|
|
151
158
|
|
|
152
159
|
if memories:
|
|
153
160
|
self.print_status("\n🧠 Auto-extracted Memories:", "info")
|
|
154
|
-
for
|
|
155
|
-
|
|
161
|
+
for mem in memories:
|
|
162
|
+
mem_type = mem.get('type', 'unknown')
|
|
163
|
+
content = mem.get('content', str(mem))[:50]
|
|
164
|
+
self.print_status(f" • {mem_type}: {content}...", "info")
|
|
156
165
|
|
|
157
166
|
return result
|
|
158
167
|
|
|
@@ -5,6 +5,42 @@ import argparse
|
|
|
5
5
|
import warnings
|
|
6
6
|
import os
|
|
7
7
|
|
|
8
|
+
# Suppress Pydantic serialization warnings from LiteLLM BEFORE any imports
|
|
9
|
+
# These warnings occur when LiteLLM's response objects have field mismatches
|
|
10
|
+
# Using both filterwarnings AND patching warnings.warn for complete suppression
|
|
11
|
+
|
|
12
|
+
warnings.filterwarnings("ignore", message=".*Pydantic serializer warnings.*")
|
|
13
|
+
warnings.filterwarnings("ignore", message=".*PydanticSerializationUnexpectedValue.*")
|
|
14
|
+
warnings.filterwarnings("ignore", message=".*Expected \\d+ fields but got.*")
|
|
15
|
+
warnings.filterwarnings("ignore", message=".*Expected `StreamingChoices`.*")
|
|
16
|
+
warnings.filterwarnings("ignore", message=".*Expected `Message`.*")
|
|
17
|
+
warnings.filterwarnings("ignore", message=".*serialized value may not be as expected.*")
|
|
18
|
+
warnings.filterwarnings("ignore", category=UserWarning, module="pydantic.*")
|
|
19
|
+
|
|
20
|
+
# Patch warnings.showwarning to intercept ALL warnings including those from crewai's patched warn
|
|
21
|
+
# This is the final output function that actually displays warnings
|
|
22
|
+
_SUPPRESSED_PATTERNS = [
|
|
23
|
+
"Pydantic serializer warnings",
|
|
24
|
+
"PydanticSerializationUnexpectedValue",
|
|
25
|
+
"Expected", # Catches "Expected N fields but got M"
|
|
26
|
+
"StreamingChoices",
|
|
27
|
+
"serialized value may not be as expected",
|
|
28
|
+
"duckduckgo_search", # Suppress duckduckgo rename warning
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
_original_showwarning = warnings.showwarning
|
|
32
|
+
|
|
33
|
+
def _patched_showwarning(message, category, filename, lineno, file=None, line=None):
|
|
34
|
+
msg_str = str(message)
|
|
35
|
+
for pattern in _SUPPRESSED_PATTERNS:
|
|
36
|
+
if pattern in msg_str:
|
|
37
|
+
return
|
|
38
|
+
if category is UserWarning and "pydantic" in filename.lower():
|
|
39
|
+
return
|
|
40
|
+
_original_showwarning(message, category, filename, lineno, file, line)
|
|
41
|
+
|
|
42
|
+
warnings.showwarning = _patched_showwarning
|
|
43
|
+
|
|
8
44
|
# Suppress crewai RuntimeWarning about module loading order (only in non-debug mode)
|
|
9
45
|
# This warning is harmless and occurs when running as `python -m praisonai.cli.main`
|
|
10
46
|
if os.environ.get('LOGLEVEL', 'INFO').upper() != 'DEBUG':
|
|
@@ -1342,12 +1378,47 @@ class PraisonAI:
|
|
|
1342
1378
|
|
|
1343
1379
|
console.print(table)
|
|
1344
1380
|
|
|
1345
|
-
# Show recent memories
|
|
1381
|
+
# Show recent short-term memories
|
|
1346
1382
|
print("\n[bold]Recent Short-term Memories:[/bold]")
|
|
1347
1383
|
short_term = memory.get_short_term(limit=5)
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1384
|
+
if short_term:
|
|
1385
|
+
for i, item in enumerate(short_term, 1):
|
|
1386
|
+
content = item.get('content', str(item))[:100]
|
|
1387
|
+
print(f" {i}. {content}")
|
|
1388
|
+
else:
|
|
1389
|
+
print(" [dim]No short-term memories[/dim]")
|
|
1390
|
+
|
|
1391
|
+
# Show long-term memories
|
|
1392
|
+
print("\n[bold]Long-term Memories:[/bold]")
|
|
1393
|
+
long_term = memory.get_long_term(limit=10)
|
|
1394
|
+
if long_term:
|
|
1395
|
+
for i, item in enumerate(long_term, 1):
|
|
1396
|
+
# Handle both dict and MemoryItem objects
|
|
1397
|
+
if hasattr(item, 'content'):
|
|
1398
|
+
content = str(item.content)[:100]
|
|
1399
|
+
importance = getattr(item, 'importance', 0)
|
|
1400
|
+
else:
|
|
1401
|
+
content = item.get('content', str(item))[:100]
|
|
1402
|
+
importance = item.get('importance', 0)
|
|
1403
|
+
print(f" {i}. [{importance:.1f}] {content}")
|
|
1404
|
+
else:
|
|
1405
|
+
print(" [dim]No long-term memories[/dim]")
|
|
1406
|
+
|
|
1407
|
+
# Show entities
|
|
1408
|
+
print("\n[bold]Entities:[/bold]")
|
|
1409
|
+
entities = memory.get_all_entities()
|
|
1410
|
+
if entities:
|
|
1411
|
+
for entity in entities[:10]:
|
|
1412
|
+
# Handle both dict and Entity objects
|
|
1413
|
+
if hasattr(entity, 'name'):
|
|
1414
|
+
name = entity.name
|
|
1415
|
+
entity_type = getattr(entity, 'entity_type', 'unknown')
|
|
1416
|
+
else:
|
|
1417
|
+
name = entity.get('name', 'Unknown')
|
|
1418
|
+
entity_type = entity.get('entity_type', 'unknown')
|
|
1419
|
+
print(f" • {name} ({entity_type})")
|
|
1420
|
+
else:
|
|
1421
|
+
print(" [dim]No entities[/dim]")
|
|
1351
1422
|
|
|
1352
1423
|
elif action == 'add':
|
|
1353
1424
|
if not action_args:
|
|
@@ -3118,9 +3189,8 @@ Provide ONLY the commit message, no explanations."""
|
|
|
3118
3189
|
telemetry = TelemetryHandler(verbose=getattr(self.args, 'verbose', False))
|
|
3119
3190
|
telemetry.enable()
|
|
3120
3191
|
|
|
3121
|
-
# Auto Memory - Automatic memory extraction
|
|
3192
|
+
# Auto Memory - Automatic memory extraction (handled post-processing, not as Agent param)
|
|
3122
3193
|
if getattr(self.args, 'auto_memory', False):
|
|
3123
|
-
agent_config["auto_memory"] = True
|
|
3124
3194
|
print("[bold cyan]Auto Memory enabled - will extract and store memories[/bold cyan]")
|
|
3125
3195
|
|
|
3126
3196
|
# MCP - Model Context Protocol tools
|
|
@@ -3266,7 +3336,10 @@ Provide ONLY the commit message, no explanations."""
|
|
|
3266
3336
|
if hasattr(self, 'args') and getattr(self.args, 'auto_memory', False):
|
|
3267
3337
|
from .features.auto_memory import AutoMemoryHandler
|
|
3268
3338
|
auto_mem = AutoMemoryHandler(verbose=getattr(self.args, 'verbose', False))
|
|
3269
|
-
auto_mem.post_process_result(
|
|
3339
|
+
auto_mem.post_process_result(
|
|
3340
|
+
result,
|
|
3341
|
+
{'user_id': getattr(self.args, 'user_id', None), 'user_message': prompt}
|
|
3342
|
+
)
|
|
3270
3343
|
|
|
3271
3344
|
# Todo - Generate todo list from response
|
|
3272
3345
|
if hasattr(self, 'args') and getattr(self.args, 'todo', False):
|
|
@@ -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.3.
|
|
60
|
+
file.write("RUN pip install flask praisonai==2.3.76 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.76"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.3.75"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|