use std::env;
use crate::error::Result;
use crate::http::HttpClient;
use crate::types::*;
const DEFAULT_URL: &str = "https://app.areev.ai";
const DEFAULT_MEMORY: &str = "default";
pub struct Areev {
inner: HttpClient,
}
impl Areev {
pub fn from_env() -> Self {
let api_key = env::var("AREEV_API_KEY").ok();
let url = env::var("AREEV_URL").unwrap_or_else(|_| DEFAULT_URL.to_string());
let memory_id = env::var("AREEV_MEMORY_ID").unwrap_or_else(|_| DEFAULT_MEMORY.to_string());
Self {
inner: HttpClient::new(&url, &memory_id, api_key.as_deref()),
}
}
pub fn new(api_key: Option<&str>, url: Option<&str>, memory_id: Option<&str>) -> Self {
Self {
inner: HttpClient::new(
url.unwrap_or(DEFAULT_URL),
memory_id.unwrap_or(DEFAULT_MEMORY),
api_key,
),
}
}
pub async fn remember(&self, text: &str) -> Result<RememberResponse> {
let req = RememberRequest {
text: text.to_string(),
sync: Some(true),
keep_source: None,
namespace: None,
user_id: None,
tags: None,
source_type: None,
created_at: None,
confidence: None,
extract_event_date: None,
auto_relate: None,
};
self.inner.remember(&req).await
}
pub async fn recall(&self, query: &str) -> Result<RecallResponse> {
let req = RecallRequest {
query: Some(query.to_string()),
limit: Some(10),
..Default::default()
};
self.inner.recall(&req).await
}
pub async fn forget(&self, hash: &str) -> Result<()> {
self.inner.forget(hash).await
}
pub async fn add(&self, req: &AddRequest) -> Result<AddResponse> {
self.inner.add(req).await
}
pub async fn get(&self, hash: &str) -> Result<GetResponse> {
self.inner.get(hash).await
}
pub async fn supersede(&self, req: &SupersedeRequest) -> Result<SupersedeResponse> {
self.inner.supersede(req).await
}
pub async fn health(&self) -> Result<HealthResponse> {
self.inner.health().await
}
pub async fn stats(&self) -> Result<StatsResponse> {
self.inner.stats().await
}
pub async fn flush(&self) -> Result<()> {
self.inner.flush().await
}
}