1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
//! # Swiftide
//!
//! Swiftide is a data indexing and processing library, tailored for Retrieval Augmented Generation (RAG). When building applications with large language models (LLM), these LLMs need access to external resources. Data needs to be transformed, enriched, split up, embedded, and persisted. It is build in Rust, using parallel, asynchronous streams and is blazingly fast.
//!
//! Part of the [bosun.ai](https://bosun.ai) project. An upcoming platform for autonomous code improvement.
//!
//! We <3 feedback: project ideas, suggestions, and complaints are very welcome. Feel free to open an issue.
//!
//! Read more about the project on the [swiftide website](https://swiftide.rs)
//!
//! ## Features
//!
//! - Extremely fast streaming indexing pipeline with async, parallel processing
//! - Integrations with `OpenAI`, `Redis`, `Qdrant`, `FastEmbed`, `Treesitter` and more
//! - A variety of loaders, transformers, and embedders and other common, generic tools
//! - Bring your own transformers by extending straightforward traits
//! - Splitting and merging pipelines
//! - Jinja-like templating for prompts
//! - Store into multiple backends
//! - `tracing` supported for logging and tracing, see /examples and the `tracing` crate for more information.
//!
//! ## Querying
//!
//! We are working on an experimental query pipeline, which you can find in [`swiftide::query`]
//!
//! ## Examples
//!
//! ### Indexing markdown
//!
//! ```no_run
//! # use swiftide::indexing::loaders::FileLoader;
//! # use swiftide::indexing::transformers::{ChunkMarkdown, Embed, MetadataQAText};
//! # use swiftide::integrations::qdrant::Qdrant;
//! # use swiftide::indexing::Pipeline;
//! # use anyhow::Result;
//!
//! # #[tokio::main]
//! # async fn main() -> Result<()> {
//! # let qdrant_url = "url";
//! # let openai_client = swiftide::integrations::openai::OpenAI::builder().build()?;
//! Pipeline::from_loader(FileLoader::new(".").with_extensions(&["md"]))
//! .then_chunk(ChunkMarkdown::from_chunk_range(10..512))
//! .then(MetadataQAText::new(openai_client.clone()))
//! .then_in_batch(10, Embed::new(openai_client.clone()))
//! .then_store_with(
//! Qdrant::try_from_url(qdrant_url)?
//! .batch_size(50)
//! .vector_size(1536)
//! .collection_name("swiftide-examples".to_string())
//! .build()?,
//! )
//! .run()
//! .await
//! # }
//! ```
//!
//! ### Experimental querying
//!
//! ```no_run
//! # use anyhow::Result;
//! # use swiftide::query::{query_transformers, self, response_transformers, answers};
//!
//! # #[tokio::main]
//! # async fn main() -> Result<()> {
//! # let qdrant_url = "url";
//! # let openai_client = swiftide::integrations::openai::OpenAI::builder().build()?;
//! # let qdrant = swiftide::integrations::qdrant::Qdrant::try_from_url(qdrant_url)?
//! # .batch_size(50)
//! # .vector_size(1536)
//! # .collection_name("swiftide-examples".to_string())
//! # .build()?;
//! query::Pipeline::default()
//! .then_transform_query(query_transformers::GenerateSubquestions::from_client(
//! openai_client.clone(),
//! ))
//! .then_transform_query(query_transformers::Embed::from_client(
//! openai_client.clone(),
//! ))
//! .then_retrieve(qdrant.clone())
//! .then_transform_response(response_transformers::Summary::from_client(
//! openai_client.clone(),
//! ))
//! .then_answer(answers::Simple::from_client(openai_client.clone()))
//! .query("What is swiftide?")
//! .await?;
//! # Ok(())
//! # }
//! ```
//!
//! ## Feature flags
//!
//! Swiftide has little features enabled by default as there are some dependency heavy
//! integrations.
//!
//! Either use the 'all' feature flag (not recommended), or enable the integrations that you need.
//! Each integration has a similarly named feature flag.
#[doc(inline)]
pub use swiftide_core::prompt;
#[doc(inline)]
pub use swiftide_core::type_aliases::*;
/// Common traits for common behaviour, re-exported from indexing and query
pub mod traits {
#[doc(inline)]
pub use swiftide_core::indexing_traits::*;
#[doc(inline)]
pub use swiftide_core::query_traits::*;
}
/// Integrations with various platforms and external services.
pub mod integrations {
#[doc(inline)]
pub use swiftide_integrations::*;
}
/// This module serves as the main entry point for indexing in Swiftide.
///
/// The indexing system in Swiftide is designed to handle the asynchronous processing of large volumes
/// of data, including loading, transforming, and storing data chunks.
pub mod indexing {
#[doc(inline)]
pub use swiftide_core::indexing::*;
#[doc(inline)]
pub use swiftide_indexing::*;
pub mod transformers {
#[cfg(feature = "tree-sitter")]
#[doc(inline)]
pub use swiftide_integrations::treesitter::transformers::*;
pub use swiftide_indexing::transformers::*;
}
}
/// Query your indexed data with a transforming pipeline
pub mod query {
#[doc(inline)]
pub use swiftide_core::querying::*;
#[doc(inline)]
pub use swiftide_query::*;
}
#[doc(hidden)]
#[cfg(feature = "test-utils")]
pub mod test_utils;