1pub mod chat;
2
3pub use chat::*;
4
5use crate::{Chat, Example, LM, Message, MetaSignature, Prediction};
6use anyhow::Result;
7use async_trait::async_trait;
8use rig::tool::ToolDyn;
9use serde_json::Value;
10use std::collections::HashMap;
11use std::sync::Arc;
12
13#[async_trait]
14pub trait Adapter: Send + Sync + 'static {
15 fn format(&self, signature: &dyn MetaSignature, inputs: Example) -> Chat;
16 fn parse_response(
17 &self,
18 signature: &dyn MetaSignature,
19 response: Message,
20 ) -> HashMap<String, Value>;
21 async fn call(
22 &self,
23 lm: Arc<LM>,
24 signature: &dyn MetaSignature,
25 inputs: Example,
26 tools: Vec<Arc<dyn ToolDyn>>,
27 ) -> Result<Prediction>;
28}