skip to content
==> tests/request.c <==
1/* infer.rs's requests_parse, plus the error texts. */
2#include "mesh/check.h"
3#include "mesh/infer_request.h"
4
5#include <stdlib.h>
6
7int main(void) {
8    mesh_infer_request r;
9    char *err = NULL;
10    CHECK_I(mesh_infer_parse("exact max 16 prefill=0 decode=3 The quick  brown fox", &r, &err), 0);
11    CHECK_S(r.mode, "exact");
12    CHECK_U(r.max, 16);
13    CHECK(r.has_prefill && r.prefill == 0 && r.has_decode && r.decode == 3 && !r.has_mono);
14    CHECK_S(r.prompt, "The quick  brown fox");
15    mesh_infer_request_free(&r);
16    CHECK_I(mesh_infer_parse("Hello there", &r, &err), 0);
17    CHECK_S(r.mode, "fast");
18    CHECK_U(r.max, 32);
19    CHECK_S(r.prompt, "Hello there");
20    mesh_infer_request_free(&r);
21    CHECK_I(mesh_infer_parse("max=5 mono=1 hi", &r, &err), 0);
22    CHECK(r.has_mono && r.mono == 1 && r.max == 5);
23    mesh_infer_request_free(&r);
24    CHECK_I(mesh_infer_parse("prefill=1 hi", &r, &err), -1);
25    CHECK_S(err, "prefill= and decode= go together (" MESH_INFER_USAGE ")");
26    free(err);
27    mesh_infer_request_free(&r);
28    CHECK_I(mesh_infer_parse("mono=1 prefill=0 decode=1 hi", &r, &err), -1);
29    free(err);
30    mesh_infer_request_free(&r);
31    CHECK_I(mesh_infer_parse("exact max 8", &r, &err), -1);
32    CHECK_S(err, "no prompt (" MESH_INFER_USAGE ")");
33    free(err);
34    mesh_infer_request_free(&r);
35    CHECK_I(mesh_infer_parse("max x hi", &r, &err), -1);
36    CHECK_S(err, "max: not a number (" MESH_INFER_USAGE ")");
37    free(err);
38    mesh_infer_request_free(&r);
39    CHECK_I(mesh_infer_parse("max=0 hi", &r, &err), -1);
40    CHECK_S(err, "max 0: 1..=1000");
41    free(err);
42    mesh_infer_request_free(&r);
43    CHECK_I(mesh_infer_parse("repeat=5000 len=7 hi  ", &r, &err), 0);
44    CHECK(r.repeat == 1000 && r.len == 7);
45    CHECK_S(r.prompt, "hi");
46    mesh_infer_request_free(&r);
47
48    bool full;
49    CHECK_I(mesh_infer_from_query("prompt=Hello%2C+world&max=4&mode=exact&prefill=0&decode=1&format=full", &r, &full, &err), 0);
50    CHECK_S(r.prompt, "Hello, world");
51    CHECK(r.max == 4 && r.prefill == 0 && r.decode == 1 && full);
52    CHECK_S(r.mode, "exact");
53    mesh_infer_request_free(&r);
54    CHECK_I(mesh_infer_from_query("max=4", &r, &full, &err), -1);
55    CHECK_S(err, "no prompt= parameter");
56    free(err);
57    CHECK_I(mesh_infer_from_query("prompt=x&evil=1", &r, &full, &err), -1);
58    CHECK_S(err, "unknown parameter \"evil\" (prompt, max, mode, prefill, decode, mono, format)");
59    free(err);
60    char *d = mesh_infer_url_decode("a%zz%41%4");
61    CHECK_S(d, "a%zzA%4");
62    free(d);
63
64    mesh_infer_msg m;
65    mesh_infer_msg_init(&m);
66    mesh_infer_msg_set(&m, "tok_s", "41.2");
67    mesh_infer_msg_set(&m, "gen_tokens", "8");
68    mesh_infer_msg_set_body(&m, "the end");
69    mesh_buf t = MESH_BUF_INIT;
70    mesh_infer_text(&t, &m);
71    CHECK_S(mesh_buf_str(&t), "gen_tokens 8\ntok_s 41.2\ntext the end\n");
72    mesh_buf_free(&t);
73    mesh_infer_msg_free(&m);
74    return mesh_check_done();
75}