fix: ignore NotReady error for IndexServer (#559)
parent
b3c119d6f3
commit
d27c09d75d
|
|
@ -3127,6 +3127,7 @@ dependencies = [
|
||||||
"tabby-scheduler",
|
"tabby-scheduler",
|
||||||
"tantivy",
|
"tantivy",
|
||||||
"textdistance",
|
"textdistance",
|
||||||
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower",
|
"tower",
|
||||||
"tower-http 0.4.0",
|
"tower-http 0.4.0",
|
||||||
|
|
@ -3400,18 +3401,18 @@ checksum = "d321c8576c2b47e43953e9cce236550d4cd6af0a6ce518fe084340082ca6037b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.45"
|
version = "1.0.49"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dedd246497092a89beedfe2c9f176d44c1b672ea6090edc20544ade01fbb7ea0"
|
checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror-impl",
|
"thiserror-impl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror-impl"
|
name = "thiserror-impl"
|
||||||
version = "1.0.45"
|
version = "1.0.49"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7d7b1fadccbbc7e19ea64708629f9d8dccd007c260d66485f20a6d41bc1cf4b3"
|
checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
||||||
|
|
@ -37,3 +37,4 @@ tokenizers = "0.13.4-rc3"
|
||||||
futures = "0.3.28"
|
futures = "0.3.28"
|
||||||
async-stream = "0.3.5"
|
async-stream = "0.3.5"
|
||||||
regex = "1.10.0"
|
regex = "1.10.0"
|
||||||
|
thiserror = "1.0.49"
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ axum-streams = { version = "0.9.1", features = ["json"] }
|
||||||
minijinja = { version = "1.0.8", features = ["loader"] }
|
minijinja = { version = "1.0.8", features = ["loader"] }
|
||||||
textdistance = "1.0.2"
|
textdistance = "1.0.2"
|
||||||
regex.workspace = true
|
regex.workspace = true
|
||||||
|
thiserror.workspace = true
|
||||||
|
|
||||||
[target.'cfg(all(target_os="macos", target_arch="aarch64"))'.dependencies]
|
[target.'cfg(all(target_os="macos", target_arch="aarch64"))'.dependencies]
|
||||||
llama-cpp-bindings = { path = "../llama-cpp-bindings" }
|
llama-cpp-bindings = { path = "../llama-cpp-bindings" }
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,10 @@ use textdistance::Algorithm;
|
||||||
use tracing::warn;
|
use tracing::warn;
|
||||||
|
|
||||||
use super::{Segments, Snippet};
|
use super::{Segments, Snippet};
|
||||||
use crate::serve::{completions::languages::get_language, search::IndexServer};
|
use crate::serve::{
|
||||||
|
completions::languages::get_language,
|
||||||
|
search::{IndexServer, IndexServerError},
|
||||||
|
};
|
||||||
|
|
||||||
static MAX_SNIPPETS_TO_FETCH: usize = 20;
|
static MAX_SNIPPETS_TO_FETCH: usize = 20;
|
||||||
static MAX_SNIPPET_CHARS_IN_PROMPT: usize = 768;
|
static MAX_SNIPPET_CHARS_IN_PROMPT: usize = 768;
|
||||||
|
|
@ -109,7 +112,11 @@ fn collect_snippets(index_server: &IndexServer, language: &str, text: &str) -> V
|
||||||
|
|
||||||
let serp = match index_server.search(&query_text, MAX_SNIPPETS_TO_FETCH, 0) {
|
let serp = match index_server.search(&query_text, MAX_SNIPPETS_TO_FETCH, 0) {
|
||||||
Ok(serp) => serp,
|
Ok(serp) => serp,
|
||||||
Err(err) => {
|
Err(IndexServerError::NotReady) => {
|
||||||
|
// Ignore.
|
||||||
|
return vec![];
|
||||||
|
}
|
||||||
|
Err(IndexServerError::TantivyError(err)) => {
|
||||||
warn!("Failed to search query: {}", err);
|
warn!("Failed to search query: {}", err);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ use tantivy::{
|
||||||
schema::Field,
|
schema::Field,
|
||||||
DocAddress, Document, Index, IndexReader,
|
DocAddress, Document, Index, IndexReader,
|
||||||
};
|
};
|
||||||
|
use thiserror::Error;
|
||||||
use tokio::{sync::OnceCell, task, time::sleep};
|
use tokio::{sync::OnceCell, task, time::sleep};
|
||||||
use tracing::{debug, instrument, log::info};
|
use tracing::{debug, instrument, log::info};
|
||||||
use utoipa::{IntoParams, ToSchema};
|
use utoipa::{IntoParams, ToSchema};
|
||||||
|
|
@ -198,11 +199,25 @@ impl IndexServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn search(&self, q: &str, limit: usize, offset: usize) -> tantivy::Result<SearchResponse> {
|
pub fn search(
|
||||||
|
&self,
|
||||||
|
q: &str,
|
||||||
|
limit: usize,
|
||||||
|
offset: usize,
|
||||||
|
) -> Result<SearchResponse, IndexServerError> {
|
||||||
if let Some(imp) = self.get_cell() {
|
if let Some(imp) = self.get_cell() {
|
||||||
imp.search(q, limit, offset)
|
Ok(imp.search(q, limit, offset)?)
|
||||||
} else {
|
} else {
|
||||||
Err(tantivy::TantivyError::InternalError("Not Ready".to_owned()))
|
Err(IndexServerError::NotReady)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
pub enum IndexServerError {
|
||||||
|
#[error("index not ready")]
|
||||||
|
NotReady,
|
||||||
|
|
||||||
|
#[error("underlying tantivy error")]
|
||||||
|
TantivyError(#[from] tantivy::TantivyError),
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue