[package]
name = "llm-kernel"
version = "0.8.0"
edition = "2024"
description = "Foundation library for Rust AI-native apps — provider catalog, LLM client, MCP server, search, telemetry, and safety"
license = "Apache-2.0"
repository = "https://github.com/epicsagas/llm-kernel"
homepage = "https://github.com/epicsagas/llm-kernel"
rust-version = "1.92"
keywords = ["llm", "ai", "mcp", "provider", "embedding"]
categories = ["api-bindings", "asynchronous", "science"]
documentation = "https://docs.rs/llm-kernel"
readme = "README.md"
exclude = [".github/", "target/"]
[workspace]
members = [
".",
]
[lib]
name = "llm_kernel"
path = "src/lib.rs"
[features]
default = ["provider"]
provider = ["dep:serde_json"]
discovery = ["provider", "dep:ureq"]
client-async = ["dep:reqwest", "dep:serde_json", "dep:async-trait", "dep:tokio", "dep:tokio-stream", "dep:futures-core"]
discovery-async = ["discovery", "dep:reqwest", "dep:async-trait", "dep:tokio"]
cache = ["client-async", "store"]
secrets = ["dep:tempfile"]
store = ["dep:rusqlite"]
config = ["dep:toml"]
graph = ["store", "dep:serde_json"]
graph-cjk = ["graph"]
graph-pg = ["graph", "dep:postgres", "dep:clap"]
mcp = ["dep:serde_json", "dep:async-trait"]
mcp-http = ["mcp", "dep:axum", "dep:tokio", "dep:tokio-stream", "tokio/net", "tokio/io-util"]
tokens = []
install = ["dep:serde_json"]
search = ["dep:serde_json"]
embedding = ["dep:async-trait"]
vector-index = ["embedding", "dep:turbovec", "dep:serde_json"]
qdrant = ["embedding", "dep:qdrant-client", "dep:serde_json"]
embedding-openai = ["embedding", "dep:ureq", "dep:serde_json"]
embedding-fastembed = ["embedding", "dep:fastembed", "dep:indexmap"]
embedding-fastembed-qwen3 = ["embedding-fastembed", "fastembed/qwen3", "dep:candle-core"]
embedding-fastembed-nomic-moe = ["embedding-fastembed", "fastembed/nomic-v2-moe", "dep:candle-core"]
embedding-fastembed-directml = ["embedding-fastembed", "dep:ort"]
graph-async = ["graph", "dep:tokio"]
graph-pool = ["graph", "dep:tokio"]
telemetry = ["dep:serde_json"]
safety = ["dep:regex"]
eval = ["dep:clap", "tokens", "safety", "embedding", "search"]
eval-full = ["eval", "graph"]
full = ["provider", "discovery", "discovery-async", "client-async", "cache", "secrets", "store", "config", "graph", "graph-async", "graph-pool", "graph-cjk", "graph-pg", "mcp", "mcp-http", "tokens", "install", "search", "embedding", "embedding-openai", "embedding-fastembed", "embedding-fastembed-qwen3", "embedding-fastembed-nomic-moe", "vector-index", "qdrant", "telemetry", "safety"]
[dependencies]
serde = { version = "1", features = ["derive"] }
thiserror = "2"
anyhow = "1"
tracing = "0.1"
serde_json = { version = "1", optional = true }
ureq = { version = "3", features = ["json"], optional = true }
tempfile = { version = "3", optional = true }
reqwest = { version = "0.13", features = ["json", "rustls", "stream"], default-features = false, optional = true }
rusqlite = { version = "0.40", features = ["bundled"], optional = true }
toml = { version = "1", optional = true }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync"], optional = true }
tokio-stream = { version = "0.1", optional = true }
futures-core = { version = "0.3", optional = true }
async-trait = { version = "0.1", optional = true }
regex = { version = "1", optional = true }
fastembed = { version = "5", default-features = false, features = ["hf-hub-rustls-tls", "ort-download-binaries-rustls-tls"], optional = true }
ort = { version = "=2.0.0-rc.12", default-features = false, optional = true }
candle-core = { version = "0.10", optional = true }
indexmap = { version = "2", optional = true }
clap = { version = "4", features = ["derive"], optional = true }
turbovec = { version = "0.9", optional = true }
axum = { version = "0.8", default-features = false, features = ["http1", "json", "tokio"], optional = true }
postgres = { version = "0.19", optional = true }
qdrant-client = { version = "1", optional = true }
[dev-dependencies]
tempfile = "3"
criterion = { version = "0.8", features = ["html_reports"] }
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] }
[[bench]]
name = "graph_bench"
harness = false
required-features = ["graph"]
[[bench]]
name = "compute_bench"
harness = false
required-features = ["search", "tokens", "embedding"]
[[bin]]
name = "llm-kernel-eval"
path = "src/bin/eval.rs"
required-features = ["eval"]
[[bin]]
name = "llm-kernel-migrate-graph"
path = "src/bin/migrate.rs"
required-features = ["graph-pg"]
[profile.dev]
opt-level = 0
debug = 1
[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1
strip = "symbols"
panic = "abort"
[profile.release.package."*"]
opt-level = 3
codegen-units = 4
[profile.dist]
inherits = "release"
lto = "thin"
[target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies]
fastembed = { version = "5", default-features = false, features = ["hf-hub-rustls-tls", "ort-download-binaries-rustls-tls", "ort-load-dynamic"], optional = true }