Spaces:
Sleeping
Sleeping
import logging | |
from typing import Optional | |
import yaml | |
from typing_extensions import Annotated | |
import typer | |
import uvicorn | |
import os | |
import webbrowser | |
from chromadb.cli.utils import set_log_file_path | |
app = typer.Typer() | |
_logo = """ | |
\033[38;5;069m((((((((( \033[38;5;203m(((((\033[38;5;220m#### | |
\033[38;5;069m(((((((((((((\033[38;5;203m(((((((((\033[38;5;220m######### | |
\033[38;5;069m(((((((((((((\033[38;5;203m(((((((((((\033[38;5;220m########### | |
\033[38;5;069m((((((((((((((\033[38;5;203m((((((((((((\033[38;5;220m############ | |
\033[38;5;069m(((((((((((((\033[38;5;203m((((((((((((((\033[38;5;220m############# | |
\033[38;5;069m(((((((((((((\033[38;5;203m((((((((((((((\033[38;5;220m############# | |
\033[38;5;069m((((((((((((\033[38;5;203m(((((((((((((\033[38;5;220m############## | |
\033[38;5;069m((((((((((((\033[38;5;203m((((((((((((\033[38;5;220m############## | |
\033[38;5;069m((((((((((\033[38;5;203m(((((((((((\033[38;5;220m############# | |
\033[38;5;069m((((((((\033[38;5;203m((((((((\033[38;5;220m############## | |
\033[38;5;069m(((((\033[38;5;203m(((( \033[38;5;220m#########\033[0m | |
""" | |
# type: ignore | |
def run( | |
path: str = typer.Option( | |
"./chroma_data", help="The path to the file or directory." | |
), | |
host: Annotated[ | |
Optional[str], typer.Option(help="The host to listen to. Default: localhost") | |
] = "localhost", | |
log_path: Annotated[ | |
Optional[str], typer.Option(help="The path to the log file.") | |
] = "chroma.log", | |
port: int = typer.Option(8000, help="The port to run the server on."), | |
test: bool = typer.Option(False, help="Test mode.", show_envvar=False, hidden=True), | |
) -> None: | |
"""Run a chroma server""" | |
print("\033[1m") # Bold logo | |
print(_logo) | |
print("\033[1m") # Bold | |
print("Running Chroma") | |
print("\033[0m") # Reset | |
typer.echo(f"\033[1mSaving data to\033[0m: \033[32m{path}\033[0m") | |
typer.echo( | |
f"\033[1mConnect to chroma at\033[0m: \033[32mhttp://{host}:{port}\033[0m" | |
) | |
typer.echo( | |
"\033[1mGetting started guide\033[0m: https://docs.trychroma.com/getting-started\n\n" | |
) | |
# set ENV variable for PERSIST_DIRECTORY to path | |
os.environ["IS_PERSISTENT"] = "True" | |
os.environ["PERSIST_DIRECTORY"] = path | |
os.environ["CHROMA_SERVER_NOFILE"] = "65535" | |
# get the path where chromadb is installed | |
chromadb_path = os.path.dirname(os.path.realpath(__file__)) | |
# this is the path of the CLI, we want to move up one directory | |
chromadb_path = os.path.dirname(chromadb_path) | |
log_config = set_log_file_path(f"{chromadb_path}/log_config.yml", f"{log_path}") | |
config = { | |
"app": "chromadb.app:app", | |
"host": host, | |
"port": port, | |
"workers": 1, | |
"log_config": log_config, # Pass the modified log_config dictionary | |
"timeout_keep_alive": 30, | |
} | |
if test: | |
return | |
uvicorn.run(**config) | |
# type: ignore | |
def help() -> None: | |
"""Opens help url in your browser""" | |
webbrowser.open("https://discord.gg/MMeYNTmh3x") | |
# type: ignore | |
def docs() -> None: | |
"""Opens docs url in your browser""" | |
webbrowser.open("https://docs.trychroma.com") | |
if __name__ == "__main__": | |
app() | |