use std::sync::Arc;
use async_trait::async_trait;
use rhema_core::{
Content, EventSink, ModelOutput, ModelProvider, ModelRequest, ProviderError, Role,
};
pub struct ExpandPastes {
inner: Arc<dyn ModelProvider>,
}
impl ExpandPastes {
pub fn new(inner: Arc<dyn ModelProvider>) -> Self {
Self { inner }
}
}
#[async_trait]
impl ModelProvider for ExpandPastes {
async fn complete(
&self,
mut req: ModelRequest,
sink: &mut dyn EventSink,
) -> Result<ModelOutput, ProviderError> {
for message in &mut req.messages {
if message.role != Role::User {
continue;
}
for content in &mut message.content {
if let Content::Text(text) = content {
*text = rhema_core::paste::expand(text);
}
}
}
self.inner.complete(req, sink).await
}
}