NewsAgent-Pro / src /schema.py
Owadokun Tosin Tobi
Update schema.py
6aad908 unverified
from pydantic import BaseModel, Field, ConfigDict
from typing import List, Dict, Optional, Any
class AgentState(BaseModel):
"""
The shared memory for the Multi-Agent System.
Includes 'extra=allow' to prevent validation errors on new fields.
"""
model_config = ConfigDict(extra='allow')
# Input
topic: str = ""
platform: str = "twitter"
# Research & Planning
research_data: Optional[Any] = None
outline: Optional[str] = None
hook: Optional[str] = None
# Content
draft: Optional[str] = None
critique: Optional[str] = None
score: float = 0.0
revision_count: int = 0
# Output
final_thread: Optional[List[str]] = Field(default_factory=list)
image_url: Optional[str] = None
sources: Optional[List[str]] = Field(default_factory=list)
# 🛠️ UTILITY WRAPPER (Paste this here so it's available everywhere)
class HybridState:
"""
Universal wrapper to allow both dot-notation (state.topic)
and dict-access (state['topic']).
"""
def __init__(self, state):
# Unwrap if it's already a HybridState
if isinstance(state, HybridState):
self.__dict__ = state.__dict__
# Convert Pydantic to dict
elif hasattr(state, 'model_dump'):
self.__dict__.update(state.model_dump())
# Use dict directly
elif isinstance(state, dict):
self.__dict__.update(state)
else:
raise ValueError(f"Unknown state type: {type(state)}")
def get(self, key, default=None):
return self.__dict__.get(key, default)
def __getitem__(self, key):
return self.__dict__.get(key)
def __setitem__(self, key, value):
self.__dict__[key] = value