Simplify parser

This commit is contained in:
Mubelotix
2025-08-01 11:00:58 +02:00
parent d6da6c27d8
commit 1bb95d2bef

View File

@ -371,32 +371,34 @@ fn parse_template_id<'a>(
id: &'a str, id: &'a str,
) -> Result<(serde_json::Value, bool), RenderError<'a>> { ) -> Result<(serde_json::Value, bool), RenderError<'a>> {
let mut input: Span = id.into(); let mut input: Span = id.into();
let mut next_part = |first: bool| -> Result<Option<Token<'_>>, RenderError<'a>> { let mut next_part = || -> Result<Option<Token<'_>>, RenderError<'a>> {
if input.is_empty() { if input.is_empty() {
return Ok(None); return Ok(None);
} }
if !first { let (mut remaining, value) = milli::filter_parser::parse_dotted_value_part(input)
if !input.starts_with('.') {
return Err(ExpectedDotAfterValue(input));
}
input = milli::filter_parser::Slice::slice(&input, 1..);
}
let (remaining, value) = milli::filter_parser::parse_dotted_value_part(input)
.map_err(|_| ExpectedValue(input))?; .map_err(|_| ExpectedValue(input))?;
if !remaining.is_empty() {
if !remaining.starts_with('.') {
return Err(ExpectedDotAfterValue(remaining));
}
remaining = milli::filter_parser::Slice::slice(&remaining, 1..);
}
input = remaining; input = remaining;
Ok(Some(value)) Ok(Some(value))
}; };
let root = next_part(true)?.ok_or(EmptyTemplateId)?; let root = next_part()?.ok_or(EmptyTemplateId)?;
let template = match root.value() { let template = match root.value() {
"embedders" => { "embedders" => {
let index_embedding_configs = index.embedding_configs(); let index_embedding_configs = index.embedding_configs();
let embedding_configs = index_embedding_configs.embedding_configs(rtxn)?; let embedding_configs = index_embedding_configs.embedding_configs(rtxn)?;
let get_embedders = || embedding_configs.iter().map(|c| c.name.clone()).collect(); let get_embedders = || embedding_configs.iter().map(|c| c.name.clone()).collect();
let embedder = next_part(false)? let embedder =
.ok_or_else(|| MissingEmbedderName { available: get_embedders() })?; next_part()?.ok_or_else(|| MissingEmbedderName { available: get_embedders() })?;
let embedding_config = embedding_configs let embedding_config = embedding_configs
.iter() .iter()
@ -409,7 +411,7 @@ fn parse_template_id<'a>(
let get_indexing = || embedding_config.config.embedder_options.indexing_fragments(); let get_indexing = || embedding_config.config.embedder_options.indexing_fragments();
let get_search = || embedding_config.config.embedder_options.search_fragments(); let get_search = || embedding_config.config.embedder_options.search_fragments();
let template_kind = next_part(false)?.ok_or_else(|| MissingTemplateAfterEmbedder { let template_kind = next_part()?.ok_or_else(|| MissingTemplateAfterEmbedder {
embedder: embedder.clone(), embedder: embedder.clone(),
indexing: get_indexing(), indexing: get_indexing(),
search: get_search(), search: get_search(),
@ -424,7 +426,7 @@ fn parse_template_id<'a>(
), ),
"indexingFragments" => ( "indexingFragments" => (
parse_template_id_fragment( parse_template_id_fragment(
next_part(false)?, next_part()?,
FragmentKind::Indexing, FragmentKind::Indexing,
embedding_config, embedding_config,
embedder, embedder,
@ -433,7 +435,7 @@ fn parse_template_id<'a>(
), ),
"searchFragments" => ( "searchFragments" => (
parse_template_id_fragment( parse_template_id_fragment(
next_part(false)?, next_part()?,
FragmentKind::Search, FragmentKind::Search,
embedding_config, embedding_config,
embedder, embedder,
@ -451,7 +453,7 @@ fn parse_template_id<'a>(
} }
} }
"chatCompletions" => { "chatCompletions" => {
let template_name = next_part(false)?.ok_or(MissingChatCompletionTemplate)?; let template_name = next_part()?.ok_or(MissingChatCompletionTemplate)?;
if template_name.value() != "documentTemplate" { if template_name.value() != "documentTemplate" {
return Err(UnknownChatCompletionTemplate(template_name)); return Err(UnknownChatCompletionTemplate(template_name));
@ -467,7 +469,7 @@ fn parse_template_id<'a>(
} }
}; };
if let Some(next) = next_part(false)? { if let Some(next) = next_part()? {
return Err(LeftOverToken(next)); return Err(LeftOverToken(next));
} }