| 8 | |
| 9 | |
| 10 | async def analyze_model_requirements( |
| 11 | req_id: str, context: RequestContext, requested_model: str, proxy_model_name: str |
| 12 | ) -> RequestContext: |
| 13 | set_request_id(req_id) |
| 14 | logger = context["logger"] |
| 15 | current_ai_studio_model_id = context["current_ai_studio_model_id"] |
| 16 | parsed_model_list = context["parsed_model_list"] |
| 17 | |
| 18 | if requested_model and requested_model != proxy_model_name: |
| 19 | requested_model_id = requested_model.split("/")[-1] |
| 20 | logger.info(f"[{req_id}] Requesting model: {requested_model_id}") |
| 21 | |
| 22 | if parsed_model_list: |
| 23 | valid_model_ids = [ |
| 24 | str(m.get("id")) for m in parsed_model_list if m.get("id") |
| 25 | ] |
| 26 | if requested_model_id not in valid_model_ids: |
| 27 | from .error_utils import bad_request |
| 28 | |
| 29 | raise bad_request( |
| 30 | req_id, |
| 31 | f"Invalid model '{requested_model_id}'. Available models: {', '.join(valid_model_ids)}", |
| 32 | ) |
| 33 | |
| 34 | context["model_id_to_use"] = requested_model_id |
| 35 | if current_ai_studio_model_id != requested_model_id: |
| 36 | context["needs_model_switching"] = True |
| 37 | logger.info( |
| 38 | f"[{req_id}] Model switch needed: Current={current_ai_studio_model_id} -> Target={requested_model_id}" |
| 39 | ) |
| 40 | |
| 41 | return context |
| 42 | |
| 43 | |
| 44 | async def handle_model_switching( |