summaryrefslogtreecommitdiff
path: root/examples/server/server.cpp
diff options
context:
space:
mode:
authorGeorgi Gerganov <ggerganov@gmail.com>2024-06-12 14:42:29 +0300
committerGitHub <noreply@github.com>2024-06-12 14:42:29 +0300
commit704a35b183748954013bd875bbbfdd9eaca14e62 (patch)
tree502a258da362dbd957c0559b60b48077bfacc2e0 /examples/server/server.cpp
parentdcf752707d96eb305f546526c7bc5d01f0831130 (diff)
server : restore numeric prompts (#7883)
Diffstat (limited to 'examples/server/server.cpp')
-rw-r--r--examples/server/server.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/examples/server/server.cpp b/examples/server/server.cpp
index 80714fa5..919078f2 100644
--- a/examples/server/server.cpp
+++ b/examples/server/server.cpp
@@ -147,7 +147,7 @@ struct server_slot {
int32_t n_prompt_tokens = 0;
int32_t n_prompt_tokens_processed = 0;
- std::string prompt;
+ json prompt; // can be either a string, array of strings or array of token ids
// when a task is submitted, we first tokenize the prompt and store it here
std::vector<llama_token> prompt_tokens;
@@ -822,8 +822,13 @@ struct server_context {
continue;
}
+ // skip the slot if it does not contains prompt
+ if (!slot.prompt.is_string()) {
+ continue;
+ }
+
// current slot's prompt
- std::string slot_prompt = slot.prompt;
+ std::string slot_prompt = slot.prompt.get<std::string>();
// length of the current slot's prompt
int slot_prompt_len = slot_prompt.size();
@@ -957,12 +962,12 @@ struct server_context {
return false;
}
- if (prompt->is_string()) {
- slot.prompt = prompt->get<std::string>();
- } else if (prompt->is_array() && prompt->size() == 1 && prompt->at(0).is_string()) {
- slot.prompt = prompt->at(0).get<std::string>();
+ if ((prompt->is_string()) ||
+ (prompt->is_array() && prompt->size() == 1 && prompt->at(0).is_string()) ||
+ (prompt->is_array() && !prompt->empty() && prompt->at(0).is_number_integer())) {
+ slot.prompt = *prompt;
} else {
- send_error(task, "\"prompt\" must be a string or an array of strings", ERROR_TYPE_INVALID_REQUEST);
+ send_error(task, "\"prompt\" must be a string or an array of integers", ERROR_TYPE_INVALID_REQUEST);
return false;
}
}