1use ragit_fs::{WriteMode, read_string, write_string};
2
3mod api_provider;
4pub mod audit;
5mod error;
6mod message;
7mod model;
8mod request;
9mod response;
10
11#[cfg(test)]
12mod tests;
13
14pub use crate::api_provider::ApiProvider;
15pub use crate::audit::AuditRecord;
16pub use crate::error::Error;
17pub use crate::message::message_contents_to_json_array;
18pub use crate::model::{Model, ModelRaw, get_model_by_name};
19pub use crate::request::Request;
20pub use crate::response::Response;
21
22pub use ragit_pdl::{
23 JsonType,
24 ImageType,
25 Message,
26 MessageContent,
27 Role,
28 Schema,
29};
30
31pub fn load_models(json_path: &str) -> Result<Vec<Model>, Error> {
32 let models = read_string(json_path)?;
33 let models: Vec<ModelRaw> = serde_json::from_str(&models)?;
34 let mut result = Vec::with_capacity(models.len());
35
36 for model in models.iter() {
37 result.push(Model::try_from(model)?);
38 }
39
40 Ok(result)
41}
42
43pub fn save_models(models: &[Model], path: &str) -> Result<(), Error> {
44 let models: Vec<ModelRaw> = models.iter().map(|model| model.into()).collect();
45 Ok(write_string(
46 path,
47 &serde_json::to_string_pretty(&models)?,
48 WriteMode::CreateOrTruncate,
49 )?)
50}