[package] name = "dd0c-route" version = "0.1.0" edition = "2021" description = "LLM Cost Router & Dashboard — route AI requests to the cheapest capable model" license = "MIT" [[bin]] name = "dd0c-proxy" path = "src/proxy/main.rs" [[bin]] name = "dd0c-api" path = "src/api/main.rs" [[bin]] name = "dd0c-worker" path = "src/worker/main.rs" [dependencies] hex = "0.4.3" # Web framework axum = { version = "0.7", features = ["ws", "macros"] } tokio = { version = "1", features = ["full"] } tower = "0.4" tower-http = { version = "0.5", features = ["cors", "trace", "compression-gzip"] } hyper = { version = "1", features = ["full"] } hyper-util = "0.1" # Serialization serde = { version = "1", features = ["derive"] } serde_json = "1" # Database sqlx = { version = "0.7", features = ["runtime-tokio", "postgres", "uuid", "chrono", "json"] } deadpool-redis = "0.15" redis = { version = "0.25", features = ["tokio-comp", "connection-manager"] } # Auth jsonwebtoken = "9" bcrypt = "0.15" uuid = { version = "1", features = ["v4", "serde"] } # Observability tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } opentelemetry = "0.22" opentelemetry-otlp = "0.15" # Config dotenvy = "0.15" config = "0.14" # HTTP client (upstream providers) reqwest = { version = "0.12", features = ["json", "stream", "rustls-tls"] } reqwest-eventsource = "0.6" futures = "0.3" tokio-stream = "0.1" bytes = "1" # Crypto (provider key encryption) aes-gcm = "0.10" base64 = "0.22" # Feature flags serde_yaml = "0.9" # Misc chrono = { version = "0.4", features = ["serde"] } thiserror = "1" anyhow = "1" getrandom = "0.2" regex = "1" async-trait = "0.1" rand = "0.8" [dev-dependencies] # Testing tokio-test = "0.4" wiremock = "0.6" testcontainers = "0.15" testcontainers-modules = { version = "0.3", features = ["postgres", "redis"] } proptest = "1" criterion = { version = "0.5", features = ["async_tokio"] } tower-test = "0.4" [[bench]] name = "proxy_latency" harness = false