use std::sync::Arc;
use async_trait::async_trait;
use cognee_database::DatabaseConnection;
use cognee_embedding::EmbeddingEngine;
use cognee_graph::GraphDBTrait;
use cognee_llm::Llm;
use cognee_storage::StorageTrait;
use cognee_vector::VectorDB;
use crate::error::ComponentError;
#[async_trait]
pub trait PipelineContext: Send + Sync {
async fn storage(&self) -> Result<Arc<dyn StorageTrait>, ComponentError>;
async fn database(&self) -> Result<Arc<DatabaseConnection>, ComponentError>;
async fn graph_db(&self) -> Result<Arc<dyn GraphDBTrait>, ComponentError>;
async fn vector_db(&self) -> Result<Arc<dyn VectorDB>, ComponentError>;
async fn embedding_engine(&self) -> Result<Arc<dyn EmbeddingEngine>, ComponentError>;
async fn llm(&self) -> Result<Arc<dyn Llm>, ComponentError>;
}