Skip to content

Commit 63e5d0a

Browse files
clean up strips and add purpose on auth-failure availability
1 parent 6318591 commit 63e5d0a

3 files changed

Lines changed: 8 additions & 8 deletions

File tree

src/mlpa/core/auth/authorize.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def _resolve_purpose(service_type_value: str, purpose_header: str | None) -> str
2727
"""Validate purpose header and return value; raise HTTPException if invalid."""
2828
valid = env.valid_purposes_for_service_type(service_type_value)
2929
requires = env.service_type_requires_purpose(service_type_value)
30-
purpose = (purpose_header or "").strip()
30+
purpose = purpose_header or ""
3131

3232
if purpose:
3333
if purpose not in valid:
@@ -129,7 +129,7 @@ async def authorize_chat_request(
129129
AvailabilityReason.INVALID_SERVICE_TYPE_FOR_MODEL,
130130
model=chat_request.model,
131131
service_type=service_type.value,
132-
purpose=(purpose or "").strip(),
132+
purpose=purpose or "",
133133
)
134134
raise HTTPException(
135135
status_code=400,
@@ -161,7 +161,6 @@ async def authorize_chat_request(
161161
# - anything else (e.g. App Attest's explicit 500): re-raised unrecorded;
162162
# auth-system-failure capture is left to a follow-on auth backend change
163163
# Non-HTTPException errors are not caught here and propagate unrecorded.
164-
# Purpose is unknown at this point, so "" is always used as a placeholder.
165164
if exc.status_code == 401:
166165
reason = AvailabilityReason.AUTH_REJECTED
167166
elif exc.status_code == 400:
@@ -172,7 +171,7 @@ async def authorize_chat_request(
172171
reason,
173172
model=chat_request.model,
174173
service_type=service_type.value,
175-
purpose="",
174+
purpose=purpose or "",
176175
)
177176
raise
178177

src/mlpa/core/middleware/request_size.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ async def check_request_size_middleware(request: Request, call_next):
2626
record_chat_availability_for(
2727
AvailabilityReason.PAYLOAD_TOO_LARGE,
2828
model="",
29-
service_type=(
30-
request.headers.get("service-type") or ""
31-
).strip(),
32-
purpose=(request.headers.get("purpose") or "").strip(),
29+
service_type=request.headers.get("service-type") or "",
30+
purpose=request.headers.get("purpose") or "",
3331
)
3432
return JSONResponse(
3533
status_code=413,

src/tests/unit/test_precompletion_availability.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ async def test_wrapper_invalid_purpose_records_invalid_auth_request(metrics_spy)
145145
AvailabilityReason.INVALID_AUTH_REQUEST,
146146
model=_VALID_MODEL,
147147
service_type="ai",
148+
purpose="definitely-not-a-valid-purpose",
148149
)
149150
== 1
150151
)
@@ -176,6 +177,7 @@ async def test_wrapper_shared_call_401_records_auth_rejected(mocker, metrics_spy
176177
AvailabilityReason.AUTH_REJECTED,
177178
model=_VALID_MODEL,
178179
service_type="ai",
180+
purpose="chat",
179181
)
180182
== 1
181183
)
@@ -213,6 +215,7 @@ async def test_wrapper_shared_call_400_records_invalid_auth_request(
213215
AvailabilityReason.INVALID_AUTH_REQUEST,
214216
model=_VALID_MODEL,
215217
service_type="ai",
218+
purpose="chat",
216219
)
217220
== 1
218221
)

0 commit comments

Comments
 (0)