use crate::chroma::create_client;
use crate::error::RuChatError;
use anyhow::Result;
use chromadb::collection::ChromaCollection;
use clap::Parser;
#[derive(Parser, Debug, Clone, PartialEq)]
pub struct ChromaLsArgs {
#[clap(short, long, default_value = "default")]
pub(crate) collection: String,
#[clap(short = 'C', long, default_value = "http://localhost:8000")]
pub(crate) chroma_server: String,
#[clap(short = 'd', long, default_value = "default")]
pub(crate) chroma_database: String,
#[clap(short = 't', long)]
pub(crate) chroma_token: Option<String>,
}
pub(crate) async fn chroma_ls(args: &ChromaLsArgs) -> Result<(), RuChatError> {
let client = create_client(
args.chroma_token.as_deref(),
&args.chroma_server,
&args.chroma_database,
)
.await?;
let collection: ChromaCollection = client
.get_or_create_collection(&args.collection, None)
.await?;
eprintln!("Collection Name: {}", collection.name());
eprintln!("Collection ID: {}", collection.id());
eprintln!("Collection Metadata: {:?}", collection.metadata());
eprintln!("Collection Count: {}", collection.count().await?);
Ok(())
}