feat: add Google code retrieval across desktop CLI and MCP
Core CI / core (macos-latest) (push) Canceled after 0s
Core CI / core (windows-latest) (push) Canceled after 0s
Core CI / desktop (macos-latest) (push) Canceled after 0s
Core CI / desktop (ubuntu-latest) (push) Canceled after 0s
Core CI / desktop (windows-latest) (push) Canceled after 0s
Core CI / core (ubuntu-latest) (push) Canceled after 2m23s

This commit is contained in:
karl committed 2026-10-12 21:22:11 +02:00
1 parent 8b9b079469
commit 81846b3e98
32 files changed
+1303 -59

No files matched your search

+27 -5
View File
@@ -48,6 +48,13 @@ pub struct WorkerInfo {
pub runtime: String,
#[serde(default)]
pub media_supported: bool,
#[serde(default)]
pub code_query_supported: bool,
}
fn query_operation(info: &WorkerInfo, code: bool) -> Result<&'static str> {
ensure!(!code || info.code_query_supported,"Installed embedding worker does not support code retrieval; repair/rebuild the native runtime");
Ok(if code { "code_query" } else { "query" })
}
/// Persistent isolated native worker. No HTTP or remote model fallback.
@@ -317,15 +324,24 @@ impl GemmaEmbedder {
pub fn embed_query(&mut self, query: &str) -> Result<Vec<f32>> {
self.query_profile = None;
self.embed_query_inner(query, false)
self.embed_query_inner(query, false, false)
}
/// Opt-in diagnostics contain only durations and counts, never query text.
pub fn embed_query_debug(&mut self, query: &str) -> Result<Vec<f32>> {
self.query_profile = Some(BTreeMap::new());
self.embed_query_inner(query, true)
self.embed_query_inner(query, true, false)
}
/// Google code retrieval task; unavailable workers fail explicitly.
pub fn embed_code_query(&mut self, query: &str) -> Result<Vec<f32>> {
self.query_profile = None;
self.embed_query_inner(query, false, true)
}
pub fn embed_code_query_debug(&mut self, query: &str) -> Result<Vec<f32>> {
self.query_profile = Some(BTreeMap::new());
self.embed_query_inner(query, true, true)
}
pub fn query_diagnostics(&self) -> BTreeMap<String, u64> {
self.query_profile.clone().unwrap_or_default()
}
@@ -337,13 +353,13 @@ impl GemmaEmbedder {
}
}
fn embed_query_inner(&mut self, query: &str, debug: bool) -> Result<Vec<f32>> {
fn embed_query_inner(&mut self, query: &str, debug: bool, code: bool) -> Result<Vec<f32>> {
ensure!(
!query.trim().is_empty() && query.len() <= 4096,
"Query must be nonempty and at most 4096 UTF-8 bytes"
);
let response =
self.request(json!({"op":"query","text":query,"debug_performance":debug}))?;
let op = query_operation(&self.info, code)?;
let response = self.request(json!({"op":op,"text":query,"debug_performance":debug}))?;
if debug {
if let Some(profile) = &mut self.query_profile {
for name in [
@@ -655,6 +671,12 @@ mod tests {
let mut handshake = json!({"ready":true,"model":"google/embeddinggemma-2","dimensions":768,"device":"cpu","threads":1,"runtime":"b11461-no-logits-v1"});
let old: WorkerInfo = serde_json::from_value(handshake.clone()).unwrap();
assert!(!old.media_supported);
assert!(!old.code_query_supported);
assert!(query_operation(&old, true).is_err());
assert_eq!(query_operation(&old, false).unwrap(), "query");
let mut new = old.clone();
new.code_query_supported = true;
assert_eq!(query_operation(&new, true).unwrap(), "code_query");
handshake["media_supported"] = json!(true);
assert!(
serde_json::from_value::<WorkerInfo>(handshake)