Skip to content

Conversation

@frosty720
Copy link

Add defensive checks using hasattr() before accessing context.type to prevent AttributeError crashes when dealing with old or corrupted contexts that don't have the type attribute. This fixes the data loss issue reported in #923.

Changes:

  • python/helpers/persist_chat.py: Add hasattr checks in save_tmp_chat(), save_tmp_chats(), and _serialize_context()
  • python/extensions/message_loop_end/_90_save_chat.py: Add hasattr check in SaveChat.execute()
  • agent.py: Add hasattr check in AgentContext.output()
  • python/api/poll.py: User's original fix (already applied)

All locations now use defensive pattern:
if hasattr(context, 'type') and context.type == AgentContextType.BACKGROUND

For serialization, default to USER type when attribute is missing:
context.type.value if hasattr(context, 'type') else AgentContextType.USER.value

Added comprehensive test suite to verify the fixes work correctly with:

  • Normal contexts (with type attribute)
  • Contexts without type attribute (bug scenario)
  • BACKGROUND contexts

All tests pass successfully.

…t0ai#923)

Add defensive checks using hasattr() before accessing context.type to prevent
AttributeError crashes when dealing with old or corrupted contexts that don't
have the type attribute. This fixes the data loss issue reported in agent0ai#923.

Changes:
- python/helpers/persist_chat.py: Add hasattr checks in save_tmp_chat(),
  save_tmp_chats(), and _serialize_context()
- python/extensions/message_loop_end/_90_save_chat.py: Add hasattr check
  in SaveChat.execute()
- agent.py: Add hasattr check in AgentContext.output()
- python/api/poll.py: User's original fix (already applied)

All locations now use defensive pattern:
  if hasattr(context, 'type') and context.type == AgentContextType.BACKGROUND

For serialization, default to USER type when attribute is missing:
  context.type.value if hasattr(context, 'type') else AgentContextType.USER.value

Added comprehensive test suite to verify the fixes work correctly with:
- Normal contexts (with type attribute)
- Contexts without type attribute (bug scenario)
- BACKGROUND contexts

All tests pass successfully.
@frdel
Copy link
Collaborator

frdel commented Jan 20, 2026

Thank you, I don't think checking existence of mandatory attribute every time it's used is a way to go. If the attribute is missing, we should rather identify the root cause.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants