[workspace]
members = [
  "main",
  "common",
  "api-router",
  "html-router",
  "ingestion-pipeline",
  "retrieval-pipeline",
  "json-stream-parser",
  "evaluations",
]
resolver = "3"

[workspace.dependencies]
anyhow = "1.0.94"
async-openai = { version = "0.41.1", features = [
  "chat-completion",
  "embedding",
  "audio",
  "model",
] }
async-stream = "0.3.6"
async-trait = "0.1.88"
axum-htmx = "0.7.0"
axum_session = "0.18"
axum_session_auth = "0.18"
axum_session_surreal = "0.6"
axum_typed_multipart = "0.16"
axum = { version = "0.8", features = ["multipart", "macros"] }
chrono-tz = "0.10.1"
chrono = { version = "0.4.39", features = ["serde"] }
config = "0.15.4"
dom_smoothie = "0.10.0"
futures = "0.3.31"
include_dir = "0.7.4"
mime = "0.3.17"
mime_guess = "2.0.5"
minijinja-autoreload = "2.5.0"
minijinja-contrib = { version = "2.6.0", features = ["datetime", "timezone"] }
minijinja-embed = { version = "2.8.0" }
minijinja = { version = "2.5.0", features = ["loader", "multi_template"] }
reqwest = { version = "0.12.12", features = ["charset", "json"] }
serde_json = "1.0.128"
serde = { version = "1", features = ["derive"] }
sha2 = "0.10.8"
surrealdb-migrations = "2.4.0"
surrealdb = { version = "2.6" }
tempfile = "3.12.0"
text-splitter = { version = "0.18.1", features = ["markdown", "tokenizers"] }
tokenizers = { version = "0.20.4", features = ["http"] }
unicode-normalization = "0.1.24"
thiserror = "1.0.63"
tokio-util = { version = "0.7.15", features = ["io"] }
tokio = { version = "1", features = ["full"] }
tower-http = { version = "0.6.2", features = ["fs", "compression-full"] }
tower-serve-static = "0.1.1"
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
url = { version = "2.5.2", features = ["serde"] }
uuid = { version = "1.10.0", features = ["v4", "serde"] }
tokio-retry = "0.3.0"
base64 = "0.22.1"
object_store = { version = "0.11.2", features = ["aws"] }
bytes = "1.7.1"
state-machines = "0.9"
pdf-extract = "0.9"
lopdf = "0.32"
pdfium-auto = "0.3"
pdfium-render = "0.8"
servo-fetch = "0.13"
tendril = "0.4"
image = { version = "0.25", default-features = false, features = ["png"] }
fastembed = { version = "5.2.0", default-features = false, features = [
  "hf-hub-native-tls",
  "ort-load-dynamic",
] }

[profile.dist]
inherits = "release"
lto = "thin"

[workspace.lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = [
  "cfg(feature, values(\"inspect\"))",
] }

[workspace.lints.clippy]
# Performance-focused lints
perf = { level = "warn", priority = -1 }
vec_init_then_push = "warn"
large_stack_frames = "warn"
redundant_allocation = "warn"
single_char_pattern = "warn"
string_extend_chars = "warn"
format_in_format_args = "warn"
slow_vector_initialization = "warn"
inefficient_to_string = "warn"
implicit_clone = "warn"
redundant_clone = "warn"

# Security-focused lints
arithmetic_side_effects = "warn"
indexing_slicing = "warn"
unwrap_used = "warn"
expect_used = "warn"
panic = "warn"
unimplemented = "warn"
todo = "warn"

# Async/Network lints
async_yields_async = "warn"
await_holding_invalid_type = "warn"
rc_buffer = "warn"

# Maintainability-focused lints
cargo = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
clone_on_ref_ptr = "warn"
float_cmp = "warn"
manual_string_new = "warn"
uninlined_format_args = "warn"
unused_self = "warn"
must_use_candidate = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "warn"
module_name_repetitions = "warn"
wildcard_dependencies = "warn"
missing_docs_in_private_items = "allow"

# Allow noisy lints that don't add value for this project
needless_raw_string_hashes = "allow"
multiple_bound_locations = "allow"
cargo_common_metadata = "allow"
multiple-crate-versions = "allow"
