@@ -79,6 +79,34 @@ def _get_rollout_id(self, record: logging.LogRecord) -> Optional[str]:
7979 return str (cast (Any , getattr (record , "rollout_id" )))
8080 return os .getenv (self .rollout_id_env )
8181
82+ def _get_status_info (self , record : logging .LogRecord ) -> Optional [Dict [str , Any ]]:
83+ """Extract status information from the log record's extra data."""
84+ # Check if 'status' is in the extra data (passed via extra parameter)
85+ if hasattr (record , "status" ) and record .status is not None : # type: ignore
86+ status = record .status # type: ignore
87+
88+ # Handle Status class instances (Pydantic BaseModel)
89+ if hasattr (status , "code" ) and hasattr (status , "message" ):
90+ # Status object - extract code and message
91+ status_code = status .code
92+ # Handle both enum values and direct integer values
93+ if hasattr (status_code , "value" ):
94+ status_code = status_code .value
95+
96+ return {
97+ "code" : status_code ,
98+ "message" : status .message ,
99+ "details" : getattr (status , "details" , []),
100+ }
101+ elif isinstance (status , dict ):
102+ # Dictionary representation of status
103+ return {
104+ "code" : status .get ("code" ),
105+ "message" : status .get ("message" ),
106+ "details" : status .get ("details" , []),
107+ }
108+ return None
109+
82110 def _build_payload (self , record : logging .LogRecord , rollout_id : str ) -> Dict [str , Any ]:
83111 timestamp = datetime .fromtimestamp (record .created , tz = timezone .utc ).strftime ("%Y-%m-%dT%H:%M:%S.%fZ" )
84112 message = record .getMessage ()
@@ -96,28 +124,12 @@ def _build_payload(self, record: logging.LogRecord, rollout_id: str) -> Dict[str
96124 except Exception :
97125 pass
98126 program = cast (Optional [str ], getattr (record , "program" , None )) or "eval_protocol"
99- status_val = cast (Any , getattr (record , "status" , None ))
100- status = status_val if isinstance (status_val , str ) else None
101- # Capture optional structured status fields if present
102- metadata : Dict [str , Any ] = {}
103- status_code = cast (Any , getattr (record , "status_code" , None ))
104- if isinstance (status_code , int ):
105- metadata ["status_code" ] = status_code
106- status_message = cast (Any , getattr (record , "status_message" , None ))
107- if isinstance (status_message , str ):
108- metadata ["status_message" ] = status_message
109- status_details = getattr (record , "status_details" , None )
110- if status_details is not None :
111- metadata ["status_details" ] = status_details
112- extra_metadata = cast (Any , getattr (record , "metadata" , None ))
113- if isinstance (extra_metadata , dict ):
114- metadata .update (extra_metadata )
127+
115128 return {
116129 "program" : program ,
117- "status" : status ,
130+ "status" : self . _get_status_info ( record ) ,
118131 "message" : message ,
119132 "tags" : tags ,
120- "metadata" : metadata or None ,
121133 "extras" : {
122134 "logger_name" : record .name ,
123135 "level" : record .levelname ,
0 commit comments