memista 0.1.1

High-performance vector search service with SQLite metadata storage and USearch vector indexing
Documentation
1
//! HTTP client example for Memista\n//!\n//! This example demonstrates how to interact with a running Memista server\n//! using Rust's HTTP client. It shows how to:\n//! - Insert chunks via the HTTP API\n//! - Search for similar chunks\n//! - Drop databases\n\nuse reqwest;\nuse serde_json::{json, Value};\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n    println!(\"Demonstrating HTTP client usage with Memista...\");\n    \n    // Create a reqwest client\n    let client = reqwest::Client::new();\n    \n    // Memista server URL\n    let base_url = \"http://127.0.0.1:8083\";\n    \n    // Database ID for our example\n    let database_id = \"http_client_example_db\";\n    \n    // Check if the server is running\n    println!(\"Checking if Memista server is running...\");\n    let health_check = client.get(&format!(\"{}/openapi.json\", base_url)).send().await;\n    \n    match health_check {\n        Ok(response) if response.status().is_success() => {\n            println!(\"✓ Memista server is running\");\n        }\n        _ => {\n            println!(\"✗ Memista server is not running at {}\", base_url);\n            println!(\"Please start the server with: cargo run\");\n            return Ok(());\n        }\n    }\n    \n    // Clean up any existing database\n    println!(\"\\nCleaning up existing database...\");\n    let drop_payload = json!({\n        \"database_id\": database_id\n    });\n    \n    let drop_response = client\n        .delete(&format!(\"{}/v1/drop\", base_url))\n        .header(\"Content-Type\", \"application/json\")\n        .json(&drop_payload)\n        .send()\n        .await?;\n    \n    if drop_response.status().is_success() {\n        println!(\"✓ Database cleanup completed\");\n    } else {\n        println!(\"⚠ Database cleanup failed (might not have existed): {}\", drop_response.status());\n    }\n    \n    // Insert some chunks\n    println!(\"\\nInserting chunks...\");\n    let chunks = vec![\n        json!({\n            \"embedding\": [0.1, 0.2],\n            \"text\": \"This is the first example chunk\",\n            \"metadata\": \"{\\\"source\\\": \\\"http_example1\\\"}\"\n        }),\n        json!({\n            \"embedding\": [0.3, 0.4],\n            \"text\": \"This is the second example chunk\",\n            \"metadata\": \"{\\\"source\\\": \\\"http_example2\\\"}\"\n        }),\n        json!({\n            \"embedding\": [0.5, 0.6],\n            \"text\": \"This is the third example chunk\",\n            \"metadata\": \"{\\\"source\\\": \\\"http_example3\\\"}\"\n        })\n    ];\n    \n    let insert_payload = json!({\n        \"database_id\": database_id,\n        \"chunks\": chunks\n    });\n    \n    let insert_response = client\n        .post(&format!(\"{}/v1/insert\", base_url))\n        .header(\"Content-Type\", \"application/json\")\n        .json(&insert_payload)\n        .send()\n        .await?;\n    \n    match insert_response.status() {\n        reqwest::StatusCode::OK => {\n            let response_body: Value = insert_response.json().await?;\n            println!(\"✓ Successfully inserted chunks: {:?}\", response_body);\n        }\n        status => {\n            println!(\"✗ Failed to insert chunks: {}\", status);\n            return Ok(());\n        }\n    }\n    \n    // Search for similar chunks\n    println!(\"\\nSearching for similar chunks...\");\n    let search_payload = json!({\n        \"database_id\": database_id,\n        \"embeddings\": [[0.1, 0.2]],\n        \"num_results\": 5\n    });\n    \n    let search_response = client\n        .post(&format!(\"{}/v1/search\", base_url))\n        .header(\"Content-Type\", \"application/json\")\n        .json(&search_payload)\n        .send()\n        .await?;\n    \n    match search_response.status() {\n        reqwest::StatusCode::OK => {\n            let response_body: Value = search_response.json().await?;\n            println!(\"✓ Search completed successfully\");\n            println!(\"Results: {:#}\", response_body);\n        }\n        status => {\n            println!(\"✗ Failed to search chunks: {}\", status);\n            return Ok(());\n        }\n    }\n    \n    // Drop the database\n    println!(\"\\nDropping database...\");\n    let drop_payload = json!({\n        \"database_id\": database_id\n    });\n    \n    let drop_response = client\n        .delete(&format!(\"{}/v1/drop\", base_url))\n        .header(\"Content-Type\", \"application/json\")\n        .json(&drop_payload)\n        .send()\n        .await?;\n    \n    match drop_response.status() {\n        reqwest::StatusCode::OK => {\n            let response_body: Value = drop_response.json().await?;\n            println!(\"✓ Database dropped successfully: {:?}\", response_body);\n        }\n        status => {\n            println!(\"✗ Failed to drop database: {}\", status);\n        }\n    }\n    \n    println!(\"\\nHTTP client example completed successfully!\");\n    Ok(())\n}