use std::future::Future;
use super::embedding::LangfuseEmbedding;
use super::generation::LangfuseGeneration;
use super::span::LangfuseSpan;
use langfuse_core::types::ObservationType;
pub async fn with_span<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
let span = LangfuseSpan::start(name);
f(span).await
}
pub async fn with_generation<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseGeneration) -> Fut,
Fut: Future<Output = T>,
{
let generation = LangfuseGeneration::start(name);
f(generation).await
}
pub async fn with_observation<F, Fut, T>(name: &str, obs_type: ObservationType, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
let span = LangfuseSpan::start_with_type(name, obs_type);
f(span).await
}
pub async fn with_agent<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
with_observation(name, ObservationType::Agent, f).await
}
pub async fn with_tool<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
with_observation(name, ObservationType::Tool, f).await
}
pub async fn with_chain<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
with_observation(name, ObservationType::Chain, f).await
}
pub async fn with_retriever<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
with_observation(name, ObservationType::Retriever, f).await
}
pub async fn with_evaluator<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
with_observation(name, ObservationType::Evaluator, f).await
}
pub async fn with_guardrail<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseSpan) -> Fut,
Fut: Future<Output = T>,
{
with_observation(name, ObservationType::Guardrail, f).await
}
pub async fn with_embedding<F, Fut, T>(name: &str, f: F) -> T
where
F: FnOnce(LangfuseEmbedding) -> Fut,
Fut: Future<Output = T>,
{
let embedding = LangfuseEmbedding::start(name);
f(embedding).await
}