char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
57ace0d61
char/aliceai-t5-moe
1#pragma once 2 3#include "chat-auto-parser.h" 4 5#include <functional> 6#include <optional> 7#include <string> 8 9std ::string trim_whitespace (const std ::string & str ); 10std ::string trim_leading_whitespace (const std ::string & str ); 11std ::string trim_trailing_whitespace (const std ::string & str ); 12std ::string trim_trailing_newlines (const std ::string & str ); 13 14// calculate a diff split (longest common prefix, longest common suffix excluding prefix, 15// mismatched part on the left, mismatched part on the right) between two strings 16// account for markers - align prefix and suffix endings so that they end on markers 17// * eg.: 18// calculate_diff_split("<html><body><div></div></body></html>", "<html><body><p>Something</p></body><html>") -> 19// { "prefix": "<html><body>" (not: "<html><body><"), "suffix": "</body></html>", "left": "<div></div>", "right": "<p>Something</p>" } 20// calculate_diff_split("<html><body>Something</body></html>", "<html><body></body><html>") -> 21// { "prefix": "<html><body>", "suffix": "</body></html>", "left": "Something", "right": "" } 22diff_split calculate_diff_split (const std ::string & left ,const std ::string & right ); 23 24// Returns the prefix of `full` up until the first occurrence of the common prefix of `left` and `right` 25// Returns empty string if there's no common prefix 26// * eg.: 27// until_common_prefix("really want a FUNCTION call", "FUNCTION alpha", "FUNCTION beta") -> "really want a " 28// until_common_prefix("<tool_call>", "<something>", "<something_else>") -> "" 29// until_common_prefix("some text", "1234", "abcd") -> "" 30// until_common_prefix("one arg two args three args four", "argument alpha", "argument beta") -> "one "" 31std ::string until_common_prefix (const std ::string & full ,const std ::string & left ,const std ::string & right ); 32 33// Returns the suffix of `full` after the last occurrence of the common suffix of `left` and `right` 34// Returns empty string if there's no common suffix 35// Mirror function of `until_common_prefix` 36// * eg.: 37// after_common_suffix("really want a FUNCTION call", "first FUNCTION", "second FUNCTION") -> " call" 38// after_common_suffix("one arg two-args three args four", "alpha-args", "beta-args") -> " three args four" 39std ::string after_common_suffix (const std ::string & full ,const std ::string & left ,const std ::string & right ); 40 41// Segmentize text into markers and non-marker fragments 42// * eg.: 43// segmentize_markers("<html><head><title>The site title</title><body><div>Here's some <b>content</b></div></body></html>" -> 44// [ (MARKER, "<html>"), (MARKER, "<head>"), (MARKER, "<title>"), (TEXT, "The site title"), (MARKER, "</title>"), 45// (MARKER, "<body>"), (MARKER, "<div>"), (TEXT, "Here's some "), (MARKER, "<b>"), (TEXT, "content"), (MARKER, "</b>"), 46// (MARKER, "</div>"), (MARKER, "</body>"), (MARKER, "</html>") 47// ] 48// segmentize_markers("<|tool_call|>[args]{ are here }[/args]<|tool_call_end|>") -> 49// [ (MARKER, "<|tool_call|>"), (MARKER, "[args]"), (TEXT, "{ are here }"), (MARKER, "[/args]"), (MARKER, "<|tool_call_end|>") ] 50std ::vector < segment > segmentize_markers (const std ::string & text ); 51 52// Prune whitespace-only segments from a vector of segments 53// * eg.: 54// segmentize_markers("<tool_call>\n<function=foo>\n<arg=bar>\n \n</arg>\n</function>\n</tool_call>") -> 55// X = [ (MARKER, "<tool_call>"), (TEXT, "\n"), (MARKER, "<function=foo>"), (TEXT, "\n"), (MARKER, "<arg=bar>"), (TEXT, "\n \n"), 56// (MARKER, "</arg>"), (TEXT, "\n"), (MARKER, "</function>"), (TEXT, "\n"), (MARKER, "</tool_call>") ] 57// prune_whitespace_segments(X) -> [ (MARKER, "<tool_call>"), (MARKER, "<function=foo>"), (MARKER, "<arg=bar>"), (MARKER, "</arg>"), 58// (MARKER, "</function>"), (MARKER, "</tool_call>") ] 59std ::vector < segment > prune_whitespace_segments (const std ::vector < segment > & segments ); 60 61namespace autoparser { 62 63// Apply a template with the given parameters, returning the rendered string (empty on failure) 64std ::string apply_template (const common_chat_template & tmpl ,const template_params & params ); 65 66// Factorized differential comparison function 67// Takes base params and a single modifier lambda to create variant B 68// Returns compare_variants_result containing diff and both outputs, or std::nullopt on failure 69std ::optional < compare_variants_result > compare_variants ( 70const common_chat_template & tmpl , 71const template_params & params_A , 72const std ::function < void (template_params & ) > & params_modifier); 73 74} // namespace autoparser