recoco-core 0.2.1

Recoco-core is the core library of Recoco; it's nearly identical to the main ReCoco crate, which is a simple wrapper around recoco-core and other sub-crates.
Documentation
# SPDX-FileCopyrightText: 2025-2026 CocoIndex (upstream)
# SPDX-FileContributor: CocoIndex Contributors
#
# SPDX-FileCopyrightText: 2026 Knitli Inc. (ReCoco)
# SPDX-FileContributor: Adam Poulemanos <adam@knit.li>
#
# SPDX-License-Identifier: Apache-2.0

[package]
name = "recoco-core"
version = { workspace = true }
edition = { workspace = true }
rust-version = { workspace = true }
description = "Recoco-core is the core library of Recoco; it's nearly identical to the main ReCoco crate, which is a simple wrapper around recoco-core and other sub-crates."
readme = "../../README.md"
repository = { workspace = true }
license = { workspace = true }
keywords = { workspace = true }
categories = { workspace = true }

[lib]
name = "recoco_core"
path = "src/lib.rs"

[dependencies]
anyhow = { workspace = true }
async-openai = { workspace = true, optional = true }
async-stream = { workspace = true, optional = true }
async-trait = { workspace = true }  # compile time
aws-config = { workspace = true, optional = true }
aws-sdk-s3 = { workspace = true, optional = true }
aws-sdk-sqs = { workspace = true, optional = true }
axum = { workspace = true, optional = true }
axum-extra = { workspace = true, optional = true }
azure_core = { workspace = true, optional = true }
azure_identity = { workspace = true, optional = true }
azure_storage = { workspace = true, optional = true }
azure_storage_blobs = { workspace = true, optional = true }
base64 = { workspace = true }
bytes = { workspace = true, features = ["serde"] }
chrono = { workspace = true }
config = { workspace = true, optional = true }
const_format = { workspace = true }  # compile time
derive-where = { workspace = true }  # compile time
futures = { workspace = true }
globset = { workspace = true, optional = true }
google-cloud-aiplatform-v1 = { workspace = true, optional = true }
google-cloud-gax = { workspace = true, optional = true }
google-drive3 = { workspace = true, optional = true }
http-body-util = { workspace = true, optional = true }
hyper-rustls = { workspace = true, optional = true }
hyper-util = { workspace = true, optional = true }
indenter = { workspace = true }
indexmap = { workspace = true }
indoc = { workspace = true }  # compile time
infer = { workspace = true, optional = true }
itertools = { workspace = true, optional = true }
json5 = { workspace = true, optional = true }
log = { workspace = true, optional = true }
neo4rs = { workspace = true, optional = true }
pgvector = { workspace = true, optional = true }
phf = { workspace = true }  # compile time
qdrant-client = { workspace = true, optional = true }
recoco-splitters = { workspace = true, optional = true }
recoco-utils = { workspace = true, features = [
  "chrono",
  "concur_control",
  "deserialize",
  "fingerprint",
  "immutable",
  "uuid"
] }
redis = { workspace = true, optional = true }
reqwest = { workspace = true, optional = true }
rustls = { workspace = true, optional = true }
schemars = { workspace = true, optional = true }
serde = { workspace = true }
serde_json = { workspace = true }
serde_with = { workspace = true, optional = true }
sqlx = { workspace = true, optional = true }
time = { workspace = true, optional = true }
tokio = { workspace = true }
tower = { workspace = true, optional = true }
tower-http = { workspace = true, optional = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
unicase = { workspace = true, optional = true }
urlencoding = { workspace = true, optional = true }
uuid = { workspace = true }
yaml-rust2 = { workspace = true, optional = true }
yup-oauth2 = { workspace = true, optional = true }

[dev-dependencies]
async-openai = { workspace = true }
expect-test = { workspace = true }

[features]
default = ["persistence", "server", "source-local-file"]
all-functions = [
  "function-detect-lang",
  "function-embed",
  "function-extract-llm",
  "function-json",
  "function-split",
]
all-llm-providers = [
  "provider-anthropic",
  "provider-azure",
  "provider-bedrock",
  "provider-gemini",
  "provider-ollama",
  "provider-openai",
  "provider-voyage",
]
all-sources = [
  "source-azure",
  "source-gdrive",
  "source-local-file",
  "source-postgres",
  "source-s3",
]
# Bundles
all-splitter-languages = ["recoco-splitters/all"]
all-targets = [
  "target-kuzu",
  "target-neo4j",
  "target-postgres",
  "target-qdrant",
]
# Core
batching = ["recoco-utils/batching"]
full = [
  "all-functions",
  "all-llm-providers",
  "all-sources",
  "all-splitter-languages",
  "all-targets",
  "persistence",
  "server",
]
# Functions
function-detect-lang = ["dep:recoco-splitters"]
function-embed = [
  "batching",
  "dep:infer",
  "dep:reqwest",
  "json-schema",
  "recoco-utils/reqwest"
]
function-extract-llm = [
  "dep:infer",
  "dep:reqwest",
  "json-schema",
  "recoco-utils/reqwest",
]
function-json = ["dep:json5", "dep:unicase"]
function-split = [
  "dep:recoco-splitters",
  "recoco-utils/regex",
  "recoco-utils/retryable"
]
json-schema = ["dep:schemars"]
# Legacy
legacy-states-v0 = []
# Core
persistence = [
  "dep:itertools",
  "dep:log",
  "dep:sqlx",
  "dep:urlencoding",
  "dep:yaml-rust2",
  "recoco-utils/retryable",
  "recoco-utils/sqlx",
  "recoco-utils/yaml",
]
# Specific providers for functions
provider-anthropic = [
  "dep:json5",
  "dep:reqwest",
  "dep:urlencoding",
  "recoco-utils/reqwest"
]
provider-azure = [
  "dep:async-openai",
  "dep:time",
  "recoco-utils/openai",
]
provider-bedrock = ["dep:reqwest", "dep:urlencoding", "recoco-utils/reqwest"]
provider-gemini = [
  "dep:google-cloud-aiplatform-v1",
  "dep:google-cloud-gax",
  "dep:reqwest",
  "dep:urlencoding",
  "recoco-utils/reqwest",
  "recoco-utils/retryable"
]
provider-litellm = ["provider-openai"]
provider-ollama = ["dep:reqwest", "dep:serde_with", "recoco-utils/reqwest"]
provider-openai = [
  "dep:async-openai",
  "dep:config",
  "dep:reqwest",
  "recoco-utils/openai",
  "recoco-utils/reqwest",
  "recoco-utils/retryable"
]
provider-openrouter = ["provider-openai"]
provider-vllm = ["provider-openai"]
provider-voyage = ["dep:reqwest", "recoco-utils/reqwest"]
# Core server
server = [
  "dep:axum",
  "dep:axum-extra",
  "dep:rustls",
  "dep:tower",
  "dep:tower-http",
  "json-schema",
  "persistence",
  "recoco-utils/retryable",
  "recoco-utils/server"
]
source-azure = [
  "batching",
  "dep:async-stream",
  "dep:azure_core",
  "dep:azure_identity",
  "dep:azure_storage",
  "dep:azure_storage_blobs",
  "dep:globset",
  "recoco-utils/azure",
  "recoco-utils/bytes_decode"
]
source-gdrive = [
  "batching",
  "dep:globset",
  "dep:google-drive3",
  "dep:http-body-util",
  "dep:hyper-rustls",
  "dep:hyper-util",
  "dep:rustls",
  "dep:yup-oauth2",
  "recoco-utils/bytes_decode",
  "recoco-utils/google-drive"
]
# Sources
source-local-file = [
  "batching",
  "dep:async-stream",
  "dep:globset",
  "recoco-utils/bytes_decode",
  "recoco-utils/local-file"
]
source-postgres = ["batching", "dep:pgvector", "persistence"]
source-s3 = [
  "batching",
  "dep:async-stream",
  "dep:aws-config",
  "dep:aws-sdk-s3",
  "dep:aws-sdk-sqs",
  "dep:globset",
  "dep:redis",
  "dep:rustls",
  "dep:urlencoding",
  "recoco-utils/bytes_decode",
  "recoco-utils/redis",
  "recoco-utils/s3"
]
# Splitter Languages -- programming languages supported by the splitters
splitter-language-c = ["recoco-splitters/c"]
splitter-language-c-sharp = ["recoco-splitters/c-sharp"]
splitter-language-cpp = ["recoco-splitters/cpp"]
splitter-language-css = ["recoco-splitters/css"]
splitter-language-fortran = ["recoco-splitters/fortran"]
splitter-language-go = ["recoco-splitters/go"]
splitter-language-html = ["recoco-splitters/html"]
splitter-language-java = ["recoco-splitters/java"]
splitter-language-javascript = ["recoco-splitters/javascript"]
splitter-language-json = ["recoco-splitters/json"]
splitter-language-kotlin = ["recoco-splitters/kotlin"]
splitter-language-markdown = ["recoco-splitters/markdown"]
splitter-language-pascal = ["recoco-splitters/pascal"]
splitter-language-php = ["recoco-splitters/php"]
splitter-language-python = ["recoco-splitters/python"]
splitter-language-r = ["recoco-splitters/r"]
splitter-language-ruby = ["recoco-splitters/ruby"]
splitter-language-rust = ["recoco-splitters/rust"]
splitter-language-scala = ["recoco-splitters/scala"]
splitter-language-solidity = ["recoco-splitters/solidity"]
splitter-language-sql = ["recoco-splitters/sql"]
splitter-language-swift = ["recoco-splitters/swift"]
splitter-language-toml = ["recoco-splitters/toml"]
splitter-language-typescript = ["recoco-splitters/typescript"]
splitter-language-xml = ["recoco-splitters/xml"]
splitter-language-yaml = ["recoco-splitters/yaml"]
# Targets
target-kuzu = ["dep:reqwest", "recoco-utils/reqwest", "target-neo4j"]
target-neo4j = ["dep:neo4rs", "recoco-utils/neo4rs", "recoco-utils/retryable"]
target-postgres = ["dep:itertools", "source-postgres"]
target-qdrant = ["dep:qdrant-client", "recoco-utils/qdrant"]