Get the current state of a thread.
Returns None when the thread does not exist on the server (404) or
when the thread exists but has no checkpoint yet (new/empty thread).
All other errors (network, auth, 500) are logged at WARNING and
re-raised so callers can handle them.
Unlike astream, message values are not deserialized; callers may
receive serialized message dicts in values["messages"] from the
server.