NVFP4 quant of Qwen3.8-27B-Uncensored (llmcompressor 0.13, W4A4, 5090-tested)
Browse files- .gitattributes +4 -0
- .venv-serve/.gitignore +1 -0
- .venv-serve/CACHEDIR.TAG +1 -0
- .venv-serve/bin/activate +130 -0
- .venv-serve/bin/activate.bat +71 -0
- .venv-serve/bin/activate.csh +76 -0
- .venv-serve/bin/activate.fish +127 -0
- .venv-serve/bin/activate.nu +104 -0
- .venv-serve/bin/activate.ps1 +82 -0
- .venv-serve/bin/activate.xsh +102 -0
- .venv-serve/bin/activate_this.py +59 -0
- .venv-serve/bin/deactivate.bat +39 -0
- .venv-serve/bin/pydoc.bat +22 -0
- .venv-serve/bin/python +3 -0
- .venv-serve/bin/python3 +3 -0
- .venv-serve/bin/python3.12 +3 -0
- .venv-serve/lib/python3.12/site-packages/_virtualenv.pth +3 -0
- .venv-serve/lib/python3.12/site-packages/_virtualenv.py +121 -0
- .venv-serve/pyvenv.cfg +5 -0
- README.md +132 -0
- chat_template.jinja +170 -0
- config.json +398 -0
- generation_config.json +13 -0
- model.safetensors +3 -0
- preprocessor_config.json +21 -0
- processor_config.json +60 -0
- recipe.yaml +8 -0
- tokenizer.json +3 -0
- tokenizer_config.json +33 -0
- video_preprocessor_config.json +21 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
.venv-serve/bin/python filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
.venv-serve/bin/python3 filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
.venv-serve/bin/python3.12 filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
.venv-serve/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
*
|
.venv-serve/CACHEDIR.TAG
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Signature: 8a477f597d28d172789f06886806bc55
|
.venv-serve/bin/activate
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
# This file must be used with "source bin/activate" *from bash*
|
| 23 |
+
# you cannot run it directly
|
| 24 |
+
|
| 25 |
+
if ! [ -z "${SCRIPT_PATH+_}" ] ; then
|
| 26 |
+
_OLD_SCRIPT_PATH="$SCRIPT_PATH"
|
| 27 |
+
fi
|
| 28 |
+
|
| 29 |
+
# Get script path (only used if environment is relocatable).
|
| 30 |
+
if [ -n "${BASH_VERSION:+x}" ] ; then
|
| 31 |
+
SCRIPT_PATH="${BASH_SOURCE[0]}"
|
| 32 |
+
if [ "$SCRIPT_PATH" = "$0" ]; then
|
| 33 |
+
# Only bash has a reasonably robust check for source'dness.
|
| 34 |
+
echo "You must source this script: \$ source $0" >&2
|
| 35 |
+
exit 33
|
| 36 |
+
fi
|
| 37 |
+
elif [ -n "${ZSH_VERSION:+x}" ] ; then
|
| 38 |
+
SCRIPT_PATH="${(%):-%x}"
|
| 39 |
+
elif [ -n "${KSH_VERSION:+x}" ] ; then
|
| 40 |
+
SCRIPT_PATH="${.sh.file}"
|
| 41 |
+
fi
|
| 42 |
+
|
| 43 |
+
deactivate () {
|
| 44 |
+
unset -f pydoc >/dev/null 2>&1 || true
|
| 45 |
+
|
| 46 |
+
# reset old environment variables
|
| 47 |
+
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
|
| 48 |
+
if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
|
| 49 |
+
PATH="$_OLD_VIRTUAL_PATH"
|
| 50 |
+
export PATH
|
| 51 |
+
unset _OLD_VIRTUAL_PATH
|
| 52 |
+
fi
|
| 53 |
+
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
|
| 54 |
+
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
|
| 55 |
+
export PYTHONHOME
|
| 56 |
+
unset _OLD_VIRTUAL_PYTHONHOME
|
| 57 |
+
fi
|
| 58 |
+
|
| 59 |
+
# The hash command must be called to get it to forget past
|
| 60 |
+
# commands. Without forgetting past commands the $PATH changes
|
| 61 |
+
# we made may not be respected
|
| 62 |
+
hash -r 2>/dev/null
|
| 63 |
+
|
| 64 |
+
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
|
| 65 |
+
PS1="$_OLD_VIRTUAL_PS1"
|
| 66 |
+
export PS1
|
| 67 |
+
unset _OLD_VIRTUAL_PS1
|
| 68 |
+
fi
|
| 69 |
+
|
| 70 |
+
unset VIRTUAL_ENV
|
| 71 |
+
unset VIRTUAL_ENV_PROMPT
|
| 72 |
+
if [ ! "${1-}" = "nondestructive" ] ; then
|
| 73 |
+
# Self destruct!
|
| 74 |
+
unset -f deactivate
|
| 75 |
+
fi
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
# unset irrelevant variables
|
| 79 |
+
deactivate nondestructive
|
| 80 |
+
|
| 81 |
+
VIRTUAL_ENV='/home/preetpatel/Developer/qwen-nvfp4/Qwen3.8-27B-Uncensored-NVFP4/.venv-serve'
|
| 82 |
+
if ([ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]) && $(command -v cygpath &> /dev/null) ; then
|
| 83 |
+
VIRTUAL_ENV=$(cygpath -u "$VIRTUAL_ENV")
|
| 84 |
+
fi
|
| 85 |
+
export VIRTUAL_ENV
|
| 86 |
+
|
| 87 |
+
# Unset the `SCRIPT_PATH` variable, now that the `VIRTUAL_ENV` variable
|
| 88 |
+
# has been set. This is important for relocatable environments.
|
| 89 |
+
if ! [ -z "${_OLD_SCRIPT_PATH+_}" ] ; then
|
| 90 |
+
SCRIPT_PATH="$_OLD_SCRIPT_PATH"
|
| 91 |
+
export SCRIPT_PATH
|
| 92 |
+
unset _OLD_SCRIPT_PATH
|
| 93 |
+
else
|
| 94 |
+
unset SCRIPT_PATH
|
| 95 |
+
fi
|
| 96 |
+
|
| 97 |
+
_OLD_VIRTUAL_PATH="$PATH"
|
| 98 |
+
PATH="$VIRTUAL_ENV/bin:$PATH"
|
| 99 |
+
export PATH
|
| 100 |
+
|
| 101 |
+
if [ "x" != x ] ; then
|
| 102 |
+
VIRTUAL_ENV_PROMPT=""
|
| 103 |
+
else
|
| 104 |
+
VIRTUAL_ENV_PROMPT=$(basename "$VIRTUAL_ENV")
|
| 105 |
+
fi
|
| 106 |
+
export VIRTUAL_ENV_PROMPT
|
| 107 |
+
|
| 108 |
+
# unset PYTHONHOME if set
|
| 109 |
+
if ! [ -z "${PYTHONHOME+_}" ] ; then
|
| 110 |
+
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
|
| 111 |
+
unset PYTHONHOME
|
| 112 |
+
fi
|
| 113 |
+
|
| 114 |
+
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
|
| 115 |
+
_OLD_VIRTUAL_PS1="${PS1-}"
|
| 116 |
+
PS1="(${VIRTUAL_ENV_PROMPT}) ${PS1-}"
|
| 117 |
+
export PS1
|
| 118 |
+
fi
|
| 119 |
+
|
| 120 |
+
# Make sure to unalias pydoc if it's already there
|
| 121 |
+
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
|
| 122 |
+
|
| 123 |
+
pydoc () {
|
| 124 |
+
python -m pydoc "$@"
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
# The hash command must be called to get it to forget past
|
| 128 |
+
# commands. Without forgetting past commands the $PATH changes
|
| 129 |
+
# we made may not be respected
|
| 130 |
+
hash -r 2>/dev/null || true
|
.venv-serve/bin/activate.bat
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@REM Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
@REM
|
| 3 |
+
@REM Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
@REM a copy of this software and associated documentation files (the
|
| 5 |
+
@REM "Software"), to deal in the Software without restriction, including
|
| 6 |
+
@REM without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
@REM distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
@REM permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
@REM the following conditions:
|
| 10 |
+
@REM
|
| 11 |
+
@REM The above copyright notice and this permission notice shall be
|
| 12 |
+
@REM included in all copies or substantial portions of the Software.
|
| 13 |
+
@REM
|
| 14 |
+
@REM THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
@REM EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
@REM MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
@REM NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
@REM LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
@REM OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
@REM WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
@REM This file is UTF-8 encoded, so we need to update the current code page while executing it
|
| 23 |
+
@for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do @set _OLD_CODEPAGE=%%a
|
| 24 |
+
|
| 25 |
+
@if defined _OLD_CODEPAGE (
|
| 26 |
+
"%SystemRoot%\System32\chcp.com" 65001 > nul
|
| 27 |
+
)
|
| 28 |
+
|
| 29 |
+
@for %%i in ("/home/preetpatel/Developer/qwen-nvfp4/Qwen3.8-27B-Uncensored-NVFP4/.venv-serve") do @set "VIRTUAL_ENV=%%~fi"
|
| 30 |
+
|
| 31 |
+
@set "VIRTUAL_ENV_PROMPT="
|
| 32 |
+
@if NOT DEFINED VIRTUAL_ENV_PROMPT (
|
| 33 |
+
@for %%d in ("%VIRTUAL_ENV%") do @set "VIRTUAL_ENV_PROMPT=%%~nxd"
|
| 34 |
+
)
|
| 35 |
+
|
| 36 |
+
@if defined _OLD_VIRTUAL_PROMPT (
|
| 37 |
+
@set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
|
| 38 |
+
) else (
|
| 39 |
+
@if not defined PROMPT (
|
| 40 |
+
@set "PROMPT=$P$G"
|
| 41 |
+
)
|
| 42 |
+
@if not defined VIRTUAL_ENV_DISABLE_PROMPT (
|
| 43 |
+
@set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
|
| 44 |
+
)
|
| 45 |
+
)
|
| 46 |
+
@if not defined VIRTUAL_ENV_DISABLE_PROMPT (
|
| 47 |
+
@set "PROMPT=(%VIRTUAL_ENV_PROMPT%) %PROMPT%"
|
| 48 |
+
)
|
| 49 |
+
|
| 50 |
+
@REM Don't use () to avoid problems with them in %PATH%
|
| 51 |
+
@if defined _OLD_VIRTUAL_PYTHONHOME @goto ENDIFVHOME
|
| 52 |
+
@set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
|
| 53 |
+
:ENDIFVHOME
|
| 54 |
+
|
| 55 |
+
@set PYTHONHOME=
|
| 56 |
+
|
| 57 |
+
@REM if defined _OLD_VIRTUAL_PATH (
|
| 58 |
+
@if not defined _OLD_VIRTUAL_PATH @goto ENDIFVPATH1
|
| 59 |
+
@set "PATH=%_OLD_VIRTUAL_PATH%"
|
| 60 |
+
:ENDIFVPATH1
|
| 61 |
+
@REM ) else (
|
| 62 |
+
@if defined _OLD_VIRTUAL_PATH @goto ENDIFVPATH2
|
| 63 |
+
@set "_OLD_VIRTUAL_PATH=%PATH%"
|
| 64 |
+
:ENDIFVPATH2
|
| 65 |
+
|
| 66 |
+
@set "PATH=%VIRTUAL_ENV%\bin;%PATH%"
|
| 67 |
+
|
| 68 |
+
@if defined _OLD_CODEPAGE (
|
| 69 |
+
"%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
|
| 70 |
+
@set _OLD_CODEPAGE=
|
| 71 |
+
)
|
.venv-serve/bin/activate.csh
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
# This file must be used with "source bin/activate.csh" *from csh*.
|
| 23 |
+
# You cannot run it directly.
|
| 24 |
+
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
| 25 |
+
|
| 26 |
+
set newline='\
|
| 27 |
+
'
|
| 28 |
+
|
| 29 |
+
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
|
| 30 |
+
|
| 31 |
+
# Unset irrelevant variables.
|
| 32 |
+
deactivate nondestructive
|
| 33 |
+
|
| 34 |
+
setenv VIRTUAL_ENV '/home/preetpatel/Developer/qwen-nvfp4/Qwen3.8-27B-Uncensored-NVFP4/.venv-serve'
|
| 35 |
+
|
| 36 |
+
set _OLD_VIRTUAL_PATH="$PATH:q"
|
| 37 |
+
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
if ('' != "") then
|
| 42 |
+
setenv VIRTUAL_ENV_PROMPT ''
|
| 43 |
+
else
|
| 44 |
+
setenv VIRTUAL_ENV_PROMPT "$VIRTUAL_ENV:t:q"
|
| 45 |
+
endif
|
| 46 |
+
|
| 47 |
+
if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
|
| 48 |
+
if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
|
| 49 |
+
set do_prompt = "1"
|
| 50 |
+
else
|
| 51 |
+
set do_prompt = "0"
|
| 52 |
+
endif
|
| 53 |
+
else
|
| 54 |
+
set do_prompt = "1"
|
| 55 |
+
endif
|
| 56 |
+
|
| 57 |
+
if ( $do_prompt == "1" ) then
|
| 58 |
+
# Could be in a non-interactive environment,
|
| 59 |
+
# in which case, $prompt is undefined and we wouldn't
|
| 60 |
+
# care about the prompt anyway.
|
| 61 |
+
if ( $?prompt ) then
|
| 62 |
+
set _OLD_VIRTUAL_PROMPT="$prompt:q"
|
| 63 |
+
if ( "$prompt:q" =~ *"$newline:q"* ) then
|
| 64 |
+
:
|
| 65 |
+
else
|
| 66 |
+
set prompt = '('"$VIRTUAL_ENV_PROMPT:q"') '"$prompt:q"
|
| 67 |
+
endif
|
| 68 |
+
endif
|
| 69 |
+
endif
|
| 70 |
+
|
| 71 |
+
unset env_name
|
| 72 |
+
unset do_prompt
|
| 73 |
+
|
| 74 |
+
alias pydoc python -m pydoc
|
| 75 |
+
|
| 76 |
+
rehash
|
.venv-serve/bin/activate.fish
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
|
| 23 |
+
# Do not run it directly.
|
| 24 |
+
|
| 25 |
+
function _bashify_path -d "Converts a fish path to something bash can recognize"
|
| 26 |
+
set fishy_path $argv
|
| 27 |
+
set bashy_path $fishy_path[1]
|
| 28 |
+
for path_part in $fishy_path[2..-1]
|
| 29 |
+
set bashy_path "$bashy_path:$path_part"
|
| 30 |
+
end
|
| 31 |
+
echo $bashy_path
|
| 32 |
+
end
|
| 33 |
+
|
| 34 |
+
function _fishify_path -d "Converts a bash path to something fish can recognize"
|
| 35 |
+
echo $argv | tr ':' '\n'
|
| 36 |
+
end
|
| 37 |
+
|
| 38 |
+
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
|
| 39 |
+
# reset old environment variables
|
| 40 |
+
if test -n "$_OLD_VIRTUAL_PATH"
|
| 41 |
+
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
|
| 42 |
+
if test (string sub -s 1 -l 1 $FISH_VERSION) -lt 3
|
| 43 |
+
set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
|
| 44 |
+
else
|
| 45 |
+
set -gx PATH $_OLD_VIRTUAL_PATH
|
| 46 |
+
end
|
| 47 |
+
set -e _OLD_VIRTUAL_PATH
|
| 48 |
+
end
|
| 49 |
+
|
| 50 |
+
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
| 51 |
+
set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
|
| 52 |
+
set -e _OLD_VIRTUAL_PYTHONHOME
|
| 53 |
+
end
|
| 54 |
+
|
| 55 |
+
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
| 56 |
+
and functions -q _old_fish_prompt
|
| 57 |
+
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
|
| 58 |
+
set -l fish_function_path
|
| 59 |
+
|
| 60 |
+
# Erase virtualenv's `fish_prompt` and restore the original.
|
| 61 |
+
functions -e fish_prompt
|
| 62 |
+
functions -c _old_fish_prompt fish_prompt
|
| 63 |
+
functions -e _old_fish_prompt
|
| 64 |
+
set -e _OLD_FISH_PROMPT_OVERRIDE
|
| 65 |
+
end
|
| 66 |
+
|
| 67 |
+
set -e VIRTUAL_ENV
|
| 68 |
+
set -e VIRTUAL_ENV_PROMPT
|
| 69 |
+
|
| 70 |
+
if test "$argv[1]" != 'nondestructive'
|
| 71 |
+
# Self-destruct!
|
| 72 |
+
functions -e pydoc
|
| 73 |
+
functions -e deactivate
|
| 74 |
+
functions -e _bashify_path
|
| 75 |
+
functions -e _fishify_path
|
| 76 |
+
end
|
| 77 |
+
end
|
| 78 |
+
|
| 79 |
+
# Unset irrelevant variables.
|
| 80 |
+
deactivate nondestructive
|
| 81 |
+
|
| 82 |
+
set -gx VIRTUAL_ENV '/home/preetpatel/Developer/qwen-nvfp4/Qwen3.8-27B-Uncensored-NVFP4/.venv-serve'
|
| 83 |
+
if string match -qr 'CYGWIN|MSYS|MINGW' (uname); and command -s cygpath >/dev/null
|
| 84 |
+
set -gx VIRTUAL_ENV (cygpath -u "$VIRTUAL_ENV")
|
| 85 |
+
end
|
| 86 |
+
|
| 87 |
+
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
|
| 88 |
+
if test (string sub -s 1 -l 1 $FISH_VERSION) -lt 3
|
| 89 |
+
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
|
| 90 |
+
else
|
| 91 |
+
set -gx _OLD_VIRTUAL_PATH $PATH
|
| 92 |
+
end
|
| 93 |
+
set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
|
| 94 |
+
|
| 95 |
+
# Prompt override provided?
|
| 96 |
+
# If not, just use the environment name.
|
| 97 |
+
if test -n ''
|
| 98 |
+
set -gx VIRTUAL_ENV_PROMPT ''
|
| 99 |
+
else
|
| 100 |
+
set -gx VIRTUAL_ENV_PROMPT (basename "$VIRTUAL_ENV")
|
| 101 |
+
end
|
| 102 |
+
|
| 103 |
+
# Unset `$PYTHONHOME` if set.
|
| 104 |
+
if set -q PYTHONHOME
|
| 105 |
+
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
| 106 |
+
set -e PYTHONHOME
|
| 107 |
+
end
|
| 108 |
+
|
| 109 |
+
function pydoc
|
| 110 |
+
python -m pydoc $argv
|
| 111 |
+
end
|
| 112 |
+
|
| 113 |
+
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
| 114 |
+
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
|
| 115 |
+
functions -c fish_prompt _old_fish_prompt
|
| 116 |
+
|
| 117 |
+
function fish_prompt
|
| 118 |
+
# Run the user's prompt first; it might depend on (pipe)status.
|
| 119 |
+
set -l prompt (_old_fish_prompt)
|
| 120 |
+
|
| 121 |
+
printf '(%s) ' $VIRTUAL_ENV_PROMPT
|
| 122 |
+
|
| 123 |
+
string join -- \n $prompt # handle multi-line prompts
|
| 124 |
+
end
|
| 125 |
+
|
| 126 |
+
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
| 127 |
+
end
|
.venv-serve/bin/activate.nu
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
# virtualenv activation module:
|
| 23 |
+
# - Activate with `overlay use activate.nu`
|
| 24 |
+
# - Deactivate with `deactivate`, as usual
|
| 25 |
+
#
|
| 26 |
+
# To customize the overlay name, call `overlay use activate.nu as foo`, but then `deactivate` won't work -
|
| 27 |
+
# you'd need to run `overlay hide foo` manually. Do not activate with `use activate.nu *`; that does not
|
| 28 |
+
# create an overlay and deactivation will fail.
|
| 29 |
+
|
| 30 |
+
module warning {
|
| 31 |
+
export-env {
|
| 32 |
+
const file = path self
|
| 33 |
+
error make -u {
|
| 34 |
+
msg: $"`($file | path basename)` is meant to be used with `overlay use`, not `source`"
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
use warning
|
| 41 |
+
|
| 42 |
+
export-env {
|
| 43 |
+
|
| 44 |
+
let nu_ver = (version | get version | split row '.' | take 2 | each { into int })
|
| 45 |
+
if $nu_ver.0 == 0 and $nu_ver.1 < 106 {
|
| 46 |
+
error make {
|
| 47 |
+
msg: 'virtualenv Nushell activation requires Nushell 0.106 or greater.'
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
def is-string [x] {
|
| 52 |
+
($x | describe) == 'string'
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
def has-env [...names] {
|
| 56 |
+
$names | each {|n| $n in $env } | all {|i| $i }
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
def is-env-true [name: string] {
|
| 60 |
+
if (has-env $name) {
|
| 61 |
+
let val = ($env | get --optional $name)
|
| 62 |
+
if ($val | describe) == 'bool' {
|
| 63 |
+
$val
|
| 64 |
+
} else {
|
| 65 |
+
not ($val | is-empty)
|
| 66 |
+
}
|
| 67 |
+
} else {
|
| 68 |
+
false
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
let virtual_env = '/home/preetpatel/Developer/qwen-nvfp4/Qwen3.8-27B-Uncensored-NVFP4/.venv-serve'
|
| 73 |
+
let bin = 'bin'
|
| 74 |
+
let path_name = if (has-env 'Path') { 'Path' } else { 'PATH' }
|
| 75 |
+
let venv_path = ([$virtual_env $bin] | path join)
|
| 76 |
+
let new_path = ($env | get $path_name | prepend $venv_path)
|
| 77 |
+
let virtual_env_prompt = if ('' | is-empty) {
|
| 78 |
+
($virtual_env | path basename)
|
| 79 |
+
} else {
|
| 80 |
+
''
|
| 81 |
+
}
|
| 82 |
+
let new_env = { $path_name: $new_path VIRTUAL_ENV: $virtual_env VIRTUAL_ENV_PROMPT: $virtual_env_prompt }
|
| 83 |
+
let old_prompt_command = if (has-env 'PROMPT_COMMAND') { $env.PROMPT_COMMAND } else { '' }
|
| 84 |
+
let new_env = if (is-env-true 'VIRTUAL_ENV_DISABLE_PROMPT') {
|
| 85 |
+
$new_env
|
| 86 |
+
} else {
|
| 87 |
+
let virtual_prefix = $'(char lparen)($virtual_env_prompt)(char rparen) '
|
| 88 |
+
let new_prompt = if (has-env 'PROMPT_COMMAND') {
|
| 89 |
+
if ('closure' in ($old_prompt_command | describe)) {
|
| 90 |
+
{|| $'($virtual_prefix)(do $old_prompt_command)' }
|
| 91 |
+
} else {
|
| 92 |
+
{|| $'($virtual_prefix)($old_prompt_command)' }
|
| 93 |
+
}
|
| 94 |
+
} else {
|
| 95 |
+
{|| $'($virtual_prefix)' }
|
| 96 |
+
}
|
| 97 |
+
$new_env | merge { PROMPT_COMMAND: $new_prompt VIRTUAL_PREFIX: $virtual_prefix }
|
| 98 |
+
}
|
| 99 |
+
load-env $new_env
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
export alias pydoc = python -m pydoc
|
| 103 |
+
# If deactivate errors "not an active overlay": activate with `overlay use activate.nu` not `use activate.nu *`; for custom names use `overlay hide NAME`
|
| 104 |
+
export alias deactivate = overlay hide activate
|
.venv-serve/bin/activate.ps1
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
$script:THIS_PATH = $myinvocation.mycommand.path
|
| 23 |
+
$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
|
| 24 |
+
|
| 25 |
+
function global:deactivate([switch] $NonDestructive) {
|
| 26 |
+
if (Test-Path variable:_OLD_VIRTUAL_PATH) {
|
| 27 |
+
$env:PATH = $variable:_OLD_VIRTUAL_PATH
|
| 28 |
+
Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
if (Test-Path function:_old_virtual_prompt) {
|
| 32 |
+
$function:prompt = $function:_old_virtual_prompt
|
| 33 |
+
Remove-Item function:\_old_virtual_prompt
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
if ($env:VIRTUAL_ENV) {
|
| 37 |
+
Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
if ($env:VIRTUAL_ENV_PROMPT) {
|
| 41 |
+
Remove-Item env:VIRTUAL_ENV_PROMPT -ErrorAction SilentlyContinue
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
if (!$NonDestructive) {
|
| 45 |
+
# Self destruct!
|
| 46 |
+
Remove-Item function:deactivate
|
| 47 |
+
Remove-Item function:pydoc
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
function global:pydoc {
|
| 52 |
+
& python -m pydoc $args
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
# unset irrelevant variables
|
| 56 |
+
deactivate -nondestructive
|
| 57 |
+
|
| 58 |
+
$VIRTUAL_ENV = $BASE_DIR
|
| 59 |
+
$env:VIRTUAL_ENV = $VIRTUAL_ENV
|
| 60 |
+
|
| 61 |
+
if ("" -ne "") {
|
| 62 |
+
$env:VIRTUAL_ENV_PROMPT = ""
|
| 63 |
+
}
|
| 64 |
+
else {
|
| 65 |
+
$env:VIRTUAL_ENV_PROMPT = $( Split-Path $env:VIRTUAL_ENV -Leaf )
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
|
| 69 |
+
|
| 70 |
+
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
|
| 71 |
+
if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
| 72 |
+
function global:_old_virtual_prompt {
|
| 73 |
+
""
|
| 74 |
+
}
|
| 75 |
+
$function:_old_virtual_prompt = $function:prompt
|
| 76 |
+
|
| 77 |
+
function global:prompt {
|
| 78 |
+
# Add the custom prefix to the existing prompt
|
| 79 |
+
$previous_prompt_value = & $function:_old_virtual_prompt
|
| 80 |
+
("(" + $env:VIRTUAL_ENV_PROMPT + ") " + $previous_prompt_value)
|
| 81 |
+
}
|
| 82 |
+
}
|
.venv-serve/bin/activate.xsh
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
# This file must be used with "source bin/activate.xsh" *from xonsh*.
|
| 23 |
+
# You cannot run it directly.
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
class _VirtualEnvActivator:
|
| 27 |
+
"""xonsh activation for virtualenv."""
|
| 28 |
+
|
| 29 |
+
# Stashed in _OLD_VIRTUAL_{name} when the variable was not set before
|
| 30 |
+
# activation. deactivate treats this as "unset" rather than "restore to
|
| 31 |
+
# this string".
|
| 32 |
+
_UNSET_SENTINEL = "__virtualenv_was_not_set__"
|
| 33 |
+
|
| 34 |
+
def __init__(self):
|
| 35 |
+
from os.path import dirname, realpath
|
| 36 |
+
|
| 37 |
+
self.env = __xonsh__.env
|
| 38 |
+
self.embedded_virtual_env = dirname(dirname(realpath(__file__)))
|
| 39 |
+
self.embedded_virtual_prompt = b"".decode("utf-8")
|
| 40 |
+
self.embedded_bin_name = __import__("os").fsdecode(b"bin")
|
| 41 |
+
self.managed_vars = ("PATH", "PYTHONHOME")
|
| 42 |
+
|
| 43 |
+
def _backup_name(self, name):
|
| 44 |
+
return f"_OLD_VIRTUAL_{name}"
|
| 45 |
+
|
| 46 |
+
def _save(self, name):
|
| 47 |
+
backup = self._backup_name(name)
|
| 48 |
+
self.env[backup] = self.env[name] if name in self.env else self._UNSET_SENTINEL
|
| 49 |
+
|
| 50 |
+
def _override(self, name, value):
|
| 51 |
+
self._save(name)
|
| 52 |
+
self.env[name] = value
|
| 53 |
+
|
| 54 |
+
def _drop(self, name):
|
| 55 |
+
self._save(name)
|
| 56 |
+
self.env.pop(name, None)
|
| 57 |
+
|
| 58 |
+
def register_pydoc(self):
|
| 59 |
+
aliases["pydoc"] = ["python", "-m", "pydoc"]
|
| 60 |
+
|
| 61 |
+
def unregister_pydoc(self):
|
| 62 |
+
aliases.pop("pydoc", None)
|
| 63 |
+
|
| 64 |
+
def activate(self):
|
| 65 |
+
from os.path import basename, join
|
| 66 |
+
|
| 67 |
+
aliases["deactivate"] = self.deactivate
|
| 68 |
+
self.deactivate(["nondestructive"]) # wipe any stale state from a prior activation
|
| 69 |
+
|
| 70 |
+
$VIRTUAL_ENV = self.embedded_virtual_env
|
| 71 |
+
$VIRTUAL_ENV_PROMPT = self.embedded_virtual_prompt or basename($VIRTUAL_ENV)
|
| 72 |
+
|
| 73 |
+
self._override("PATH", [join($VIRTUAL_ENV, self.embedded_bin_name), *$PATH])
|
| 74 |
+
self._drop("PYTHONHOME")
|
| 75 |
+
self.register_pydoc()
|
| 76 |
+
|
| 77 |
+
def deactivate(self, args=None):
|
| 78 |
+
for name in self.managed_vars:
|
| 79 |
+
backup = self._backup_name(name)
|
| 80 |
+
if backup not in self.env:
|
| 81 |
+
continue
|
| 82 |
+
previous = self.env[backup]
|
| 83 |
+
del self.env[backup]
|
| 84 |
+
if previous == self._UNSET_SENTINEL:
|
| 85 |
+
self.env.pop(name, None)
|
| 86 |
+
else:
|
| 87 |
+
self.env[name] = previous
|
| 88 |
+
for name in ("VIRTUAL_ENV", "VIRTUAL_ENV_PROMPT"):
|
| 89 |
+
self.env.pop(name, None)
|
| 90 |
+
self.unregister_pydoc()
|
| 91 |
+
if args is None or "nondestructive" not in args:
|
| 92 |
+
del aliases["deactivate"]
|
| 93 |
+
try:
|
| 94 |
+
del __xonsh__.xontrib.virtualenv
|
| 95 |
+
except AttributeError:
|
| 96 |
+
pass
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
if not hasattr(__xonsh__, "xontrib"):
|
| 100 |
+
__xonsh__.xontrib = __xonsh__.imp.types.SimpleNamespace()
|
| 101 |
+
__xonsh__.xontrib.virtualenv = _VirtualEnvActivator()
|
| 102 |
+
__xonsh__.xontrib.virtualenv.activate()
|
.venv-serve/bin/activate_this.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
#
|
| 3 |
+
# Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
# a copy of this software and associated documentation files (the
|
| 5 |
+
# "Software"), to deal in the Software without restriction, including
|
| 6 |
+
# without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
# permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
# the following conditions:
|
| 10 |
+
#
|
| 11 |
+
# The above copyright notice and this permission notice shall be
|
| 12 |
+
# included in all copies or substantial portions of the Software.
|
| 13 |
+
#
|
| 14 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
"""
|
| 23 |
+
Activate virtualenv for current interpreter:
|
| 24 |
+
|
| 25 |
+
import runpy
|
| 26 |
+
runpy.run_path(this_file)
|
| 27 |
+
|
| 28 |
+
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
|
| 29 |
+
""" # noqa: D415
|
| 30 |
+
|
| 31 |
+
from __future__ import annotations
|
| 32 |
+
|
| 33 |
+
import os
|
| 34 |
+
import site
|
| 35 |
+
import sys
|
| 36 |
+
|
| 37 |
+
try:
|
| 38 |
+
abs_file = os.path.abspath(__file__)
|
| 39 |
+
except NameError as exc:
|
| 40 |
+
msg = "You must use import runpy; runpy.run_path(this_file)"
|
| 41 |
+
raise AssertionError(msg) from exc
|
| 42 |
+
|
| 43 |
+
bin_dir = os.path.dirname(abs_file)
|
| 44 |
+
base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
|
| 45 |
+
|
| 46 |
+
# prepend bin to PATH (this file is inside the bin directory)
|
| 47 |
+
os.environ["PATH"] = os.pathsep.join([bin_dir, *os.environ.get("PATH", "").split(os.pathsep)])
|
| 48 |
+
os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
|
| 49 |
+
os.environ["VIRTUAL_ENV_PROMPT"] = "" or os.path.basename(base) # noqa: SIM222
|
| 50 |
+
|
| 51 |
+
# add the virtual environments libraries to the host python import mechanism
|
| 52 |
+
prev_length = len(sys.path)
|
| 53 |
+
for lib in "../lib/python3.12/site-packages".split(os.pathsep):
|
| 54 |
+
path = os.path.realpath(os.path.join(bin_dir, lib))
|
| 55 |
+
site.addsitedir(path)
|
| 56 |
+
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
|
| 57 |
+
|
| 58 |
+
sys.real_prefix = sys.prefix
|
| 59 |
+
sys.prefix = base
|
.venv-serve/bin/deactivate.bat
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@REM Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
@REM
|
| 3 |
+
@REM Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
@REM a copy of this software and associated documentation files (the
|
| 5 |
+
@REM "Software"), to deal in the Software without restriction, including
|
| 6 |
+
@REM without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
@REM distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
@REM permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
@REM the following conditions:
|
| 10 |
+
@REM
|
| 11 |
+
@REM The above copyright notice and this permission notice shall be
|
| 12 |
+
@REM included in all copies or substantial portions of the Software.
|
| 13 |
+
@REM
|
| 14 |
+
@REM THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
@REM EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
@REM MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
@REM NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
@REM LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
@REM OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
@REM WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
@set VIRTUAL_ENV=
|
| 23 |
+
@set VIRTUAL_ENV_PROMPT=
|
| 24 |
+
|
| 25 |
+
@REM Don't use () to avoid problems with them in %PATH%
|
| 26 |
+
@if not defined _OLD_VIRTUAL_PROMPT @goto ENDIFVPROMPT
|
| 27 |
+
@set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
|
| 28 |
+
@set _OLD_VIRTUAL_PROMPT=
|
| 29 |
+
:ENDIFVPROMPT
|
| 30 |
+
|
| 31 |
+
@if not defined _OLD_VIRTUAL_PYTHONHOME @goto ENDIFVHOME
|
| 32 |
+
@set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
|
| 33 |
+
@set _OLD_VIRTUAL_PYTHONHOME=
|
| 34 |
+
:ENDIFVHOME
|
| 35 |
+
|
| 36 |
+
@if not defined _OLD_VIRTUAL_PATH @goto ENDIFVPATH
|
| 37 |
+
@set "PATH=%_OLD_VIRTUAL_PATH%"
|
| 38 |
+
@set _OLD_VIRTUAL_PATH=
|
| 39 |
+
:ENDIFVPATH
|
.venv-serve/bin/pydoc.bat
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@REM Copyright (c) 2020-202x The virtualenv developers
|
| 2 |
+
@REM
|
| 3 |
+
@REM Permission is hereby granted, free of charge, to any person obtaining
|
| 4 |
+
@REM a copy of this software and associated documentation files (the
|
| 5 |
+
@REM "Software"), to deal in the Software without restriction, including
|
| 6 |
+
@REM without limitation the rights to use, copy, modify, merge, publish,
|
| 7 |
+
@REM distribute, sublicense, and/or sell copies of the Software, and to
|
| 8 |
+
@REM permit persons to whom the Software is furnished to do so, subject to
|
| 9 |
+
@REM the following conditions:
|
| 10 |
+
@REM
|
| 11 |
+
@REM The above copyright notice and this permission notice shall be
|
| 12 |
+
@REM included in all copies or substantial portions of the Software.
|
| 13 |
+
@REM
|
| 14 |
+
@REM THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 15 |
+
@REM EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 16 |
+
@REM MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 17 |
+
@REM NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 18 |
+
@REM LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 19 |
+
@REM OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 20 |
+
@REM WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 21 |
+
|
| 22 |
+
"python.exe" -m pydoc %*
|
.venv-serve/bin/python
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8f9781a98200d9ecda7e00464e4c64b1327abae788ae8e6979d5c859311410c7
|
| 3 |
+
size 30889232
|
.venv-serve/bin/python3
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8f9781a98200d9ecda7e00464e4c64b1327abae788ae8e6979d5c859311410c7
|
| 3 |
+
size 30889232
|
.venv-serve/bin/python3.12
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8f9781a98200d9ecda7e00464e4c64b1327abae788ae8e6979d5c859311410c7
|
| 3 |
+
size 30889232
|
.venv-serve/lib/python3.12/site-packages/_virtualenv.pth
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:69ac3d8f27e679c81b94ab30b3b56e9cd138219b1ba94a1fa3606d5a76a1433d
|
| 3 |
+
size 18
|
.venv-serve/lib/python3.12/site-packages/_virtualenv.py
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Patches that are applied at runtime to the virtual environment."""
|
| 2 |
+
|
| 3 |
+
import contextlib
|
| 4 |
+
import os
|
| 5 |
+
import sys
|
| 6 |
+
|
| 7 |
+
VIRTUALENV_PATCH_FILE = os.path.abspath(__file__)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def patch_dist(dist):
|
| 11 |
+
"""
|
| 12 |
+
Distutils allows user to configure some arguments via a configuration file:
|
| 13 |
+
https://docs.python.org/3.11/install/index.html#distutils-configuration-files.
|
| 14 |
+
|
| 15 |
+
Some of this arguments though don't make sense in context of the virtual environment files, let's fix them up.
|
| 16 |
+
""" # noqa: D205
|
| 17 |
+
# we cannot allow some install config as that would get packages installed outside of the virtual environment
|
| 18 |
+
old_parse_config_files = dist.Distribution.parse_config_files
|
| 19 |
+
|
| 20 |
+
def parse_config_files(self, *args, **kwargs):
|
| 21 |
+
result = old_parse_config_files(self, *args, **kwargs)
|
| 22 |
+
install = self.get_option_dict("install")
|
| 23 |
+
|
| 24 |
+
if "prefix" in install: # the prefix governs where to install the libraries
|
| 25 |
+
install["prefix"] = VIRTUALENV_PATCH_FILE, os.path.abspath(sys.prefix)
|
| 26 |
+
for base in ("purelib", "platlib", "headers", "scripts", "data"):
|
| 27 |
+
key = f"install_{base}"
|
| 28 |
+
if key in install: # do not allow global configs to hijack venv paths
|
| 29 |
+
install.pop(key, None)
|
| 30 |
+
return result
|
| 31 |
+
|
| 32 |
+
dist.Distribution.parse_config_files = parse_config_files
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
# Import hook that patches some modules to ignore configuration values that break package installation in case
|
| 36 |
+
# of virtual environments.
|
| 37 |
+
_DISTUTILS_PATCH = "distutils.dist", "setuptools.dist"
|
| 38 |
+
# https://docs.python.org/3/library/importlib.html#setting-up-an-importer
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
class _Finder:
|
| 42 |
+
"""A meta path finder that allows patching the imported distutils modules."""
|
| 43 |
+
|
| 44 |
+
fullname = None
|
| 45 |
+
|
| 46 |
+
# lock[0] is threading.Lock(), but initialized lazily to avoid importing threading very early at startup,
|
| 47 |
+
# because there are gevent-based applications that need to be first to import threading by themselves.
|
| 48 |
+
# See https://github.com/pypa/virtualenv/issues/1895 for details.
|
| 49 |
+
lock = [] # noqa: RUF012
|
| 50 |
+
|
| 51 |
+
def find_spec(self, fullname, path, target=None): # noqa: ARG002
|
| 52 |
+
# Guard against race conditions during file rewrite by checking if _DISTUTILS_PATCH is defined.
|
| 53 |
+
# This can happen when the file is being overwritten while it's being imported by another process.
|
| 54 |
+
# See https://github.com/pypa/virtualenv/issues/2969 for details.
|
| 55 |
+
try:
|
| 56 |
+
distutils_patch = _DISTUTILS_PATCH
|
| 57 |
+
except NameError:
|
| 58 |
+
return None
|
| 59 |
+
if fullname in distutils_patch and self.fullname is None:
|
| 60 |
+
# initialize lock[0] lazily
|
| 61 |
+
if len(self.lock) == 0:
|
| 62 |
+
import threading
|
| 63 |
+
|
| 64 |
+
lock = threading.Lock()
|
| 65 |
+
# there is possibility that two threads T1 and T2 are simultaneously running into find_spec,
|
| 66 |
+
# observing .lock as empty, and further going into hereby initialization. However due to the GIL,
|
| 67 |
+
# list.append() operation is atomic and this way only one of the threads will "win" to put the lock
|
| 68 |
+
# - that every thread will use - into .lock[0].
|
| 69 |
+
# https://docs.python.org/3/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe
|
| 70 |
+
self.lock.append(lock)
|
| 71 |
+
|
| 72 |
+
from functools import partial
|
| 73 |
+
from importlib.util import find_spec
|
| 74 |
+
|
| 75 |
+
with self.lock[0]:
|
| 76 |
+
self.fullname = fullname
|
| 77 |
+
try:
|
| 78 |
+
spec = find_spec(fullname, path)
|
| 79 |
+
if spec is not None:
|
| 80 |
+
# https://www.python.org/dev/peps/pep-0451/#how-loading-will-work
|
| 81 |
+
is_new_api = hasattr(spec.loader, "exec_module")
|
| 82 |
+
func_name = "exec_module" if is_new_api else "load_module"
|
| 83 |
+
old = getattr(spec.loader, func_name)
|
| 84 |
+
func = self.exec_module if is_new_api else self.load_module
|
| 85 |
+
if old is not func:
|
| 86 |
+
try: # noqa: SIM105
|
| 87 |
+
setattr(spec.loader, func_name, partial(func, old))
|
| 88 |
+
except AttributeError:
|
| 89 |
+
pass # C-Extension loaders are r/o such as zipimporter with <3.7
|
| 90 |
+
return spec
|
| 91 |
+
finally:
|
| 92 |
+
self.fullname = None
|
| 93 |
+
return None
|
| 94 |
+
|
| 95 |
+
@staticmethod
|
| 96 |
+
def exec_module(old, module):
|
| 97 |
+
old(module)
|
| 98 |
+
try:
|
| 99 |
+
distutils_patch = _DISTUTILS_PATCH
|
| 100 |
+
except NameError:
|
| 101 |
+
return
|
| 102 |
+
if module.__name__ in distutils_patch:
|
| 103 |
+
# patch_dist or its dependencies may not be defined during file rewrite
|
| 104 |
+
with contextlib.suppress(NameError):
|
| 105 |
+
patch_dist(module)
|
| 106 |
+
|
| 107 |
+
@staticmethod
|
| 108 |
+
def load_module(old, name):
|
| 109 |
+
module = old(name)
|
| 110 |
+
try:
|
| 111 |
+
distutils_patch = _DISTUTILS_PATCH
|
| 112 |
+
except NameError:
|
| 113 |
+
return module
|
| 114 |
+
if module.__name__ in distutils_patch:
|
| 115 |
+
# patch_dist or its dependencies may not be defined during file rewrite
|
| 116 |
+
with contextlib.suppress(NameError):
|
| 117 |
+
patch_dist(module)
|
| 118 |
+
return module
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
sys.meta_path.insert(0, _Finder())
|
.venv-serve/pyvenv.cfg
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
home = /home/preetpatel/.local/share/uv/python/cpython-3.12-linux-x86_64-gnu/bin
|
| 2 |
+
implementation = CPython
|
| 3 |
+
uv = 0.12.5
|
| 4 |
+
version_info = 3.12
|
| 5 |
+
include-system-site-packages = false
|
README.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
base_model: orcarouter/Qwen3.8-27B-Uncensored
|
| 4 |
+
base_model_relation: quantized
|
| 5 |
+
language:
|
| 6 |
+
- en
|
| 7 |
+
- zh
|
| 8 |
+
pipeline_tag: image-text-to-text
|
| 9 |
+
tags:
|
| 10 |
+
- qwen3.8
|
| 11 |
+
- qwen3_5
|
| 12 |
+
- nvfp4
|
| 13 |
+
- fp4
|
| 14 |
+
- compressed-tensors
|
| 15 |
+
- vllm
|
| 16 |
+
- blackwell
|
| 17 |
+
- rtx-5090
|
| 18 |
+
- uncensored
|
| 19 |
+
- abliterated
|
| 20 |
+
- quantized
|
| 21 |
+
- vision-language
|
| 22 |
+
- function-calling
|
| 23 |
+
- reasoning
|
| 24 |
+
- coding-agent
|
| 25 |
+
---
|
| 26 |
+
|
| 27 |
+
# Qwen3.8-27B-Uncensored-NVFP4
|
| 28 |
+
|
| 29 |
+
NVFP4 (W4A4) quantization of
|
| 30 |
+
[orcarouter/Qwen3.8-27B-Uncensored](https://huggingface.co/orcarouter/Qwen3.8-27B-Uncensored),
|
| 31 |
+
an abliterated fine-tune of [Qwen/Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B).
|
| 32 |
+
**~19GB** (down from ~56GB BF16) — built for single consumer Blackwell GPUs.
|
| 33 |
+
On an RTX 5090 (32GB) it serves with **160k context** and room to spare.
|
| 34 |
+
|
| 35 |
+
- FP4 weights **and** FP4 activations on the transformer linear layers →
|
| 36 |
+
native speedups on Blackwell (SM120: RTX 50-series, RTX PRO; SM100: B200)
|
| 37 |
+
- Kept in BF16: `lm_head`, the vision tower, and all gated-DeltaNet
|
| 38 |
+
`linear_attn` layers (the hybrid architecture's linear-attention blocks)
|
| 39 |
+
- Vision, tool calling, and reasoning (`<think>`) all functional
|
| 40 |
+
|
| 41 |
+
## Serving with vLLM
|
| 42 |
+
|
| 43 |
+
Verified config for a single RTX 5090 (32GB), tested on vLLM 0.27.1:
|
| 44 |
+
|
| 45 |
+
```bash
|
| 46 |
+
vllm serve preetpatel/Qwen3.8-27B-Uncensored-NVFP4 \
|
| 47 |
+
--max-model-len 163840 \
|
| 48 |
+
--kv-cache-dtype fp8 \
|
| 49 |
+
--gpu-memory-utilization 0.87 \
|
| 50 |
+
--max-num-seqs 8 \
|
| 51 |
+
--max-num-batched-tokens 8192 \
|
| 52 |
+
--limit-mm-per-prompt '{"image": 2, "video": 0}' \
|
| 53 |
+
--mm-processor-kwargs '{"max_pixels": 2097152}' \
|
| 54 |
+
--enable-auto-tool-choice \
|
| 55 |
+
--tool-call-parser qwen3_coder \
|
| 56 |
+
--reasoning-parser qwen3
|
| 57 |
+
```
|
| 58 |
+
|
| 59 |
+
Notes from real-world testing on the 5090:
|
| 60 |
+
|
| 61 |
+
- **Leave headroom.** A tighter config (BF16 KV, 131k context,
|
| 62 |
+
higher utilization) boots fine but OOMs mid-request: the gated-DeltaNet
|
| 63 |
+
prefill kernel makes ~200MB transient allocations that the startup
|
| 64 |
+
profiler does not fully account for. `--gpu-memory-utilization 0.87`
|
| 65 |
+
leaves ~1.5GB of slack; `PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True`
|
| 66 |
+
helps against fragmentation.
|
| 67 |
+
- **FP8 KV cache** halves KV to ~32KiB/token. The hybrid architecture only
|
| 68 |
+
keeps KV for 16 of 64 layers, so 160k context needs only ~5GB of KV.
|
| 69 |
+
- **Tool calls** use the Qwen3-Coder XML format
|
| 70 |
+
(`<function=...><parameter=...>`) — `--tool-call-parser qwen3_coder`
|
| 71 |
+
is required for structured `tool_calls` output; `--reasoning-parser qwen3`
|
| 72 |
+
moves `<think>` content into `reasoning_content`.
|
| 73 |
+
- The model's `generation_config.json` supplies the recommended sampling
|
| 74 |
+
defaults (temperature 1.0, top_p 0.95, top_k 20).
|
| 75 |
+
|
| 76 |
+
## Measured results (RTX 5090, vLLM 0.27.1)
|
| 77 |
+
|
| 78 |
+
| Test | Result |
|
| 79 |
+
|---|---|
|
| 80 |
+
| Needle retrieval, 155k-token prompt, needle at 85% depth | exact |
|
| 81 |
+
| Needle retrieval, 155k-token prompt, needle at 10% depth | exact |
|
| 82 |
+
| 2 × 60k-token prompts, concurrent | both exact, 16s wall |
|
| 83 |
+
| Structured tool calling (`tools` API) | correct `tool_calls` + `finish_reason` |
|
| 84 |
+
| Prefill throughput | ~6-7k tok/s (≤93k ctx), ~4k tok/s at 155k |
|
| 85 |
+
| VRAM | ~19GB weights + ~7GB KV pool + headroom |
|
| 86 |
+
|
| 87 |
+
Also verified end-to-end as the backend of a coding agent
|
| 88 |
+
([pi](https://github.com/badlogic/pi-mono)): multi-turn tool loop, file
|
| 89 |
+
writes, and shell execution all behave correctly.
|
| 90 |
+
|
| 91 |
+
## Known caveat
|
| 92 |
+
|
| 93 |
+
vLLM logs at load time:
|
| 94 |
+
|
| 95 |
+
> In NVFP4 linear, the weight global scale is different for parallel layers
|
| 96 |
+
> (e.g. q_proj, k_proj, v_proj).
|
| 97 |
+
|
| 98 |
+
This checkpoint stores an independent NVFP4 global scale per linear layer;
|
| 99 |
+
vLLM reconciles them when fusing q/k/v (and gate/up) GEMMs, which adds a
|
| 100 |
+
small one-time rounding cost on those layers. The functional testing above
|
| 101 |
+
(tool calling, deep-context retrieval, agent use) shows no observable
|
| 102 |
+
degradation, but exact-benchmark users should be aware. If future
|
| 103 |
+
llmcompressor releases expose fused-layer scale sharing, a v2 revision may
|
| 104 |
+
be published.
|
| 105 |
+
|
| 106 |
+
## How it was made
|
| 107 |
+
|
| 108 |
+
One-shot RTN quantization with [llmcompressor](https://github.com/vllm-project/llm-compressor)
|
| 109 |
+
0.13.0 (`compressed-tensors` 0.17.0):
|
| 110 |
+
|
| 111 |
+
```python
|
| 112 |
+
recipe = QuantizationModifier(
|
| 113 |
+
targets="Linear",
|
| 114 |
+
scheme="NVFP4",
|
| 115 |
+
ignore=["lm_head", "re:.*visual.*", "re:.*mtp.*"],
|
| 116 |
+
)
|
| 117 |
+
```
|
| 118 |
+
|
| 119 |
+
Calibration: 20 samples from `ultrachat_200k` (2048 max sequence length),
|
| 120 |
+
used only to set activation global scales — no training involved. The
|
| 121 |
+
exact recipe ships in this repo as `recipe.yaml`; the full quantization
|
| 122 |
+
and serving setup lives at
|
| 123 |
+
[preetpatel/qwen3.8_27B-nvidia5090](https://github.com/preetpatel/qwen3.8_27B-nvidia5090).
|
| 124 |
+
|
| 125 |
+
## Attribution & license
|
| 126 |
+
|
| 127 |
+
Apache 2.0, inherited from the base model. All credit for the model
|
| 128 |
+
weights to [Qwen](https://huggingface.co/Qwen) (base model) and
|
| 129 |
+
[orcarouter](https://huggingface.co/orcarouter) (abliterated fine-tune);
|
| 130 |
+
this repo only changes the numeric format. The base model is an
|
| 131 |
+
abliterated/uncensored variant intended by its authors for AI red-teaming
|
| 132 |
+
and research — apply your own judgment and safety measures downstream.
|
chat_template.jinja
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{%- set image_count = namespace(value=0) %}
|
| 2 |
+
{%- set video_count = namespace(value=0) %}
|
| 3 |
+
{%- macro render_content(content, do_vision_count, is_system_content=false) %}
|
| 4 |
+
{%- if content is string %}
|
| 5 |
+
{{- content }}
|
| 6 |
+
{%- elif content is iterable and content is not mapping %}
|
| 7 |
+
{%- for item in content %}
|
| 8 |
+
{%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
|
| 9 |
+
{%- if is_system_content %}
|
| 10 |
+
{{- raise_exception('System message cannot contain images.') }}
|
| 11 |
+
{%- endif %}
|
| 12 |
+
{%- if do_vision_count %}
|
| 13 |
+
{%- set image_count.value = image_count.value + 1 %}
|
| 14 |
+
{%- endif %}
|
| 15 |
+
{%- if add_vision_id %}
|
| 16 |
+
{{- 'Picture ' ~ image_count.value ~ ': ' }}
|
| 17 |
+
{%- endif %}
|
| 18 |
+
{{- '<|vision_start|><|image_pad|><|vision_end|>' }}
|
| 19 |
+
{%- elif 'video' in item or item.type == 'video' %}
|
| 20 |
+
{%- if is_system_content %}
|
| 21 |
+
{{- raise_exception('System message cannot contain videos.') }}
|
| 22 |
+
{%- endif %}
|
| 23 |
+
{%- if do_vision_count %}
|
| 24 |
+
{%- set video_count.value = video_count.value + 1 %}
|
| 25 |
+
{%- endif %}
|
| 26 |
+
{%- if add_vision_id %}
|
| 27 |
+
{{- 'Video ' ~ video_count.value ~ ': ' }}
|
| 28 |
+
{%- endif %}
|
| 29 |
+
{{- '<|vision_start|><|video_pad|><|vision_end|>' }}
|
| 30 |
+
{%- elif 'text' in item %}
|
| 31 |
+
{{- item.text }}
|
| 32 |
+
{%- else %}
|
| 33 |
+
{{- raise_exception('Unexpected item type in content.') }}
|
| 34 |
+
{%- endif %}
|
| 35 |
+
{%- endfor %}
|
| 36 |
+
{%- elif content is none or content is undefined %}
|
| 37 |
+
{{- '' }}
|
| 38 |
+
{%- else %}
|
| 39 |
+
{{- raise_exception('Unexpected content type.') }}
|
| 40 |
+
{%- endif %}
|
| 41 |
+
{%- endmacro %}
|
| 42 |
+
{%- if not messages %}
|
| 43 |
+
{{- raise_exception('No messages provided.') }}
|
| 44 |
+
{%- endif %}
|
| 45 |
+
{%- set reasoning_instructions = '' %}
|
| 46 |
+
{%- if enable_thinking is undefined or enable_thinking is true %}
|
| 47 |
+
{%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}
|
| 48 |
+
{%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}
|
| 49 |
+
{{- raise_exception('Unexpected reasoning effort ' ~ reasoning_effort ~ '. Supported types are xhigh (default), medium, and low.') }}
|
| 50 |
+
{%- endif %}
|
| 51 |
+
{%- if resolved_reasoning_effort == 'xhigh' %}
|
| 52 |
+
{%- set reasoning_instructions = 'Reasoning effort is set to xhigh. Please think carefully through the task, validate key assumptions, consider plausible alternatives, and prioritize correctness, consistency, and clarity in the final answer.' %}
|
| 53 |
+
{%- elif resolved_reasoning_effort == 'low' %}
|
| 54 |
+
{%- set reasoning_instructions = 'Reasoning effort is set to low. Keep your thinking brief and focused, moving directly to the conclusion without unnecessary elaboration.' %}
|
| 55 |
+
{%- endif %}
|
| 56 |
+
{%- endif %}
|
| 57 |
+
{%- if tools and tools is iterable and tools is not mapping %}
|
| 58 |
+
{{- '<|im_start|>system\n' }}
|
| 59 |
+
{%- if reasoning_instructions %}
|
| 60 |
+
{{- reasoning_instructions + '\n\n' }}
|
| 61 |
+
{%- endif %}
|
| 62 |
+
{{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
|
| 63 |
+
{%- for tool in tools %}
|
| 64 |
+
{{- "\n" }}
|
| 65 |
+
{{- tool | tojson }}
|
| 66 |
+
{%- endfor %}
|
| 67 |
+
{{- "\n</tools>" }}
|
| 68 |
+
{{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
|
| 69 |
+
{%- if messages[0].role == 'system' %}
|
| 70 |
+
{%- set content = render_content(messages[0].content, false, true)|trim %}
|
| 71 |
+
{%- if content %}
|
| 72 |
+
{{- '\n\n' + content }}
|
| 73 |
+
{%- endif %}
|
| 74 |
+
{%- endif %}
|
| 75 |
+
{{- '<|im_end|>\n' }}
|
| 76 |
+
{%- else %}
|
| 77 |
+
{%- if messages[0].role == 'system' %}
|
| 78 |
+
{%- set content = render_content(messages[0].content, false, true)|trim %}
|
| 79 |
+
{%- if content %}
|
| 80 |
+
{{- '<|im_start|>system\n' + (reasoning_instructions + '\n\n' if reasoning_instructions else '') + content + '<|im_end|>\n' }}
|
| 81 |
+
{%- elif reasoning_instructions %}
|
| 82 |
+
{{- '<|im_start|>system\n' + reasoning_instructions + '<|im_end|>\n' }}
|
| 83 |
+
{%- endif %}
|
| 84 |
+
{%- elif reasoning_instructions %}
|
| 85 |
+
{{- '<|im_start|>system\n' + reasoning_instructions + '<|im_end|>\n' }}
|
| 86 |
+
{%- endif %}
|
| 87 |
+
{%- endif %}
|
| 88 |
+
{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
|
| 89 |
+
{%- for message in messages[::-1] %}
|
| 90 |
+
{%- set index = (messages|length - 1) - loop.index0 %}
|
| 91 |
+
{%- if ns.multi_step_tool and message.role == "user" %}
|
| 92 |
+
{%- set content = render_content(message.content, false)|trim %}
|
| 93 |
+
{%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
|
| 94 |
+
{%- set ns.multi_step_tool = false %}
|
| 95 |
+
{%- set ns.last_query_index = index %}
|
| 96 |
+
{%- endif %}
|
| 97 |
+
{%- endif %}
|
| 98 |
+
{%- endfor %}
|
| 99 |
+
{%- if ns.multi_step_tool %}
|
| 100 |
+
{{- raise_exception('No user query found in messages.') }}
|
| 101 |
+
{%- endif %}
|
| 102 |
+
{%- for message in messages %}
|
| 103 |
+
{%- set content = render_content(message.content, true)|trim %}
|
| 104 |
+
{%- if message.role == "system" %}
|
| 105 |
+
{%- if not loop.first %}
|
| 106 |
+
{{- raise_exception('System message must be at the beginning.') }}
|
| 107 |
+
{%- endif %}
|
| 108 |
+
{%- elif message.role == "user" %}
|
| 109 |
+
{{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
|
| 110 |
+
{%- elif message.role == "assistant" %}
|
| 111 |
+
{%- set reasoning_content = '' %}
|
| 112 |
+
{%- if message.reasoning_content is string %}
|
| 113 |
+
{%- set reasoning_content = message.reasoning_content %}
|
| 114 |
+
{%- endif %}
|
| 115 |
+
{%- set reasoning_content = reasoning_content|trim %}
|
| 116 |
+
{%- if preserve_thinking is undefined or preserve_thinking is true or loop.index0 > ns.last_query_index %}
|
| 117 |
+
{{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
|
| 118 |
+
{%- else %}
|
| 119 |
+
{{- '<|im_start|>' + message.role + '\n' + content }}
|
| 120 |
+
{%- endif %}
|
| 121 |
+
{%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
|
| 122 |
+
{%- for tool_call in message.tool_calls %}
|
| 123 |
+
{%- if tool_call.function is defined %}
|
| 124 |
+
{%- set tool_call = tool_call.function %}
|
| 125 |
+
{%- endif %}
|
| 126 |
+
{%- if loop.first %}
|
| 127 |
+
{%- if content|trim %}
|
| 128 |
+
{{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
|
| 129 |
+
{%- else %}
|
| 130 |
+
{{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
|
| 131 |
+
{%- endif %}
|
| 132 |
+
{%- else %}
|
| 133 |
+
{{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
|
| 134 |
+
{%- endif %}
|
| 135 |
+
{%- if tool_call.arguments is defined and tool_call.arguments != '' %}
|
| 136 |
+
{%- for args_name, args_value in tool_call.arguments|items %}
|
| 137 |
+
{{- '<parameter=' + args_name + '>\n' }}
|
| 138 |
+
{%- set args_value = args_value | string if args_value is string else args_value | tojson | safe %}
|
| 139 |
+
{{- args_value }}
|
| 140 |
+
{{- '\n</parameter>\n' }}
|
| 141 |
+
{%- endfor %}
|
| 142 |
+
{%- endif %}
|
| 143 |
+
{{- '</function>\n</tool_call>' }}
|
| 144 |
+
{%- endfor %}
|
| 145 |
+
{%- endif %}
|
| 146 |
+
{{- '<|im_end|>\n' }}
|
| 147 |
+
{%- elif message.role == "tool" %}
|
| 148 |
+
{%- if loop.previtem and loop.previtem.role != "tool" %}
|
| 149 |
+
{{- '<|im_start|>user' }}
|
| 150 |
+
{%- endif %}
|
| 151 |
+
{{- '\n<tool_response>\n' }}
|
| 152 |
+
{{- content }}
|
| 153 |
+
{{- '\n</tool_response>' }}
|
| 154 |
+
{%- if not loop.last and loop.nextitem.role != "tool" %}
|
| 155 |
+
{{- '<|im_end|>\n' }}
|
| 156 |
+
{%- elif loop.last %}
|
| 157 |
+
{{- '<|im_end|>\n' }}
|
| 158 |
+
{%- endif %}
|
| 159 |
+
{%- else %}
|
| 160 |
+
{{- raise_exception('Unexpected message role.') }}
|
| 161 |
+
{%- endif %}
|
| 162 |
+
{%- endfor %}
|
| 163 |
+
{%- if add_generation_prompt %}
|
| 164 |
+
{{- '<|im_start|>assistant\n' }}
|
| 165 |
+
{%- if enable_thinking is defined and enable_thinking is false %}
|
| 166 |
+
{{- '<think>\n\n</think>\n\n' }}
|
| 167 |
+
{%- else %}
|
| 168 |
+
{{- '<think>\n' }}
|
| 169 |
+
{%- endif %}
|
| 170 |
+
{%- endif %}
|
config.json
ADDED
|
@@ -0,0 +1,398 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"architectures": [
|
| 3 |
+
"Qwen3_5ForConditionalGeneration"
|
| 4 |
+
],
|
| 5 |
+
"dtype": "bfloat16",
|
| 6 |
+
"image_token_id": 248056,
|
| 7 |
+
"language_model_only": false,
|
| 8 |
+
"model_type": "qwen3_5",
|
| 9 |
+
"quantization_config": {
|
| 10 |
+
"config_groups": {
|
| 11 |
+
"group_0": {
|
| 12 |
+
"format": "nvfp4-pack-quantized",
|
| 13 |
+
"input_activations": {
|
| 14 |
+
"actorder": null,
|
| 15 |
+
"block_structure": null,
|
| 16 |
+
"dynamic": "local",
|
| 17 |
+
"group_size": 16,
|
| 18 |
+
"num_bits": 4,
|
| 19 |
+
"observer": "static_minmax",
|
| 20 |
+
"observer_kwargs": {},
|
| 21 |
+
"scale_dtype": "torch.float8_e4m3fn",
|
| 22 |
+
"strategy": "tensor_group",
|
| 23 |
+
"symmetric": true,
|
| 24 |
+
"type": "float",
|
| 25 |
+
"zp_dtype": null
|
| 26 |
+
},
|
| 27 |
+
"output_activations": null,
|
| 28 |
+
"targets": [
|
| 29 |
+
"Linear"
|
| 30 |
+
],
|
| 31 |
+
"weights": {
|
| 32 |
+
"actorder": null,
|
| 33 |
+
"block_structure": null,
|
| 34 |
+
"dynamic": false,
|
| 35 |
+
"group_size": 16,
|
| 36 |
+
"num_bits": 4,
|
| 37 |
+
"observer": "memoryless_minmax",
|
| 38 |
+
"observer_kwargs": {},
|
| 39 |
+
"scale_dtype": "torch.float8_e4m3fn",
|
| 40 |
+
"strategy": "tensor_group",
|
| 41 |
+
"symmetric": true,
|
| 42 |
+
"type": "float",
|
| 43 |
+
"zp_dtype": null
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
},
|
| 47 |
+
"format": "nvfp4-pack-quantized",
|
| 48 |
+
"global_compression_ratio": null,
|
| 49 |
+
"ignore": [
|
| 50 |
+
"model.visual.blocks.0.attn.qkv",
|
| 51 |
+
"model.visual.blocks.0.attn.proj",
|
| 52 |
+
"model.visual.blocks.0.mlp.linear_fc1",
|
| 53 |
+
"model.visual.blocks.0.mlp.linear_fc2",
|
| 54 |
+
"model.visual.blocks.1.attn.qkv",
|
| 55 |
+
"model.visual.blocks.1.attn.proj",
|
| 56 |
+
"model.visual.blocks.1.mlp.linear_fc1",
|
| 57 |
+
"model.visual.blocks.1.mlp.linear_fc2",
|
| 58 |
+
"model.visual.blocks.2.attn.qkv",
|
| 59 |
+
"model.visual.blocks.2.attn.proj",
|
| 60 |
+
"model.visual.blocks.2.mlp.linear_fc1",
|
| 61 |
+
"model.visual.blocks.2.mlp.linear_fc2",
|
| 62 |
+
"model.visual.blocks.3.attn.qkv",
|
| 63 |
+
"model.visual.blocks.3.attn.proj",
|
| 64 |
+
"model.visual.blocks.3.mlp.linear_fc1",
|
| 65 |
+
"model.visual.blocks.3.mlp.linear_fc2",
|
| 66 |
+
"model.visual.blocks.4.attn.qkv",
|
| 67 |
+
"model.visual.blocks.4.attn.proj",
|
| 68 |
+
"model.visual.blocks.4.mlp.linear_fc1",
|
| 69 |
+
"model.visual.blocks.4.mlp.linear_fc2",
|
| 70 |
+
"model.visual.blocks.5.attn.qkv",
|
| 71 |
+
"model.visual.blocks.5.attn.proj",
|
| 72 |
+
"model.visual.blocks.5.mlp.linear_fc1",
|
| 73 |
+
"model.visual.blocks.5.mlp.linear_fc2",
|
| 74 |
+
"model.visual.blocks.6.attn.qkv",
|
| 75 |
+
"model.visual.blocks.6.attn.proj",
|
| 76 |
+
"model.visual.blocks.6.mlp.linear_fc1",
|
| 77 |
+
"model.visual.blocks.6.mlp.linear_fc2",
|
| 78 |
+
"model.visual.blocks.7.attn.qkv",
|
| 79 |
+
"model.visual.blocks.7.attn.proj",
|
| 80 |
+
"model.visual.blocks.7.mlp.linear_fc1",
|
| 81 |
+
"model.visual.blocks.7.mlp.linear_fc2",
|
| 82 |
+
"model.visual.blocks.8.attn.qkv",
|
| 83 |
+
"model.visual.blocks.8.attn.proj",
|
| 84 |
+
"model.visual.blocks.8.mlp.linear_fc1",
|
| 85 |
+
"model.visual.blocks.8.mlp.linear_fc2",
|
| 86 |
+
"model.visual.blocks.9.attn.qkv",
|
| 87 |
+
"model.visual.blocks.9.attn.proj",
|
| 88 |
+
"model.visual.blocks.9.mlp.linear_fc1",
|
| 89 |
+
"model.visual.blocks.9.mlp.linear_fc2",
|
| 90 |
+
"model.visual.blocks.10.attn.qkv",
|
| 91 |
+
"model.visual.blocks.10.attn.proj",
|
| 92 |
+
"model.visual.blocks.10.mlp.linear_fc1",
|
| 93 |
+
"model.visual.blocks.10.mlp.linear_fc2",
|
| 94 |
+
"model.visual.blocks.11.attn.qkv",
|
| 95 |
+
"model.visual.blocks.11.attn.proj",
|
| 96 |
+
"model.visual.blocks.11.mlp.linear_fc1",
|
| 97 |
+
"model.visual.blocks.11.mlp.linear_fc2",
|
| 98 |
+
"model.visual.blocks.12.attn.qkv",
|
| 99 |
+
"model.visual.blocks.12.attn.proj",
|
| 100 |
+
"model.visual.blocks.12.mlp.linear_fc1",
|
| 101 |
+
"model.visual.blocks.12.mlp.linear_fc2",
|
| 102 |
+
"model.visual.blocks.13.attn.qkv",
|
| 103 |
+
"model.visual.blocks.13.attn.proj",
|
| 104 |
+
"model.visual.blocks.13.mlp.linear_fc1",
|
| 105 |
+
"model.visual.blocks.13.mlp.linear_fc2",
|
| 106 |
+
"model.visual.blocks.14.attn.qkv",
|
| 107 |
+
"model.visual.blocks.14.attn.proj",
|
| 108 |
+
"model.visual.blocks.14.mlp.linear_fc1",
|
| 109 |
+
"model.visual.blocks.14.mlp.linear_fc2",
|
| 110 |
+
"model.visual.blocks.15.attn.qkv",
|
| 111 |
+
"model.visual.blocks.15.attn.proj",
|
| 112 |
+
"model.visual.blocks.15.mlp.linear_fc1",
|
| 113 |
+
"model.visual.blocks.15.mlp.linear_fc2",
|
| 114 |
+
"model.visual.blocks.16.attn.qkv",
|
| 115 |
+
"model.visual.blocks.16.attn.proj",
|
| 116 |
+
"model.visual.blocks.16.mlp.linear_fc1",
|
| 117 |
+
"model.visual.blocks.16.mlp.linear_fc2",
|
| 118 |
+
"model.visual.blocks.17.attn.qkv",
|
| 119 |
+
"model.visual.blocks.17.attn.proj",
|
| 120 |
+
"model.visual.blocks.17.mlp.linear_fc1",
|
| 121 |
+
"model.visual.blocks.17.mlp.linear_fc2",
|
| 122 |
+
"model.visual.blocks.18.attn.qkv",
|
| 123 |
+
"model.visual.blocks.18.attn.proj",
|
| 124 |
+
"model.visual.blocks.18.mlp.linear_fc1",
|
| 125 |
+
"model.visual.blocks.18.mlp.linear_fc2",
|
| 126 |
+
"model.visual.blocks.19.attn.qkv",
|
| 127 |
+
"model.visual.blocks.19.attn.proj",
|
| 128 |
+
"model.visual.blocks.19.mlp.linear_fc1",
|
| 129 |
+
"model.visual.blocks.19.mlp.linear_fc2",
|
| 130 |
+
"model.visual.blocks.20.attn.qkv",
|
| 131 |
+
"model.visual.blocks.20.attn.proj",
|
| 132 |
+
"model.visual.blocks.20.mlp.linear_fc1",
|
| 133 |
+
"model.visual.blocks.20.mlp.linear_fc2",
|
| 134 |
+
"model.visual.blocks.21.attn.qkv",
|
| 135 |
+
"model.visual.blocks.21.attn.proj",
|
| 136 |
+
"model.visual.blocks.21.mlp.linear_fc1",
|
| 137 |
+
"model.visual.blocks.21.mlp.linear_fc2",
|
| 138 |
+
"model.visual.blocks.22.attn.qkv",
|
| 139 |
+
"model.visual.blocks.22.attn.proj",
|
| 140 |
+
"model.visual.blocks.22.mlp.linear_fc1",
|
| 141 |
+
"model.visual.blocks.22.mlp.linear_fc2",
|
| 142 |
+
"model.visual.blocks.23.attn.qkv",
|
| 143 |
+
"model.visual.blocks.23.attn.proj",
|
| 144 |
+
"model.visual.blocks.23.mlp.linear_fc1",
|
| 145 |
+
"model.visual.blocks.23.mlp.linear_fc2",
|
| 146 |
+
"model.visual.blocks.24.attn.qkv",
|
| 147 |
+
"model.visual.blocks.24.attn.proj",
|
| 148 |
+
"model.visual.blocks.24.mlp.linear_fc1",
|
| 149 |
+
"model.visual.blocks.24.mlp.linear_fc2",
|
| 150 |
+
"model.visual.blocks.25.attn.qkv",
|
| 151 |
+
"model.visual.blocks.25.attn.proj",
|
| 152 |
+
"model.visual.blocks.25.mlp.linear_fc1",
|
| 153 |
+
"model.visual.blocks.25.mlp.linear_fc2",
|
| 154 |
+
"model.visual.blocks.26.attn.qkv",
|
| 155 |
+
"model.visual.blocks.26.attn.proj",
|
| 156 |
+
"model.visual.blocks.26.mlp.linear_fc1",
|
| 157 |
+
"model.visual.blocks.26.mlp.linear_fc2",
|
| 158 |
+
"model.visual.merger.linear_fc1",
|
| 159 |
+
"model.visual.merger.linear_fc2",
|
| 160 |
+
"model.language_model.layers.0.linear_attn",
|
| 161 |
+
"model.language_model.layers.0.linear_attn.norm",
|
| 162 |
+
"model.language_model.layers.1.linear_attn",
|
| 163 |
+
"model.language_model.layers.1.linear_attn.norm",
|
| 164 |
+
"model.language_model.layers.2.linear_attn",
|
| 165 |
+
"model.language_model.layers.2.linear_attn.norm",
|
| 166 |
+
"model.language_model.layers.4.linear_attn",
|
| 167 |
+
"model.language_model.layers.4.linear_attn.norm",
|
| 168 |
+
"model.language_model.layers.5.linear_attn",
|
| 169 |
+
"model.language_model.layers.5.linear_attn.norm",
|
| 170 |
+
"model.language_model.layers.6.linear_attn",
|
| 171 |
+
"model.language_model.layers.6.linear_attn.norm",
|
| 172 |
+
"model.language_model.layers.8.linear_attn",
|
| 173 |
+
"model.language_model.layers.8.linear_attn.norm",
|
| 174 |
+
"model.language_model.layers.9.linear_attn",
|
| 175 |
+
"model.language_model.layers.9.linear_attn.norm",
|
| 176 |
+
"model.language_model.layers.10.linear_attn",
|
| 177 |
+
"model.language_model.layers.10.linear_attn.norm",
|
| 178 |
+
"model.language_model.layers.12.linear_attn",
|
| 179 |
+
"model.language_model.layers.12.linear_attn.norm",
|
| 180 |
+
"model.language_model.layers.13.linear_attn",
|
| 181 |
+
"model.language_model.layers.13.linear_attn.norm",
|
| 182 |
+
"model.language_model.layers.14.linear_attn",
|
| 183 |
+
"model.language_model.layers.14.linear_attn.norm",
|
| 184 |
+
"model.language_model.layers.16.linear_attn",
|
| 185 |
+
"model.language_model.layers.16.linear_attn.norm",
|
| 186 |
+
"model.language_model.layers.17.linear_attn",
|
| 187 |
+
"model.language_model.layers.17.linear_attn.norm",
|
| 188 |
+
"model.language_model.layers.18.linear_attn",
|
| 189 |
+
"model.language_model.layers.18.linear_attn.norm",
|
| 190 |
+
"model.language_model.layers.20.linear_attn",
|
| 191 |
+
"model.language_model.layers.20.linear_attn.norm",
|
| 192 |
+
"model.language_model.layers.21.linear_attn",
|
| 193 |
+
"model.language_model.layers.21.linear_attn.norm",
|
| 194 |
+
"model.language_model.layers.22.linear_attn",
|
| 195 |
+
"model.language_model.layers.22.linear_attn.norm",
|
| 196 |
+
"model.language_model.layers.24.linear_attn",
|
| 197 |
+
"model.language_model.layers.24.linear_attn.norm",
|
| 198 |
+
"model.language_model.layers.25.linear_attn",
|
| 199 |
+
"model.language_model.layers.25.linear_attn.norm",
|
| 200 |
+
"model.language_model.layers.26.linear_attn",
|
| 201 |
+
"model.language_model.layers.26.linear_attn.norm",
|
| 202 |
+
"model.language_model.layers.28.linear_attn",
|
| 203 |
+
"model.language_model.layers.28.linear_attn.norm",
|
| 204 |
+
"model.language_model.layers.29.linear_attn",
|
| 205 |
+
"model.language_model.layers.29.linear_attn.norm",
|
| 206 |
+
"model.language_model.layers.30.linear_attn",
|
| 207 |
+
"model.language_model.layers.30.linear_attn.norm",
|
| 208 |
+
"model.language_model.layers.32.linear_attn",
|
| 209 |
+
"model.language_model.layers.32.linear_attn.norm",
|
| 210 |
+
"model.language_model.layers.33.linear_attn",
|
| 211 |
+
"model.language_model.layers.33.linear_attn.norm",
|
| 212 |
+
"model.language_model.layers.34.linear_attn",
|
| 213 |
+
"model.language_model.layers.34.linear_attn.norm",
|
| 214 |
+
"model.language_model.layers.36.linear_attn",
|
| 215 |
+
"model.language_model.layers.36.linear_attn.norm",
|
| 216 |
+
"model.language_model.layers.37.linear_attn",
|
| 217 |
+
"model.language_model.layers.37.linear_attn.norm",
|
| 218 |
+
"model.language_model.layers.38.linear_attn",
|
| 219 |
+
"model.language_model.layers.38.linear_attn.norm",
|
| 220 |
+
"model.language_model.layers.40.linear_attn",
|
| 221 |
+
"model.language_model.layers.40.linear_attn.norm",
|
| 222 |
+
"model.language_model.layers.41.linear_attn",
|
| 223 |
+
"model.language_model.layers.41.linear_attn.norm",
|
| 224 |
+
"model.language_model.layers.42.linear_attn",
|
| 225 |
+
"model.language_model.layers.42.linear_attn.norm",
|
| 226 |
+
"model.language_model.layers.44.linear_attn",
|
| 227 |
+
"model.language_model.layers.44.linear_attn.norm",
|
| 228 |
+
"model.language_model.layers.45.linear_attn",
|
| 229 |
+
"model.language_model.layers.45.linear_attn.norm",
|
| 230 |
+
"model.language_model.layers.46.linear_attn",
|
| 231 |
+
"model.language_model.layers.46.linear_attn.norm",
|
| 232 |
+
"model.language_model.layers.48.linear_attn",
|
| 233 |
+
"model.language_model.layers.48.linear_attn.norm",
|
| 234 |
+
"model.language_model.layers.49.linear_attn",
|
| 235 |
+
"model.language_model.layers.49.linear_attn.norm",
|
| 236 |
+
"model.language_model.layers.50.linear_attn",
|
| 237 |
+
"model.language_model.layers.50.linear_attn.norm",
|
| 238 |
+
"model.language_model.layers.52.linear_attn",
|
| 239 |
+
"model.language_model.layers.52.linear_attn.norm",
|
| 240 |
+
"model.language_model.layers.53.linear_attn",
|
| 241 |
+
"model.language_model.layers.53.linear_attn.norm",
|
| 242 |
+
"model.language_model.layers.54.linear_attn",
|
| 243 |
+
"model.language_model.layers.54.linear_attn.norm",
|
| 244 |
+
"model.language_model.layers.56.linear_attn",
|
| 245 |
+
"model.language_model.layers.56.linear_attn.norm",
|
| 246 |
+
"model.language_model.layers.57.linear_attn",
|
| 247 |
+
"model.language_model.layers.57.linear_attn.norm",
|
| 248 |
+
"model.language_model.layers.58.linear_attn",
|
| 249 |
+
"model.language_model.layers.58.linear_attn.norm",
|
| 250 |
+
"model.language_model.layers.60.linear_attn",
|
| 251 |
+
"model.language_model.layers.60.linear_attn.norm",
|
| 252 |
+
"model.language_model.layers.61.linear_attn",
|
| 253 |
+
"model.language_model.layers.61.linear_attn.norm",
|
| 254 |
+
"model.language_model.layers.62.linear_attn",
|
| 255 |
+
"model.language_model.layers.62.linear_attn.norm",
|
| 256 |
+
"lm_head"
|
| 257 |
+
],
|
| 258 |
+
"kv_cache_scheme": null,
|
| 259 |
+
"quant_method": "compressed-tensors",
|
| 260 |
+
"quantization_status": "compressed",
|
| 261 |
+
"sparsity_config": {},
|
| 262 |
+
"transform_config": {},
|
| 263 |
+
"version": "0.18.0"
|
| 264 |
+
},
|
| 265 |
+
"text_config": {
|
| 266 |
+
"attention_bias": false,
|
| 267 |
+
"attention_dropout": 0.0,
|
| 268 |
+
"attn_output_gate": true,
|
| 269 |
+
"bos_token_id": 248044,
|
| 270 |
+
"dtype": "bfloat16",
|
| 271 |
+
"eos_token_id": 248044,
|
| 272 |
+
"full_attention_interval": 4,
|
| 273 |
+
"head_dim": 256,
|
| 274 |
+
"hidden_act": "silu",
|
| 275 |
+
"hidden_size": 5120,
|
| 276 |
+
"initializer_range": 0.02,
|
| 277 |
+
"intermediate_size": 17408,
|
| 278 |
+
"layer_types": [
|
| 279 |
+
"linear_attention",
|
| 280 |
+
"linear_attention",
|
| 281 |
+
"linear_attention",
|
| 282 |
+
"full_attention",
|
| 283 |
+
"linear_attention",
|
| 284 |
+
"linear_attention",
|
| 285 |
+
"linear_attention",
|
| 286 |
+
"full_attention",
|
| 287 |
+
"linear_attention",
|
| 288 |
+
"linear_attention",
|
| 289 |
+
"linear_attention",
|
| 290 |
+
"full_attention",
|
| 291 |
+
"linear_attention",
|
| 292 |
+
"linear_attention",
|
| 293 |
+
"linear_attention",
|
| 294 |
+
"full_attention",
|
| 295 |
+
"linear_attention",
|
| 296 |
+
"linear_attention",
|
| 297 |
+
"linear_attention",
|
| 298 |
+
"full_attention",
|
| 299 |
+
"linear_attention",
|
| 300 |
+
"linear_attention",
|
| 301 |
+
"linear_attention",
|
| 302 |
+
"full_attention",
|
| 303 |
+
"linear_attention",
|
| 304 |
+
"linear_attention",
|
| 305 |
+
"linear_attention",
|
| 306 |
+
"full_attention",
|
| 307 |
+
"linear_attention",
|
| 308 |
+
"linear_attention",
|
| 309 |
+
"linear_attention",
|
| 310 |
+
"full_attention",
|
| 311 |
+
"linear_attention",
|
| 312 |
+
"linear_attention",
|
| 313 |
+
"linear_attention",
|
| 314 |
+
"full_attention",
|
| 315 |
+
"linear_attention",
|
| 316 |
+
"linear_attention",
|
| 317 |
+
"linear_attention",
|
| 318 |
+
"full_attention",
|
| 319 |
+
"linear_attention",
|
| 320 |
+
"linear_attention",
|
| 321 |
+
"linear_attention",
|
| 322 |
+
"full_attention",
|
| 323 |
+
"linear_attention",
|
| 324 |
+
"linear_attention",
|
| 325 |
+
"linear_attention",
|
| 326 |
+
"full_attention",
|
| 327 |
+
"linear_attention",
|
| 328 |
+
"linear_attention",
|
| 329 |
+
"linear_attention",
|
| 330 |
+
"full_attention",
|
| 331 |
+
"linear_attention",
|
| 332 |
+
"linear_attention",
|
| 333 |
+
"linear_attention",
|
| 334 |
+
"full_attention",
|
| 335 |
+
"linear_attention",
|
| 336 |
+
"linear_attention",
|
| 337 |
+
"linear_attention",
|
| 338 |
+
"full_attention",
|
| 339 |
+
"linear_attention",
|
| 340 |
+
"linear_attention",
|
| 341 |
+
"linear_attention",
|
| 342 |
+
"full_attention"
|
| 343 |
+
],
|
| 344 |
+
"linear_conv_kernel_dim": 4,
|
| 345 |
+
"linear_key_head_dim": 128,
|
| 346 |
+
"linear_num_key_heads": 16,
|
| 347 |
+
"linear_num_value_heads": 48,
|
| 348 |
+
"linear_value_head_dim": 128,
|
| 349 |
+
"mamba_ssm_dtype": "float32",
|
| 350 |
+
"max_position_embeddings": 262144,
|
| 351 |
+
"model_type": "qwen3_5_text",
|
| 352 |
+
"mtp_num_hidden_layers": 1,
|
| 353 |
+
"mtp_use_dedicated_embeddings": false,
|
| 354 |
+
"num_attention_heads": 24,
|
| 355 |
+
"num_hidden_layers": 64,
|
| 356 |
+
"num_key_value_heads": 4,
|
| 357 |
+
"output_gate_type": "swish",
|
| 358 |
+
"pad_token_id": null,
|
| 359 |
+
"partial_rotary_factor": 0.25,
|
| 360 |
+
"rms_norm_eps": 1e-06,
|
| 361 |
+
"rope_parameters": {
|
| 362 |
+
"mrope_interleaved": true,
|
| 363 |
+
"mrope_section": [
|
| 364 |
+
11,
|
| 365 |
+
11,
|
| 366 |
+
10
|
| 367 |
+
],
|
| 368 |
+
"partial_rotary_factor": 0.25,
|
| 369 |
+
"rope_theta": 10000000,
|
| 370 |
+
"rope_type": "default"
|
| 371 |
+
},
|
| 372 |
+
"tie_word_embeddings": false,
|
| 373 |
+
"use_cache": true,
|
| 374 |
+
"vocab_size": 248320
|
| 375 |
+
},
|
| 376 |
+
"tie_word_embeddings": false,
|
| 377 |
+
"transformers_version": "5.14.1",
|
| 378 |
+
"video_token_id": 248057,
|
| 379 |
+
"vision_config": {
|
| 380 |
+
"deepstack_visual_indexes": [],
|
| 381 |
+
"depth": 27,
|
| 382 |
+
"dtype": "bfloat16",
|
| 383 |
+
"hidden_act": "gelu_pytorch_tanh",
|
| 384 |
+
"hidden_size": 1152,
|
| 385 |
+
"in_channels": 3,
|
| 386 |
+
"initializer_range": 0.02,
|
| 387 |
+
"intermediate_size": 4304,
|
| 388 |
+
"model_type": "qwen3_5_vision",
|
| 389 |
+
"num_heads": 16,
|
| 390 |
+
"num_position_embeddings": 2304,
|
| 391 |
+
"out_hidden_size": 5120,
|
| 392 |
+
"patch_size": 16,
|
| 393 |
+
"spatial_merge_size": 2,
|
| 394 |
+
"temporal_patch_size": 2
|
| 395 |
+
},
|
| 396 |
+
"vision_end_token_id": 248054,
|
| 397 |
+
"vision_start_token_id": 248053
|
| 398 |
+
}
|
generation_config.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bos_token_id": 248044,
|
| 3 |
+
"do_sample": true,
|
| 4 |
+
"eos_token_id": [
|
| 5 |
+
248046,
|
| 6 |
+
248044
|
| 7 |
+
],
|
| 8 |
+
"pad_token_id": 248044,
|
| 9 |
+
"temperature": 1.0,
|
| 10 |
+
"top_k": 20,
|
| 11 |
+
"top_p": 0.95,
|
| 12 |
+
"transformers_version": "5.14.1"
|
| 13 |
+
}
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bc642c1159ab9b0fcd2fdc65be4fee72fa560cf0570604741db50061ea063277
|
| 3 |
+
size 19709883808
|
preprocessor_config.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"size": {
|
| 3 |
+
"longest_edge": 16777216,
|
| 4 |
+
"shortest_edge": 65536
|
| 5 |
+
},
|
| 6 |
+
"patch_size": 16,
|
| 7 |
+
"temporal_patch_size": 2,
|
| 8 |
+
"merge_size": 2,
|
| 9 |
+
"image_mean": [
|
| 10 |
+
0.5,
|
| 11 |
+
0.5,
|
| 12 |
+
0.5
|
| 13 |
+
],
|
| 14 |
+
"image_std": [
|
| 15 |
+
0.5,
|
| 16 |
+
0.5,
|
| 17 |
+
0.5
|
| 18 |
+
],
|
| 19 |
+
"processor_class": "Qwen3VLProcessor",
|
| 20 |
+
"image_processor_type": "Qwen2VLImageProcessorFast"
|
| 21 |
+
}
|
processor_config.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"image_processor": {
|
| 3 |
+
"do_convert_rgb": true,
|
| 4 |
+
"do_normalize": true,
|
| 5 |
+
"do_rescale": true,
|
| 6 |
+
"do_resize": true,
|
| 7 |
+
"image_mean": [
|
| 8 |
+
0.5,
|
| 9 |
+
0.5,
|
| 10 |
+
0.5
|
| 11 |
+
],
|
| 12 |
+
"image_processor_type": "Qwen2VLImageProcessor",
|
| 13 |
+
"image_std": [
|
| 14 |
+
0.5,
|
| 15 |
+
0.5,
|
| 16 |
+
0.5
|
| 17 |
+
],
|
| 18 |
+
"merge_size": 2,
|
| 19 |
+
"patch_size": 16,
|
| 20 |
+
"resample": 3,
|
| 21 |
+
"rescale_factor": 0.00392156862745098,
|
| 22 |
+
"size": {
|
| 23 |
+
"longest_edge": 16777216,
|
| 24 |
+
"shortest_edge": 65536
|
| 25 |
+
},
|
| 26 |
+
"temporal_patch_size": 2
|
| 27 |
+
},
|
| 28 |
+
"processor_class": "Qwen3VLProcessor",
|
| 29 |
+
"video_processor": {
|
| 30 |
+
"do_convert_rgb": true,
|
| 31 |
+
"do_normalize": true,
|
| 32 |
+
"do_rescale": true,
|
| 33 |
+
"do_resize": true,
|
| 34 |
+
"do_sample_frames": true,
|
| 35 |
+
"fps": 2,
|
| 36 |
+
"image_mean": [
|
| 37 |
+
0.5,
|
| 38 |
+
0.5,
|
| 39 |
+
0.5
|
| 40 |
+
],
|
| 41 |
+
"image_std": [
|
| 42 |
+
0.5,
|
| 43 |
+
0.5,
|
| 44 |
+
0.5
|
| 45 |
+
],
|
| 46 |
+
"max_frames": 768,
|
| 47 |
+
"merge_size": 2,
|
| 48 |
+
"min_frames": 4,
|
| 49 |
+
"patch_size": 16,
|
| 50 |
+
"resample": 3,
|
| 51 |
+
"rescale_factor": 0.00392156862745098,
|
| 52 |
+
"return_metadata": false,
|
| 53 |
+
"size": {
|
| 54 |
+
"longest_edge": 25165824,
|
| 55 |
+
"shortest_edge": 4096
|
| 56 |
+
},
|
| 57 |
+
"temporal_patch_size": 2,
|
| 58 |
+
"video_processor_type": "Qwen3VLVideoProcessor"
|
| 59 |
+
}
|
| 60 |
+
}
|
recipe.yaml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
default_stage:
|
| 2 |
+
default_modifiers:
|
| 3 |
+
QuantizationModifier:
|
| 4 |
+
targets: [Linear]
|
| 5 |
+
ignore: [lm_head, 're:.*visual.*', 're:.*mtp.*']
|
| 6 |
+
scheme: NVFP4
|
| 7 |
+
bypass_divisibility_checks: false
|
| 8 |
+
requires_calibration_data: true
|
tokenizer.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523
|
| 3 |
+
size 19989325
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"add_prefix_space": false,
|
| 3 |
+
"audio_bos_token": "<|audio_start|>",
|
| 4 |
+
"audio_eos_token": "<|audio_end|>",
|
| 5 |
+
"audio_token": "<|audio_pad|>",
|
| 6 |
+
"backend": "tokenizers",
|
| 7 |
+
"bos_token": null,
|
| 8 |
+
"clean_up_tokenization_spaces": false,
|
| 9 |
+
"eos_token": "<|im_end|>",
|
| 10 |
+
"errors": "replace",
|
| 11 |
+
"image_token": "<|image_pad|>",
|
| 12 |
+
"is_local": false,
|
| 13 |
+
"local_files_only": false,
|
| 14 |
+
"model_max_length": 262144,
|
| 15 |
+
"model_specific_special_tokens": {
|
| 16 |
+
"audio_bos_token": "<|audio_start|>",
|
| 17 |
+
"audio_eos_token": "<|audio_end|>",
|
| 18 |
+
"audio_token": "<|audio_pad|>",
|
| 19 |
+
"image_token": "<|image_pad|>",
|
| 20 |
+
"video_token": "<|video_pad|>",
|
| 21 |
+
"vision_bos_token": "<|vision_start|>",
|
| 22 |
+
"vision_eos_token": "<|vision_end|>"
|
| 23 |
+
},
|
| 24 |
+
"pad_token": "<|endoftext|>",
|
| 25 |
+
"pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
|
| 26 |
+
"processor_class": "Qwen3VLProcessor",
|
| 27 |
+
"split_special_tokens": false,
|
| 28 |
+
"tokenizer_class": "Qwen2Tokenizer",
|
| 29 |
+
"unk_token": null,
|
| 30 |
+
"video_token": "<|video_pad|>",
|
| 31 |
+
"vision_bos_token": "<|vision_start|>",
|
| 32 |
+
"vision_eos_token": "<|vision_end|>"
|
| 33 |
+
}
|
video_preprocessor_config.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"size": {
|
| 3 |
+
"longest_edge": 25165824,
|
| 4 |
+
"shortest_edge": 4096
|
| 5 |
+
},
|
| 6 |
+
"patch_size": 16,
|
| 7 |
+
"temporal_patch_size": 2,
|
| 8 |
+
"merge_size": 2,
|
| 9 |
+
"image_mean": [
|
| 10 |
+
0.5,
|
| 11 |
+
0.5,
|
| 12 |
+
0.5
|
| 13 |
+
],
|
| 14 |
+
"image_std": [
|
| 15 |
+
0.5,
|
| 16 |
+
0.5,
|
| 17 |
+
0.5
|
| 18 |
+
],
|
| 19 |
+
"processor_class": "Qwen3VLProcessor",
|
| 20 |
+
"video_processor_type": "Qwen3VLVideoProcessor"
|
| 21 |
+
}
|