Compute session_id_v2 inputs and shadow output for this request. Returns a dict suitable for **-splatting into RequestTrace(...).
(
request: Request, body: dict
)
| 957 | |
| 958 | |
| 959 | def _extract_session_v2_inputs( |
| 960 | request: Request, body: dict |
| 961 | ) -> dict[str, Any]: |
| 962 | """Compute session_id_v2 inputs and shadow output for this request. |
| 963 | |
| 964 | Returns a dict suitable for **-splatting into RequestTrace(...). |
| 965 | """ |
| 966 | messages = body.get("messages") or [] |
| 967 | msg_hashes = normalize_messages_to_hashes(messages) |
| 968 | first_user_v2 = "" |
| 969 | for m in messages: |
| 970 | if isinstance(m, dict) and m.get("role") == "user": |
| 971 | first_user_v2 = hash16(normalize_message_text(m)) |
| 972 | break |
| 973 | system_text = "" |
| 974 | sys_field = body.get("system") |
| 975 | if isinstance(sys_field, str): |
| 976 | system_text = sys_field |
| 977 | elif isinstance(sys_field, list): |
| 978 | system_text = " ".join( |
| 979 | (b.get("text") or "") |
| 980 | for b in sys_field |
| 981 | if isinstance(b, dict) and b.get("type") == "text" |
| 982 | ) |
| 983 | else: |
| 984 | for m in messages: |
| 985 | if isinstance(m, dict) and m.get("role") == "system": |
| 986 | system_text = normalize_message_text(m) |
| 987 | break |
| 988 | system_h = hash16(system_text) if system_text else "" |
| 989 | |
| 990 | metadata_uid = "" |
| 991 | md = body.get("metadata") or {} |
| 992 | if isinstance(md, dict): |
| 993 | metadata_uid = str(md.get("user_id", "") or "") |
| 994 | |
| 995 | prev_response = str(body.get("previous_response_id", "") or "") |
| 996 | headers = {k.lower(): v for k, v in request.headers.items()} |
| 997 | user_agent = headers.get("user-agent", "") |
| 998 | |
| 999 | sid_v2 = derive_session_id_v2( |
| 1000 | msg_hashes=msg_hashes, |
| 1001 | first_user_v2=first_user_v2, |
| 1002 | system_hash=system_h, |
| 1003 | metadata_uid=metadata_uid, |
| 1004 | prev_response=prev_response, |
| 1005 | registry=_SESSION_V2_REGISTRY, |
| 1006 | now=time.time(), |
| 1007 | ) |
| 1008 | |
| 1009 | return { |
| 1010 | "messages_count": len(messages), |
| 1011 | "msg_hashes": msg_hashes, |
| 1012 | "first_user_hash_v2": first_user_v2, |
| 1013 | "system_hash": system_h, |
| 1014 | "metadata_user_id": metadata_uid, |
| 1015 | "previous_response_id": prev_response, |
| 1016 | "user_agent": user_agent, |