free-claude-code/api/detection.py
Alishahryar1 40951c145a
Some checks are pending
CI / checks (push) Waiting to run
refactor: drop legacy title-generation detection copy
Remove new-conversation-topic heuristic; keep sentence-case and JSON session
title patterns. Update unit and smoke E2E payloads accordingly.
2026-04-25 00:45:22 -07:00

139 lines
4.6 KiB
Python

"""Request detection utilities for API optimizations.
Detects quota checks, title generation, prefix detection, suggestion mode,
and filepath extraction requests to enable fast-path responses.
"""
from core.anthropic import extract_text_from_content
from .models.anthropic import MessagesRequest
def is_quota_check_request(request_data: MessagesRequest) -> bool:
"""Check if this is a quota probe request.
Quota checks are typically simple requests with max_tokens=1
and a single message containing the word "quota".
"""
if (
request_data.max_tokens == 1
and len(request_data.messages) == 1
and request_data.messages[0].role == "user"
):
text = extract_text_from_content(request_data.messages[0].content)
if "quota" in text.lower():
return True
return False
def is_title_generation_request(request_data: MessagesRequest) -> bool:
"""Check if this is a conversation title generation request.
Title generation requests are detected by a system prompt containing
title extraction instructions, no tools, and a single user message.
Matches Claude Code session title prompts (sentence-case title, JSON
\"title\" field, etc.).
"""
if not request_data.system or request_data.tools:
return False
system_text = extract_text_from_content(request_data.system).lower()
if "title" not in system_text:
return False
return "sentence-case title" in system_text or (
"return json" in system_text
and "field" in system_text
and ("coding session" in system_text or "this session" in system_text)
)
def is_prefix_detection_request(request_data: MessagesRequest) -> tuple[bool, str]:
"""Check if this is a fast prefix detection request.
Prefix detection requests contain a policy_spec block and
a Command: section for extracting shell command prefixes.
Returns:
Tuple of (is_prefix_request, command_string)
"""
if len(request_data.messages) != 1 or request_data.messages[0].role != "user":
return False, ""
content = extract_text_from_content(request_data.messages[0].content)
if "<policy_spec>" in content and "Command:" in content:
try:
cmd_start = content.rfind("Command:") + len("Command:")
return True, content[cmd_start:].strip()
except Exception:
pass
return False, ""
def is_suggestion_mode_request(request_data: MessagesRequest) -> bool:
"""Check if this is a suggestion mode request.
Suggestion mode requests contain "[SUGGESTION MODE:" in the user's message,
used for auto-suggesting what the user might type next.
"""
for msg in request_data.messages:
if msg.role == "user":
text = extract_text_from_content(msg.content)
if "[SUGGESTION MODE:" in text:
return True
return False
def is_filepath_extraction_request(
request_data: MessagesRequest,
) -> tuple[bool, str, str]:
"""Check if this is a filepath extraction request.
Filepath extraction requests have a single user message with
"Command:" and "Output:" sections, asking to extract file paths
from command output.
Returns:
Tuple of (is_filepath_request, command, output)
"""
if len(request_data.messages) != 1 or request_data.messages[0].role != "user":
return False, "", ""
if request_data.tools:
return False, "", ""
content = extract_text_from_content(request_data.messages[0].content)
if "Command:" not in content or "Output:" not in content:
return False, "", ""
# Match if user content OR system block indicates filepath extraction
user_has_filepaths = (
"filepaths" in content.lower() or "<filepaths>" in content.lower()
)
system_text = (
extract_text_from_content(request_data.system) if request_data.system else ""
)
system_has_extract = (
"extract any file paths" in system_text.lower()
or "file paths that this command" in system_text.lower()
)
if not user_has_filepaths and not system_has_extract:
return False, "", ""
try:
cmd_start = content.find("Command:") + len("Command:")
output_marker = content.find("Output:", cmd_start)
if output_marker == -1:
return False, "", ""
command = content[cmd_start:output_marker].strip()
output = content[output_marker + len("Output:") :].strip()
for marker in ["<", "\n\n"]:
if marker in output:
output = output.split(marker)[0].strip()
return True, command, output
except Exception:
return False, "", ""