rune-chain-core 0.1.1

Core traits and types for the rune-chain LLM orchestration framework
Documentation
//! Core traits and types for the `rune-chain` LLM orchestration framework.
//!
//! `rune-chain-core` is the foundation layer of the `rune-chain-*` crate family —
//! a modern, async-first Rust port of the LangChain concept. It defines the shared
//! vocabulary (types, traits, error variants) that every other `rune-chain-*` crate
//! depends on, without pulling in any LLM provider SDK itself.
//!
//! # Features
//!
//! - [`Chain`] — the central trait; implement it to create any unit of LLM work
//! - [`Llm`] — provider-agnostic interface to any large language model
//! - [`Memory`] — pluggable conversation history (in-process, DB, vector store, …)
//! - [`Message`] / [`Role`] — typed conversation turns (System, Human, Ai, Tool)
//! - [`GenerateResult`] / [`TokenUsage`] — structured output with token accounting
//! - [`StreamData`] — incremental token chunks for streaming responses
//! - [`PromptArgs`] + [`prompt_args!`] — ergonomic key-value input for templates
//! - [`ChainError`] / [`LlmError`] — structured error types with `From` wiring
//!
//! # Quick Start
//!
//! Implement [`Chain`] for your own type:
//!
//! ```rust
//! use rune_chain_core::{Chain, ChainError, GenerateResult, PromptArgs, prompt_args};
//! use async_trait::async_trait;
//!
//! struct EchoChain;
//!
//! #[async_trait]
//! impl Chain for EchoChain {
//!     async fn call(&self, input: PromptArgs) -> Result<GenerateResult, ChainError> {
//!         let text = input
//!             .get("input")
//!             .and_then(|v| v.as_str())
//!             .unwrap_or("")
//!             .to_string();
//!         Ok(GenerateResult::from_text(text))
//!     }
//! }
//!
//! # tokio_test::block_on(async {
//! let chain = EchoChain;
//! let result = chain.invoke(prompt_args! { "input" => "hello" }).await.unwrap();
//! assert_eq!(result, "hello");
//! # });
//! ```

mod chain;
mod error;
mod generate;
mod llm;
mod memory;
mod message;
mod prompt;
mod stream;
mod tool;

pub use chain::Chain;
pub use error::{ChainError, LlmError};
pub use generate::{GenerateResult, TokenUsage};
pub use llm::Llm;
pub use memory::Memory;
pub use message::{Message, Role};
pub use prompt::PromptArgs;
pub use stream::StreamData;
pub use tool::Tool;