Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137130692
D53648.id166092.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
D53648.id166092.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D53648: misc/py-litellm: Update to 1.79.2
Attached
Detach File
Event Timeline
Log In to Comment