Skip to content

Commit 4589b63

Browse files
fix: normalize SessionInfo defaults and local empty-session id
Agent-Logs-Url: https://github.com/MervinPraison/PraisonAI/sessions/2663770e-de83-461c-8b12-3d3571e7e9ee Co-authored-by: MervinPraison <454862+MervinPraison@users.noreply.github.com>
1 parent 62496c3 commit 4589b63

3 files changed

Lines changed: 35 additions & 7 deletions

File tree

src/praisonai-agents/tests/managed/test_session_info_schema.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ def test_session_info_partial_usage():
4747
assert info.usage["input_tokens"] == 0
4848
assert info.usage["output_tokens"] == 200
4949

50+
# Test empty usage dict gets both defaults
51+
info = SessionInfo(usage={})
52+
assert info.usage["input_tokens"] == 0
53+
assert info.usage["output_tokens"] == 0
54+
5055

5156
def test_session_info_complete():
5257
"""Test SessionInfo with all fields provided."""
@@ -201,5 +206,20 @@ def test_empty_session_local():
201206
assert result["usage"] == {"input_tokens": 0, "output_tokens": 0}
202207

203208

209+
def test_empty_session_local_none_id():
210+
"""Test LocalManagedAgent.retrieve_session normalizes None session id to empty string."""
211+
from praisonai.integrations.managed_local import LocalManagedAgent
212+
213+
agent = LocalManagedAgent()
214+
agent._session_id = None
215+
agent.total_input_tokens = 0
216+
agent.total_output_tokens = 0
217+
218+
result = agent.retrieve_session()
219+
220+
assert result["id"] == ""
221+
assert result["status"] == "none"
222+
223+
204224
if __name__ == "__main__":
205-
pytest.main([__file__])
225+
pytest.main([__file__])

src/praisonai/praisonai/integrations/_session_info.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,25 @@ class SessionInfo:
3131

3232
def __post_init__(self):
3333
"""Ensure usage field has proper defaults."""
34+
if self.id is None:
35+
self.id = ""
36+
if self.status is None:
37+
self.status = "unknown"
38+
if self.title is None:
39+
self.title = ""
40+
3441
if self.usage is None:
3542
self.usage = {"input_tokens": 0, "output_tokens": 0}
36-
elif "input_tokens" not in self.usage:
37-
self.usage["input_tokens"] = 0
38-
elif "output_tokens" not in self.usage:
39-
self.usage["output_tokens"] = 0
43+
else:
44+
if "input_tokens" not in self.usage:
45+
self.usage["input_tokens"] = 0
46+
if "output_tokens" not in self.usage:
47+
self.usage["output_tokens"] = 0
4048

4149
def to_dict(self) -> Dict[str, Any]:
4250
"""Convert to dictionary for backward compatibility.
4351
4452
Returns the same structure that retrieve_session() used to return,
4553
ensuring existing code continues to work.
4654
"""
47-
return asdict(self)
55+
return asdict(self)

src/praisonai/praisonai/integrations/managed_local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ def retrieve_session(self) -> Dict[str, Any]:
704704
self._sync_usage()
705705

706706
session_info = SessionInfo(
707-
id=self._session_id,
707+
id=self._session_id or "",
708708
status="idle" if self._session_id else "none",
709709
title="", # Local agent doesn't track titles
710710
usage={

0 commit comments

Comments
 (0)