MCPcopy Create free account
hub / github.com/antirez/ds4 / run_generation

Function run_generation

ds4_cli.c:873–951  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

871 fprintf(fp, "{\n \"source\":\"ds4\",\n \"prompt_tokens\":%d,\n \"ctx\":%d,\n \"top_k\":%d,\n \"steps\":[\n",
872 prompt->len, cfg->gen.ctx_size, k);
873 int generated = 0;
874 int max_tokens = cfg->gen.n_predict;
875 int room = ds4_session_ctx(session) - ds4_session_pos(session);
876 if (room <= 1) max_tokens = 0;
877 else if (max_tokens > room - 1) max_tokens = room - 1;
878 for (; generated < max_tokens; generated++) {
879 int n = ds4_session_top_logprobs(session, scores, k);
880 int token = ds4_session_argmax(session);
881 if (generated) fputs(",\n", fp);
882 fprintf(fp, " {\"step\":%d,\"selected\":", generated);
883 json_write_token(fp, engine, token);
884 fputs(",\"top_logprobs\":[", fp);
885 for (int i = 0; i < n && scores[i].id >= 0; i++) {
886 if (i) fputc(',', fp);
887 fputs("{\"token\":", fp);
888 json_write_token(fp, engine, scores[i].id);
889 fprintf(fp, ",\"logit\":%.9g,\"logprob\":%.9g}", scores[i].logit, scores[i].logprob);
890 }
891 fputs("]}", fp);
892
893 if (ds4_token_is_stop(engine, token)) break;
894 if (ds4_session_eval(session, token, err, sizeof(err)) != 0) {
895 fprintf(stderr, "ds4: decode failed while dumping logprobs: %s\n", err);
896 free(scores);
897 fclose(fp);
898 ds4_session_free(session);
899 return 1;
900 }
901 }
902 fputs("\n ]\n}\n", fp);
903 if (fclose(fp) != 0) {
904 fprintf(stderr, "ds4: failed to close --dump-logprobs file: %s\n", cfg->gen.dump_logprobs_path);
905 free(scores);
906 ds4_session_free(session);
907 return 1;
908 }
909 free(scores);
910 ds4_session_free(session);
911 return 0;
912}
913
914static void print_diag_token(FILE *fp, ds4_engine *engine, int token) {
915 fputs("{\"token\":", fp);
916 json_write_token(fp, engine, token);
917 fputc('}', fp);
918}
919
920static void print_diag_top(FILE *fp, ds4_engine *engine, const char *label,
921 const ds4_token_score *scores, int n) {
922 fprintf(fp, "%s:", label);
923 for (int i = 0; i < n && scores[i].id >= 0; i++) {
924 fputc(' ', fp);
925 json_write_token(fp, engine, scores[i].id);
926 fprintf(fp, "@%.6g", scores[i].logit);
927 }
928 fputc('\n', fp);
929}
930

Callers 1

mainFunction · 0.85

Calls 15

build_promptFunction · 0.85
ds4_tokens_freeFunction · 0.85
run_logits_dumpFunction · 0.85
run_logprob_dumpFunction · 0.85
ds4_engine_head_testFunction · 0.85
ds4_engine_dump_tokensFunction · 0.85
ds4_backend_nameFunction · 0.85

Tested by

no test coverage detected