mirror of
https://github.com/ikawrakow/ik_llama.cpp.git
synced 2026-01-26 17:20:01 +00:00
* Tool calls support from mainline * update cmake * revert api for /completions * Fix broken thinking process for gpt-oss * add missing args and fix webui bugs * add missing args and fix webui bugs2 * Fix reasoning format error * add usage * change default post_sampling_probs to true * add back generated_text * Remove server endpoints tests * add log * Chat fixes * Remove logs * webui: revert extra handling of thinking process --------- Co-authored-by: firecoperana <firecoperana> Co-authored-by: Iwan Kawrakow <iwan.kawrakow@gmail.com>
57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <regex>
|
|
#include <string>
|
|
|
|
enum common_regex_match_type {
|
|
COMMON_REGEX_MATCH_TYPE_NONE,
|
|
COMMON_REGEX_MATCH_TYPE_PARTIAL,
|
|
COMMON_REGEX_MATCH_TYPE_FULL,
|
|
};
|
|
|
|
struct common_string_range {
|
|
size_t begin;
|
|
size_t end;
|
|
common_string_range(size_t begin, size_t end) : begin(begin), end(end) {
|
|
if (begin > end) {
|
|
throw std::runtime_error("Invalid range");
|
|
}
|
|
}
|
|
// prevent default ctor
|
|
common_string_range() = delete;
|
|
bool empty() const {
|
|
return begin == end;
|
|
}
|
|
bool operator==(const common_string_range & other) const {
|
|
return begin == other.begin && end == other.end;
|
|
}
|
|
};
|
|
|
|
struct common_regex_match {
|
|
common_regex_match_type type = COMMON_REGEX_MATCH_TYPE_NONE;
|
|
std::vector<common_string_range> groups;
|
|
|
|
bool operator==(const common_regex_match & other) const {
|
|
return type == other.type && groups == other.groups;
|
|
}
|
|
bool operator!=(const common_regex_match & other) const {
|
|
return !(*this == other);
|
|
}
|
|
};
|
|
|
|
class common_regex {
|
|
std::string pattern;
|
|
std::regex rx;
|
|
std::regex rx_reversed_partial;
|
|
|
|
public:
|
|
explicit common_regex(const std::string & pattern);
|
|
|
|
common_regex_match search(const std::string & input, size_t pos, bool as_match = false) const;
|
|
|
|
const std::string & str() const { return pattern; }
|
|
};
|
|
|
|
// For testing only (pretty print of failures).
|
|
std::string regex_to_reversed_partial_regex(const std::string & pattern);
|