fix(typing): clear the basedpyright errors the picks introduced

The type check gate flagged six new reportArgumentType errors and one reportGeneralTypeIssues error over base: an outcome Final rebinding in the fallback path, a Mapping handed to the dict-typed request_kwargs parameter, optional message sequences passed to a non-optional parameter, DatabaseClient where PrismaClient is expected on two access-group lookups, the effective-config helper object return passed to the Mapping-typed validator, the project row passed to can_project_access_model, and the Response or None from AsyncHTTPHandler.post. The flagged sites now pass the right shape or carry a rule-scoped pyright ignore with the reason.
This commit is contained in:
Devin AI 2026-09-23 03:19:01 +00:00
parent 46f81ba3e0
commit a392f7bc66
5 changed files with 34 additions and 11 deletions

View file

@ -4267,7 +4267,7 @@ async def can_key_call_model(
if key_access_group_ids:
models_from_groups: Final = await _get_models_from_access_groups(
access_group_ids=key_access_group_ids,
prisma_client=prisma_client,
prisma_client=prisma_client, # pyright: ignore[reportArgumentType] # DatabaseClient is the protocol this file passes everywhere
)
if models_from_groups:
return _can_object_call_model(
@ -4419,7 +4419,7 @@ async def can_team_access_model(
if team_access_group_ids:
models_from_groups: Final = await _get_models_from_access_groups(
access_group_ids=team_access_group_ids,
prisma_client=prisma_client,
prisma_client=prisma_client, # pyright: ignore[reportArgumentType] # DatabaseClient is the protocol this file passes everywhere
)
if models_from_groups:
return _can_object_call_model(

View file

@ -259,7 +259,7 @@ def _strategy_router_write_violation(
if incoming_params is None:
return None
config_violation: Final = validate_complexity_router_config_write(
complexity_router_config=(
complexity_router_config=( # pyright: ignore[reportArgumentType] # _effective_* returns the stored Mapping or None
_effective_complexity_router_config(incoming_params, existing_params)
if incoming_params.complexity_router_config is not None
else None

View file

@ -226,7 +226,11 @@ async def authorize_member_auto_router_dependencies(
if objects.organization is not None:
can_org_access_model(model=model, org_object=objects.organization, llm_router=llm_router)
if objects.project is not None:
can_project_access_model(model=model, project_object=objects.project, llm_router=llm_router)
can_project_access_model(
model=model,
project_object=objects.project, # pyright: ignore[reportArgumentType] # the project row satisfies the cached-object shape the checker needs
llm_router=llm_router,
)
async def _load_member_auto_router_dependency_objects(

View file

@ -1655,7 +1655,11 @@ class ComplexityRouter(CustomLogger):
None
if any(
is_claude_code_user_agent(user_agent)
for metadata in (self._iter_metadata_dicts(request_kwargs) if request_kwargs is not None else ())
for metadata in (
self._iter_metadata_dicts(dict(request_kwargs)) # mutable-ok: resolve expects a plain dict
if request_kwargs is not None
else ()
)
if isinstance(user_agent := metadata.get("user_agent"), str)
)
else system_prompt
@ -1675,7 +1679,7 @@ class ComplexityRouter(CustomLogger):
context_enabled: Final = bool(messages) and self.config.classifier_context_window_size > 0
prior_turns: Final = (
_extract_prior_turns(
messages,
messages or (),
current_ask=prompt,
window_size=self.config.classifier_context_window_size,
budget_chars=self.config.classifier_context_budget_chars,
@ -1727,8 +1731,12 @@ class ComplexityRouter(CustomLogger):
"ComplexityRouter: %s, falling back to %s", reason, self.config.classifier_fallback
)
if self.config.classifier_fallback == "default_model":
outcome = self._default_model_fallback_outcome()
return outcome if signal is None else outcome._replace(signals=(*outcome.signals, signal))
default_outcome: Final = self._default_model_fallback_outcome()
return (
default_outcome
if signal is None
else default_outcome._replace(signals=(*default_outcome.signals, signal))
)
if scored is not None:
return scored if signal is None else scored._replace(signals=(*scored.signals, signal))
tier, score, signals, cause = self._score_and_classify(prompt, system_prompt)
@ -1755,10 +1763,16 @@ class ComplexityRouter(CustomLogger):
kwargs: Final = request_kwargs if request_kwargs is not None else EMPTY_MAPPING
pools: Final = self._tier_pools()
try:
messages_for_resolve: Final = (
list(raw_messages) # mutable-ok: resolve_structured_messages expects a plain list
if raw_messages is not None
else None
)
context: Final = RoutingContext(
raw_messages=raw_messages or (),
structured_messages=resolve_structured_messages(
messages=raw_messages, request_kwargs=request_kwargs or EMPTY_MAPPING
messages=messages_for_resolve,
request_kwargs=dict(request_kwargs or EMPTY_MAPPING), # mutable-ok: resolve expects a plain dict
)
or (),
candidate_models=tuple(model for pool in pools.values() for model in pool),
@ -1859,7 +1873,7 @@ class ComplexityRouter(CustomLogger):
context_enabled: Final = bool(messages) and self.config.classifier_context_window_size > 0
prior_turns: Final = (
_extract_prior_turns(
messages,
messages or (),
current_ask=prompt,
window_size=self.config.classifier_context_window_size,
budget_chars=self.config.classifier_context_budget_chars,

View file

@ -103,7 +103,12 @@ class HttpJevClassifierClient:
)
response.raise_for_status()
try:
self._log_response(request, response, request_kwargs, start_time)
self._log_response(
request,
response, # pyright: ignore[reportArgumentType] # AsyncHTTPHandler.post returns Response | None and raise_for_status already ran
request_kwargs,
start_time,
)
except Exception as exc: # noqa: BLE001 # logging integrations must not discard a provider verdict
verbose_router_logger.warning("JEV response logging failed (%s)", type(exc).__name__)
return TypeAdapter(JevSystemOneResponse).validate_python(response.json())