llmgrep 3.11.1

Smart grep over Magellan code maps with schema-aligned JSON output
Documentation
use llmgrep::error::LlmError;

pub fn run_vector_create(name: &str, dim: usize) -> Result<(), LlmError> {
    use llmgrep::backend::vector::VectorIndex;
    let vi = VectorIndex::create(name, dim)?;
    println!(
        "{{\"status\":\"ok\",\"index\":{:?},\"dim\":{},\"vectors\":{}}}",
        name,
        vi.dimension(),
        vi.len()
    );
    Ok(())
}

pub fn run_vector_search(query: &str, index: &str, limit: usize) -> Result<(), LlmError> {
    use llmgrep::backend::vector::VectorIndex;
    let vector: Result<Vec<f32>, _> = query.split(',').map(|s| s.trim().parse::<f32>()).collect();
    let vector = vector.map_err(|_| LlmError::InvalidQuery {
        query: format!(
            "Failed to parse query vector: expected comma-separated floats, got: {query}"
        ),
    })?;
    let dim = vector.len();
    let vi = VectorIndex::create(index, dim)?;
    let results = vi.search(&vector, limit)?;
    let json_results: Vec<serde_json::Value> = results
        .iter()
        .map(|(id, dist)| serde_json::json!({"id": id, "distance": dist}))
        .collect();
    println!(
        "{}",
        serde_json::to_string_pretty(&serde_json::json!({
            "index": index,
            "query_dim": dim,
            "results": json_results,
        }))
        .unwrap_or_default()
    );
    Ok(())
}