# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{12..14} )
DISTUTILS_USE_PEP517=poetry
inherit distutils-r1 pypi

MY_PN="litellm"
DESCRIPTION="Call all LLM APIs using the OpenAI format (OpenAI, Azure, Anthropic, Cohere, Groq, TogetherAI, HuggingFace, etc.)"
HOMEPAGE="
    https://litellm.ai/
    https://github.com/BerriAI/litellm
    https://pypi.org/project/litellm/
"

LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm64"

# Core dependencies (always required)
RDEPEND="
    >=dev-python/aiohttp-3.8.0[${PYTHON_USEDEP}]
    >=dev-python/click-8.0.0[${PYTHON_USEDEP}]
    >=dev-python/importlib-metadata-6.0.0[${PYTHON_USEDEP}]
    >=dev-python/jinja2-3.1.0[${PYTHON_USEDEP}]
    >=dev-python/openai-1.0.0[${PYTHON_USEDEP}]
    >=dev-python/python-dotenv-1.0.0[${PYTHON_USEDEP}]
    >=dev-python/pydantic-2.0.0[${PYTHON_USEDEP}]
    >=dev-python/requests-2.31.0[${PYTHON_USEDEP}]
    >=dev-python/tiktoken-0.12.0[${PYTHON_USEDEP}]
    >=dev-python/tokenizers-0.22.1
"

# Optional / extra dependencies (enabled via USE flags)
IUSE="proxy server ui -extra"

RDEPEND+="
    proxy? (
        >=dev-python/pyyaml-6.0[${PYTHON_USEDEP}]
        >=dev-python/gunicorn-21.2.0[${PYTHON_USEDEP}]
        >=dev-python/uvicorn-0.23.0[${PYTHON_USEDEP}]
        >=dev-python/fastapi-0.100.0[${PYTHON_USEDEP}]
    )
    server? (
        >=dev-python/fastapi-0.100.0[${PYTHON_USEDEP}]
        >=dev-python/uvicorn-0.23.0[${PYTHON_USEDEP}]
        >=dev-python/backoff-2.2.0[${PYTHON_USEDEP}]
    )
    ui? (
        >=dev-python/streamlit-1.30.0[${PYTHON_USEDEP}]
    )
    extra? (
        >=dev-python/aleph-alpha-client-2.0.0[${PYTHON_USEDEP}]
        >=dev-python/anthropic-0.8.0[${PYTHON_USEDEP}]
        >=dev-python/cohere-5.0.0[${PYTHON_USEDEP}]
        >=dev-python/databricks-sdk-0.1.0[${PYTHON_USEDEP}]
        >=dev-python/google-generativeai-0.3.0[${PYTHON_USEDEP}]
        >=dev-python/groq-0.4.0[${PYTHON_USEDEP}]
        >=dev-python/mistralai-0.1.0[${PYTHON_USEDEP}]
        >=dev-python/openrouter-0.1.0[${PYTHON_USEDEP}]
        >=dev-python/replicate-0.15.0[${PYTHON_USEDEP}]
        >=dev-python/together-0.2.0[${PYTHON_USEDEP}]
        >=dev-python/boto3-1.26.0[${PYTHON_USEDEP}]
        >=dev-python/apscheduler-3.10.0[${PYTHON_USEDEP}]
    )
"

src_prepare() {
    default

    sed -i '/poetry-dynamic-versioning/d' pyproject.toml || die

    sed -i -e '/openai[[:space:]]*==/s/==/>=/' \
           -e '/tiktoken[[:space:]]*==/s/==/>=/' \
           -e '/pydantic[[:space:]]*==/s/==/>=/' pyproject.toml || die
}

pkg_postinst() {
    einfo "litellm provides a unified OpenAI-compatible interface to 100+ LLM providers."
    einfo "Optional features:"
    einfo "  USE=proxy  - Enable proxy server (litellm --config)"
    einfo "  USE=server - Enable OpenAI-compatible API server"
    einfo "  USE=ui     - Install Streamlit UI"
    einfo "  USE=extra  - Install support for many additional providers"
}