nutrition-ai

Crates.ionutrition-ai
lib.rsnutrition-ai
version0.1.1
created_at2025-07-16 07:11:25.112062+00
updated_at2025-07-18 11:33:13.166908+00
descriptionRust wrapper to analyze food nutrition using Google Gemini
homepage
repositoryhttps://github.com/virugamacoder/nutrition-ai-crates
max_upload_size
id1755098
size74,883
Krunal Virugama (virugamacoder)

documentation

README

Crates.io Docs

๐Ÿง  nutrition-ai (Rust)

Analyze food images using Google Gemini AI with full nutritional breakdown โ€“ written in pure Rust.

๐Ÿ”„ Node.js developer? Use the official nutrition-ai npm package.


๐Ÿฝ๏ธ Overview

This crate replicates the functionality of nutrition-ai in Rust.

  • ๐Ÿ“ธ Upload food images as base64 (image/png or image/jpeg)
  • ๐Ÿค– Google Gemini AI generates:
    • Calorie + macro breakdown per food item
    • Total calorie estimation
    • Nutritional balance and dietary tips
  • ๐Ÿ›ก๏ธ Input validation and error handling
  • ๐Ÿ” Auto-retries on 503 model overloads

๐Ÿš€ Quick Example

use base64::engine::general_purpose::STANDARD;
use base64::Engine;
use nutrition_ai::{GeminiRequest, MimeType, generate_answer};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let image_bytes = std::fs::read("img.png")?;
    let file_base64 = STANDARD.encode(&image_bytes);

    let req = GeminiRequest {
        file_base64,
        file_mime_type: MimeType::ImagePng,
        google_key: "<YOUR_GOOGLE_KEY>".to_string(),
        model: Some("Gemini2_0Flash".to_string()),
    };

    let result = generate_answer(req).await?;
    println!("{}", result);
    Ok(())
}

๐Ÿ“ฅ API Parameters

Field Type Description
file_base64 String Base64-encoded food image
file_mime_type MimeType enum MimeType::ImagePng or MimeType::ImageJpeg
google_key String Your Google Gemini API key (get it from makersuite)
model Option<String> Optional Gemini model (e.g. "Gemini2_0Flash")

๐Ÿ› ๏ธ Supported Models

  • Gemini1_0Pro
  • Gemini1_5Pro
  • Gemini1_5Flash (default)
  • Gemini1_5Flash8B
  • Gemini2_0Flash

Default fallback model if none is provided: Gemini1_5Flash


๐Ÿงช Error Handling

  • โŒ Empty or invalid base64 input
  • โŒ Unsupported MIME type
  • โŒ Missing Google API key
  • ๐Ÿ” Retries up to 3 times on Gemini API 503 (model overload)
  • โŒ Missing or empty Gemini response content

๐Ÿง‘โ€๐Ÿ’ป Author

@virugamacoder


๐Ÿ“„ License

MIT ยฉ 2025

Commit count: 0

cargo fmt