praisonaiagents 0.0.135__tar.gz → 0.0.136__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.
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/PKG-INFO +1 -1
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/session.py +126 -4
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents.egg-info/PKG-INFO +1 -1
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/pyproject.toml +1 -1
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/README.md +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agent/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agent/agent.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agent/handoff.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agent/image_agent.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agent/router_agent.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agents/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agents/agents.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/agents/autoagents.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/approval.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/guardrails/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/guardrails/guardrail_result.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/guardrails/llm_guardrail.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/knowledge/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/knowledge/chunking.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/knowledge/knowledge.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/llm/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/llm/llm.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/llm/model_capabilities.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/llm/model_router.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/llm/openai_client.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/main.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/mcp/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/mcp/mcp.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/mcp/mcp_http_stream.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/mcp/mcp_sse.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/memory/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/memory/memory.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/process/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/process/process.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/task/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/task/task.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/telemetry/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/telemetry/integration.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/telemetry/telemetry.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/README.md +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/__init__.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/arxiv_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/calculator_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/csv_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/duckdb_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/excel_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/file_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/json_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/newspaper_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/pandas_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/python_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/searxng_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/shell_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/spider_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/test.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/train/data/generatecot.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/wikipedia_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/xml_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/yaml_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/yfinance_tools.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents.egg-info/SOURCES.txt +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents.egg-info/dependency_links.txt +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents.egg-info/requires.txt +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents.egg-info/top_level.txt +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/setup.cfg +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test-graph-memory.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_fix_comprehensive.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_handoff_compatibility.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_http_stream_basic.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_llm_self_reflection_direct.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_ollama_async_fix.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_ollama_fix.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_ollama_sequential_fix.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_posthog_fixed.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_self_reflection_comprehensive.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_self_reflection_fix_simple.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_self_reflection_fix_verification.py +0 -0
- {praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_validation_feedback.py +0 -0
@@ -78,7 +78,7 @@ class Session:
|
|
78
78
|
if not self.is_remote:
|
79
79
|
default_memory_config = {
|
80
80
|
"provider": "rag",
|
81
|
-
"use_embedding":
|
81
|
+
"use_embedding": False, # Disable embeddings to avoid OpenAI API key requirement
|
82
82
|
"rag_db_path": f".praison/sessions/{self.session_id}/chroma_db"
|
83
83
|
}
|
84
84
|
if memory_config:
|
@@ -96,6 +96,7 @@ class Session:
|
|
96
96
|
self._memory = None
|
97
97
|
self._knowledge = None
|
98
98
|
self._agents_instance = None
|
99
|
+
self._agents = {} # Track agents and their chat histories
|
99
100
|
else:
|
100
101
|
# For remote sessions, disable local memory/knowledge
|
101
102
|
self.memory_config = {}
|
@@ -103,6 +104,7 @@ class Session:
|
|
103
104
|
self._memory = None
|
104
105
|
self._knowledge = None
|
105
106
|
self._agents_instance = None
|
107
|
+
self._agents = {} # Track agents and their chat histories
|
106
108
|
|
107
109
|
@property
|
108
110
|
def memory(self) -> Memory:
|
@@ -170,7 +172,23 @@ class Session:
|
|
170
172
|
agent_kwargs["knowledge"] = knowledge
|
171
173
|
agent_kwargs["knowledge_config"] = self.knowledge_config
|
172
174
|
|
173
|
-
|
175
|
+
agent = Agent(**agent_kwargs)
|
176
|
+
|
177
|
+
# Create a unique key for this agent (using name and role)
|
178
|
+
agent_key = f"{name}:{role}"
|
179
|
+
|
180
|
+
# Restore chat history if it exists from previous sessions
|
181
|
+
if agent_key in self._agents:
|
182
|
+
agent.chat_history = self._agents[agent_key].get("chat_history", [])
|
183
|
+
else:
|
184
|
+
# Try to restore from memory for backward compatibility
|
185
|
+
restored_history = self._restore_agent_chat_history(agent_key)
|
186
|
+
agent.chat_history = restored_history
|
187
|
+
|
188
|
+
# Track the agent
|
189
|
+
self._agents[agent_key] = {"agent": agent, "chat_history": agent.chat_history}
|
190
|
+
|
191
|
+
return agent
|
174
192
|
|
175
193
|
# Keep create_agent for backward compatibility
|
176
194
|
def create_agent(self, *args, **kwargs) -> Agent:
|
@@ -189,6 +207,11 @@ class Session:
|
|
189
207
|
"""
|
190
208
|
if self.is_remote:
|
191
209
|
raise ValueError("State operations are not available for remote agent sessions")
|
210
|
+
|
211
|
+
# Save agent chat histories first
|
212
|
+
self._save_agent_chat_histories()
|
213
|
+
|
214
|
+
# Save session state
|
192
215
|
state_text = f"Session state: {state_data}"
|
193
216
|
self.memory.store_short_term(
|
194
217
|
text=state_text,
|
@@ -212,12 +235,15 @@ class Session:
|
|
212
235
|
"""
|
213
236
|
if self.is_remote:
|
214
237
|
raise ValueError("State operations are not available for remote agent sessions")
|
215
|
-
# Use
|
238
|
+
# Use content-based search for better SQLite compatibility
|
216
239
|
results = self.memory.search_short_term(
|
217
|
-
query=
|
240
|
+
query="Session state:",
|
218
241
|
limit=10 # Get more results to filter by session_id
|
219
242
|
)
|
220
243
|
|
244
|
+
# Restore agent chat histories first
|
245
|
+
self._restore_agent_chat_histories()
|
246
|
+
|
221
247
|
# Filter results by session_id in metadata
|
222
248
|
for result in results:
|
223
249
|
metadata = result.get("metadata", {})
|
@@ -230,6 +256,97 @@ class Session:
|
|
230
256
|
|
231
257
|
return {}
|
232
258
|
|
259
|
+
def _restore_agent_chat_history(self, agent_key: str) -> List[Dict[str, Any]]:
|
260
|
+
"""
|
261
|
+
Restore agent chat history from memory.
|
262
|
+
|
263
|
+
Args:
|
264
|
+
agent_key: Unique identifier for the agent
|
265
|
+
|
266
|
+
Returns:
|
267
|
+
List of chat history messages or empty list if not found
|
268
|
+
"""
|
269
|
+
if self.is_remote:
|
270
|
+
return []
|
271
|
+
|
272
|
+
# Search for agent chat history in memory
|
273
|
+
results = self.memory.search_short_term(
|
274
|
+
query="Agent chat history for",
|
275
|
+
limit=10
|
276
|
+
)
|
277
|
+
|
278
|
+
# Filter results by session_id and agent_key
|
279
|
+
for result in results:
|
280
|
+
metadata = result.get("metadata", {})
|
281
|
+
if (metadata.get("type") == "agent_chat_history" and
|
282
|
+
metadata.get("session_id") == self.session_id and
|
283
|
+
metadata.get("agent_key") == agent_key):
|
284
|
+
# Extract chat history from metadata
|
285
|
+
chat_history = metadata.get("chat_history", [])
|
286
|
+
return chat_history
|
287
|
+
|
288
|
+
return []
|
289
|
+
|
290
|
+
def _restore_agent_chat_histories(self) -> None:
|
291
|
+
"""
|
292
|
+
Restore all agent chat histories from memory.
|
293
|
+
"""
|
294
|
+
if self.is_remote:
|
295
|
+
return
|
296
|
+
|
297
|
+
# Search for all agent chat histories in memory
|
298
|
+
results = self.memory.search_short_term(
|
299
|
+
query="Agent chat history for",
|
300
|
+
limit=50 # Get many results to find all agents
|
301
|
+
)
|
302
|
+
|
303
|
+
# Filter and restore chat histories for this session
|
304
|
+
for result in results:
|
305
|
+
metadata = result.get("metadata", {})
|
306
|
+
if (metadata.get("type") == "agent_chat_history" and
|
307
|
+
metadata.get("session_id") == self.session_id):
|
308
|
+
agent_key = metadata.get("agent_key")
|
309
|
+
chat_history = metadata.get("chat_history", [])
|
310
|
+
|
311
|
+
if agent_key and chat_history:
|
312
|
+
# Store in _agents dict for later retrieval
|
313
|
+
self._agents[agent_key] = {
|
314
|
+
"agent": None, # Will be populated when Agent is created
|
315
|
+
"chat_history": chat_history
|
316
|
+
}
|
317
|
+
|
318
|
+
def _save_agent_chat_histories(self) -> None:
|
319
|
+
"""
|
320
|
+
Save all agent chat histories to memory.
|
321
|
+
"""
|
322
|
+
if self.is_remote:
|
323
|
+
return
|
324
|
+
|
325
|
+
for agent_key, agent_data in self._agents.items():
|
326
|
+
agent = agent_data.get("agent")
|
327
|
+
chat_history = None
|
328
|
+
|
329
|
+
# Prioritize history from the live agent object, but fall back to restored history
|
330
|
+
if agent and hasattr(agent, 'chat_history'):
|
331
|
+
chat_history = agent.chat_history
|
332
|
+
agent_data["chat_history"] = chat_history # Ensure tracked history is up-to-date
|
333
|
+
else:
|
334
|
+
chat_history = agent_data.get("chat_history")
|
335
|
+
|
336
|
+
if chat_history is not None:
|
337
|
+
# Save to memory
|
338
|
+
history_text = f"Agent chat history for {agent_key}"
|
339
|
+
self.memory.store_short_term(
|
340
|
+
text=history_text,
|
341
|
+
metadata={
|
342
|
+
"type": "agent_chat_history",
|
343
|
+
"session_id": self.session_id,
|
344
|
+
"user_id": self.user_id,
|
345
|
+
"agent_key": agent_key,
|
346
|
+
"chat_history": chat_history
|
347
|
+
}
|
348
|
+
)
|
349
|
+
|
233
350
|
def get_state(self, key: str, default: Any = None) -> Any:
|
234
351
|
"""Get a specific state value"""
|
235
352
|
state = self.restore_state()
|
@@ -241,6 +358,11 @@ class Session:
|
|
241
358
|
current_state[key] = value
|
242
359
|
self.save_state(current_state)
|
243
360
|
|
361
|
+
def increment_state(self, key: str, increment: int = 1, default: int = 0) -> None:
|
362
|
+
"""Increment a numeric state value"""
|
363
|
+
current_value = self.get_state(key, default)
|
364
|
+
self.set_state(key, current_value + increment)
|
365
|
+
|
244
366
|
def add_memory(self, text: str, memory_type: str = "long", **metadata) -> None:
|
245
367
|
"""
|
246
368
|
Add information to session memory.
|
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
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/guardrails/guardrail_result.py
RENAMED
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/guardrails/llm_guardrail.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/llm/model_capabilities.py
RENAMED
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
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/telemetry/integration.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/calculator_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/duckduckgo_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/newspaper_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/train/data/generatecot.py
RENAMED
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents/tools/wikipedia_tools.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/praisonaiagents.egg-info/dependency_links.txt
RENAMED
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
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_llm_self_reflection_direct.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_self_reflection_comprehensive.py
RENAMED
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_self_reflection_fix_simple.py
RENAMED
File without changes
|
{praisonaiagents-0.0.135 → praisonaiagents-0.0.136}/tests/test_self_reflection_fix_verification.py
RENAMED
File without changes
|
File without changes
|