mirror of
https://github.com/tiennm99/DocsGPT.git
synced 2026-10-04 22:13:08 +00:00
- The image pins DOCSGPT_HOME=/app: it ships no checkout, so the data home no longer depends on the working directory. - api, worker, beat and migrate print the data home and env file they resolved, so an API and a worker started from different directories show it. - The worker passes -Q only when asked; a bare worker consumes every configured queue, which honours EMBEDDINGS_QUEUE and DOCUMENT_PARSE_QUEUE. - The worker runs through celery.start and returns its exit code; click usage errors print usage and exit 2 instead of a traceback. - Windows: solo pool and no embedded scheduler (celery rejects -B there), with a pointer to the new `docsgpt beat` command, which runs the scheduler on its own. - prefetch_models and verify_offline parse their arguments, so --help is help rather than a model name. - A DOCSGPT_ENV_FILE that is not a file raises instead of booting with defaults.
51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
"""Where DocsGPT keeps its files.
|
|
|
|
Three locations matter. The package directory holds code and the data that
|
|
ships with it (prompts, model catalogs, migrations). A checkout, when the
|
|
package is imported from one, is the directory holding ``pyproject.toml``.
|
|
The data home is where runtime data lives: ``.env``, ``inputs``, ``indexes``.
|
|
|
|
The home is ``DOCSGPT_HOME`` when set, else the checkout, else the current
|
|
directory. That keeps a source checkout and the Docker image (which runs from
|
|
``/app`` with the package beside it) behaving as before, and gives a
|
|
``pip install docsgpt`` user a home that is not ``site-packages``.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
HOME_ENV = "DOCSGPT_HOME"
|
|
ENV_FILE_ENV = "DOCSGPT_ENV_FILE"
|
|
|
|
|
|
def package_dir() -> Path:
|
|
"""The installed ``docsgpt`` package directory."""
|
|
return Path(__file__).resolve().parent.parent
|
|
|
|
|
|
def checkout_root() -> Path | None:
|
|
"""The source checkout the package is imported from, or None when installed."""
|
|
root = package_dir().parent
|
|
return root if (root / "pyproject.toml").is_file() else None
|
|
|
|
|
|
def home_dir() -> Path:
|
|
"""Directory for runtime data: ``DOCSGPT_HOME``, else the checkout, else cwd."""
|
|
configured = os.environ.get(HOME_ENV)
|
|
if configured:
|
|
return Path(configured).expanduser().resolve()
|
|
return checkout_root() or Path.cwd()
|
|
|
|
|
|
def env_file() -> Path:
|
|
"""The ``.env`` file settings load: ``DOCSGPT_ENV_FILE``, else ``<home>/.env``."""
|
|
configured = os.environ.get(ENV_FILE_ENV)
|
|
if configured:
|
|
path = Path(configured).expanduser()
|
|
if not path.is_file():
|
|
raise FileNotFoundError(f"{ENV_FILE_ENV} is set to {path}, which is not a file")
|
|
return path
|
|
return home_dir() / ".env"
|