myself 0.5.0

Myself is a Rust library for building conversational agents powered by OpenAI's language model, providing a simple Agent abstraction to manage interactions and memory.
Documentation
use crate::backend::core::AgentBackend;
use crate::database::memory::MemoryEngine;

use uuid::Uuid;

#[derive(Clone, Debug)]
pub struct DefaultInteraction {
    pub user_name: String,
    pub constitution: String,
    pub memory_size: usize,
}

#[derive(Clone, Debug)]
pub struct Agent<Backend>
where
    Backend: AgentBackend + Sized + Default + Clone,
{
    pub id: Uuid,
    pub my_name: String,
    pub default_interaction: DefaultInteraction,

    backend: Option<Box<Backend>>,
    memory_engine: Option<Box<MemoryEngine<Backend>>>,
}

impl<Backend> Agent<Backend>
where
    Backend: AgentBackend + Sized + Default + Clone,
{
    pub fn get_memory_engine(&self) -> Option<Box<MemoryEngine<Backend>>> {
        self.memory_engine.clone()
    }

    pub fn get_backend(&self) -> Option<Box<Backend>> {
        self.backend.clone()
    }
}

impl<Backend> Agent<Backend>
where
    Backend: AgentBackend + Sized + Default + Clone,
{
    pub fn new(
        id: Uuid,
        my_name: String,
        default_interaction: DefaultInteraction,
        llm_engine: Backend,
        memory_engine: MemoryEngine<Backend>,
    ) -> Self {
        Self {
            id,
            my_name,
            default_interaction,
            backend: Some(Box::new(llm_engine)),
            memory_engine: Some(Box::new(memory_engine)),
        }
    }
}