Skip to content

Commit

Permalink
0.1.0, change metadata traits for storage
Browse files Browse the repository at this point in the history
  • Loading branch information
snowmead committed Nov 4, 2023
1 parent d86468e commit de3bae3
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 29 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
@@ -1,7 +1,7 @@
[package]
publish = true
name = "llm-weaver"
version = "1.0.4"
version = "0.1.0"
edition = "2021"
description = "Manage long conversations with any LLM"
readme = "README.md"
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Expand Up @@ -58,7 +58,7 @@ use num_traits::{
CheckedAdd, CheckedDiv, FromPrimitive, SaturatingAdd, SaturatingMul, SaturatingSub,
ToPrimitive, Unsigned,
};
use redis::ToRedisArgs;
pub use redis::{RedisWrite, ToRedisArgs};
use serde::{Deserialize, Serialize};
use storage::TapestryChest;
use tracing::{debug, error, instrument};
Expand Down
37 changes: 11 additions & 26 deletions src/storage.rs
Expand Up @@ -51,7 +51,7 @@ pub trait TapestryChestHandler<T: Config> {
/// Save tapestry metadata.
///
/// Based on application use cases, you can add aditional data for a given [`TapestryId`]
async fn save_tapestry_metadata<TID: TapestryId, M: ToRedisArgs + Send + Sync>(
async fn save_tapestry_metadata<TID: TapestryId, M: ToRedisArgs + Debug + Clone + Send + Sync>(
tapestry_id: TID,
metadata: M,
) -> crate::Result<()>;
Expand All @@ -76,9 +76,8 @@ pub trait TapestryChestHandler<T: Config> {
instance: Option<u64>,
) -> crate::Result<Option<TapestryFragment<T>>>;
/// Retrieves the last tapestry metadata, or a metadata at a specified instance.
async fn get_tapestry_metadata<TID: TapestryId, M: DeserializeOwned + Default>(
async fn get_tapestry_metadata<TID: TapestryId, M: DeserializeOwned>(
tapestry_id: TID,
instance: Option<u64>,
) -> crate::Result<Option<M>>;
/// Deletes a tapestry and all its instances.
async fn delete_tapestry<TID: TapestryId>(tapestry_id: TID) -> crate::Result<()>;
Expand Down Expand Up @@ -159,31 +158,25 @@ impl<T: Config> TapestryChestHandler<T> for TapestryChest {
Ok(())
}

async fn save_tapestry_metadata<TID: TapestryId, M: ToRedisArgs + Send + Sync>(
async fn save_tapestry_metadata<
TID: TapestryId,
M: ToRedisArgs + Debug + Clone + Send + Sync,
>(
tapestry_id: TID,
metadata: M,
) -> crate::Result<()> {
let client = get_client().await.expect("Failed to get redis client");
let mut con = client.get_async_connection().await?;
debug!("Connected to Redis");

let base_key: &String = &tapestry_id.base_key();

let instance = match get_last_instance(&mut con, base_key, None).await? {
Some(instance) => instance,
None => {
return Err(LoomError::from(StorageError::NotFound).into());
},
};

let key = format!("{base_key}:{instance}");
let key: &String = &tapestry_id.base_key();

con.hset(&key, "metadata", metadata).await.map_err(|e| {
con.hset(&key, "metadata", metadata.clone()).await.map_err(|e| {
error!("Failed to save \"metadata\" member to {} key: {}", key, e);
LoomError::from(StorageError::Redis(e))
})?;

debug!("Saved \"metadata\" member to {} key", key);
debug!("Saved \"metadata\" member to {} key with metadata {:?}", key, metadata.clone());

Ok(())
}
Expand Down Expand Up @@ -259,22 +252,14 @@ impl<T: Config> TapestryChestHandler<T> for TapestryChest {
Ok(Some(tapestry_fragment))
}

async fn get_tapestry_metadata<TID: TapestryId, M: DeserializeOwned + Default>(
async fn get_tapestry_metadata<TID: TapestryId, M: DeserializeOwned>(
tapestry_id: TID,
instance: Option<u64>,
) -> crate::Result<Option<M>> {
let client = get_client().await.expect("Failed to get redis client");
let mut con = client.get_async_connection().await?;
debug!("Connected to Redis");

let base_key = &tapestry_id.base_key();

let instance = match get_last_instance(&mut con, base_key, instance).await? {
Some(instance) => instance,
None => return Ok(None),
};

let key = format!("{base_key}:{instance}");
let key = &tapestry_id.base_key();

let metadata_raw: Vec<u8> = con.hget(&key, "metadata").await.map_err(|e| {
error!("Failed to get \"metadata\" member from {} key: {}", key, e);
Expand Down

0 comments on commit de3bae3

Please sign in to comment.