# Copyright 2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 DISTUTILS_SINGLE_IMPL=1 PYTHON_COMPAT=( python3_{10..13} ) DISTUTILS_USE_PEP517=setuptools inherit distutils-r1 python-single-r1 systemd COMMIT="996bc8dbe141d5c233978ef7cc50cb6351498bb9" DESCRIPTION="An OAI compatible exllamav2 API that's both lightweight and fast." HOMEPAGE="https://github.com/theroyallab/tabbyAPI" SRC_URI="https://github.com/theroyallab/tabbyAPI/archive/${COMMIT}.tar.gz -> ${P}.tar.gz" LICENSE="AGPL-3" SLOT="0" KEYWORDS="~amd64" IUSE="standalone" REQUIRED_USE="${PYTHON_REQUIRED_USE}" # shellcheck disable=SC2016 RDEPEND="${PYTHON_DEPS} standalone? ( acct-group/tabbyapi acct-group/video acct-user/tabbyapi ) $(python_gen_cond_dep ' >=dev-python/aiofiles-0[${PYTHON_USEDEP}] dev-python/aiohttp[${PYTHON_USEDEP}] dev-python/async-lru[${PYTHON_USEDEP}] >=dev-python/fastapi-0.115[${PYTHON_USEDEP}] >=dev-python/formatron-0.4.11[${PYTHON_USEDEP}] >=dev-python/httptools-0.5.0[${PYTHON_USEDEP}] >=dev-python/jinja2-3.0.0[${PYTHON_USEDEP}] >=dev-python/kbnf-0.4.1[${PYTHON_USEDEP}] dev-python/loguru[${PYTHON_USEDEP}] dev-python/packaging[${PYTHON_USEDEP}] dev-python/pillow[${PYTHON_USEDEP}] dev-python/psutil[${PYTHON_USEDEP}] dev-python/pydantic[${PYTHON_USEDEP}] dev-python/pydantic-settings[${PYTHON_USEDEP}] dev-python/rich[${PYTHON_USEDEP}] dev-python/ruamel-yaml[${PYTHON_USEDEP}] >=dev-python/sse-starlette-2.2.0[${PYTHON_USEDEP}] >=dev-python/uvicorn-0.28.1[${PYTHON_USEDEP}] dev-python/uvloop[${PYTHON_USEDEP}] ') sci-ml/pytorch[${PYTHON_SINGLE_USEDEP}] sci-ml/exllamav2[${PYTHON_SINGLE_USEDEP}] sci-ml/exllamav3[${PYTHON_SINGLE_USEDEP}] sci-ml/huggingface_hub[${PYTHON_SINGLE_USEDEP}] >=sci-ml/tokenizers-0.21.0[${PYTHON_SINGLE_USEDEP}]" DEPEND="${RDEPEND}" BDEPEND="${PYTHON_DEPS}" S="${WORKDIR}/tabbyAPI-${COMMIT}" PATCHES=( "${FILESDIR}/${PN}-reorganize.patch" "${FILESDIR}/${PN}-config-path.patch" "${FILESDIR}/${PN}-auth-path.patch" ) DOCS=( README.md config_sample.yml ) src_prepare() { mkdir tabbyapi || die mv backends common endpoints main.py tabbyapi/ || die find tabbyapi -type d -exec touch {}/__init__.py \; || die find tabbyapi -name '*.py' -type f -exec sed -i \ -e 's|^from common |from tabbyapi.common |g' \ -e 's|^from common\.|from tabbyapi.common.|g' \ -e 's|^from endpoints\.|from tabbyapi.endpoints.|g' \ -e 's|^from backends\.|from tabbyapi.backends.|g' \ -e 's|^import common\b|import tabbyapi.common|g' \ -e 's|^import endpoints\b|import tabbyapi.endpoints|g' \ -e 's|^import backends\b|import tabbyapi.backends|g' \ -e 's|^ from backends\b| from tabbyapi.backends|g' \ {} + || die distutils-r1_src_prepare } src_install() { distutils-r1_src_install keepdir /var/lib/tabbyapi/loras keepdir /var/lib/tabbyapi/models insinto /var/lib/tabbyapi rm templates/place_your_templates_here.txt || die doins -r sampler_overrides templates if use standalone; then systemd_dounit "${FILESDIR}/${PN}.service" newinitd "${FILESDIR}/${PN}.initd" "${PN}" fi } pkg_postinst() { if use standalone; then chown -R tabbyapi:tabbyapi /var/lib/tabbyapi || die fi elog elog "Please copy config_sample.yml to /etc/tabbyapi/config.yml and modify it as needed." elog }