#![warn(missing_docs)]
#[cfg(test)]
extern crate tempfile;
pub mod core;
pub mod schema;
pub mod language_models;
pub mod tools;
pub mod agents;
pub mod memory;
pub mod chains;
pub mod embeddings;
pub mod vector_stores;
pub mod retrieval;
pub mod prompts;
pub mod callbacks;
pub mod langgraph;
pub mod mcp;
pub use mcp::MCPServer;
pub mod sessions;
pub use sessions::SessionManagerRunnable;
pub mod evaluation;
pub mod guardrails;
pub mod error;
pub use error::Error;
pub use error::LcError;
pub mod a2a;
pub use agents::{
parse_review_verdict, parse_supervisor_decision, review_envelope, supervisor_envelope,
task_adapter, AdaptiveRAG, AdaptiveRAGError, AdaptiveRAGResult, AgentAction, AgentBuilder,
AgentError, AgentEventRunnable, AgentExecutor, AgentFinish, AgentOutput, AgentRunnable,
AgentStep, AgentStreamEvent, AgentTask, AllowAll, ApprovalDecision, ApprovalGate,
ApprovalHandler, BaseAgent, BudgetConfig, BudgetExceeded, CRAGError, CRAGResult, Citation,
CorrectiveRAGAgent, DeepResearchAgent, FanOutFanIn, FileResumeStore, FunctionCallingAgent,
HandoffManager, LlmMemoryExtractor, MemoryResumeStore, Orchestrator, OrchestratorRunnable,
PendingApproval, PlanExecuteAgent, PlanExecuteError, PromptInjectionHook, RagDecision,
ReActAgent, ResearchError, ResearchReport, ResumeStore, ReviewOrchestrator, ReviewVerdict,
RunContext, SequentialPipeline, StreamingFunctionCallingAgent, Supervisor, SupervisorNext,
TaskAdapter, TokenBudgetHook, ToolInput, ToolPolicy, ToolRisk, SUPERVISOR_FINISH,
};
pub use core::batch::{
BatchClient, BatchError, BatchId, BatchProvider, BatchRequest, BatchResult, BatchStatus,
};
pub use core::cost::{
CostError, CostRecord, CostReport, CostTracker, ModelPrice, ModelSpend, PricingTable,
};
pub use core::language_models::wrap_chat_model;
pub use core::language_models::{
predict_tools, LLMResult, MultimodalError, MultimodalModel, PredictToolsError, StreamChunk,
TokenUsage,
};
pub use core::model_registry::{ModelCapabilities, ModelInfo, ModelRegistry};
pub use core::observability::{AgentMetrics, MetricsSink, ObsError, ObsEvent};
#[cfg(feature = "observability")]
pub use lc_observability::JsonLinesSink;
#[cfg(feature = "observability-mongodb")]
pub use lc_observability::MongoSink;
pub use core::router_llm::BudgetExceeded as RouterBudgetExceeded;
pub use core::router_llm::{
BudgetKind, ModelRateLimit, RateLimitReason, RouterBudget, RouterError, RouterLLM,
RoutingStrategy,
};
pub use core::token_counter::{ModelPricing, TiktokenCounter, TokenCounter, TokenTrackingLLM};
pub use core::tools::to_tool_definition;
pub use core::tools::StructuredOutput;
pub use core::{
into_runnable_any,
BaseChatModel,
BaseLanguageModel,
BaseTool,
FunctionCall,
FunctionDefinition,
LcelError,
Runnable,
RunnableAny,
RunnableAnyWrapper,
RunnableBinding,
RunnableBranch,
RunnableConfig,
RunnableConfigurable,
RunnableConfigurableFields,
RunnableExt,
RunnableLambda,
RunnableParallel,
RunnablePassthrough,
RunnablePick,
RunnableSequence,
Tool,
ToolCall,
ToolCallBuilder,
ToolCallResult,
ToolDefinition,
ToolError,
ToolRegistry,
};
pub use evaluation::{
compare_reports, compare_reports_with, paired_significance, percentile, AnswerRelevancy, Bleu,
CompareOptions, ContainsKeyword, ContextPrecision, ContextRecall, Dataset, EmbeddingSimilarity,
EvalError, EvalRunner, Evaluator, ExactMatch, Example, Faithfulness, LLMAsJudge, LengthCheck,
MetricDelta, OverallCost, PairedSignificance, PairwiseEvaluator, PairwiseJudge, Predictor,
Price, PriceBook, RagEvaluator, RegexMatch, Regression, Report, ReportComparison, Score,
StringDistance, Verdict,
};
pub use guardrails::{
ChunkContext, FlushOutput, ForbiddenWordsGuardrail, GuardedAgent, GuardrailError,
GuardrailRunner, GuardrailsConfig, InputGuardrail, MaxLengthGuardrail, OutputGuardrail,
PiiKind, PiiRedactionGuardrail, SchemaOutputGuardrail, SensitiveInfoGuardrail,
};
pub use language_models::{
AnthropicChat, AnthropicConfig, AnthropicError, AnthropicStreamToken,
AnthropicStructuredOutputMethod, AssistantError, DeepSeekChat, DeepSeekConfig, GeminiChat,
GeminiConfig, GeminiError, GeminiStructuredOutputMethod, GroqChat, LLMClient, MoonshotChat,
MoonshotConfig, OllamaChat, OllamaConfig, OpenAIAssistant, OpenAIChat, OpenAICompatibleChat,
OpenAICompatibleConfig, OpenAIConfig, OpenRouterChat, QwenChat, QwenConfig, ThinkingConfig,
ThinkingType, XaiChat, ZhipuChat, ZhipuConfig,
};
pub use memory::{
BaseMemory, ChatMessageHistory, ContextWindow, ConversationBufferMemory,
ConversationBufferWindowMemory, ConversationSummaryBufferMemory, ConversationSummaryMemory,
DecayWeights, LexicalScorer, LongTermMemory, MemoryData, MemoryError, MemoryExtractor,
MemoryHit, MemoryItem, MemoryQuery, MemoryStore, MemoryTier, PersistenceConfig,
PersistentMemory, PromotionPolicy, RunnableWithMessageHistory, SemanticScorer, SharedMemory,
ShortTermMemory, StoredMemory, Strategy, TwoTierMemory,
};
#[cfg(feature = "vectorstore-memory")]
pub use memory::VectorStoreRetrieverMemory;
pub use schema::{ImageContent, Message, MessageType};
pub use tools::{
Calculator, CalculatorInput, CodeSandbox, ComputerMode, ComputerUseInput, ComputerUseOutput,
ComputerUseTool, DateTimeInput, DateTimeTool, DuckDuckGoSearchTool, FileTool, HTTPTool,
HostedSearchTool, Language, LocalSandbox, MathInput, PythonREPLInput, PythonREPLTool,
RunResult, SandboxError, SandboxTool, SearchInput, SimpleMathTool, URLFetchInput, URLFetchTool,
WikipediaInput, WikipediaTool,
};
#[cfg(feature = "browser-cdp")]
pub use tools::browser::{
BrowserInput, BrowserOutput, CdpBrowser, CdpBrowserTool, NavigationInfo, PageLink, PageMetadata,
};
pub use chains::{
BaseChain, ChainError, ChainResult, ChainRunnable, ChainStream, ConversationChain,
ConversationChainBuilder, ConversationRetrievalChain, LLMChain, LLMChainBuilder,
LLMRouterChain, MapReduceDocumentsChain, MapRerankDocumentsChain, RefineDocumentsChain,
RetrievalQA, RouteDestination, RouterChain, SequentialChain, StreamToken, StuffDocumentsChain,
};
#[cfg(feature = "mongodb-persistence")]
pub use memory::MongoPersistentMemory;
pub use embeddings::{
cosine_similarity, l2_normalize, BagOfWordsEmbeddings, DeepSeekEmbeddings,
DeepSeekEmbeddingsConfig, EmbeddingError, Embeddings, MockEmbeddings, OpenAIEmbeddings,
OpenAIEmbeddingsConfig, QwenEmbeddings, QwenEmbeddingsConfig,
};
#[cfg(feature = "local-embeddings")]
pub use embeddings::LocalEmbeddings;
pub use vector_stores::{
ChromaDBConfig, ChromaDBVectorStore, Document, FileVectorStore, FilterOp, InMemoryVectorStore,
MetadataFilter, SearchResult, VectorStore, VectorStoreBuilder, VectorStoreError,
VectorStoreProvider, VectorStoreType,
};
#[cfg(feature = "redis-storage")]
pub use vector_stores::{RedisDocumentStore, RedisStoreConfig};
#[cfg(feature = "sqlite-storage")]
pub use vector_stores::{SQLiteDocumentStore, SQLiteStoreConfig};
#[cfg(feature = "pgvector-storage")]
pub use vector_stores::pgvector;
#[cfg(feature = "pgvector-storage")]
pub use vector_stores::{PGVectorConfig, PGVectorStore};
pub use vector_stores::PineconeStore;
pub use vector_stores::{
ChunkDocument, ChunkedDocumentStore, ChunkedDocumentStoreTrait, InMemoryChunkedDocumentStore,
};
#[cfg(feature = "qdrant-integration")]
pub use vector_stores::{QdrantConfig, QdrantVectorStore};
#[cfg(feature = "mongodb-persistence")]
pub use vector_stores::{MongoChunkedDocumentStore, MongoStoreConfig};
pub use retrieval::{
filter_by_score, reciprocal_rank_fusion, RAGPipeline, RAGPipelineBuilder, RAGQueryResult,
RagRunnable, RetrievalSource, RetrievedDocument,
};
pub use retrieval::{
AutoMergingConfig, BM25Params, BM25Retriever, ChunkedBM25Retriever, ChunkedSearchResult,
Tokenizer,
};
pub use retrieval::{
BM25Reranker, KeywordReranker, Reranker, RerankingConfig, RerankingError, RerankingExecutor,
};
pub use retrieval::{late_chunk, late_index_in, LateChunk, LateChunkConfig};
pub use retrieval::{mmr, SentenceWindowRetriever};
pub use retrieval::{rerank_async, AsyncReranker, CohereRerank, JinaRerank};
pub use retrieval::{
CSVLoader, DocumentLoader, DocxLoader, HTMLLoader, JSONLoader, LoaderError, MarkdownLoader,
PDFLoader, ParentDocumentRetriever, RecursiveCharacterSplitter, Retriever, RetrieverError,
RetrieverRunnable, RetrieverTrait, SelfQueryRetriever, SemanticSplitter, SimilarityRetriever,
SitemapLoader, TextLoader, TextSplitter, WebScraperLoader,
};
pub use retrieval::{FusionMode, HybridIndexConfig, HybridSearchResult, UnifiedHybridIndex};
pub use retrieval::{
GlobalLevel as GraphGlobalLevel, GraphCommunity, GraphEntity, GraphRAG, GraphRAGConfig,
GraphRAGError, GraphRAGResult, GraphRelation, GraphStore, QueryMode as GraphQueryMode,
};
pub use retrieval::{HyDEConfig, HyDEError, HyDERetriever};
pub use retrieval::{MultiQueryConfig, MultiQueryError, MultiQueryRetriever, StaticQueryGenerator};
pub use prompts::{
ChatPromptTemplate, ExampleSelector, FewShotPromptTemplate, LengthBasedExampleSelector,
PromptRegistry, PromptTemplate, PromptVersionInfo, RegisteredPrompt, VariableDiff, VersionSpec,
MIN_HASH_PREFIX,
};
#[cfg(feature = "otlp")]
pub use callbacks::otlp;
#[cfg(feature = "opentelemetry")]
pub use callbacks::OtelHandler;
pub use callbacks::{
CallbackHandler, CallbackManager, FileCallbackHandler, LangSmithClient, LangSmithConfig,
LangSmithError, LangSmithHandler, LogFormat, RunTree, RunType, StdOutHandler,
};
#[cfg(feature = "opentelemetry")]
pub use callbacks::OtelTracingBackend;
pub use callbacks::{
clear_span_stack, ConsoleTracingBackend, InMemoryTracingBackend, SpanGuard, SpanId, SpanKind,
SpanStatus, SpanTokenUsage, TraceNode, TraceSpan, Tracer, TracingBackend,
};
pub use core::output_parsers::{
BaseOutputParser, CommaSeparatedListOutputParser, JsonOutputParser, OutputParserError,
OutputParserResult, StrOutputParser, StructuredOutputParser, TypedOutputParser,
};
pub use core::structured_output::{
stream_structured_output, with_structured_output, PartialJsonError, PartialJsonParser,
StreamingStructuredOutputExt, StructuredOutputError, StructuredOutputExt,
};
pub use a2a::{
A2AClient, A2AError, A2AErrorData, A2AMessage, A2ARequest, A2AResponse, A2AServer, A2ATask,
A2ATaskResult, AgentCard, TaskStatus,
};
pub use a2a::{Authenticator, Principal, StaticBearer};
pub use langgraph::{
AgentState, AppendMessagesReducer, AppendReducer, AppendStepsReducer, AsyncFn,
AsyncFunctionRouter, AsyncNode, CheckpointData, CheckpointInfo, Checkpointer, CompiledGraph,
ConditionalEdge, EdgeDefinition, EdgeTarget, EdgeType, ExecutionStep, FileCheckpointer,
FilePersistence, FunctionRouter, GraphBuilder, GraphDefinition, GraphEdge, GraphError,
GraphExecution, GraphInvocation, GraphNode, GraphPersistence, GraphResult, InterruptibleNode,
MemoryCheckpointer, MemoryPersistence, MessageEntry, MessageRole, NodeConfig, NodeDefinition,
NodeResult, NodeType, ParallelBranch, ParallelInvocation, PendingInterrupt, Reducer,
ReplaceReducer, RouterDefinition, StateGraph, StateSchema, StateUpdate, StepEntry, StreamEvent,
SubgraphBuilder, SubgraphNode, ThreadSafeMemoryCheckpointer, END, START,
};
#[cfg(feature = "checkpoint-postgres")]
pub use langgraph::PostgresCheckpointer;
#[cfg(feature = "checkpoint-redis")]
pub use langgraph::RedisCheckpointer;
#[cfg(feature = "checkpoint-sqlite")]
pub use langgraph::SqliteCheckpointer;
#[cfg(test)]
mod reexport_guard {
use std::any::TypeId;
use std::sync::Arc;
#[test]
fn budget_exceeded_collision_is_disambiguated() {
let agents = TypeId::of::<crate::agents::BudgetExceeded>();
let router = TypeId::of::<crate::core::router_llm::BudgetExceeded>();
assert_ne!(
agents, router,
"agents 与 router_llm 的 BudgetExceeded 撞名,根级必须靠 RouterBudgetExceeded 区分"
);
assert_eq!(
TypeId::of::<crate::RouterBudgetExceeded>(),
router,
"RouterBudgetExceeded 别名必须解析到 router_llm 侧"
);
}
#[test]
fn graph_prefixed_aliases_resolve_to_retrieval_source() {
assert_eq!(
TypeId::of::<crate::GraphGlobalLevel>(),
TypeId::of::<crate::retrieval::GlobalLevel>(),
);
assert_eq!(
TypeId::of::<crate::GraphQueryMode>(),
TypeId::of::<crate::retrieval::QueryMode>(),
);
}
#[test]
fn tool_and_base_tool_resolve_from_core() {
let _: fn(&dyn crate::core::BaseTool) = |_: &dyn crate::BaseTool| {};
}
#[test]
fn lc_error_alias_is_the_unified_error() {
assert_eq!(
TypeId::of::<crate::LcError>(),
TypeId::of::<crate::error::Error>(),
);
}
#[test]
#[allow(clippy::type_complexity)] fn core_language_models_override_keeps_wrapper_surface() {
let _: Option<crate::core::language_models::ChatModelWrapper<()>> = None;
let _: fn(
Arc<dyn crate::core::BaseChatModel<Error = lc_providers::ProviderError> + Send + Sync>,
) -> Arc<
dyn crate::core::BaseChatModel<Error = crate::error::Error> + Send + Sync,
> = crate::core::language_models::wrap_provider_model;
}
#[test]
fn double_exports_resolve_to_one_item() {
assert_eq!(
TypeId::of::<crate::Message>(),
TypeId::of::<crate::schema::Message>(),
"root `Message` 必须与 `schema::Message` 是同一项"
);
assert_eq!(
TypeId::of::<crate::RunnableConfig>(),
TypeId::of::<crate::core::RunnableConfig>(),
"root `RunnableConfig` 必须与 `core::RunnableConfig` 是同一项"
);
}
}