Skip to content

Commit 18806b1

Browse files
fix: resolve SessionInfo schema issues identified by reviewers
- Fix SessionInfo.__post_init__ elif chain bug preventing output_tokens initialization - Unify LocalManagedAgent status to 'unknown' (matching Anthropic backend) - Fix type annotation: usage: Optional[Dict[str, int]] = None - Improve getattr() None handling in AnthropicManagedAgent - Update test expectations for unified schema consistency Addresses review feedback from Gemini, CodeRabbit, Qodo, and Copilot. Co-authored-by: Mervin Praison <MervinPraison@users.noreply.github.com>
1 parent 4589b63 commit 18806b1

4 files changed

Lines changed: 11 additions & 12 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ def test_empty_session_local():
199199

200200
result = agent.retrieve_session()
201201

202-
# Should return unified schema with "none" status
202+
# Should return unified schema with "unknown" status (matching Anthropic)
203203
assert result["id"] == ""
204-
assert result["status"] == "none"
204+
assert result["status"] == "unknown"
205205
assert result["title"] == ""
206206
assert result["usage"] == {"input_tokens": 0, "output_tokens": 0}
207207

src/praisonai/praisonai/integrations/_session_info.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
managed agent backends (Anthropic, Local, etc.).
66
"""
77

8-
from typing import Dict, Any
8+
from typing import Dict, Any, Optional
99
from dataclasses import dataclass, asdict
1010

1111

@@ -26,7 +26,7 @@ class SessionInfo:
2626
title: str = ""
2727
"""Session title/name (empty if not set)"""
2828

29-
usage: Dict[str, int] = None
29+
usage: Optional[Dict[str, int]] = None
3030
"""Token usage tracking with input_tokens and output_tokens"""
3131

3232
def __post_init__(self):
@@ -41,10 +41,9 @@ def __post_init__(self):
4141
if self.usage is None:
4242
self.usage = {"input_tokens": 0, "output_tokens": 0}
4343
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
44+
# Use independent checks to ensure both tokens are always present
45+
self.usage.setdefault("input_tokens", 0)
46+
self.usage.setdefault("output_tokens", 0)
4847

4948
def to_dict(self) -> Dict[str, Any]:
5049
"""Convert to dictionary for backward compatibility.

src/praisonai/praisonai/integrations/managed_agents.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -591,9 +591,9 @@ def retrieve_session(self) -> Dict[str, Any]:
591591
}
592592

593593
session_info = SessionInfo(
594-
id=getattr(sess, "id", self._session_id),
595-
status=getattr(sess, "status", "unknown"),
596-
title=getattr(sess, "title", ""),
594+
id=getattr(sess, "id", None) or self._session_id or "",
595+
status=getattr(sess, "status", None) or "unknown",
596+
title=getattr(sess, "title", None) or "",
597597
usage=usage_dict if usage_dict else None,
598598
)
599599
return session_info.to_dict()

src/praisonai/praisonai/integrations/managed_local.py

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

706706
session_info = SessionInfo(
707707
id=self._session_id or "",
708-
status="idle" if self._session_id else "none",
708+
status="idle" if self._session_id else "unknown",
709709
title="", # Local agent doesn't track titles
710710
usage={
711711
"input_tokens": self.total_input_tokens,

0 commit comments

Comments
 (0)