Page MenuHomeFreeBSD

D53648.id166092.diff
No OneTemporary

D53648.id166092.diff

diff --git a/GIDs b/GIDs
--- a/GIDs
+++ b/GIDs
@@ -325,7 +325,7 @@
_tlsrpt:*:382:
cascade:*:383:
omada:*:384:
-# free: 385
+litellm:*:305:
# free: 386
# free: 387
# free: 388
diff --git a/UIDs b/UIDs
--- a/UIDs
+++ b/UIDs
@@ -331,7 +331,7 @@
_tlsrpt:*:382:382::0:0:TLSRPT Daemon:/nonexistent:/usr/sbin/nologin
cascade:*:383:383::0:0:Cascade Daemon:/var/db/cascade:/usr/sbin/nologin
omada:*:384:384::0:0:Omada Wireless Controller:/nonexistent:/usr/sbin/nologin
-# free: 385
+litellm:*:385:385::0:0:LiteLLM Daemon:/nonexistent:/usr/sbin/nologin
# free: 386
# free: 387
# free: 388
diff --git a/misc/py-litellm/Makefile b/misc/py-litellm/Makefile
--- a/misc/py-litellm/Makefile
+++ b/misc/py-litellm/Makefile
@@ -1,5 +1,6 @@
PORTNAME= litellm
-DISTVERSION= 1.79.1
+DISTVERSION= 1.79.2
+PORTREVISION= 4
CATEGORIES= misc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -13,22 +14,25 @@
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}poetry-core>0:devel/py-poetry-core@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
-RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}fastuuid>=0.13.0:devel/py-fastuuid@${PY_FLAVOR} \
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.10:www/py-aiohttp@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}click>0:devel/py-click@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}fastuuid>=0.13.0:devel/py-fastuuid@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}httpx>=0.23.0:www/py-httpx@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}openai>=1.99.5:misc/py-openai@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}python-dotenv>=0.2.0:www/py-python-dotenv@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}tiktoken>=0.7.0:textproc/py-tiktoken@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}importlib-metadata>=6.8.0:devel/py-importlib-metadata@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}tokenizers>0:textproc/py-tokenizers@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}click>0:devel/py-click@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.2<4.0.0:devel/py-Jinja2@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.10:www/py-aiohttp@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}pydantic2>=2.5.0<3.0.0:devel/py-pydantic2@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}jsonschema>=4.22.0<5.0.0:devel/py-jsonschema@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}numpydoc>0:textproc/py-numpydoc@${PY_FLAVOR}
+ ${PYTHON_PKGNAMEPREFIX}litellm-proxy-extras>=0.4.1:misc/py-litellm-proxy-extras@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}numpydoc>0:textproc/py-numpydoc@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}openai>=1.99.5:misc/py-openai@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pydantic2>=2.5.0<3.0.0:devel/py-pydantic2@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pynacl>=1.5.0:security/py-pynacl@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}python-dotenv>=0.2.0:www/py-python-dotenv@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}tiktoken>=0.7.0:textproc/py-tiktoken@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}tokenizers>0:textproc/py-tokenizers@${PY_FLAVOR}
USES= python shebangfix
USE_PYTHON= autoplist concurrent pep517
+USE_RC_SUBR= litellm
SHEBANG_FILES= litellm/proxy/start.sh
bash_CMD= ${SH}
@@ -36,9 +40,33 @@
REINPLACE_ARGS= -i ''
NO_ARCH= yes
+SUB_FILES= envvars envvars_prisma litellm litellm.yaml pkg-message
+SUB_LIST= LITELLM_DIR=${LITELLM_DIR} \
+ PYTHON_SITELIBDIR=${PYTHON_SITELIBDIR}
+
+USERS= ${LITELLM_USER}
+GROUPS= ${LITELLM_GROUP}
+
+PLIST_SUB+= LITELLM_GROUP=${LITELLM_GROUP} \
+ LITELLM_USER=${LITELLM_USER}
+
PORTDOCS= README.md
-OPTIONS_DEFINE= DOCS
+OPTIONS_DEFINE= DOCS GUNICORN HYPERCORN REDIS
+
+GUNICORN_DESC= Allow to run under gunicorn
+HYPERCORN_DESC= Allow to run under hypercorn
+
+GUNICORN_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}gunicorn>0:www/py-gunicorn@${PY_FLAVOR}
+HYPERCORN_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}hypercorn>0:www/py-hypercorn@${PY_FLAVOR}
+
+REDIS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}redis>0:databases/py-redis@${PY_FLAVOR}
+
+LITELLM_USER?= litellm
+LITELLM_GROUP?= ${LITELLM_USER}
+LITELLM_UID?= 385
+LITELLM_GID?= ${LITELLM_UID}
+LITELLM_DIR?= /var/db/litellm
post-patch:
@${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \
@@ -48,4 +76,18 @@
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_MAN} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+post-stage:
+ @${MKDIR} ${STAGEDIR}${LITELLM_DIR}
+ @${MKDIR} ${STAGEDIR}${LITELLM_DIR}/migrations
+ @${MKDIR} ${STAGEDIR}${PREFIX}/etc/litellm
+ @${ECHO} "@dir(${LITELLM_USER},${LITELLM_GROUP},0700) ${LITELLM_DIR}" >> ${TMPPLIST}
+ @${ECHO} "@dir(${LITELLM_USER},${LITELLM_GROUP},0700) ${LITELLM_DIR}/migrations" >> ${TMPPLIST}
+ @${ECHO} "@dir(${LITELLM_USER},${LITELLM_GROUP},0700) etc/${PORTNAME}" >> ${TMPPLIST}
+ ${INSTALL_DATA} ${WRKDIR}/envvars ${STAGEDIR}${PREFIX}/etc/litellm/envvars.sample
+ @${ECHO} "@sample(${LITELLM_USER},${LITELLM_GROUP},0600) etc/litellm/envvars.sample" >> ${TMPPLIST}
+ ${INSTALL_DATA} ${WRKDIR}/envvars_prisma ${STAGEDIR}${PREFIX}/etc/litellm/envvars_prisma.sample
+ @${ECHO} "@sample(${LITELLM_USER},${LITELLM_GROUP},0600) etc/litellm/envvars_prisma.sample" >> ${TMPPLIST}
+ ${INSTALL_DATA} ${WRKDIR}/litellm.yaml ${STAGEDIR}${PREFIX}/etc/litellm/litellm.yaml.sample
+ @${ECHO} "@sample(${LITELLM_USER},${LITELLM_GROUP},0600) etc/litellm/litellm.yaml.sample" >> ${TMPPLIST}
+
.include <bsd.port.mk>
diff --git a/misc/py-litellm/distinfo b/misc/py-litellm/distinfo
--- a/misc/py-litellm/distinfo
+++ b/misc/py-litellm/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1762311223
-SHA256 (litellm-1.79.1.tar.gz) = c1cf0232c01e7ad4b8442d2cdd78973ce74dfda37ad1d9f0ec3c911510e26523
-SIZE (litellm-1.79.1.tar.gz) = 11216675
+TIMESTAMP = 1762687971
+SHA256 (litellm-1.79.2.tar.gz) = af0127ca6ff4ec1397b5aa203cbf63d4e2a660899cab56d332061a11dc38436e
+SIZE (litellm-1.79.2.tar.gz) = 11303434
diff --git a/misc/py-litellm/files/envvars.in b/misc/py-litellm/files/envvars.in
new file mode 100644
--- /dev/null
+++ b/misc/py-litellm/files/envvars.in
@@ -0,0 +1,21 @@
+#
+# Environment variables for LiteLLM
+#
+# PRISMA_EXPECTED_ENGINE_VERSION is a full commit hash belonging to the tag
+# used in PRISMA_VERSION. Normally this have to match the version of
+# databases/prisma-engines (but not necessarily).
+#
+# As of 20251108, these are known:
+#
+# 6.19.0 2ba551f319ab1df4bc874a89965d8b3641056773
+#
+# The rest can be found on github in Prisma's repository https://github.com/prisma/prisma/
+# or via git rev-parse
+#
+
+export DATABASE_URL="postgresql://user:password@dbhost:5432/dbname"
+
+export LITELLM_MIGRATION_DIR="%%LITELLM_DIR%%/migrations"
+export LITELLM_SALT_KEY="sk-SALTKEY"
+
+export STORE_MODEL_IN_DB="True"
diff --git a/misc/py-litellm/files/envvars_prisma.in b/misc/py-litellm/files/envvars_prisma.in
new file mode 100644
--- /dev/null
+++ b/misc/py-litellm/files/envvars_prisma.in
@@ -0,0 +1,24 @@
+#
+# Environment variables for Prisma
+#
+# PRISMA_EXPECTED_ENGINE_VERSION is a full commit hash belonging to the tag
+# used in PRISMA_VERSION
+#
+# As of 20251108, these are known:
+#
+# 6.19.0 2ba551f319ab1df4bc874a89965d8b3641056773
+#
+# The rest can be found on github in Prisma's repository https://github.com/prisma/prisma/
+# or via git rev-parse
+#
+# For LiteLLM-specific variables, see %%LOCALBASE%%/etc/litellm/envvars
+#
+
+export PRISMA_CLI_QUERY_ENGINE_TYPE="binary"
+export PRISMA_CLIENT_ENGINE_TYPE="binary"
+export PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING="True"
+export PRISMA_EXPECTED_ENGINE_VERSION="2ba551f319ab1df4bc874a89965d8b3641056773"
+export PRISMA_FMT_BINARY="%%LOCALBASE%%/libexec/prisma-engines/prisma-fmt"
+export PRISMA_QUERY_ENGINE_BINARY="%%LOCALBASE%%/libexec/prisma-engines/query-engine"
+export PRISMA_SCHEMA_ENGINE_BINARY="%%LOCALBASE%%/libexec/prisma-engines/schema-engine"
+export PRISMA_VERSION="6.19.0"
diff --git a/misc/py-litellm/files/litellm.in b/misc/py-litellm/files/litellm.in
new file mode 100644
--- /dev/null
+++ b/misc/py-litellm/files/litellm.in
@@ -0,0 +1,139 @@
+#!/bin/sh
+#
+# PROVIDE: litellm
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf to enable litellm:
+# litellm_enable (bool): Set to "NO" by default.
+# Set it to "YES" to enable litellm.
+#
+# litellm_config (str): Path to litellm config file.
+#
+# litellm_user (str): User to run litellm as.
+#
+# litellm_group (str): Group to run litellm as.
+#
+# litellm_profiles (str): Set to "" by default.
+# Define your profiles here.
+#
+# litellm_chdir (str): Set the directory to run the litellm
+# instance in.
+# Default: /var/db/litellm
+#
+# litellm_extra_args (str): Optional parameters and arguments to
+# pass to litellm.
+#
+# litellm_envvars (str): Environment variables file to read and pass
+# to litellm
+#
+
+. /etc/rc.subr
+
+name=litellm
+rcvar=litellm_enable
+
+# set defaults
+
+load_rc_config $name
+
+: ${litellm_enable:=NO}
+: ${litellm_config:=%%PREFIX%%/etc/litellm/litellm.yaml}
+: ${litellm_user:=litellm}
+: ${litellm_group:=litellm}
+: ${litellm_chdir:=/var/db/litellm}
+: ${litellm_extra_args:=""}
+: ${litellm_envvars:="%%PREFIX%%/etc/litellm/envvars"}
+: ${litellm_svcj_options:="net_basic"}
+
+extra_commands="prismagen"
+
+_pidprefix="/var/run/litellm"
+pidfile="${_pidprefix}/${name}.pid"
+cpidfile="${_pidprefix}/${name}-worker.pid"
+command=/usr/sbin/daemon
+command_args="-P ${pidfile} -p ${cpidfile} -f -ST ${name} -t ${name} \
+ /usr/bin/env HOME=${litellm_chdir} \
+ PRISMA_HOME_DIR=${litellm_chdir} \
+ %%LOCALBASE%%/bin/litellm -c ${litellm_config} ${litellm_extra_args}"
+required_files="${litellm_config}"
+start_precmd="litellm_start_precmd"
+prismagen_precmd="litellm_prismagen_precmd"
+prismagen_cmd="litellm_prismagen"
+
+_read_envvars()
+{
+ if [ -f "%%PREFIX%%/etc/litellm/envvars_prisma" ]; then
+ . "%%PREFIX%%/etc/litellm/envvars_prisma"
+ fi
+
+ if [ -f "${litellm_envvars}" ]; then
+ . "${litellm_envvars}"
+ fi
+}
+
+if [ -n "$2" ]; then
+ profile="$2"
+ if [ "x${litellm_profiles}" != "x" ]; then
+ pidfile="${_pidprefix}/litellm-${profile}.pid"
+ cpidfile="${_pidprefix}/litellm-${profile}-worker.pid"
+ eval litellm_config="\${litellm_${profile}_config:-}"
+ eval litellm_chdir="\${litellm_${profile}_chdir:-/var/db/litellm}"
+ eval litellm_envvars="\${litellm_${profile}_envvars:-%%PREFIX%%/etc/litellm/envvars-${profile}}"
+ eval litellm_extra_args="\${litellm_${profile}_extra_args:-}"
+ eval litellm_svcj_options="\${litellm_${profile}_svcj_options:-net_basic}"
+ if [ "x${litellm_config}" = "x" ]; then
+ echo "You must define a configuration file (litellm_${profile}_config)"
+ exit 1
+ fi
+
+ _read_envvars
+
+ required_files="${litellm_config}"
+ command_args="-P ${pidfile} -p ${cpidfile} -f -ST ${name}-${profile} -t ${name}-${profile} \
+ /usr/bin/env HOME=${litellm_chdir} \
+ PRISMA_HOME_DIR=${litellm_chdir} \
+ %%LOCALBASE%%/bin/litellm -c ${litellm_config} ${litellm_extra_args}"
+ eval litellm_enable="\${litellm_${profile}_enable:-${litellm_enable}}"
+ else
+ echo "$0: extra argument ignored"
+ fi
+else
+ if [ "x${litellm_profiles}" != "x" -a "x$1" != "x" ]; then
+ for profile in ${litellm_profiles}; do
+ echo "===> litellm profile: ${profile}"
+ %%LOCALBASE%%/etc/rc.d/litellm $1 ${profile}
+ retcode="$?"
+ if [ "0${retcode}" -ne 0 ]; then
+ failed="${profile} (${retcode}) ${failed:-}"
+ else
+ success="${profile} ${success:-}"
+ fi
+ done
+ exit 0
+ fi
+fi
+
+litellm_start_precmd()
+{
+ install -d -m 0755 ${_pidprefix}
+ install -o ${litellm_user} /dev/null ${pidfile}
+ install -o ${litellm_user} /dev/null ${cpidfile}
+
+ _read_envvars
+}
+
+litellm_prismagen_precmd()
+{
+ _read_envvars
+}
+
+litellm_prismagen()
+{
+ %%LOCALBASE%%/bin/prisma generate --schema %%PYTHON_SITELIBDIR%%/litellm_proxy_extras/schema.prisma
+}
+
+
+run_rc_command "$1"
+
diff --git a/misc/py-litellm/files/litellm.yaml.in b/misc/py-litellm/files/litellm.yaml.in
new file mode 100644
--- /dev/null
+++ b/misc/py-litellm/files/litellm.yaml.in
@@ -0,0 +1,22 @@
+---
+#
+# This is the sample configuration file for litellm
+# For full description, read:
+# https://docs.litellm.ai/docs/proxy/config_settings
+#
+
+general_settings:
+ master_key: "sk-00112233445566778899"
+
+litellm_settings:
+ modify_params: true
+ transform_response: true
+ reasoning_format: "hidden"
+# To use redis cache, uncomment the following:
+# cache: true
+# cache_params:
+# type: "redis"
+# url can also contain the database number (after a slash)
+# url: "redis://redisuer:redispassword@redishost:6379"
+# namespace is an redis namespace name
+# namespace: "llmproxy.redis.cache"
diff --git a/misc/py-litellm/files/pkg-message.in b/misc/py-litellm/files/pkg-message.in
new file mode 100644
--- /dev/null
+++ b/misc/py-litellm/files/pkg-message.in
@@ -0,0 +1,14 @@
+[
+{
+type: install
+message: <<EEOOMM
+If you intend to run litellm with the database, then the prisma client
+must be generated and initialized.
+
+As root, after enabling the liltellm in rc.conf, perform the following:
+
+# %%PREFIX%%/etc/rc.d/litellm prismagen
+
+EEOOMM
+}
+]

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 22, 5:28 AM (36 m, 21 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25813313
Default Alt Text
D53648.id166092.diff (12 KB)

Event Timeline