[package]
name = "narashi"
version = "0.5.0"
edition = "2024"
rust-version = "1.85"
license = "MIT OR Apache-2.0"
description = "多言語埋め込みで類似テキストを検出し、より汎用的な表記に統合して表記ゆれを解消するライブラリ・CLI"
repository = "https://github.com/Mokuichi147/narashi"
readme = "README.md"
keywords = ["nlp", "embeddings", "similarity", "deduplication", "fuzzy-matching"]
categories = ["text-processing", "command-line-utilities"]

[[bin]]
name = "narashi"
path = "src/main.rs"
required-features = ["cli"]

[[example]]
name = "benchmark"
required-features = ["onnx"]

[[example]]
name = "fine_sweep"
required-features = ["onnx"]

# Candle バックエンド専用の評価 example(ORT 不要)。ONNX Runtime バイナリを
# 取得できない環境で qwen3 / e5-instruct 等の Candle モデルだけを計測する。
[[example]]
name = "candle_eval"
required-features = ["candle"]

[features]
default = ["onnx", "candle", "cli"]
# ONNX Runtime バックエンド(fastembed)。組み込みカタログと Xenova/ONNX 変換モデルを扱う。
onnx = ["dep:fastembed"]
# Candle バックエンド(ピュア Rust)。HF の safetensors を直接読み込み、ONNX 変換が
# 存在しない XLM-RoBERTa 系モデルも利用できる。ネイティブ ONNX Runtime バイナリを
# 取得できない環境(オフライン・制限ネットワーク等)でも `--no-default-features --features candle` でビルド可能。
candle = ["dep:candle-core", "dep:candle-nn", "dep:candle-transformers", "dep:serde_json"]
# CLI バイナリ(`narashi` コマンド)。ライブラリとして使うだけなら無効にして `clap` 依存を外せる。
cli = ["dep:clap"]
# Apple GPU(Metal)で Candle を実行する。Apple Silicon で利用可能。GPU では f16 matmul も
# 使えるため、CPU で f16 が遅い Qwen3 4B/8B で特に効く可能性がある。MLX は candle にバック
# エンドが無いため非対応(Apple GPU は Metal 経由)。macOS 専用・opt-in。
metal = ["candle", "candle-core/metal", "candle-nn/metal", "candle-transformers/metal"]
# NVIDIA GPU(CUDA)で Candle を実行する。CUDA Toolkit が必要で NVIDIA GPU 搭載機(Linux/
# Windows)向け。macOS では使えない。opt-in。
cuda = ["candle", "candle-core/cuda", "candle-nn/cuda", "candle-transformers/cuda"]
# NVIDIA GPU(CUDA)で ONNX Runtime(fastembed)を実行する。bge-m3 等の ONNX 系モデルを
# GPU で動かす。fastembed が使う ort の CUDA 実行プロバイダを有効化し、CUDA 対応の ONNX
# Runtime バイナリ(`ort/download-binaries` 経由で取得)を使う。CUDA Toolkit / cuDNN が必要で
# NVIDIA GPU 搭載機(Linux/Windows)向け。実行時に GPU / CUDA ランタイムが見つからない場合は
# 自動で CPU にフォールバックする。Candle 側の `cuda` とは独立した opt-in。
onnx-cuda = ["onnx", "dep:ort", "ort/cuda"]

[dependencies]
fastembed = { version = "4", optional = true }
# ONNX Runtime の CUDA 実行プロバイダを指定するため、fastembed が内部で使う ort へ
# 直接アクセスする(`onnx-cuda` のときのみ取り込まれる)。バージョンは fastembed が依存する
# ort と一致させ、同一クレートとして解決させる(EP 型の不一致を避ける)。
ort = { version = "=2.0.0-rc.9", optional = true }
candle-core = { version = "0.9.2", optional = true }
candle-nn = { version = "0.9.2", optional = true }
candle-transformers = { version = "0.9.2", optional = true }
serde_json = { version = "1", optional = true }
tokenizers = { version = "0.21", default-features = false, features = ["http", "onig"] }
anyhow = "1"
clap = { version = "4", features = ["derive", "env"], optional = true }
hf-hub = "0.4"
rayon = "1"
