GPTRouter
GPTRouter copied to clipboard
Unbound `prompt_params` or `messages` from `model_request` objects for better reusing.
Summary
Currently we need to pass the prompt_params
along with a given request object like we do in claude2_request
.
...
messages = [
{"role": "user", "content": "Write me a short poem"},
]
prompt_params = GenerationParams(messages=messages)
claude2_request = ModelGenerationRequest(
model_name=ModelsEnum.CLAUDE_INSTANT_12,
provider_name=ProvidersEnum.ANTHROPIC.value,
order=1,
prompt_params=prompt_params,
)
...
While we can possibly update the prompt_params
later on by passing a new value by:
claude2_request.prompt_params = new_prompt_params
This makes it a dirty and implicit way of passing messages to the context.
Proposal
Update client.generate
to accept prompt_params
or messages
separately ( assuming that prompt_params are model agnostic ).
Hence the following snippet would look like this:
prompt_params = GenerationParams(messages=messages)
claude2_request = ModelGenerationRequest(
model_name=ModelsEnum.CLAUDE_INSTANT_12,
provider_name=ProvidersEnum.ANTHROPIC.value,
order=1,
)
...
response = client.generate(ordered_generation_requests=[claude2_request], messages=prompt_params)
The benefit of doing this would be:
- Messages are decoupled from Model Request Objects and hence reusing them would be easier, ie one can generate multiple request objects and create a configuration of their request objects and reuse them with the same messages.
claude2_request_prio = ModelGenerationRequest(...)
claude_request_prio = ModelGenerationRequest(...)
openapi_request_non_prio = ModelGenerationRequest(...)
# Generation Request lists that can be reused as per requirement
main_generation_request_list = [
claude2_request_prio,
claude_request_prio,
openapi_request_non_prio
]
...
# Generation request list is passed to `client.generate()` when a message is received
response = client.generate(ordered_generation_requests=main_generation_request_list, messages=prompt_params)