Added RouteErrorHandler for server
#481
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've added a
RouteErrorHandlerthat wraps any exception raised by the server into an OpenAI-like error response.For example, n_ctx(2048) with a prompt max_tokens=1 for 2049 tokens over 2048, you might get a json error response with status code 400 like the one below.
{ "error": { "message": "This model's maximum context length is 2048 tokens, however you requested 2050 tokens (2049 in your prompt; 1 for the completion). Please reduce your prompt; or completion length.", "type": "invalid_request_error", "param": "messages", "code": "context_length_exceeded" } }This friendly message should help you determine how many prompt tokens you need to remove and resend.
I also removed the
leoption from themax_tokensfield to account for the removal of the 2048 token limit with the addition of the custom rope feature. It now only raises an error message if prompt tokens exceeds n_ctx.For other exceptions, it is wrapped in an internal_server_error with status code 500. For example,
{ "error": { "message": "[{'type': 'int_parsing', 'loc': ('body', 'max_tokens'), 'msg': 'Input should be a valid integer, unable to parse string as an integer', 'input': 'foo', 'url': 'https://errors.pydantic.dev/2.0.3/v/int_parsing'}]", "type": "internal_server_error", "param": null, "code": null } }However, in the event-stream state, if an exception is thrown inside chunk iterator, JSON might not be parsed correctly.
So, it should first check whether an exception is thrown by yielding the first response. That part can be done as follows: