(messages: list[Any], prompt: str)
| 1104 | |
| 1105 | |
| 1106 | def _contextual_followup_floor(messages: list[Any], prompt: str) -> Tier | None: |
| 1107 | user_indexes = [ |
| 1108 | index |
| 1109 | for index, message in enumerate(messages) |
| 1110 | if isinstance(message, dict) and message.get("role") == "user" |
| 1111 | ] |
| 1112 | if len(user_indexes) < 2: |
| 1113 | return None |
| 1114 | |
| 1115 | latest_index = user_indexes[-1] |
| 1116 | latest = prompt or _extract_user_prompt_text(messages[latest_index].get("content", "")) |
| 1117 | prior_parts: list[str] = [] |
| 1118 | for message in messages[:latest_index]: |
| 1119 | if not isinstance(message, dict) or message.get("role") == "system": |
| 1120 | continue |
| 1121 | if message.get("role") == "user": |
| 1122 | text = _extract_user_prompt_text(message.get("content", "")) |
| 1123 | else: |
| 1124 | text = _content_text(message.get("content", "")) |
| 1125 | if text.strip(): |
| 1126 | prior_parts.append(text) |
| 1127 | prior_context = "\n".join(prior_parts) |
| 1128 | return contextual_followup_floor_from_text( |
| 1129 | prior_text=prior_context, |
| 1130 | latest_text=latest, |
| 1131 | ) |
| 1132 | |
| 1133 | |
| 1134 | def _vision_analysis_floor(has_vision: bool, prompt: str) -> Tier | None: |
no test coverage detected