fix: Recognize 301/401/403 as reachable in embedding health check
Remote APIs like Cloudflare Workers AI return 401 on /health and 301 on HEAD requests. These indicate the server IS reachable, not down. Previously only 404/405 were treated as reachable, causing all KB indexing to fail with 'Embedding server not available'.
This commit is contained in:
parent
a923ab2db1
commit
248165c3cb
1 changed files with 25 additions and 19 deletions
|
|
@ -311,12 +311,12 @@ impl KbEmbeddingGenerator {
|
||||||
Duration::from_secs(self.config.connect_timeout_seconds),
|
Duration::from_secs(self.config.connect_timeout_seconds),
|
||||||
self.client.get(&health_url).send()
|
self.client.get(&health_url).send()
|
||||||
).await {
|
).await {
|
||||||
Ok(Ok(response)) => {
|
Ok(Ok(response)) => {
|
||||||
let status = response.status();
|
let status = response.status();
|
||||||
if status.is_success() {
|
if status.is_success() {
|
||||||
info!("Embedding server health check passed ({})", self.config.embedding_url);
|
info!("Embedding server health check passed ({})", self.config.embedding_url);
|
||||||
set_embedding_server_ready(true);
|
set_embedding_server_ready(true);
|
||||||
true
|
true
|
||||||
} else if status.as_u16() == 404 || status.as_u16() == 405 {
|
} else if status.as_u16() == 404 || status.as_u16() == 405 {
|
||||||
// Server is reachable but has no /health endpoint (remote API, llama.cpp /embedding-only)
|
// Server is reachable but has no /health endpoint (remote API, llama.cpp /embedding-only)
|
||||||
// Try a HEAD request to the base URL to confirm it's up
|
// Try a HEAD request to the base URL to confirm it's up
|
||||||
|
|
@ -327,25 +327,31 @@ impl KbEmbeddingGenerator {
|
||||||
).await {
|
).await {
|
||||||
Ok(Ok(_)) => {
|
Ok(Ok(_)) => {
|
||||||
info!("Embedding server reachable at {}, marking as ready", base_url);
|
info!("Embedding server reachable at {}, marking as ready", base_url);
|
||||||
set_embedding_server_ready(true);
|
set_embedding_server_ready(true);
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
Ok(Err(e)) => {
|
Ok(Err(e)) => {
|
||||||
warn!("Embedding server unreachable at {}: {}", base_url, e);
|
warn!("Embedding server unreachable at {}: {}", base_url, e);
|
||||||
set_embedding_server_ready(false);
|
set_embedding_server_ready(false);
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
warn!("Embedding server probe timed out for {}", base_url);
|
warn!("Embedding server probe timed out for {}", base_url);
|
||||||
set_embedding_server_ready(false);
|
set_embedding_server_ready(false);
|
||||||
false
|
false
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
warn!("Embedding server health check returned status {}", status);
|
|
||||||
set_embedding_server_ready(false);
|
|
||||||
false
|
|
||||||
}
|
}
|
||||||
|
} else if status.is_redirection() || status.as_u16() == 401 || status.as_u16() == 403 {
|
||||||
|
// Redirect (301/302) or auth-required (401/403) means the server IS reachable
|
||||||
|
// This is typical for remote APIs like Cloudflare Workers AI
|
||||||
|
info!("Embedding server reachable at {} (status {} indicates external API), marking as ready", base_url, status);
|
||||||
|
set_embedding_server_ready(true);
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
warn!("Embedding server health check returned status {}", status);
|
||||||
|
set_embedding_server_ready(false);
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(Err(e)) => {
|
Ok(Err(e)) => {
|
||||||
// Connection failed entirely — server not running or network issue
|
// Connection failed entirely — server not running or network issue
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue