#35543 [Bug]: async_pre_call_hook `str` return is unreachable on /v1/chat/completions (call_type is `acompletion`)
## What happened?
The proxy documents that returning a `str` from `async_pre_call_hook` gives the caller a message instead of calling the model. `litellm/integrations/custom_logger.py` states it in the signature:
```python async def async_pre_call_hook( self, user_api_key_dict: UserAPIKeyAuth, cache: "DualCache", data: dict, call_type: CallTypesLiteral, ) -> Optional[ Union[Exception, str, dict] ]: # raise exception if invalid, return a str for the user to receive - if rejected, # or return a modified dictionary for passing into litellm ```
On `POST /v1/chat/completions` that string reaches the client as an **HTTP 400 error** instead.
### Cause
`litellm/proxy/utils.py::process_pre_call_hook_response`:
```python if isinstance(response, str): if call_type in ["completion", "text_completion"]: raise RejectedRequestError( message=response, model=data.get("model", ""), llm_provider="", request_data=data, ) else: raise HTTPException(status_code=400, detail={"error": response}) ```
`RejectedRequestError` is the good path — `proxy_server.py` catches it and returns a real `ModelResponse` carrying the message as …