Jack1808/Claude_Code
0
1"""Optimization handlers for fast-path API responses.2 3Each handler returns a MessagesResponse if the request matches and the4optimization is enabled, otherwise None.5"""6 7import uuid8 9from loguru import logger10 11from config.settings import Settings12 13from .command_utils import extract_command_prefix, extract_filepaths_from_command14from .detection import (15 is_filepath_extraction_request,16 is_prefix_detection_request,17 is_quota_check_request,18 is_suggestion_mode_request,19 is_title_generation_request,20)21from .models.anthropic import MessagesRequest22from .models.responses import MessagesResponse, Usage23 24 25def try_prefix_detection(26 request_data: MessagesRequest, settings: Settings27) -> MessagesResponse | None:28 """Fast prefix detection - return command prefix without API call."""29 if not settings.fast_prefix_detection:30 return None31 32 is_prefix_req, command = is_prefix_detection_request(request_data)33 if not is_prefix_req:34 return None35 36 logger.info("Optimization: Fast prefix detection request")37 return MessagesResponse(38 id=f"msg_{uuid.uuid4()}",39 model=request_data.model,40 content=[{"type": "text", "text": extract_command_prefix(command)}],41 stop_reason="end_turn",42 usage=Usage(input_tokens=100, output_tokens=5),43 )44 45 46def try_quota_mock(47 request_data: MessagesRequest, settings: Settings48) -> MessagesResponse | None:49 """Mock quota probe requests."""50 if not settings.enable_network_probe_mock:51 return None52 if not is_quota_check_request(request_data):53 return None54 55 logger.info("Optimization: Intercepted and mocked quota probe")56 return MessagesResponse(57 id=f"msg_{uuid.uuid4()}",58 model=request_data.model,59 role="assistant",60 content=[{"type": "text", "text": "Quota check passed."}],61 stop_reason="end_turn",62 usage=Usage(input_tokens=10, output_tokens=5),63 )64 65 66def try_title_skip(67 request_data: MessagesRequest, settings: Settings68) -> MessagesResponse | None:69 """Skip title generation requests."""70 if not settings.enable_title_generation_skip:71 return None72 if not is_title_generation_request(request_data):73 return None74 75 logger.info("Optimization: Skipped title generation request")76 return MessagesResponse(77 id=f"msg_{uuid.uuid4()}",78 model=request_data.model,79 role="assistant",80 content=[{"type": "text", "text": "Conversation"}],81 stop_reason="end_turn",82 usage=Usage(input_tokens=100, output_tokens=5),83 )84 85 86def try_suggestion_skip(87 request_data: MessagesRequest, settings: Settings88) -> MessagesResponse | None:89 """Skip suggestion mode requests."""90 if not settings.enable_suggestion_mode_skip:91 return None92 if not is_suggestion_mode_request(request_data):93 return None94 95 logger.info("Optimization: Skipped suggestion mode request")96 return MessagesResponse(97 id=f"msg_{uuid.uuid4()}",98 model=request_data.model,99 role="assistant",100 content=[{"type": "text", "text": ""}],101 stop_reason="end_turn",102 usage=Usage(input_tokens=100, output_tokens=1),103 )104 105 106def try_filepath_mock(107 request_data: MessagesRequest, settings: Settings108) -> MessagesResponse | None:109 """Mock filepath extraction requests."""110 if not settings.enable_filepath_extraction_mock:111 return None112 113 is_fp, cmd, output = is_filepath_extraction_request(request_data)114 if not is_fp:115 return None116 117 filepaths = extract_filepaths_from_command(cmd, output)118 logger.info("Optimization: Mocked filepath extraction")119 return MessagesResponse(120 id=f"msg_{uuid.uuid4()}",121 model=request_data.model,122 role="assistant",123 content=[{"type": "text", "text": filepaths}],124 stop_reason="end_turn",125 usage=Usage(input_tokens=100, output_tokens=10),126 )127 128 129# Cheapest/most common optimizations first for faster short-circuit.130OPTIMIZATION_HANDLERS = [131 try_quota_mock,132 try_prefix_detection,133 try_title_skip,134 try_suggestion_skip,135 try_filepath_mock,136]137 138 139def try_optimizations(140 request_data: MessagesRequest, settings: Settings141) -> MessagesResponse | None:142 """Run optimization handlers in order. Returns first match or None."""143 for handler in OPTIMIZATION_HANDLERS:144 result = handler(request_data, settings)145 if result is not None:146 return result147 return None148 