Files

242 lines
5.5 KiB
TOML

[package]
name = "ruvector-scipix"
version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
description = "Rust OCR engine for scientific documents - extract LaTeX, MathML from math equations, research papers, and technical diagrams with ONNX GPU acceleration"
readme = "README.md"
keywords = ["ocr", "latex", "mathml", "scientific-computing", "image-recognition"]
categories = ["science", "text-processing", "multimedia::images", "command-line-utilities"]
documentation = "https://docs.rs/ruvector-scipix"
homepage = "https://github.com/ruvnet/ruvector/tree/main/examples/scipix"
rust-version = "1.77"
exclude = [
"assets/fonts/*.ttf",
"models/*",
"tests/fixtures/*",
".github/*",
"benches/*",
]
[dependencies]
# Workspace dependencies
anyhow.workspace = true
thiserror.workspace = true
serde.workspace = true
serde_json.workspace = true
tokio = { workspace = true, features = ["signal"] }
tracing.workspace = true
tracing-subscriber.workspace = true
# CLI dependencies
clap = { workspace = true, features = ["derive", "cargo", "env", "unicode", "wrap_help"] }
clap_complete = "4.5"
indicatif.workspace = true
console.workspace = true
# Additional CLI dependencies
comfy-table = "7.1"
colored = "2.1"
dialoguer = "0.11"
glob = "0.3"
rand.workspace = true
# Config and file handling
toml = "0.8"
dirs = "5.0"
# HTTP server
axum = { version = "0.7", features = ["multipart", "macros"] }
tower = { version = "0.4", features = ["full"] }
tower-http = { version = "0.5", features = ["fs", "trace", "cors", "compression-gzip", "limit"] }
hyper = { version = "1.0", features = ["full"] }
# Validation
validator = { version = "0.18", features = ["derive"] }
# Rate limiting
governor = "0.6"
nonzero_ext = "0.3"
# Caching
moka = { version = "0.12", features = ["future"] }
# HTTP client
reqwest = { version = "0.12", features = ["multipart", "stream", "json"] }
# Time and UUID (already in workspace)
chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1.11", features = ["v4", "serde"] }
# Configuration
dotenvy = "0.15"
# Async utilities
futures = "0.3"
async-trait = "0.1"
# Security
sha2 = "0.10"
base64 = "0.22"
hmac = "0.12"
# SSE support
axum-streams = { version = "0.15", features = ["json"] }
# Image processing (for future OCR integration)
image = "0.25"
imageproc = { version = "0.25", optional = true }
rayon = { version = "1.10", optional = true }
nalgebra = { version = "0.33", optional = true }
ndarray = { version = "0.16", optional = true }
# ML inference with ONNX Runtime
ort = { version = "2.0.0-rc.10", optional = true, features = ["load-dynamic"] }
# Concurrent data structures
parking_lot = "0.12"
dashmap = "6.1"
# Math parsing and processing
nom = "7.1"
once_cell = "1.19"
# Font rendering for benchmarks
rusttype = "0.9"
# System info
num_cpus = "1.16"
# Performance optimizations
memmap2 = { version = "0.9", optional = true }
# WebAssembly dependencies (optional)
wasm-bindgen = { version = "0.2", optional = true }
wasm-bindgen-futures = { version = "0.4", optional = true }
js-sys = { version = "0.3", optional = true }
web-sys = { version = "0.3", features = ["console", "Window", "Document", "CanvasRenderingContext2d", "HtmlCanvasElement", "ImageData"], optional = true }
[dev-dependencies]
axum-test = "15.0"
mockall = "0.13"
proptest = "1.5"
tempfile = "3.8"
approx = "0.5"
criterion = { version = "0.5", features = ["html_reports"] }
rusttype = "0.9"
env_logger = "0.11"
predicates = "3.1"
assert_cmd = "2.0"
ab_glyph = "0.2"
tokio = { workspace = true, features = ["process"] }
reqwest = { version = "0.12", features = ["blocking"] }
[features]
default = ["preprocess", "cache", "optimize"]
preprocess = ["imageproc", "rayon", "nalgebra", "ndarray"]
cache = []
ocr = ["ort", "preprocess"]
math = []
optimize = ["memmap2", "rayon"]
wasm = ["wasm-bindgen", "wasm-bindgen-futures", "js-sys", "web-sys"]
[[bin]]
name = "scipix-cli"
path = "src/bin/cli.rs"
[[bin]]
name = "scipix-server"
path = "src/bin/server.rs"
[[bin]]
name = "scipix-benchmark"
path = "src/bin/benchmark.rs"
[lib]
name = "ruvector_scipix"
path = "src/lib.rs"
crate-type = ["cdylib", "rlib"]
# Examples
[[example]]
name = "simple_ocr"
path = "examples/simple_ocr.rs"
[[example]]
name = "batch_processing"
path = "examples/batch_processing.rs"
required-features = ["ocr"]
[[example]]
name = "api_server"
path = "examples/api_server.rs"
[[example]]
name = "streaming"
path = "examples/streaming.rs"
required-features = ["ocr"]
[[example]]
name = "custom_pipeline"
path = "examples/custom_pipeline.rs"
[[example]]
name = "lean_agentic"
path = "examples/lean_agentic.rs"
[[example]]
name = "accuracy_test"
path = "examples/accuracy_test.rs"
# Benchmark configurations
[[bench]]
name = "ocr_latency"
harness = false
[[bench]]
name = "preprocessing"
harness = false
[[bench]]
name = "latex_generation"
harness = false
[[bench]]
name = "inference"
harness = false
[[bench]]
name = "cache"
harness = false
[[bench]]
name = "api"
harness = false
[[bench]]
name = "memory"
harness = false
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4"
js-sys = "0.3"
web-sys = { version = "0.3", features = [
"Window",
"Document",
"HtmlCanvasElement",
"CanvasRenderingContext2d",
"ImageData",
"Blob",
"Url",
"MessageEvent",
"Worker",
"DedicatedWorkerGlobalScope",
"console"
] }
getrandom = { version = "0.3", features = ["wasm_js"] }
console_error_panic_hook = "0.1"
serde-wasm-bindgen = "0.6"
tracing-wasm = "0.2"