use std::time::Duration;
use defect_http::HttpStack;
pub mod ingest;
pub mod model;
pub mod observer;
pub mod projector;
pub use ingest::{IngestConfig, LangfuseIngest};
pub use observer::LangfuseObserver;
pub use projector::TraceProjector;
pub const DEFAULT_HOST: &str = "https://cloud.langfuse.com";
pub const DEFAULT_FLUSH_INTERVAL: Duration = Duration::from_secs(2);
pub const DEFAULT_MAX_BATCH: usize = 100;
pub const DEFAULT_QUEUE_CAPACITY: usize = 1024;
pub struct LangfuseSetup {
pub host: String,
pub public_key: String,
pub secret_key: String,
pub flush_interval: Duration,
pub max_batch: usize,
}
#[must_use]
pub fn build_observer(setup: LangfuseSetup, http: HttpStack) -> LangfuseObserver {
let ingest = LangfuseIngest::spawn(IngestConfig {
http,
host: setup.host,
public_key: setup.public_key,
secret_key: setup.secret_key,
max_batch: setup.max_batch,
flush_interval: setup.flush_interval,
queue_capacity: DEFAULT_QUEUE_CAPACITY,
});
LangfuseObserver::new(ingest)
}
#[cfg(test)]
#[allow(clippy::indexing_slicing, clippy::unwrap_used)]
mod tests;