Merge branch 'master' into ci-write-less-ccache
This commit is contained in:
commit
421e1f0cbd
24 changed files with 319 additions and 107 deletions
2
.github/workflows/close-issue.yml
vendored
2
.github/workflows/close-issue.yml
vendored
|
@ -17,7 +17,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v5
|
- uses: actions/stale@v5
|
||||||
with:
|
with:
|
||||||
exempt-issue-labels: "refactor,help wanted,good first issue,research,bug"
|
exempt-issue-labels: "refactor,help wanted,good first issue,research,bug,roadmap"
|
||||||
days-before-issue-stale: 30
|
days-before-issue-stale: 30
|
||||||
days-before-issue-close: 14
|
days-before-issue-close: 14
|
||||||
stale-issue-label: "stale"
|
stale-issue-label: "stale"
|
||||||
|
|
83
AUTHORS
83
AUTHORS
|
@ -1,4 +1,4 @@
|
||||||
# date: Thu Nov 28 20:46:15 EET 2024
|
# date: Tue Feb 4 13:04:05 EET 2025
|
||||||
# this file is auto-generated by scripts/gen-authors.sh
|
# this file is auto-generated by scripts/gen-authors.sh
|
||||||
|
|
||||||
0cc4m <picard12@live.de>
|
0cc4m <picard12@live.de>
|
||||||
|
@ -20,6 +20,8 @@ Adithya Balaji <adithya.b94@gmail.com>
|
||||||
AdithyanI <adithyan.i4internet@gmail.com>
|
AdithyanI <adithyan.i4internet@gmail.com>
|
||||||
Adrian <smith.adriane@gmail.com>
|
Adrian <smith.adriane@gmail.com>
|
||||||
Adrian Hesketh <a-h@users.noreply.github.com>
|
Adrian Hesketh <a-h@users.noreply.github.com>
|
||||||
|
Adrien Gallouët <adrien@gallouet.fr>
|
||||||
|
Adrien Gallouët <angt@huggingface.co>
|
||||||
Ahmad Tameem <113388789+Tameem-10xE@users.noreply.github.com>
|
Ahmad Tameem <113388789+Tameem-10xE@users.noreply.github.com>
|
||||||
Ahmet Zeer <ahmed.zeer@std.yildiz.edu.tr>
|
Ahmet Zeer <ahmed.zeer@std.yildiz.edu.tr>
|
||||||
AidanBeltonS <87009434+AidanBeltonS@users.noreply.github.com>
|
AidanBeltonS <87009434+AidanBeltonS@users.noreply.github.com>
|
||||||
|
@ -55,6 +57,7 @@ Ananta Bastola <anantarajbastola@gmail.com>
|
||||||
Anas Ahouzi <112881240+aahouzi@users.noreply.github.com>
|
Anas Ahouzi <112881240+aahouzi@users.noreply.github.com>
|
||||||
András Salamon <ott2@users.noreply.github.com>
|
András Salamon <ott2@users.noreply.github.com>
|
||||||
Andreas (Andi) Kunar <andreask@msn.com>
|
Andreas (Andi) Kunar <andreask@msn.com>
|
||||||
|
Andreas Kieslinger <47689530+aendk@users.noreply.github.com>
|
||||||
Andrei <abetlen@gmail.com>
|
Andrei <abetlen@gmail.com>
|
||||||
Andrew Canis <andrew.canis@gmail.com>
|
Andrew Canis <andrew.canis@gmail.com>
|
||||||
Andrew Downing <andrew2085@gmail.com>
|
Andrew Downing <andrew2085@gmail.com>
|
||||||
|
@ -91,13 +94,17 @@ Ben Siraphob <bensiraphob@gmail.com>
|
||||||
Ben Williams <ben@719ben.com>
|
Ben Williams <ben@719ben.com>
|
||||||
Benjamin Findley <39356821+Kartoffelsaft@users.noreply.github.com>
|
Benjamin Findley <39356821+Kartoffelsaft@users.noreply.github.com>
|
||||||
Benjamin Lecaillon <84293038+blecaillon@users.noreply.github.com>
|
Benjamin Lecaillon <84293038+blecaillon@users.noreply.github.com>
|
||||||
|
Benson Wong <mostlygeek@gmail.com>
|
||||||
Bernat Vadell <hounter.caza@gmail.com>
|
Bernat Vadell <hounter.caza@gmail.com>
|
||||||
|
Bernhard M. Wiedemann <githubbmwprimary@lsmod.de>
|
||||||
Bert Wagner <github@bertwagner.com>
|
Bert Wagner <github@bertwagner.com>
|
||||||
|
Billel Mokeddem <billel.mokeddem.ml@gmail.com>
|
||||||
Bingan <70050083+binganao@users.noreply.github.com>
|
Bingan <70050083+binganao@users.noreply.github.com>
|
||||||
Bjarke Viksøe <164612031+bviksoe@users.noreply.github.com>
|
Bjarke Viksøe <164612031+bviksoe@users.noreply.github.com>
|
||||||
Bodo Graumann <mail@bodograumann.de>
|
Bodo Graumann <mail@bodograumann.de>
|
||||||
Bono Lv <lvscar@users.noreply.github.com>
|
Bono Lv <lvscar@users.noreply.github.com>
|
||||||
Borislav Stanimirov <b.stanimirov@abv.bg>
|
Borislav Stanimirov <b.stanimirov@abv.bg>
|
||||||
|
Borislav Stanimirov <b@ibob.bg>
|
||||||
Branden Butler <bwtbutler@hotmail.com>
|
Branden Butler <bwtbutler@hotmail.com>
|
||||||
Brandon Squizzato <35474886+bsquizz@users.noreply.github.com>
|
Brandon Squizzato <35474886+bsquizz@users.noreply.github.com>
|
||||||
Brian <mofosyne@gmail.com>
|
Brian <mofosyne@gmail.com>
|
||||||
|
@ -117,6 +124,7 @@ Casey Primozic <casey@cprimozic.net>
|
||||||
Casey Primozic <me@ameo.link>
|
Casey Primozic <me@ameo.link>
|
||||||
CausalLM <148736309+CausalLM@users.noreply.github.com>
|
CausalLM <148736309+CausalLM@users.noreply.github.com>
|
||||||
Cebtenzzre <cebtenzzre@gmail.com>
|
Cebtenzzre <cebtenzzre@gmail.com>
|
||||||
|
CentricStorm <CentricStorm@users.noreply.github.com>
|
||||||
Chad Brewbaker <crb002@gmail.com>
|
Chad Brewbaker <crb002@gmail.com>
|
||||||
Changyeon Kim <cyzero.kim@samsung.com>
|
Changyeon Kim <cyzero.kim@samsung.com>
|
||||||
Chao Jiang <jc19chaoj@zoho.com>
|
Chao Jiang <jc19chaoj@zoho.com>
|
||||||
|
@ -131,12 +139,15 @@ Chris Kuehl <ckuehl@ckuehl.me>
|
||||||
Christian Demsar <christian@github.email.demsar.us>
|
Christian Demsar <christian@github.email.demsar.us>
|
||||||
Christian Demsar <crasm@git.vczf.us>
|
Christian Demsar <crasm@git.vczf.us>
|
||||||
Christian Falch <875252+chrfalch@users.noreply.github.com>
|
Christian Falch <875252+chrfalch@users.noreply.github.com>
|
||||||
|
Christian Kastner <ckk@kvr.at>
|
||||||
Christian Kögler <ck3d@gmx.de>
|
Christian Kögler <ck3d@gmx.de>
|
||||||
Christian Köhnenkamp <cvk5@me.com>
|
Christian Köhnenkamp <cvk5@me.com>
|
||||||
Christian Zhou-Zheng <59622928+christianazinn@users.noreply.github.com>
|
Christian Zhou-Zheng <59622928+christianazinn@users.noreply.github.com>
|
||||||
|
Christopher Nielsen <62156882+mascguy@users.noreply.github.com>
|
||||||
Clark Saben <76020733+csaben@users.noreply.github.com>
|
Clark Saben <76020733+csaben@users.noreply.github.com>
|
||||||
Clint Herron <hanclinto@gmail.com>
|
Clint Herron <hanclinto@gmail.com>
|
||||||
Conrad Kramer <conrad@conradkramer.com>
|
Conrad Kramer <conrad@conradkramer.com>
|
||||||
|
Corentin REGAL <corentin.regal@gmail.com>
|
||||||
CrispStrobe <154636388+CrispStrobe@users.noreply.github.com>
|
CrispStrobe <154636388+CrispStrobe@users.noreply.github.com>
|
||||||
Csaba Kecskemeti <csaba.kecskemeti@gmail.com>
|
Csaba Kecskemeti <csaba.kecskemeti@gmail.com>
|
||||||
Cuong Trinh Manh <nguoithichkhampha@gmail.com>
|
Cuong Trinh Manh <nguoithichkhampha@gmail.com>
|
||||||
|
@ -176,6 +187,7 @@ Dibakar Gope <dibakar.gope@arm.com>
|
||||||
Didzis Gosko <didzis@users.noreply.github.com>
|
Didzis Gosko <didzis@users.noreply.github.com>
|
||||||
Diego Devesa <slarengh@gmail.com>
|
Diego Devesa <slarengh@gmail.com>
|
||||||
Diogo Teles Sant'Anna <diogoteles@google.com>
|
Diogo Teles Sant'Anna <diogoteles@google.com>
|
||||||
|
Djip007 <3705339+Djip007@users.noreply.github.com>
|
||||||
Djip007 <djip.perois@free.fr>
|
Djip007 <djip.perois@free.fr>
|
||||||
Don Mahurin <dmahurin@users.noreply.github.com>
|
Don Mahurin <dmahurin@users.noreply.github.com>
|
||||||
DooWoong Lee (David) <manics99@naver.com>
|
DooWoong Lee (David) <manics99@naver.com>
|
||||||
|
@ -193,6 +205,7 @@ Edward Taylor <edeetee@gmail.com>
|
||||||
Elaine <elaine.zosa@gmail.com>
|
Elaine <elaine.zosa@gmail.com>
|
||||||
Elbios <141279586+Elbios@users.noreply.github.com>
|
Elbios <141279586+Elbios@users.noreply.github.com>
|
||||||
Elton Kola <eltonkola@gmail.com>
|
Elton Kola <eltonkola@gmail.com>
|
||||||
|
Emreerdog <34742675+Emreerdog@users.noreply.github.com>
|
||||||
Engininja2 <139037756+Engininja2@users.noreply.github.com>
|
Engininja2 <139037756+Engininja2@users.noreply.github.com>
|
||||||
Equim <sayaka@ekyu.moe>
|
Equim <sayaka@ekyu.moe>
|
||||||
Eric Curtin <ecurtin@redhat.com>
|
Eric Curtin <ecurtin@redhat.com>
|
||||||
|
@ -233,6 +246,7 @@ Fred Douglas <43351173+fredlas@users.noreply.github.com>
|
||||||
Frederik Vogel <Schaltfehler@users.noreply.github.com>
|
Frederik Vogel <Schaltfehler@users.noreply.github.com>
|
||||||
Gabe Goodhart <gabe.l.hart@gmail.com>
|
Gabe Goodhart <gabe.l.hart@gmail.com>
|
||||||
Gabe Goodhart <ghart@us.ibm.com>
|
Gabe Goodhart <ghart@us.ibm.com>
|
||||||
|
Gaetan Bisson <gaetan@fenua.org>
|
||||||
GainLee <perfecter.gen@gmail.com>
|
GainLee <perfecter.gen@gmail.com>
|
||||||
Galunid <karolek1231456@gmail.com>
|
Galunid <karolek1231456@gmail.com>
|
||||||
Gary Linscott <glinscott@gmail.com>
|
Gary Linscott <glinscott@gmail.com>
|
||||||
|
@ -249,6 +263,7 @@ Guillaume "Vermeille" Sanchez <Guillaume.V.Sanchez@gmail.com>
|
||||||
Guillaume Wenzek <gwenzek@users.noreply.github.com>
|
Guillaume Wenzek <gwenzek@users.noreply.github.com>
|
||||||
Guoliang Hua <32868157+nbcsm@users.noreply.github.com>
|
Guoliang Hua <32868157+nbcsm@users.noreply.github.com>
|
||||||
Guoteng <32697156+SolenoidWGT@users.noreply.github.com>
|
Guoteng <32697156+SolenoidWGT@users.noreply.github.com>
|
||||||
|
Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com>
|
||||||
Gustavo Rocha Dias <91472747+gustrd@users.noreply.github.com>
|
Gustavo Rocha Dias <91472747+gustrd@users.noreply.github.com>
|
||||||
Haggai Nuchi <h.nuchi@gmail.com>
|
Haggai Nuchi <h.nuchi@gmail.com>
|
||||||
Halalaluyafail3 <55773281+Halalaluyafail3@users.noreply.github.com>
|
Halalaluyafail3 <55773281+Halalaluyafail3@users.noreply.github.com>
|
||||||
|
@ -259,11 +274,13 @@ Haoxiang Fei <tonyfettes@tonyfettes.com>
|
||||||
Harald Fernengel <harald.fernengel@here.com>
|
Harald Fernengel <harald.fernengel@here.com>
|
||||||
Hatsune Miku <129688334+at8u@users.noreply.github.com>
|
Hatsune Miku <129688334+at8u@users.noreply.github.com>
|
||||||
HatsuneMikuUwU33 <173229399+HatsuneMikuUwU33@users.noreply.github.com>
|
HatsuneMikuUwU33 <173229399+HatsuneMikuUwU33@users.noreply.github.com>
|
||||||
|
Haus1 <haus.xda@gmail.com>
|
||||||
Henk Poley <HenkPoley@gmail.com>
|
Henk Poley <HenkPoley@gmail.com>
|
||||||
Henri Vasserman <henv@hot.ee>
|
Henri Vasserman <henv@hot.ee>
|
||||||
Henrik Forstén <henrik.forsten@gmail.com>
|
Henrik Forstén <henrik.forsten@gmail.com>
|
||||||
Herman Semenov <GermanAizek@yandex.ru>
|
Herman Semenov <GermanAizek@yandex.ru>
|
||||||
Hesen Peng <hesen.peng@gmail.com>
|
Hesen Peng <hesen.peng@gmail.com>
|
||||||
|
HimariO <dsfhe49854@gmail.com>
|
||||||
Hoang Nguyen <hugo53@users.noreply.github.com>
|
Hoang Nguyen <hugo53@users.noreply.github.com>
|
||||||
Hong Bo PENG <penghb@cn.ibm.com>
|
Hong Bo PENG <penghb@cn.ibm.com>
|
||||||
Hongyu Ouyang <96765450+casavaca@users.noreply.github.com>
|
Hongyu Ouyang <96765450+casavaca@users.noreply.github.com>
|
||||||
|
@ -280,6 +297,7 @@ Icecream95 <the.real.icecream95@gmail.com>
|
||||||
Ido S <ido.pluto@gmail.com>
|
Ido S <ido.pluto@gmail.com>
|
||||||
IgnacioFDM <ignaciofdm@gmail.com>
|
IgnacioFDM <ignaciofdm@gmail.com>
|
||||||
Igor Okulist <okigan@gmail.com>
|
Igor Okulist <okigan@gmail.com>
|
||||||
|
Ihar Hrachyshka <ihrachys@redhat.com>
|
||||||
Ikko Eltociear Ashimine <eltociear@gmail.com>
|
Ikko Eltociear Ashimine <eltociear@gmail.com>
|
||||||
Ilya Kurdyukov <59548320+ilyakurdyukov@users.noreply.github.com>
|
Ilya Kurdyukov <59548320+ilyakurdyukov@users.noreply.github.com>
|
||||||
Ionoclast Laboratories <brigham@ionoclast.com>
|
Ionoclast Laboratories <brigham@ionoclast.com>
|
||||||
|
@ -289,12 +307,14 @@ Ivan <nekotekina@gmail.com>
|
||||||
Ivan Filipov <159561759+vanaka11@users.noreply.github.com>
|
Ivan Filipov <159561759+vanaka11@users.noreply.github.com>
|
||||||
Ivan Komarov <Ivan.Komarov@dfyz.info>
|
Ivan Komarov <Ivan.Komarov@dfyz.info>
|
||||||
Ivan Stepanov <ivanstepanovftw@gmail.com>
|
Ivan Stepanov <ivanstepanovftw@gmail.com>
|
||||||
|
JFLFY2255 <JFLFY2255@163.com>
|
||||||
JH23X <165871467+JH23X@users.noreply.github.com>
|
JH23X <165871467+JH23X@users.noreply.github.com>
|
||||||
Jack Mousseau <jack@software.inc>
|
Jack Mousseau <jack@software.inc>
|
||||||
Jack Mousseau <jmousseau@users.noreply.github.com>
|
Jack Mousseau <jmousseau@users.noreply.github.com>
|
||||||
JackJollimore <130917767+JackJollimore@users.noreply.github.com>
|
JackJollimore <130917767+JackJollimore@users.noreply.github.com>
|
||||||
Jaeden Amero <jaeden@patater.com>
|
Jaeden Amero <jaeden@patater.com>
|
||||||
Jaemin Son <woalsdnd@gmail.com>
|
Jaemin Son <woalsdnd@gmail.com>
|
||||||
|
Jafar Uruç <jafar.uruc@gmail.com>
|
||||||
Jag Chadha <jagtesh@gmail.com>
|
Jag Chadha <jagtesh@gmail.com>
|
||||||
Jakub N <jakubniemczyk97@gmail.com>
|
Jakub N <jakubniemczyk97@gmail.com>
|
||||||
James A Capozzoli <157492257+jac-jim@users.noreply.github.com>
|
James A Capozzoli <157492257+jac-jim@users.noreply.github.com>
|
||||||
|
@ -315,6 +335,7 @@ Jeffrey Morgan <jmorganca@gmail.com>
|
||||||
Jeffrey Quesnelle <emozilla@nousresearch.com>
|
Jeffrey Quesnelle <emozilla@nousresearch.com>
|
||||||
Jeroen Mostert <jeroen.mostert@cm.com>
|
Jeroen Mostert <jeroen.mostert@cm.com>
|
||||||
Jesse Jojo Johnson <williamsaintgeorge@gmail.com>
|
Jesse Jojo Johnson <williamsaintgeorge@gmail.com>
|
||||||
|
Jett Janiak <jettjaniak@gmail.com>
|
||||||
Jeximo <jeximo@gmail.com>
|
Jeximo <jeximo@gmail.com>
|
||||||
Jhen-Jie Hong <iainst0409@gmail.com>
|
Jhen-Jie Hong <iainst0409@gmail.com>
|
||||||
Jiahao Li <liplus17@163.com>
|
Jiahao Li <liplus17@163.com>
|
||||||
|
@ -343,6 +364,7 @@ Josh Ramer <josh.ramer@icloud.com>
|
||||||
Joyce <joycebrum@google.com>
|
Joyce <joycebrum@google.com>
|
||||||
Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
|
Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
|
||||||
Judd <foldl@users.noreply.github.com>
|
Judd <foldl@users.noreply.github.com>
|
||||||
|
Juk Armstrong <69222624+jukofyork@users.noreply.github.com>
|
||||||
Julius Arkenberg <arki05@users.noreply.github.com>
|
Julius Arkenberg <arki05@users.noreply.github.com>
|
||||||
Jun Hee Yoo <contact.jhyoo@gmail.com>
|
Jun Hee Yoo <contact.jhyoo@gmail.com>
|
||||||
Jun Jie <71215065+junnjiee16@users.noreply.github.com>
|
Jun Jie <71215065+junnjiee16@users.noreply.github.com>
|
||||||
|
@ -357,6 +379,7 @@ Justine Tunney <jtunney@mozilla.com>
|
||||||
Juuso Alasuutari <juuso.alasuutari@gmail.com>
|
Juuso Alasuutari <juuso.alasuutari@gmail.com>
|
||||||
KASR <karim.asrih@gmail.com>
|
KASR <karim.asrih@gmail.com>
|
||||||
Kamil Tomšík <info@tomsik.cz>
|
Kamil Tomšík <info@tomsik.cz>
|
||||||
|
Karol Kontny <82021046+kkontny@users.noreply.github.com>
|
||||||
Karsten Weiss <knweiss@gmail.com>
|
Karsten Weiss <knweiss@gmail.com>
|
||||||
Karthick <j.karthic2004@gmail.com>
|
Karthick <j.karthic2004@gmail.com>
|
||||||
Karthik Kumar Viswanathan <195178+guilt@users.noreply.github.com>
|
Karthik Kumar Viswanathan <195178+guilt@users.noreply.github.com>
|
||||||
|
@ -376,6 +399,7 @@ Kolen Cheung <ickc@users.noreply.github.com>
|
||||||
Konstantin Herud <konstantin.herud@denkbares.com>
|
Konstantin Herud <konstantin.herud@denkbares.com>
|
||||||
Konstantin Zhuravlyov <konstantin.zhuravlyov@amd.com>
|
Konstantin Zhuravlyov <konstantin.zhuravlyov@amd.com>
|
||||||
Kunshang Ji <kunshang.ji@intel.com>
|
Kunshang Ji <kunshang.ji@intel.com>
|
||||||
|
Kyle Bruene <KyleBruene@users.noreply.github.com>
|
||||||
Kyle Liang <liangmanlai@gmail.com>
|
Kyle Liang <liangmanlai@gmail.com>
|
||||||
Kyle Mistele <kyle@mistele.com>
|
Kyle Mistele <kyle@mistele.com>
|
||||||
Kylin <56434533+KyL0N@users.noreply.github.com>
|
Kylin <56434533+KyL0N@users.noreply.github.com>
|
||||||
|
@ -394,6 +418,7 @@ Liu Jia <jia3.liu@intel.com>
|
||||||
LoganDark <github@logandark.mozmail.com>
|
LoganDark <github@logandark.mozmail.com>
|
||||||
Loïc Carrère <loic.carrere@gmail.com>
|
Loïc Carrère <loic.carrere@gmail.com>
|
||||||
LostRuins <39025047+LostRuins@users.noreply.github.com>
|
LostRuins <39025047+LostRuins@users.noreply.github.com>
|
||||||
|
LostRuins Concedo <39025047+LostRuins@users.noreply.github.com>
|
||||||
Luciano <lucianostrika44@gmail.com>
|
Luciano <lucianostrika44@gmail.com>
|
||||||
Luo Tian <lt@basecity.com>
|
Luo Tian <lt@basecity.com>
|
||||||
Lyle Dean <dean@lyle.dev>
|
Lyle Dean <dean@lyle.dev>
|
||||||
|
@ -423,6 +448,7 @@ MasterYi1024 <39848311+MasterYi1024@users.noreply.github.com>
|
||||||
Mateusz Charytoniuk <mateusz.charytoniuk@protonmail.com>
|
Mateusz Charytoniuk <mateusz.charytoniuk@protonmail.com>
|
||||||
Matheus C. França <matheus-catarino@hotmail.com>
|
Matheus C. França <matheus-catarino@hotmail.com>
|
||||||
Matheus Gabriel Alves Silva <matheusgasource@gmail.com>
|
Matheus Gabriel Alves Silva <matheusgasource@gmail.com>
|
||||||
|
Mathieu Baudier <mbaudier@argeo.org>
|
||||||
Mathieu Geli <mathieu.geli@gmail.com>
|
Mathieu Geli <mathieu.geli@gmail.com>
|
||||||
Mathieu Nayrolles <MathieuNls@users.noreply.github.com>
|
Mathieu Nayrolles <MathieuNls@users.noreply.github.com>
|
||||||
Mathijs Henquet <mathijs.henquet@gmail.com>
|
Mathijs Henquet <mathijs.henquet@gmail.com>
|
||||||
|
@ -444,6 +470,7 @@ Meng, Hengyu <hengyu.meng@intel.com>
|
||||||
Mengqing Cao <cmq0113@163.com>
|
Mengqing Cao <cmq0113@163.com>
|
||||||
Merrick Christensen <merrick.christensen@gmail.com>
|
Merrick Christensen <merrick.christensen@gmail.com>
|
||||||
Michael Coppola <m18coppola@gmail.com>
|
Michael Coppola <m18coppola@gmail.com>
|
||||||
|
Michael Engel <mengel@redhat.com>
|
||||||
Michael Francis <edude03@gmail.com>
|
Michael Francis <edude03@gmail.com>
|
||||||
Michael Hueschen <m@mhueschen.dev>
|
Michael Hueschen <m@mhueschen.dev>
|
||||||
Michael Kesper <mkesper@schokokeks.org>
|
Michael Kesper <mkesper@schokokeks.org>
|
||||||
|
@ -452,7 +479,9 @@ Michael Podvitskiy <podvitskiymichael@gmail.com>
|
||||||
Michael Potter <NanoTekGuy@Gmail.com>
|
Michael Potter <NanoTekGuy@Gmail.com>
|
||||||
Michael de Gans <michael.john.degans@gmail.com>
|
Michael de Gans <michael.john.degans@gmail.com>
|
||||||
Michaël de Vries <vriesdemichael@gmail.com>
|
Michaël de Vries <vriesdemichael@gmail.com>
|
||||||
|
Michał Moskal <michal@moskal.me>
|
||||||
Michał Tuszyński <srgtuszy@gmail.com>
|
Michał Tuszyński <srgtuszy@gmail.com>
|
||||||
|
Michelle Tan <41475767+MichelleTanPY@users.noreply.github.com>
|
||||||
Mihai <mihai.chirculescu@yahoo.com>
|
Mihai <mihai.chirculescu@yahoo.com>
|
||||||
Mike <ytianhui2004@gmail.com>
|
Mike <ytianhui2004@gmail.com>
|
||||||
Mikko Juola <mikjuo@gmail.com>
|
Mikko Juola <mikjuo@gmail.com>
|
||||||
|
@ -477,6 +506,7 @@ Neo Zhang <14088817+arthw@users.noreply.github.com>
|
||||||
Neo Zhang <zhang.jianyu@outlook.com>
|
Neo Zhang <zhang.jianyu@outlook.com>
|
||||||
Neo Zhang Jianyu <jianyu.zhang@intel.com>
|
Neo Zhang Jianyu <jianyu.zhang@intel.com>
|
||||||
Neuman Vong <neuman.vong@gmail.com>
|
Neuman Vong <neuman.vong@gmail.com>
|
||||||
|
NeverLucky <92274250+nvrxq@users.noreply.github.com>
|
||||||
Nexes the Old <124105151+Nexesenex@users.noreply.github.com>
|
Nexes the Old <124105151+Nexesenex@users.noreply.github.com>
|
||||||
Nexesenex <124105151+Nexesenex@users.noreply.github.com>
|
Nexesenex <124105151+Nexesenex@users.noreply.github.com>
|
||||||
Niall Coates <1349685+Niall-@users.noreply.github.com>
|
Niall Coates <1349685+Niall-@users.noreply.github.com>
|
||||||
|
@ -484,11 +514,15 @@ Nicholai Tukanov <nicholaitukanov@gmail.com>
|
||||||
Nico Bosshard <nico@bosshome.ch>
|
Nico Bosshard <nico@bosshome.ch>
|
||||||
Nicolai Weitkemper <kontakt@nicolaiweitkemper.de>
|
Nicolai Weitkemper <kontakt@nicolaiweitkemper.de>
|
||||||
Nicolás Pérez <nicolas_perez@brown.edu>
|
Nicolás Pérez <nicolas_perez@brown.edu>
|
||||||
|
Nicolò Scipione <nicolo.scipione@codeplay.com>
|
||||||
Nigel Bosch <pnigelb@gmail.com>
|
Nigel Bosch <pnigelb@gmail.com>
|
||||||
|
Nikita Sarychev <42014488+sARY77@users.noreply.github.com>
|
||||||
Niklas Korz <niklas@niklaskorz.de>
|
Niklas Korz <niklas@niklaskorz.de>
|
||||||
NikolaiLyssogor <59844691+NikolaiLyssogor@users.noreply.github.com>
|
NikolaiLyssogor <59844691+NikolaiLyssogor@users.noreply.github.com>
|
||||||
|
Nikolaos Pothitos <pothitos@di.uoa.gr>
|
||||||
Nikolas <127742645+nneubacher@users.noreply.github.com>
|
Nikolas <127742645+nneubacher@users.noreply.github.com>
|
||||||
Nindaleth <Nindaleth@users.noreply.github.com>
|
Nindaleth <Nindaleth@users.noreply.github.com>
|
||||||
|
Nuno <rare-magma@posteo.eu>
|
||||||
OSecret <135510162+OLSecret@users.noreply.github.com>
|
OSecret <135510162+OLSecret@users.noreply.github.com>
|
||||||
Oleksandr Nikitin <oleksandr@tvori.info>
|
Oleksandr Nikitin <oleksandr@tvori.info>
|
||||||
Oleksii Maryshchenko <oleksii.maryshchenko@gmail.com>
|
Oleksii Maryshchenko <oleksii.maryshchenko@gmail.com>
|
||||||
|
@ -504,6 +538,7 @@ Pavel Zloi <github.com@drteam.rocks>
|
||||||
Pavol Rusnak <pavol@rusnak.io>
|
Pavol Rusnak <pavol@rusnak.io>
|
||||||
Paweł Wodnicki <151604+32bitmicro@users.noreply.github.com>
|
Paweł Wodnicki <151604+32bitmicro@users.noreply.github.com>
|
||||||
Pedro Cuenca <pedro@huggingface.co>
|
Pedro Cuenca <pedro@huggingface.co>
|
||||||
|
Peter <peter277@users.noreply.github.com>
|
||||||
Peter Sugihara <peter@campsh.com>
|
Peter Sugihara <peter@campsh.com>
|
||||||
Phil H <5756783+phiharri@users.noreply.github.com>
|
Phil H <5756783+phiharri@users.noreply.github.com>
|
||||||
Philip Taron <philip.taron@gmail.com>
|
Philip Taron <philip.taron@gmail.com>
|
||||||
|
@ -529,9 +564,12 @@ Rand Xie <randxiexyy29@gmail.com>
|
||||||
Randall Fitzgerald <randall@dasaku.net>
|
Randall Fitzgerald <randall@dasaku.net>
|
||||||
Random Fly <renfei8@live.cn>
|
Random Fly <renfei8@live.cn>
|
||||||
Reinforce-II <fate@eastal.com>
|
Reinforce-II <fate@eastal.com>
|
||||||
|
Rémy Oudompheng <oudomphe@phare.normalesup.org>
|
||||||
Ren Xuancheng <jklj077@users.noreply.github.com>
|
Ren Xuancheng <jklj077@users.noreply.github.com>
|
||||||
Rene Leonhardt <65483435+reneleonhardt@users.noreply.github.com>
|
Rene Leonhardt <65483435+reneleonhardt@users.noreply.github.com>
|
||||||
|
Reza Kakhki <rezakakhki.de@gmail.com>
|
||||||
RhinoDevel <RhinoDevel@users.noreply.github.com>
|
RhinoDevel <RhinoDevel@users.noreply.github.com>
|
||||||
|
Riccardo Orlando <Riccorl@users.noreply.github.com>
|
||||||
Riceball LEE <snowyu.lee@gmail.com>
|
Riceball LEE <snowyu.lee@gmail.com>
|
||||||
Rich Dougherty <rich@rd.nz>
|
Rich Dougherty <rich@rd.nz>
|
||||||
Richard Kiss <him@richardkiss.com>
|
Richard Kiss <him@richardkiss.com>
|
||||||
|
@ -544,6 +582,8 @@ Riley Stewart <ristew@users.noreply.github.com>
|
||||||
Rinne <AsakusaRinne@gmail.com>
|
Rinne <AsakusaRinne@gmail.com>
|
||||||
Rinne <liu_yaohui1998@126.com>
|
Rinne <liu_yaohui1998@126.com>
|
||||||
Robert Brisita <986796+rbrisita@users.noreply.github.com>
|
Robert Brisita <986796+rbrisita@users.noreply.github.com>
|
||||||
|
Robert Collins <roberto.tomas.cuentas@gmail.com>
|
||||||
|
Robert Ormandi <52251610+ormandi@users.noreply.github.com>
|
||||||
Robert Sung-wook Shin <edp1096@users.noreply.github.com>
|
Robert Sung-wook Shin <edp1096@users.noreply.github.com>
|
||||||
Robey Holderith <robey@flaminglunchbox.net>
|
Robey Holderith <robey@flaminglunchbox.net>
|
||||||
Robyn <robyngraf@users.noreply.github.com>
|
Robyn <robyngraf@users.noreply.github.com>
|
||||||
|
@ -559,7 +599,9 @@ Roni <sulpher@gmx.net>
|
||||||
Ronny Brendel <ronnybrendel@gmail.com>
|
Ronny Brendel <ronnybrendel@gmail.com>
|
||||||
Ronsor <ronsor@ronsor.pw>
|
Ronsor <ronsor@ronsor.pw>
|
||||||
Rowan Hart <rowanbhart@gmail.com>
|
Rowan Hart <rowanbhart@gmail.com>
|
||||||
|
Ruan <47767371+ruanych@users.noreply.github.com>
|
||||||
Ruchira Hasaranga <ruchira66@gmail.com>
|
Ruchira Hasaranga <ruchira66@gmail.com>
|
||||||
|
Rudi Servo <rudiservo@gmail.com>
|
||||||
Ruixin Huang <18860020911@163.com>
|
Ruixin Huang <18860020911@163.com>
|
||||||
Rune <43761327+Rune-AI@users.noreply.github.com>
|
Rune <43761327+Rune-AI@users.noreply.github.com>
|
||||||
RunningLeon <maningsheng@sensetime.com>
|
RunningLeon <maningsheng@sensetime.com>
|
||||||
|
@ -623,12 +665,14 @@ Steven Roussey <sroussey@gmail.com>
|
||||||
Steward Garcia <57494570+FSSRepo@users.noreply.github.com>
|
Steward Garcia <57494570+FSSRepo@users.noreply.github.com>
|
||||||
StrangeBytesDev <141275258+StrangeBytesDev@users.noreply.github.com>
|
StrangeBytesDev <141275258+StrangeBytesDev@users.noreply.github.com>
|
||||||
Suaj Carrot <72162667+SuajCarrot@users.noreply.github.com>
|
Suaj Carrot <72162667+SuajCarrot@users.noreply.github.com>
|
||||||
|
Sukriti Sharma <Ssukriti@users.noreply.github.com>
|
||||||
SuperUserNameMan <yoann@terminajones.com>
|
SuperUserNameMan <yoann@terminajones.com>
|
||||||
Sutou Kouhei <kou@cozmixng.org>
|
Sutou Kouhei <kou@cozmixng.org>
|
||||||
Tai Duc Nguyen <taiducnguyen.drexel@gmail.com>
|
Tai Duc Nguyen <taiducnguyen.drexel@gmail.com>
|
||||||
Taikono-Himazin <kazu@po.harenet.ne.jp>
|
Taikono-Himazin <kazu@po.harenet.ne.jp>
|
||||||
Tameem <113388789+AhmadTameem@users.noreply.github.com>
|
Tameem <113388789+AhmadTameem@users.noreply.github.com>
|
||||||
Tamotsu Takahashi <ttakah+github@gmail.com>
|
Tamotsu Takahashi <ttakah+github@gmail.com>
|
||||||
|
Tei Home <taiteitonghome@proton.me>
|
||||||
Thái Hoàng Tâm <75922889+RoyalHeart@users.noreply.github.com>
|
Thái Hoàng Tâm <75922889+RoyalHeart@users.noreply.github.com>
|
||||||
Thatcher Chamberlin <j.thatcher.c@gmail.com>
|
Thatcher Chamberlin <j.thatcher.c@gmail.com>
|
||||||
Theia Vogel <theia@vgel.me>
|
Theia Vogel <theia@vgel.me>
|
||||||
|
@ -640,6 +684,7 @@ Tim Miller <drasticactions@users.noreply.github.com>
|
||||||
Tim Wang <overocean@gmail.com>
|
Tim Wang <overocean@gmail.com>
|
||||||
Timmy Knight <r2d2fish@gmail.com>
|
Timmy Knight <r2d2fish@gmail.com>
|
||||||
Timothy Cronin <40186632+4imothy@users.noreply.github.com>
|
Timothy Cronin <40186632+4imothy@users.noreply.github.com>
|
||||||
|
Ting Lou <louting@189.cn>
|
||||||
Ting Lou <ting.lou@gmail.com>
|
Ting Lou <ting.lou@gmail.com>
|
||||||
Ting Sun <suntcrick@gmail.com>
|
Ting Sun <suntcrick@gmail.com>
|
||||||
Tobias Lütke <tobi@shopify.com>
|
Tobias Lütke <tobi@shopify.com>
|
||||||
|
@ -661,6 +706,7 @@ Uzo Nweke <uzoechi@gmail.com>
|
||||||
Vaibhav Srivastav <vaibhavs10@gmail.com>
|
Vaibhav Srivastav <vaibhavs10@gmail.com>
|
||||||
Val Kharitonov <mail@kharvd.com>
|
Val Kharitonov <mail@kharvd.com>
|
||||||
Valentin Konovalov <valle.ketsujin@gmail.com>
|
Valentin Konovalov <valle.ketsujin@gmail.com>
|
||||||
|
Valentin Mamedov <45292985+Inf1delis@users.noreply.github.com>
|
||||||
Valentyn Bezshapkin <61702053+valentynbez@users.noreply.github.com>
|
Valentyn Bezshapkin <61702053+valentynbez@users.noreply.github.com>
|
||||||
Vali Malinoiu <0x4139@gmail.com>
|
Vali Malinoiu <0x4139@gmail.com>
|
||||||
Victor Nogueira <felladrin@gmail.com>
|
Victor Nogueira <felladrin@gmail.com>
|
||||||
|
@ -673,13 +719,17 @@ Vladimir Malyutin <first-leon@yandex.ru>
|
||||||
Vladimir Zorin <vladimir@deviant.guru>
|
Vladimir Zorin <vladimir@deviant.guru>
|
||||||
VoidIsVoid <343750470@qq.com>
|
VoidIsVoid <343750470@qq.com>
|
||||||
Volodymyr Vitvitskyi <72226+signalpillar@users.noreply.github.com>
|
Volodymyr Vitvitskyi <72226+signalpillar@users.noreply.github.com>
|
||||||
|
Wang Qin <37098874+wangqin0@users.noreply.github.com>
|
||||||
|
Wang Ran (汪然) <wangr@smail.nju.edu.cn>
|
||||||
WangHaoranRobin <56047610+WangHaoranRobin@users.noreply.github.com>
|
WangHaoranRobin <56047610+WangHaoranRobin@users.noreply.github.com>
|
||||||
Weird Constructor <weirdconstructor@gmail.com>
|
Weird Constructor <weirdconstructor@gmail.com>
|
||||||
Welby Seely <welbyseely@gmail.com>
|
Welby Seely <welbyseely@gmail.com>
|
||||||
Wentai Zhang <rchardx@gmail.com>
|
Wentai Zhang <rchardx@gmail.com>
|
||||||
WillCorticesAI <150854901+WillCorticesAI@users.noreply.github.com>
|
WillCorticesAI <150854901+WillCorticesAI@users.noreply.github.com>
|
||||||
William Tambellini <william.tambellini@gmail.com>
|
William Tambellini <william.tambellini@gmail.com>
|
||||||
|
William Tambellini <wtambellini@sdl.com>
|
||||||
Willy Tarreau <w@1wt.eu>
|
Willy Tarreau <w@1wt.eu>
|
||||||
|
Woof Dog <197125663+woof-dog@users.noreply.github.com>
|
||||||
Wouter <9594229+DifferentialityDevelopment@users.noreply.github.com>
|
Wouter <9594229+DifferentialityDevelopment@users.noreply.github.com>
|
||||||
Wu Jian Ping <wujjpp@hotmail.com>
|
Wu Jian Ping <wujjpp@hotmail.com>
|
||||||
Wu Jian Ping <wujp@greatld.com>
|
Wu Jian Ping <wujp@greatld.com>
|
||||||
|
@ -692,6 +742,7 @@ Xie Yanbo <xieyanbo@gmail.com>
|
||||||
Xingchen Song(宋星辰) <xingchensong1996@163.com>
|
Xingchen Song(宋星辰) <xingchensong1996@163.com>
|
||||||
Xinpeng Dou <81913537+Dou-Git@users.noreply.github.com>
|
Xinpeng Dou <81913537+Dou-Git@users.noreply.github.com>
|
||||||
Xuan Son Nguyen <thichthat@gmail.com>
|
Xuan Son Nguyen <thichthat@gmail.com>
|
||||||
|
Xuan-Son Nguyen <thichthat@gmail.com>
|
||||||
Yaiko <elyaiko@hotmail.com>
|
Yaiko <elyaiko@hotmail.com>
|
||||||
Yann Follet <131855179+YannFollet@users.noreply.github.com>
|
Yann Follet <131855179+YannFollet@users.noreply.github.com>
|
||||||
Yaroslav <yaroslav.yashin@me.com>
|
Yaroslav <yaroslav.yashin@me.com>
|
||||||
|
@ -702,7 +753,9 @@ Yoshi Suhara <y.suhara@gmail.com>
|
||||||
Yoshi Suhara <ysuhara@nvidia.com>
|
Yoshi Suhara <ysuhara@nvidia.com>
|
||||||
Younes Belkada <49240599+younesbelkada@users.noreply.github.com>
|
Younes Belkada <49240599+younesbelkada@users.noreply.github.com>
|
||||||
Yueh-Po Peng <94939112+y10ab1@users.noreply.github.com>
|
Yueh-Po Peng <94939112+y10ab1@users.noreply.github.com>
|
||||||
|
Yüg <eugeniosegalaweb@gmail.com>
|
||||||
Yui <dev@sleepyyui.com>
|
Yui <dev@sleepyyui.com>
|
||||||
|
Yun Dou <dixyes@gmail.com>
|
||||||
Yuri Khrustalev <ykhrustalev@users.noreply.github.com>
|
Yuri Khrustalev <ykhrustalev@users.noreply.github.com>
|
||||||
Yusuf Kağan Hanoğlu <hanoglu@yahoo.com>
|
Yusuf Kağan Hanoğlu <hanoglu@yahoo.com>
|
||||||
Yuval Peled <31162840+Yuval-Peled@users.noreply.github.com>
|
Yuval Peled <31162840+Yuval-Peled@users.noreply.github.com>
|
||||||
|
@ -714,18 +767,23 @@ Zhang Peiyuan <a1286225768@gmail.com>
|
||||||
Zheng.Deng <32841220+dengzheng-cloud@users.noreply.github.com>
|
Zheng.Deng <32841220+dengzheng-cloud@users.noreply.github.com>
|
||||||
Zhenwei Jin <109658203+kylo5aby@users.noreply.github.com>
|
Zhenwei Jin <109658203+kylo5aby@users.noreply.github.com>
|
||||||
Zhiyuan Li <lizhiyuan@uniartisan.com>
|
Zhiyuan Li <lizhiyuan@uniartisan.com>
|
||||||
|
Zhiyuan Li <uniartisan2017@gmail.com>
|
||||||
ZhouYuChen <zhouyuchen@naver.com>
|
ZhouYuChen <zhouyuchen@naver.com>
|
||||||
Ziad Ben Hadj-Alouane <zied.benhadjalouane@gmail.com>
|
Ziad Ben Hadj-Alouane <zied.benhadjalouane@gmail.com>
|
||||||
Ziang Wu <97337387+ZiangWu-77@users.noreply.github.com>
|
Ziang Wu <97337387+ZiangWu-77@users.noreply.github.com>
|
||||||
Zsapi <martin1.zsapka@gmail.com>
|
Zsapi <martin1.zsapka@gmail.com>
|
||||||
a-n-n-a-l-e-e <150648636+a-n-n-a-l-e-e@users.noreply.github.com>
|
a-n-n-a-l-e-e <150648636+a-n-n-a-l-e-e@users.noreply.github.com>
|
||||||
|
a3sh <38979186+A3shTnT@users.noreply.github.com>
|
||||||
adel boussaken <netdur@gmail.com>
|
adel boussaken <netdur@gmail.com>
|
||||||
afrideva <95653597+afrideva@users.noreply.github.com>
|
afrideva <95653597+afrideva@users.noreply.github.com>
|
||||||
|
ag2s20150909 <19373730+ag2s20150909@users.noreply.github.com>
|
||||||
agray3 <agray3@users.noreply.github.com>
|
agray3 <agray3@users.noreply.github.com>
|
||||||
akawrykow <142945436+akawrykow@users.noreply.github.com>
|
akawrykow <142945436+akawrykow@users.noreply.github.com>
|
||||||
|
alek3y <44779186+alek3y@users.noreply.github.com>
|
||||||
alexpinel <93524949+alexpinel@users.noreply.github.com>
|
alexpinel <93524949+alexpinel@users.noreply.github.com>
|
||||||
alonfaraj <alonfaraj@gmail.com>
|
alonfaraj <alonfaraj@gmail.com>
|
||||||
alwqx <kenan3015@gmail.com>
|
alwqx <kenan3015@gmail.com>
|
||||||
|
amd-dwang <dong.wang@amd.com>
|
||||||
amd-lalithnc <lalithnc@amd.com>
|
amd-lalithnc <lalithnc@amd.com>
|
||||||
amritahs-ibm <amritahs@linux.vnet.ibm.com>
|
amritahs-ibm <amritahs@linux.vnet.ibm.com>
|
||||||
andrijdavid <david@geek.mg>
|
andrijdavid <david@geek.mg>
|
||||||
|
@ -737,6 +795,7 @@ arch-btw <57669023+arch-btw@users.noreply.github.com>
|
||||||
arcrank <arcrank@gmail.com>
|
arcrank <arcrank@gmail.com>
|
||||||
ardfork <134447697+ardfork@users.noreply.github.com>
|
ardfork <134447697+ardfork@users.noreply.github.com>
|
||||||
arlo-phoenix <140345165+arlo-phoenix@users.noreply.github.com>
|
arlo-phoenix <140345165+arlo-phoenix@users.noreply.github.com>
|
||||||
|
aryantandon01 <80969509+aryantandon01@users.noreply.github.com>
|
||||||
at8u <129688334+at8u@users.noreply.github.com>
|
at8u <129688334+at8u@users.noreply.github.com>
|
||||||
automaticcat <daogiatuank54@gmail.com>
|
automaticcat <daogiatuank54@gmail.com>
|
||||||
awatuna <23447591+awatuna@users.noreply.github.com>
|
awatuna <23447591+awatuna@users.noreply.github.com>
|
||||||
|
@ -751,12 +810,14 @@ bryanSwk <93190252+bryanSwk@users.noreply.github.com>
|
||||||
bsilvereagle <bsilvereagle@users.noreply.github.com>
|
bsilvereagle <bsilvereagle@users.noreply.github.com>
|
||||||
bssrdf <merlintiger@hotmail.com>
|
bssrdf <merlintiger@hotmail.com>
|
||||||
byte-6174 <88070277+byte-6174@users.noreply.github.com>
|
byte-6174 <88070277+byte-6174@users.noreply.github.com>
|
||||||
|
cduk <19917266+cduk@users.noreply.github.com>
|
||||||
cebtenzzre <cebtenzzre@gmail.com>
|
cebtenzzre <cebtenzzre@gmail.com>
|
||||||
chaihahaha <chai836275709@gmail.com>
|
chaihahaha <chai836275709@gmail.com>
|
||||||
chiranko <96988916+chiranko@users.noreply.github.com>
|
chiranko <96988916+chiranko@users.noreply.github.com>
|
||||||
clibdev <52199778+clibdev@users.noreply.github.com>
|
clibdev <52199778+clibdev@users.noreply.github.com>
|
||||||
clyang <clyang@clyang.net>
|
clyang <clyang@clyang.net>
|
||||||
cocktailpeanut <121128867+cocktailpeanut@users.noreply.github.com>
|
cocktailpeanut <121128867+cocktailpeanut@users.noreply.github.com>
|
||||||
|
codezjx <code.zjx@gmail.com>
|
||||||
coezbek <c.oezbek@gmail.com>
|
coezbek <c.oezbek@gmail.com>
|
||||||
comex <comexk@gmail.com>
|
comex <comexk@gmail.com>
|
||||||
compilade <113953597+compilade@users.noreply.github.com>
|
compilade <113953597+compilade@users.noreply.github.com>
|
||||||
|
@ -780,14 +841,17 @@ drbh <david.richard.holtz@gmail.com>
|
||||||
ds5t5 <145942675+ds5t5@users.noreply.github.com>
|
ds5t5 <145942675+ds5t5@users.noreply.github.com>
|
||||||
dylan <canardleteer@users.noreply.github.com>
|
dylan <canardleteer@users.noreply.github.com>
|
||||||
eastriver <lee@eastriver.dev>
|
eastriver <lee@eastriver.dev>
|
||||||
|
ebraminio <ebrahim@gnu.org>
|
||||||
ebraminio <ebraminio@gmail.com>
|
ebraminio <ebraminio@gmail.com>
|
||||||
eiery <19350831+eiery@users.noreply.github.com>
|
eiery <19350831+eiery@users.noreply.github.com>
|
||||||
eric8607242 <e0928021388@gmail.com>
|
eric8607242 <e0928021388@gmail.com>
|
||||||
fairydreaming <166155368+fairydreaming@users.noreply.github.com>
|
fairydreaming <166155368+fairydreaming@users.noreply.github.com>
|
||||||
fengerhu1 <2748250768@qq.com>
|
fengerhu1 <2748250768@qq.com>
|
||||||
|
fj-y-saito <85871716+fj-y-saito@users.noreply.github.com>
|
||||||
fraxy-v <65565042+fraxy-v@users.noreply.github.com>
|
fraxy-v <65565042+fraxy-v@users.noreply.github.com>
|
||||||
github-actions[bot] <github-actions[bot]@users.noreply.github.com>
|
github-actions[bot] <github-actions[bot]@users.noreply.github.com>
|
||||||
gliptic <gliptic@users.noreply.github.com>
|
gliptic <gliptic@users.noreply.github.com>
|
||||||
|
gn64 <yukikaze.jp@gmail.com>
|
||||||
goerch <jhr.walter@t-online.de>
|
goerch <jhr.walter@t-online.de>
|
||||||
grahameth <96447521+grahameth@users.noreply.github.com>
|
grahameth <96447521+grahameth@users.noreply.github.com>
|
||||||
gtygo <gtydoit@gmail.com>
|
gtygo <gtydoit@gmail.com>
|
||||||
|
@ -812,10 +876,12 @@ icppWorld <124377669+icppWorld@users.noreply.github.com>
|
||||||
igarnier <igarnier@protonmail.com>
|
igarnier <igarnier@protonmail.com>
|
||||||
intelmatt <61025942+intelmatt@users.noreply.github.com>
|
intelmatt <61025942+intelmatt@users.noreply.github.com>
|
||||||
iohub <rickyang.pro@gmail.com>
|
iohub <rickyang.pro@gmail.com>
|
||||||
|
issixx <46835150+issixx@users.noreply.github.com>
|
||||||
jacobi petrucciani <8117202+jpetrucciani@users.noreply.github.com>
|
jacobi petrucciani <8117202+jpetrucciani@users.noreply.github.com>
|
||||||
jaime-m-p <167997752+jaime-m-p@users.noreply.github.com>
|
jaime-m-p <167997752+jaime-m-p@users.noreply.github.com>
|
||||||
jameswu2014 <545426914@qq.com>
|
jameswu2014 <545426914@qq.com>
|
||||||
jdomke <28772296+jdomke@users.noreply.github.com>
|
jdomke <28772296+jdomke@users.noreply.github.com>
|
||||||
|
jiahao su <damow890@gmail.com>
|
||||||
jiez <373447296@qq.com>
|
jiez <373447296@qq.com>
|
||||||
jneem <joeneeman@gmail.com>
|
jneem <joeneeman@gmail.com>
|
||||||
joecryptotoo <80373433+joecryptotoo@users.noreply.github.com>
|
joecryptotoo <80373433+joecryptotoo@users.noreply.github.com>
|
||||||
|
@ -828,6 +894,7 @@ junchao-loongson <68935141+junchao-loongson@users.noreply.github.com>
|
||||||
jwj7140 <32943891+jwj7140@users.noreply.github.com>
|
jwj7140 <32943891+jwj7140@users.noreply.github.com>
|
||||||
k.h.lai <adrian.k.h.lai@outlook.com>
|
k.h.lai <adrian.k.h.lai@outlook.com>
|
||||||
kaizau <kaizau@users.noreply.github.com>
|
kaizau <kaizau@users.noreply.github.com>
|
||||||
|
kallewoof <kalle.alm@gmail.com>
|
||||||
kalomaze <66376113+kalomaze@users.noreply.github.com>
|
kalomaze <66376113+kalomaze@users.noreply.github.com>
|
||||||
kang <tpdns9032100@gmail.com>
|
kang <tpdns9032100@gmail.com>
|
||||||
katsu560 <118887472+katsu560@users.noreply.github.com>
|
katsu560 <118887472+katsu560@users.noreply.github.com>
|
||||||
|
@ -835,6 +902,7 @@ kchro3 <62481661+kchro3@users.noreply.github.com>
|
||||||
khimaros <me@khimaros.com>
|
khimaros <me@khimaros.com>
|
||||||
kiltyj <kiltyj@gmail.com>
|
kiltyj <kiltyj@gmail.com>
|
||||||
klosax <131523366+klosax@users.noreply.github.com>
|
klosax <131523366+klosax@users.noreply.github.com>
|
||||||
|
krystiancha <krystian@krystianch.com>
|
||||||
kunal-vaishnavi <115581922+kunal-vaishnavi@users.noreply.github.com>
|
kunal-vaishnavi <115581922+kunal-vaishnavi@users.noreply.github.com>
|
||||||
kunnis <kunnis@users.noreply.github.com>
|
kunnis <kunnis@users.noreply.github.com>
|
||||||
kuronekosaiko <EvanChanJ@163.com>
|
kuronekosaiko <EvanChanJ@163.com>
|
||||||
|
@ -847,6 +915,8 @@ ldwang <ftgreat@163.com>
|
||||||
le.chang <cljs118@126.com>
|
le.chang <cljs118@126.com>
|
||||||
leejet <leejet714@gmail.com>
|
leejet <leejet714@gmail.com>
|
||||||
leo-pony <nengjunma@outlook.com>
|
leo-pony <nengjunma@outlook.com>
|
||||||
|
lexasub <lexakopp2212@gmail.com>
|
||||||
|
lhez <quic_lih@quicinc.com>
|
||||||
limitedAtonement <limitedAtonement@users.noreply.github.com>
|
limitedAtonement <limitedAtonement@users.noreply.github.com>
|
||||||
liuwei-git <14815172+liuwei-git@users.noreply.github.com>
|
liuwei-git <14815172+liuwei-git@users.noreply.github.com>
|
||||||
lon <114724657+longregen@users.noreply.github.com>
|
lon <114724657+longregen@users.noreply.github.com>
|
||||||
|
@ -855,10 +925,13 @@ ltoniazzi <61414566+ltoniazzi@users.noreply.github.com>
|
||||||
luoyu-intel <yu.luo@intel.com>
|
luoyu-intel <yu.luo@intel.com>
|
||||||
m3ndax <adrian.goessl@outlook.com>
|
m3ndax <adrian.goessl@outlook.com>
|
||||||
maddes8cht <55592906+maddes8cht@users.noreply.github.com>
|
maddes8cht <55592906+maddes8cht@users.noreply.github.com>
|
||||||
|
mahorozte <41834471+mahorozte@users.noreply.github.com>
|
||||||
makomk <makosoft@googlemail.com>
|
makomk <makosoft@googlemail.com>
|
||||||
manikbhandari <mbbhandarimanik2@gmail.com>
|
manikbhandari <mbbhandarimanik2@gmail.com>
|
||||||
maor-ps <154728172+maor-ps@users.noreply.github.com>
|
maor-ps <154728172+maor-ps@users.noreply.github.com>
|
||||||
|
mashdragon <122402293+mashdragon@users.noreply.github.com>
|
||||||
matiaslin <45382001+matiaslin@users.noreply.github.com>
|
matiaslin <45382001+matiaslin@users.noreply.github.com>
|
||||||
|
matt23654 <matthew.webber@protonmail.com>
|
||||||
matteo <matteogeniaccio@yahoo.it>
|
matteo <matteogeniaccio@yahoo.it>
|
||||||
mdrokz <mohammadmunshi@gmail.com>
|
mdrokz <mohammadmunshi@gmail.com>
|
||||||
mgroeber9110 <45620825+mgroeber9110@users.noreply.github.com>
|
mgroeber9110 <45620825+mgroeber9110@users.noreply.github.com>
|
||||||
|
@ -868,6 +941,7 @@ mmyjona <jonathan.gonse@gmail.com>
|
||||||
momonga <115213907+mmnga@users.noreply.github.com>
|
momonga <115213907+mmnga@users.noreply.github.com>
|
||||||
momonga <146910567+mmngays@users.noreply.github.com>
|
momonga <146910567+mmngays@users.noreply.github.com>
|
||||||
moritzbrantner <31051084+moritzbrantner@users.noreply.github.com>
|
moritzbrantner <31051084+moritzbrantner@users.noreply.github.com>
|
||||||
|
musoles <135031143+musoles@users.noreply.github.com>
|
||||||
mzcu <milos.cubrilo@gmail.com>
|
mzcu <milos.cubrilo@gmail.com>
|
||||||
nanahi <130121847+na-na-hi@users.noreply.github.com>
|
nanahi <130121847+na-na-hi@users.noreply.github.com>
|
||||||
ngc92 <7938269+ngc92@users.noreply.github.com>
|
ngc92 <7938269+ngc92@users.noreply.github.com>
|
||||||
|
@ -885,6 +959,7 @@ oobabooga <112222186+oobabooga@users.noreply.github.com>
|
||||||
opparco <parco.opaai@gmail.com>
|
opparco <parco.opaai@gmail.com>
|
||||||
ostix360 <55257054+ostix360@users.noreply.github.com>
|
ostix360 <55257054+ostix360@users.noreply.github.com>
|
||||||
pculliton <phillipculliton@gmail.com>
|
pculliton <phillipculliton@gmail.com>
|
||||||
|
peidaqi <peidaqi@gmail.com>
|
||||||
pengxin99 <pengxin.yuan@intel.com>
|
pengxin99 <pengxin.yuan@intel.com>
|
||||||
perserk <perserk@gmail.com>
|
perserk <perserk@gmail.com>
|
||||||
piDack <104877312+piDack@users.noreply.github.com>
|
piDack <104877312+piDack@users.noreply.github.com>
|
||||||
|
@ -892,10 +967,12 @@ pmysl <piotr.myslinski@outlook.com>
|
||||||
postmasters <namnguyen@google.com>
|
postmasters <namnguyen@google.com>
|
||||||
pudepiedj <pudepiedj@gmail.com>
|
pudepiedj <pudepiedj@gmail.com>
|
||||||
qingfengfenga <41416092+qingfengfenga@users.noreply.github.com>
|
qingfengfenga <41416092+qingfengfenga@users.noreply.github.com>
|
||||||
|
qingy1337 <qxli2@students.everettcc.edu>
|
||||||
qouoq <qouoq@fastmail.com>
|
qouoq <qouoq@fastmail.com>
|
||||||
qunash <anzoria@gmail.com>
|
qunash <anzoria@gmail.com>
|
||||||
rabidcopy <rabidcopy@yahoo.com>
|
rabidcopy <rabidcopy@yahoo.com>
|
||||||
rankaiyx <rankaiyx@rankaiyx.com>
|
rankaiyx <rankaiyx@rankaiyx.com>
|
||||||
|
redbeard <bharrington@alticon.net>
|
||||||
rhjdvsgsgks <26178113+rhjdvsgsgks@users.noreply.github.com>
|
rhjdvsgsgks <26178113+rhjdvsgsgks@users.noreply.github.com>
|
||||||
rhuddleston <ryan.huddleston@percona.com>
|
rhuddleston <ryan.huddleston@percona.com>
|
||||||
rimoliga <53384203+rimoliga@users.noreply.github.com>
|
rimoliga <53384203+rimoliga@users.noreply.github.com>
|
||||||
|
@ -912,6 +989,7 @@ sjxx <63994076+ylsdamxssjxxdd@users.noreply.github.com>
|
||||||
slaren <2141330+slaren@users.noreply.github.com>
|
slaren <2141330+slaren@users.noreply.github.com>
|
||||||
slaren <slarengh@gmail.com>
|
slaren <slarengh@gmail.com>
|
||||||
snadampal <87143774+snadampal@users.noreply.github.com>
|
snadampal <87143774+snadampal@users.noreply.github.com>
|
||||||
|
someone13574 <81528246+someone13574@users.noreply.github.com>
|
||||||
standby24x7 <standby24x7@gmail.com>
|
standby24x7 <standby24x7@gmail.com>
|
||||||
staviq <staviq@gmail.com>
|
staviq <staviq@gmail.com>
|
||||||
stduhpf <stephduh@live.fr>
|
stduhpf <stephduh@live.fr>
|
||||||
|
@ -931,6 +1009,7 @@ uint256_t <konndennsa@gmail.com>
|
||||||
uint256_t <maekawatoshiki1017@gmail.com>
|
uint256_t <maekawatoshiki1017@gmail.com>
|
||||||
unbounded <haakon@likedan.net>
|
unbounded <haakon@likedan.net>
|
||||||
uvos <devnull@uvos.xyz>
|
uvos <devnull@uvos.xyz>
|
||||||
|
uvos <philipp@uvos.xyz>
|
||||||
valiray <133289098+valiray@users.noreply.github.com>
|
valiray <133289098+valiray@users.noreply.github.com>
|
||||||
vb <vaibhavs10@gmail.com>
|
vb <vaibhavs10@gmail.com>
|
||||||
vik <vikhyatk@gmail.com>
|
vik <vikhyatk@gmail.com>
|
||||||
|
@ -951,6 +1030,7 @@ xaedes <xaedes@googlemail.com>
|
||||||
xctan <axunlei@gmail.com>
|
xctan <axunlei@gmail.com>
|
||||||
xloem <0xloem@gmail.com>
|
xloem <0xloem@gmail.com>
|
||||||
yangli2 <yangli2@gmail.com>
|
yangli2 <yangli2@gmail.com>
|
||||||
|
ymcki <84055651+ymcki@users.noreply.github.com>
|
||||||
yuiseki <yuiseki@gmail.com>
|
yuiseki <yuiseki@gmail.com>
|
||||||
yuri@FreeBSD <yurivict@users.noreply.github.com>
|
yuri@FreeBSD <yurivict@users.noreply.github.com>
|
||||||
zakkor <edward.partenie@gmail.com>
|
zakkor <edward.partenie@gmail.com>
|
||||||
|
@ -963,4 +1043,5 @@ zrm <trustiosity.zrm@gmail.com>
|
||||||
杨朱 · Kiki <baofa.fan@daocloud.io>
|
杨朱 · Kiki <baofa.fan@daocloud.io>
|
||||||
源文雨 <41315874+fumiama@users.noreply.github.com>
|
源文雨 <41315874+fumiama@users.noreply.github.com>
|
||||||
蕭澧邦 <45505768+shou692199@users.noreply.github.com>
|
蕭澧邦 <45505768+shou692199@users.noreply.github.com>
|
||||||
|
谢乃闻 <sienaiwun@users.noreply.github.com>
|
||||||
Нияз Гарифзянов <112617865+garrnizon@users.noreply.github.com>
|
Нияз Гарифзянов <112617865+garrnizon@users.noreply.github.com>
|
||||||
|
|
|
@ -136,6 +136,7 @@ Instructions for adding support for new models: [HOWTO-add-model.md](docs/develo
|
||||||
- Rust (more features): [edgenai/llama_cpp-rs](https://github.com/edgenai/llama_cpp-rs)
|
- Rust (more features): [edgenai/llama_cpp-rs](https://github.com/edgenai/llama_cpp-rs)
|
||||||
- Rust (nicer API): [mdrokz/rust-llama.cpp](https://github.com/mdrokz/rust-llama.cpp)
|
- Rust (nicer API): [mdrokz/rust-llama.cpp](https://github.com/mdrokz/rust-llama.cpp)
|
||||||
- Rust (more direct bindings): [utilityai/llama-cpp-rs](https://github.com/utilityai/llama-cpp-rs)
|
- Rust (more direct bindings): [utilityai/llama-cpp-rs](https://github.com/utilityai/llama-cpp-rs)
|
||||||
|
- Rust (automated build from crates.io): [ShelbyJenkins/llm_client](https://github.com/ShelbyJenkins/llm_client)
|
||||||
- C#/.NET: [SciSharp/LLamaSharp](https://github.com/SciSharp/LLamaSharp)
|
- C#/.NET: [SciSharp/LLamaSharp](https://github.com/SciSharp/LLamaSharp)
|
||||||
- C#/VB.NET (more features - community license): [LM-Kit.NET](https://docs.lm-kit.com/lm-kit-net/index.html)
|
- C#/VB.NET (more features - community license): [LM-Kit.NET](https://docs.lm-kit.com/lm-kit-net/index.html)
|
||||||
- Scala 3: [donderom/llm4s](https://github.com/donderom/llm4s)
|
- Scala 3: [donderom/llm4s](https://github.com/donderom/llm4s)
|
||||||
|
|
|
@ -365,7 +365,7 @@ static common_chat_params common_chat_params_init_command_r7b(const common_chat_
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
static common_chat_msg common_chat_parse_command_r7b(const std::string & input) {
|
static common_chat_msg common_chat_parse_command_r7b(const std::string & input) {
|
||||||
static std::regex response_regex("<\\|START_RESPONSE\\|>(.*?)<\\|END_RESPONSE\\|>");
|
static std::regex response_regex("<\\|START_RESPONSE\\|>([\\s\\S\\n\\r]*?)<\\|END_RESPONSE\\|>");
|
||||||
static std::regex thought_action_regex("<\\|START_THINKING\\|>([\\s\\S\\n\\r]*?)<\\|END_THINKING\\|><\\|START_ACTION\\|>([\\s\\S\\n\\r]*?)<\\|END_ACTION\\|>");
|
static std::regex thought_action_regex("<\\|START_THINKING\\|>([\\s\\S\\n\\r]*?)<\\|END_THINKING\\|><\\|START_ACTION\\|>([\\s\\S\\n\\r]*?)<\\|END_ACTION\\|>");
|
||||||
std::smatch match;
|
std::smatch match;
|
||||||
|
|
||||||
|
|
|
@ -1869,11 +1869,19 @@ std::string common_chat_format_example(const common_chat_template & tmpl, bool u
|
||||||
return common_chat_apply_template(tmpl, msgs, true, use_jinja);
|
return common_chat_apply_template(tmpl, msgs, true, use_jinja);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CHATML_TEMPLATE_SRC \
|
||||||
|
"{%- for message in messages -%}\n" \
|
||||||
|
" {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>\n' -}}\n" \
|
||||||
|
"{%- endfor -%}\n" \
|
||||||
|
"{%- if add_generation_prompt -%}\n" \
|
||||||
|
" {{- '<|im_start|>assistant\n' -}}\n" \
|
||||||
|
"{%- endif -%}"
|
||||||
|
|
||||||
common_chat_templates common_chat_templates_from_model(const struct llama_model * model, const std::string & chat_template_override)
|
common_chat_templates common_chat_templates_from_model(const struct llama_model * model, const std::string & chat_template_override)
|
||||||
{
|
{
|
||||||
auto vocab = llama_model_get_vocab(model);
|
std::string default_template_src;
|
||||||
std::string default_template_src = chat_template_override;
|
std::string template_tool_use_src;
|
||||||
std::string template_tool_use_src = chat_template_override;
|
|
||||||
bool has_explicit_template = !chat_template_override.empty();
|
bool has_explicit_template = !chat_template_override.empty();
|
||||||
if (chat_template_override.empty()) {
|
if (chat_template_override.empty()) {
|
||||||
auto str = llama_model_chat_template(model, /* name */ nullptr);
|
auto str = llama_model_chat_template(model, /* name */ nullptr);
|
||||||
|
@ -1886,21 +1894,21 @@ common_chat_templates common_chat_templates_from_model(const struct llama_model
|
||||||
template_tool_use_src = str;
|
template_tool_use_src = str;
|
||||||
has_explicit_template = true;
|
has_explicit_template = true;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
default_template_src = chat_template_override;
|
||||||
}
|
}
|
||||||
if (default_template_src.empty() || default_template_src == "chatml") {
|
if (default_template_src.empty() || default_template_src == "chatml") {
|
||||||
if (!template_tool_use_src.empty()) {
|
if (!template_tool_use_src.empty()) {
|
||||||
default_template_src = template_tool_use_src;
|
default_template_src = template_tool_use_src;
|
||||||
} else {
|
} else {
|
||||||
default_template_src = R"(
|
default_template_src = CHATML_TEMPLATE_SRC;
|
||||||
{%- for message in messages -%}
|
|
||||||
{{- "<|im_start|>" + message.role + "\n" + message.content + "<|im_end|>\n" -}}
|
|
||||||
{%- endfor -%}
|
|
||||||
{%- if add_generation_prompt -%}
|
|
||||||
{{- "<|im_start|>assistant\n" -}}
|
|
||||||
{%- endif -%}
|
|
||||||
)";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::string token_bos;
|
||||||
|
std::string token_eos;
|
||||||
|
// TODO: update logic that adds BOS and EOS tokens to the tokenized prompt, in favour of the template.
|
||||||
|
#if 0
|
||||||
|
auto vocab = llama_model_get_vocab(model);
|
||||||
const auto get_token = [&](llama_token token, const char * name, const char * jinja_variable_name) {
|
const auto get_token = [&](llama_token token, const char * name, const char * jinja_variable_name) {
|
||||||
if (token == LLAMA_TOKEN_NULL) {
|
if (token == LLAMA_TOKEN_NULL) {
|
||||||
if (default_template_src.find(jinja_variable_name) != std::string::npos
|
if (default_template_src.find(jinja_variable_name) != std::string::npos
|
||||||
|
@ -1912,15 +1920,25 @@ common_chat_templates common_chat_templates_from_model(const struct llama_model
|
||||||
return common_token_to_piece(vocab, token, true);
|
return common_token_to_piece(vocab, token, true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
auto token_bos = get_token(llama_vocab_bos(vocab), "BOS", "bos_token");
|
token_bos = get_token(llama_vocab_bos(vocab), "BOS", "bos_token");
|
||||||
auto token_eos = get_token(llama_vocab_eos(vocab), "EOS", "eos_token");
|
token_eos = get_token(llama_vocab_eos(vocab), "EOS", "eos_token");
|
||||||
return {
|
#endif
|
||||||
has_explicit_template,
|
try {
|
||||||
std::make_unique<minja::chat_template>(default_template_src, token_bos, token_eos),
|
return {
|
||||||
template_tool_use_src.empty()
|
has_explicit_template,
|
||||||
? nullptr
|
std::make_unique<minja::chat_template>(default_template_src, token_bos, token_eos),
|
||||||
: std::make_unique<minja::chat_template>(template_tool_use_src, token_bos, token_eos)
|
template_tool_use_src.empty()
|
||||||
};
|
? nullptr
|
||||||
|
: std::make_unique<minja::chat_template>(template_tool_use_src, token_bos, token_eos),
|
||||||
|
};
|
||||||
|
} catch (const std::exception & e) {
|
||||||
|
LOG_ERR("%s: failed to parse chat template: %s\n", __func__, e.what());
|
||||||
|
return {
|
||||||
|
has_explicit_template,
|
||||||
|
std::make_unique<minja::chat_template>(CHATML_TEMPLATE_SRC, token_bos, token_eos),
|
||||||
|
nullptr,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -31,6 +31,11 @@ defer {
|
||||||
llama_model_free(model)
|
llama_model_free(model)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guard let vocab = llama_model_get_vocab(model) else {
|
||||||
|
print("Failed to get vocab")
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
var tokens = tokenize(text: prompt, add_bos: true)
|
var tokens = tokenize(text: prompt, add_bos: true)
|
||||||
|
|
||||||
let n_kv_req = UInt32(tokens.count) + UInt32((n_len - Int(tokens.count)) * n_parallel)
|
let n_kv_req = UInt32(tokens.count) + UInt32((n_len - Int(tokens.count)) * n_parallel)
|
||||||
|
@ -41,7 +46,7 @@ context_params.n_batch = UInt32(max(n_len, n_parallel))
|
||||||
context_params.n_threads = 8
|
context_params.n_threads = 8
|
||||||
context_params.n_threads_batch = 8
|
context_params.n_threads_batch = 8
|
||||||
|
|
||||||
let context = llama_new_context_with_model(model, context_params)
|
let context = llama_init_from_model(model, context_params)
|
||||||
guard context != nil else {
|
guard context != nil else {
|
||||||
print("Failed to initialize context")
|
print("Failed to initialize context")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
@ -141,7 +146,7 @@ while n_cur <= n_len {
|
||||||
let new_token_id = llama_sampler_sample(smpl, context, i_batch[i])
|
let new_token_id = llama_sampler_sample(smpl, context, i_batch[i])
|
||||||
|
|
||||||
// is it an end of stream? -> mark the stream as finished
|
// is it an end of stream? -> mark the stream as finished
|
||||||
if llama_vocab_is_eog(model, new_token_id) || n_cur == n_len {
|
if llama_vocab_is_eog(vocab, new_token_id) || n_cur == n_len {
|
||||||
i_batch[i] = -1
|
i_batch[i] = -1
|
||||||
// print("")
|
// print("")
|
||||||
if n_parallel > 1 {
|
if n_parallel > 1 {
|
||||||
|
@ -207,7 +212,7 @@ private func tokenize(text: String, add_bos: Bool) -> [llama_token] {
|
||||||
let utf8Count = text.utf8.count
|
let utf8Count = text.utf8.count
|
||||||
let n_tokens = utf8Count + (add_bos ? 1 : 0)
|
let n_tokens = utf8Count + (add_bos ? 1 : 0)
|
||||||
let tokens = UnsafeMutablePointer<llama_token>.allocate(capacity: n_tokens)
|
let tokens = UnsafeMutablePointer<llama_token>.allocate(capacity: n_tokens)
|
||||||
let tokenCount = llama_tokenize(model, text, Int32(utf8Count), tokens, Int32(n_tokens), add_bos, /*special tokens*/ false)
|
let tokenCount = llama_tokenize(vocab, text, Int32(utf8Count), tokens, Int32(n_tokens), add_bos, /*special tokens*/ false)
|
||||||
var swiftTokens: [llama_token] = []
|
var swiftTokens: [llama_token] = []
|
||||||
for i in 0 ..< tokenCount {
|
for i in 0 ..< tokenCount {
|
||||||
swiftTokens.append(tokens[Int(i)])
|
swiftTokens.append(tokens[Int(i)])
|
||||||
|
@ -218,12 +223,12 @@ private func tokenize(text: String, add_bos: Bool) -> [llama_token] {
|
||||||
|
|
||||||
private func token_to_piece(token: llama_token, buffer: inout [CChar]) -> String? {
|
private func token_to_piece(token: llama_token, buffer: inout [CChar]) -> String? {
|
||||||
var result = [CChar](repeating: 0, count: 8)
|
var result = [CChar](repeating: 0, count: 8)
|
||||||
let nTokens = llama_token_to_piece(model, token, &result, Int32(result.count), 0, false)
|
let nTokens = llama_token_to_piece(vocab, token, &result, Int32(result.count), 0, false)
|
||||||
if nTokens < 0 {
|
if nTokens < 0 {
|
||||||
let actualTokensCount = -Int(nTokens)
|
let actualTokensCount = -Int(nTokens)
|
||||||
result = .init(repeating: 0, count: actualTokensCount)
|
result = .init(repeating: 0, count: actualTokensCount)
|
||||||
let check = llama_token_to_piece(
|
let check = llama_token_to_piece(
|
||||||
model,
|
vocab,
|
||||||
token,
|
token,
|
||||||
&result,
|
&result,
|
||||||
Int32(result.count),
|
Int32(result.count),
|
||||||
|
|
|
@ -24,6 +24,7 @@ func llama_batch_add(_ batch: inout llama_batch, _ id: llama_token, _ pos: llama
|
||||||
actor LlamaContext {
|
actor LlamaContext {
|
||||||
private var model: OpaquePointer
|
private var model: OpaquePointer
|
||||||
private var context: OpaquePointer
|
private var context: OpaquePointer
|
||||||
|
private var vocab: OpaquePointer
|
||||||
private var sampling: UnsafeMutablePointer<llama_sampler>
|
private var sampling: UnsafeMutablePointer<llama_sampler>
|
||||||
private var batch: llama_batch
|
private var batch: llama_batch
|
||||||
private var tokens_list: [llama_token]
|
private var tokens_list: [llama_token]
|
||||||
|
@ -47,6 +48,7 @@ actor LlamaContext {
|
||||||
self.sampling = llama_sampler_chain_init(sparams)
|
self.sampling = llama_sampler_chain_init(sparams)
|
||||||
llama_sampler_chain_add(self.sampling, llama_sampler_init_temp(0.4))
|
llama_sampler_chain_add(self.sampling, llama_sampler_init_temp(0.4))
|
||||||
llama_sampler_chain_add(self.sampling, llama_sampler_init_dist(1234))
|
llama_sampler_chain_add(self.sampling, llama_sampler_init_dist(1234))
|
||||||
|
vocab = llama_model_get_vocab(model)
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
|
@ -79,7 +81,7 @@ actor LlamaContext {
|
||||||
ctx_params.n_threads = Int32(n_threads)
|
ctx_params.n_threads = Int32(n_threads)
|
||||||
ctx_params.n_threads_batch = Int32(n_threads)
|
ctx_params.n_threads_batch = Int32(n_threads)
|
||||||
|
|
||||||
let context = llama_new_context_with_model(model, ctx_params)
|
let context = llama_init_from_model(model, ctx_params)
|
||||||
guard let context else {
|
guard let context else {
|
||||||
print("Could not load context!")
|
print("Could not load context!")
|
||||||
throw LlamaError.couldNotInitializeContext
|
throw LlamaError.couldNotInitializeContext
|
||||||
|
@ -151,7 +153,7 @@ actor LlamaContext {
|
||||||
|
|
||||||
new_token_id = llama_sampler_sample(sampling, context, batch.n_tokens - 1)
|
new_token_id = llama_sampler_sample(sampling, context, batch.n_tokens - 1)
|
||||||
|
|
||||||
if llama_vocab_is_eog(model, new_token_id) || n_cur == n_len {
|
if llama_vocab_is_eog(vocab, new_token_id) || n_cur == n_len {
|
||||||
print("\n")
|
print("\n")
|
||||||
is_done = true
|
is_done = true
|
||||||
let new_token_str = String(cString: temporary_invalid_cchars + [0])
|
let new_token_str = String(cString: temporary_invalid_cchars + [0])
|
||||||
|
@ -297,7 +299,7 @@ actor LlamaContext {
|
||||||
let utf8Count = text.utf8.count
|
let utf8Count = text.utf8.count
|
||||||
let n_tokens = utf8Count + (add_bos ? 1 : 0) + 1
|
let n_tokens = utf8Count + (add_bos ? 1 : 0) + 1
|
||||||
let tokens = UnsafeMutablePointer<llama_token>.allocate(capacity: n_tokens)
|
let tokens = UnsafeMutablePointer<llama_token>.allocate(capacity: n_tokens)
|
||||||
let tokenCount = llama_tokenize(model, text, Int32(utf8Count), tokens, Int32(n_tokens), add_bos, false)
|
let tokenCount = llama_tokenize(vocab, text, Int32(utf8Count), tokens, Int32(n_tokens), add_bos, false)
|
||||||
|
|
||||||
var swiftTokens: [llama_token] = []
|
var swiftTokens: [llama_token] = []
|
||||||
for i in 0..<tokenCount {
|
for i in 0..<tokenCount {
|
||||||
|
@ -316,7 +318,7 @@ actor LlamaContext {
|
||||||
defer {
|
defer {
|
||||||
result.deallocate()
|
result.deallocate()
|
||||||
}
|
}
|
||||||
let nTokens = llama_token_to_piece(model, token, result, 8, 0, false)
|
let nTokens = llama_token_to_piece(vocab, token, result, 8, 0, false)
|
||||||
|
|
||||||
if nTokens < 0 {
|
if nTokens < 0 {
|
||||||
let newResult = UnsafeMutablePointer<Int8>.allocate(capacity: Int(-nTokens))
|
let newResult = UnsafeMutablePointer<Int8>.allocate(capacity: Int(-nTokens))
|
||||||
|
@ -324,7 +326,7 @@ actor LlamaContext {
|
||||||
defer {
|
defer {
|
||||||
newResult.deallocate()
|
newResult.deallocate()
|
||||||
}
|
}
|
||||||
let nNewTokens = llama_token_to_piece(model, token, newResult, -nTokens, 0, false)
|
let nNewTokens = llama_token_to_piece(vocab, token, newResult, -nTokens, 0, false)
|
||||||
let bufferPointer = UnsafeBufferPointer(start: newResult, count: Int(nNewTokens))
|
let bufferPointer = UnsafeBufferPointer(start: newResult, count: Int(nNewTokens))
|
||||||
return Array(bufferPointer)
|
return Array(bufferPointer)
|
||||||
} else {
|
} else {
|
||||||
|
|
Binary file not shown.
|
@ -13,9 +13,12 @@ def create_server():
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"model,system_prompt,user_prompt,max_tokens,re_content,n_prompt,n_predicted,finish_reason,jinja,chat_template",
|
"model,system_prompt,user_prompt,max_tokens,re_content,n_prompt,n_predicted,finish_reason,jinja,chat_template",
|
||||||
[
|
[
|
||||||
|
(None, "Book", "Hey", 8, "But she couldn't", 69, 8, "length", False, None),
|
||||||
|
(None, "Book", "Hey", 8, "But she couldn't", 69, 8, "length", True, None),
|
||||||
(None, "Book", "What is the best book", 8, "(Suddenly)+|\\{ \" Sarax.", 77, 8, "length", False, None),
|
(None, "Book", "What is the best book", 8, "(Suddenly)+|\\{ \" Sarax.", 77, 8, "length", False, None),
|
||||||
(None, "Book", "What is the best book", 8, "(Suddenly)+|\\{ \" Sarax.", 77, 8, "length", True, None),
|
(None, "Book", "What is the best book", 8, "(Suddenly)+|\\{ \" Sarax.", 77, 8, "length", True, None),
|
||||||
(None, "Book", "What is the best book", 8, "^ blue", 23, 8, "length", True, "This is not a chat template, it is"),
|
(None, "Book", "What is the best book", 8, "(Suddenly)+|\\{ \" Sarax.", 77, 8, "length", True, 'chatml'),
|
||||||
|
(None, "Book", "What is the best book", 8, "^ blue", 23, 8, "length", True, "This is not a chat template, it is"),
|
||||||
("codellama70b", "You are a coding assistant.", "Write the fibonacci function in c++.", 128, "(Aside|she|felter|alonger)+", 104, 64, "length", False, None),
|
("codellama70b", "You are a coding assistant.", "Write the fibonacci function in c++.", 128, "(Aside|she|felter|alonger)+", 104, 64, "length", False, None),
|
||||||
("codellama70b", "You are a coding assistant.", "Write the fibonacci function in c++.", 128, "(Aside|she|felter|alonger)+", 104, 64, "length", True, None),
|
("codellama70b", "You are a coding assistant.", "Write the fibonacci function in c++.", 128, "(Aside|she|felter|alonger)+", 104, 64, "length", True, None),
|
||||||
]
|
]
|
||||||
|
|
|
@ -67,8 +67,8 @@ WEATHER_TOOL = {
|
||||||
|
|
||||||
|
|
||||||
def do_test_completion_with_required_tool_tiny(template_name: str, tool: dict, argument_key: str | None):
|
def do_test_completion_with_required_tool_tiny(template_name: str, tool: dict, argument_key: str | None):
|
||||||
n_predict = 512
|
|
||||||
global server
|
global server
|
||||||
|
n_predict = 512
|
||||||
# server = ServerPreset.stories15m_moe()
|
# server = ServerPreset.stories15m_moe()
|
||||||
server.jinja = True
|
server.jinja = True
|
||||||
server.n_predict = n_predict
|
server.n_predict = n_predict
|
||||||
|
@ -139,29 +139,49 @@ def test_completion_with_required_tool_tiny_slow(template_name: str, tool: dict,
|
||||||
@pytest.mark.parametrize("tool,argument_key,hf_repo,template_override", [
|
@pytest.mark.parametrize("tool,argument_key,hf_repo,template_override", [
|
||||||
(TEST_TOOL, "success", "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
(TEST_TOOL, "success", "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
(PYTHON_TOOL, "code", "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
|
# Note: gemma-2-2b-it knows itself as "model", not "assistant", so we don't test the ill-suited chatml on it.
|
||||||
(TEST_TOOL, "success", "bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
(TEST_TOOL, "success", "bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
||||||
(PYTHON_TOOL, "code", "bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
(PYTHON_TOOL, "code", "bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
(TEST_TOOL, "success", "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
(PYTHON_TOOL, "code", "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
(TEST_TOOL, "success", "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
(PYTHON_TOOL, "code", "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
(TEST_TOOL, "success", "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
(PYTHON_TOOL, "code", "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-3-Llama-3.1-8B", "tool_use")),
|
(TEST_TOOL, "success", "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-3-Llama-3.1-8B", "tool_use")),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-3-Llama-3.1-8B", "tool_use")),
|
(PYTHON_TOOL, "code", "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-3-Llama-3.1-8B", "tool_use")),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
(TEST_TOOL, "success", "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
(PYTHON_TOOL, "code", "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
||||||
(TEST_TOOL, "success", "bartowski/functionary-small-v3.2-GGUF:Q8_0", ("meetkai/functionary-medium-v3.2", None)),
|
(PYTHON_TOOL, "code", "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", "chatml"),
|
||||||
(PYTHON_TOOL, "code", "bartowski/functionary-small-v3.2-GGUF:Q8_0", ("meetkai/functionary-medium-v3.2", None)),
|
|
||||||
|
(TEST_TOOL, "success", "bartowski/functionary-small-v3.2-GGUF:Q4_K_M", ("meetkai/functionary-medium-v3.2", None)),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/functionary-small-v3.2-GGUF:Q4_K_M", ("meetkai/functionary-medium-v3.2", None)),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/functionary-small-v3.2-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
(TEST_TOOL, "success", "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
(PYTHON_TOOL, "code", "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(TEST_TOOL, "success", "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
(TEST_TOOL, "success", "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
||||||
(PYTHON_TOOL, "code", "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
(PYTHON_TOOL, "code", "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
||||||
|
(PYTHON_TOOL, "code", "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
# TODO: fix these
|
# TODO: fix these
|
||||||
# (TEST_TOOL, "success", "bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
# (TEST_TOOL, "success", "bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
||||||
# (PYTHON_TOOL, "code", "bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
# (PYTHON_TOOL, "code", "bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
||||||
])
|
])
|
||||||
def test_completion_with_required_tool_real_model(tool: dict, argument_key: str | None, hf_repo: str, template_override: Tuple[str, str | None] | None):
|
def test_completion_with_required_tool_real_model(tool: dict, argument_key: str | None, hf_repo: str, template_override: str | Tuple[str, str | None] | None):
|
||||||
|
global server
|
||||||
n_predict = 512
|
n_predict = 512
|
||||||
server.n_slots = 1
|
server.n_slots = 1
|
||||||
server.jinja = True
|
server.jinja = True
|
||||||
|
@ -169,10 +189,12 @@ def test_completion_with_required_tool_real_model(tool: dict, argument_key: str
|
||||||
server.n_predict = n_predict
|
server.n_predict = n_predict
|
||||||
server.model_hf_repo = hf_repo
|
server.model_hf_repo = hf_repo
|
||||||
server.model_hf_file = None
|
server.model_hf_file = None
|
||||||
if template_override:
|
if isinstance(template_override, tuple):
|
||||||
(template_hf_repo, template_variant) = template_override
|
(template_hf_repo, template_variant) = template_override
|
||||||
server.chat_template_file = f"../../../models/templates/{template_hf_repo.replace('/', '-') + ('-' + template_variant if template_variant else '')}.jinja"
|
server.chat_template_file = f"../../../models/templates/{template_hf_repo.replace('/', '-') + ('-' + template_variant if template_variant else '')}.jinja"
|
||||||
assert os.path.exists(server.chat_template_file), f"Template file {server.chat_template_file} does not exist. Run `python scripts/get_chat_template.py {template_hf_repo} {template_variant} > {server.chat_template_file}` to download the template."
|
assert os.path.exists(server.chat_template_file), f"Template file {server.chat_template_file} does not exist. Run `python scripts/get_chat_template.py {template_hf_repo} {template_variant} > {server.chat_template_file}` to download the template."
|
||||||
|
elif isinstance(template_override, str):
|
||||||
|
server.chat_template = template_override
|
||||||
server.start(timeout_seconds=TIMEOUT_SERVER_START)
|
server.start(timeout_seconds=TIMEOUT_SERVER_START)
|
||||||
res = server.make_request("POST", "/chat/completions", data={
|
res = server.make_request("POST", "/chat/completions", data={
|
||||||
"max_tokens": n_predict,
|
"max_tokens": n_predict,
|
||||||
|
@ -251,33 +273,55 @@ def test_completion_without_tool_call_slow(template_name: str, n_predict: int, t
|
||||||
|
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
@pytest.mark.parametrize("hf_repo,template_override", [
|
@pytest.mark.parametrize("hf_repo,template_override", [
|
||||||
|
("bartowski/c4ai-command-r7b-12-2024-GGUF:Q4_K_M", ("CohereForAI/c4ai-command-r7b-12-2024", "tool_use")),
|
||||||
("bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
("bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
||||||
("bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
("bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
("bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
("bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
||||||
|
("bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
("bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
("bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
||||||
("bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
("bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
("bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-3-Llama-3.1-8B", "tool_use")),
|
|
||||||
|
("bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
||||||
|
("bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
|
("bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-3-Llama-3.1-8B", "tool_use")),
|
||||||
|
("bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
("bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
("bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
||||||
|
("bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
("bartowski/functionary-small-v3.2-GGUF:Q8_0", ("meetkai/functionary-medium-v3.2", None)),
|
("bartowski/functionary-small-v3.2-GGUF:Q8_0", ("meetkai/functionary-medium-v3.2", None)),
|
||||||
|
("bartowski/functionary-small-v3.2-GGUF:Q8_0", "chatml"),
|
||||||
|
|
||||||
("bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
("bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
||||||
|
("bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
|
# Note: gemma-2-2b-it knows itself as "model", not "assistant", so we don't test the ill-suited chatml on it.
|
||||||
|
("bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
||||||
|
|
||||||
# ("bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
# ("bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama/Llama-3.2-3B-Instruct", None)),
|
||||||
# ("bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
# ("bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
||||||
])
|
])
|
||||||
def test_weather_tool_call(hf_repo: str, template_override: Tuple[str, str | None] | None):
|
def test_weather(hf_repo: str, template_override: Tuple[str, str | None] | None):
|
||||||
global server
|
global server
|
||||||
|
n_predict = 512
|
||||||
server.n_slots = 1
|
server.n_slots = 1
|
||||||
server.jinja = True
|
server.jinja = True
|
||||||
server.n_ctx = 8192
|
server.n_ctx = 8192
|
||||||
server.n_predict = 512
|
server.n_predict = n_predict
|
||||||
server.model_hf_repo = hf_repo
|
server.model_hf_repo = hf_repo
|
||||||
server.model_hf_file = None
|
server.model_hf_file = None
|
||||||
if template_override:
|
if isinstance(template_override, tuple):
|
||||||
(template_hf_repo, template_variant) = template_override
|
(template_hf_repo, template_variant) = template_override
|
||||||
server.chat_template_file = f"../../../models/templates/{template_hf_repo.replace('/', '-') + ('-' + template_variant if template_variant else '')}.jinja"
|
server.chat_template_file = f"../../../models/templates/{template_hf_repo.replace('/', '-') + ('-' + template_variant if template_variant else '')}.jinja"
|
||||||
assert os.path.exists(server.chat_template_file), f"Template file {server.chat_template_file} does not exist. Run `python scripts/get_chat_template.py {template_hf_repo} {template_variant} > {server.chat_template_file}` to download the template."
|
assert os.path.exists(server.chat_template_file), f"Template file {server.chat_template_file} does not exist. Run `python scripts/get_chat_template.py {template_hf_repo} {template_variant} > {server.chat_template_file}` to download the template."
|
||||||
|
elif isinstance(template_override, str):
|
||||||
|
server.chat_template = template_override
|
||||||
server.start(timeout_seconds=TIMEOUT_SERVER_START)
|
server.start(timeout_seconds=TIMEOUT_SERVER_START)
|
||||||
res = server.make_request("POST", "/chat/completions", data={
|
res = server.make_request("POST", "/chat/completions", data={
|
||||||
"max_tokens": 256,
|
"max_tokens": n_predict,
|
||||||
"messages": [
|
"messages": [
|
||||||
{"role": "user", "content": "What is the weather in Istanbul?"},
|
{"role": "user", "content": "What is the weather in Istanbul?"},
|
||||||
],
|
],
|
||||||
|
@ -298,19 +342,39 @@ def test_weather_tool_call(hf_repo: str, template_override: Tuple[str, str | Non
|
||||||
|
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
@pytest.mark.parametrize("expected_arguments_override,hf_repo,template_override", [
|
@pytest.mark.parametrize("expected_arguments_override,hf_repo,template_override", [
|
||||||
(None, "bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
|
||||||
(None, "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
(None, "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", None),
|
||||||
|
(None, "bartowski/Phi-3.5-mini-instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(None, "bartowski/functionary-small-v3.2-GGUF:Q8_0", ("meetkai-functionary-medium-v3.2", None)),
|
(None, "bartowski/functionary-small-v3.2-GGUF:Q8_0", ("meetkai-functionary-medium-v3.2", None)),
|
||||||
('{"code":"print("}', "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
(None, "bartowski/functionary-small-v3.2-GGUF:Q8_0", "chatml"),
|
||||||
(None, "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama-Llama-3.2-3B-Instruct", None)),
|
|
||||||
|
(None, "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", None),
|
||||||
|
('{"code":"print("}', "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
|
('{"code":"print("}', "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", ("meta-llama-Llama-3.2-3B-Instruct", None)),
|
||||||
|
(None, "bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
('{"code":"print("}', "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama-Llama-3.2-3B-Instruct", None)),
|
('{"code":"print("}', "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", ("meta-llama-Llama-3.2-3B-Instruct", None)),
|
||||||
|
('{"code":"print("}', "bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(None, "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
(None, "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", None),
|
||||||
(None, "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
(None, "bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M", "chatml"),
|
||||||
(None, "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch-Hermes-3-Llama-3.1-8B", "tool_use")),
|
|
||||||
|
(None, "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", ("NousResearch/Hermes-2-Pro-Llama-3-8B", "tool_use")),
|
||||||
|
(None, "bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
|
(None, "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", ("NousResearch-Hermes-3-Llama-3.1-8B", "tool_use")),
|
||||||
|
(None, "bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
(None, "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
(None, "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", None),
|
||||||
|
(None, "bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M", "chatml"),
|
||||||
|
|
||||||
|
# Note: gemma-2-2b-it knows itself as "model", not "assistant", so we don't test the ill-suited chatml on it.
|
||||||
|
(None, "bartowski/gemma-2-2b-it-GGUF:Q4_K_M", None),
|
||||||
|
|
||||||
# (None, "bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
# (None, "bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q4_K_M", None),
|
||||||
])
|
])
|
||||||
def test_hello_world_tool_call(expected_arguments_override: str | None, hf_repo: str, template_override: Tuple[str, str | None] | None):
|
def test_hello_world_tool_call(expected_arguments_override: str | None, hf_repo: str, template_override: str | Tuple[str, str | None] | None):
|
||||||
global server
|
global server
|
||||||
server.n_slots = 1
|
server.n_slots = 1
|
||||||
server.jinja = True
|
server.jinja = True
|
||||||
|
@ -318,10 +382,12 @@ def test_hello_world_tool_call(expected_arguments_override: str | None, hf_repo:
|
||||||
server.n_predict = 128
|
server.n_predict = 128
|
||||||
server.model_hf_repo = hf_repo
|
server.model_hf_repo = hf_repo
|
||||||
server.model_hf_file = None
|
server.model_hf_file = None
|
||||||
if template_override:
|
if isinstance(template_override, tuple):
|
||||||
(template_hf_repo, template_variant) = template_override
|
(template_hf_repo, template_variant) = template_override
|
||||||
server.chat_template_file = f"../../../models/templates/{template_hf_repo.replace('/', '-') + ('-' + template_variant if template_variant else '')}.jinja"
|
server.chat_template_file = f"../../../models/templates/{template_hf_repo.replace('/', '-') + ('-' + template_variant if template_variant else '')}.jinja"
|
||||||
assert os.path.exists(server.chat_template_file), f"Template file {server.chat_template_file} does not exist. Run `python scripts/get_chat_template.py {template_hf_repo} {template_variant} > {server.chat_template_file}` to download the template."
|
assert os.path.exists(server.chat_template_file), f"Template file {server.chat_template_file} does not exist. Run `python scripts/get_chat_template.py {template_hf_repo} {template_variant} > {server.chat_template_file}` to download the template."
|
||||||
|
elif isinstance(template_override, str):
|
||||||
|
server.chat_template = template_override
|
||||||
server.start(timeout_seconds=TIMEOUT_SERVER_START)
|
server.start(timeout_seconds=TIMEOUT_SERVER_START)
|
||||||
res = server.make_request("POST", "/chat/completions", data={
|
res = server.make_request("POST", "/chat/completions", data={
|
||||||
"max_tokens": 256,
|
"max_tokens": 256,
|
||||||
|
|
|
@ -5,10 +5,6 @@
|
||||||
#include "llama.h"
|
#include "llama.h"
|
||||||
#include "common/base64.hpp"
|
#include "common/base64.hpp"
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
// crash the server in debug mode, otherwise send an http 500 error
|
|
||||||
#define CPPHTTPLIB_NO_EXCEPTIONS 1
|
|
||||||
#endif
|
|
||||||
// increase max payload length to allow use of larger context size
|
// increase max payload length to allow use of larger context size
|
||||||
#define CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH 1048576
|
#define CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH 1048576
|
||||||
#include "httplib.h"
|
#include "httplib.h"
|
||||||
|
|
|
@ -154,8 +154,6 @@
|
||||||
placeholder="Type a message (Shift+Enter to add a new line)"
|
placeholder="Type a message (Shift+Enter to add a new line)"
|
||||||
v-model="inputMsg"
|
v-model="inputMsg"
|
||||||
@keydown.enter.exact.prevent="sendMessage"
|
@keydown.enter.exact.prevent="sendMessage"
|
||||||
@keydown.enter.shift.exact.prevent="inputMsg += '\n'"
|
|
||||||
:disabled="isGenerating"
|
|
||||||
id="msg-input"
|
id="msg-input"
|
||||||
dir="auto"
|
dir="auto"
|
||||||
></textarea>
|
></textarea>
|
||||||
|
|
|
@ -468,7 +468,10 @@ const mainApp = createApp({
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
},
|
},
|
||||||
async sendMessage() {
|
async sendMessage() {
|
||||||
if (!this.inputMsg) return;
|
// prevent sending empty message
|
||||||
|
// also allow typing the message while generating, but does not allow sending it (to match UX/UI behavior of other chat apps)
|
||||||
|
if (!this.inputMsg || this.isGenerating) return;
|
||||||
|
|
||||||
const currConvId = this.viewingConvId;
|
const currConvId = this.viewingConvId;
|
||||||
|
|
||||||
StorageUtils.appendMsg(currConvId, {
|
StorageUtils.appendMsg(currConvId, {
|
||||||
|
|
|
@ -274,22 +274,25 @@ endif()
|
||||||
|
|
||||||
# Generate version info based on git commit.
|
# Generate version info based on git commit.
|
||||||
|
|
||||||
find_program(GIT_EXE NAMES git git.exe REQUIRED NO_CMAKE_FIND_ROOT_PATH)
|
if(NOT DEFINED GGML_BUILD_NUMBER)
|
||||||
execute_process(COMMAND ${GIT_EXE} rev-list --count HEAD
|
find_program(GIT_EXE NAMES git git.exe REQUIRED NO_CMAKE_FIND_ROOT_PATH)
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
execute_process(COMMAND ${GIT_EXE} rev-list --count HEAD
|
||||||
OUTPUT_VARIABLE GGML_BUILD_NUMBER
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_VARIABLE GGML_BUILD_NUMBER
|
||||||
)
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
if(GGML_BUILD_NUMBER EQUAL 1)
|
if(GGML_BUILD_NUMBER EQUAL 1)
|
||||||
message(WARNING "GGML build version fixed at 1 likely due to a shallow clone.")
|
message(WARNING "GGML build version fixed at 1 likely due to a shallow clone.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND ${GIT_EXE} rev-parse --short HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GGML_BUILD_COMMIT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
execute_process(COMMAND ${GIT_EXE} rev-parse --short HEAD
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
OUTPUT_VARIABLE GGML_BUILD_COMMIT
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
# Capture variables prefixed with GGML_.
|
# Capture variables prefixed with GGML_.
|
||||||
|
|
||||||
|
|
|
@ -176,6 +176,14 @@ static constexpr bool new_mma_available(const int cc) {
|
||||||
return cc < GGML_CUDA_CC_OFFSET_AMD && cc >= GGML_CUDA_CC_TURING;
|
return cc < GGML_CUDA_CC_OFFSET_AMD && cc >= GGML_CUDA_CC_TURING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static constexpr __device__ int ggml_cuda_get_physical_warp_size() {
|
||||||
|
#if defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__)
|
||||||
|
return __AMDGCN_WAVEFRONT_SIZE;
|
||||||
|
#else
|
||||||
|
return 32;
|
||||||
|
#endif // defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__)
|
||||||
|
}
|
||||||
|
|
||||||
[[noreturn]]
|
[[noreturn]]
|
||||||
static __device__ void no_device_code(
|
static __device__ void no_device_code(
|
||||||
const char * file_name, const int line, const char * function_name, const int arch, const char * arch_list) {
|
const char * file_name, const int line, const char * function_name, const int arch, const char * arch_list) {
|
||||||
|
|
|
@ -516,6 +516,12 @@ constexpr __device__ dequantize_1_f32_t get_dequantize_1_f32(ggml_type type_V) {
|
||||||
nullptr;
|
nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The HIP compiler for some reason complains that it can't unroll a loop because of the jt*ncols + j >= ne01 conditional.
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wpass-failed"
|
||||||
|
#endif // __clang__
|
||||||
|
|
||||||
template<int D, int ncols, int KQ_stride> // D == head size
|
template<int D, int ncols, int KQ_stride> // D == head size
|
||||||
#if !(defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__))
|
#if !(defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__))
|
||||||
__launch_bounds__(D, 1)
|
__launch_bounds__(D, 1)
|
||||||
|
@ -614,6 +620,10 @@ static __global__ void flash_attn_stream_k_fixup(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif // __clang__
|
||||||
|
|
||||||
template<int D, int parallel_blocks> // D == head size
|
template<int D, int parallel_blocks> // D == head size
|
||||||
#if !(defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__))
|
#if !(defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__))
|
||||||
__launch_bounds__(D, 1)
|
__launch_bounds__(D, 1)
|
||||||
|
|
|
@ -561,7 +561,7 @@ void ggml_cuda_flash_attn_ext_wmma_f16(ggml_backend_cuda_context & ctx, ggml_ten
|
||||||
ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
|
ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
|
||||||
break;
|
break;
|
||||||
// case 256:
|
// case 256:
|
||||||
// ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
|
// ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, float>(ctx, dst);
|
||||||
// break;
|
// break;
|
||||||
default:
|
default:
|
||||||
GGML_ABORT("fatal error");
|
GGML_ABORT("fatal error");
|
||||||
|
|
|
@ -235,7 +235,7 @@ void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!new_mma_available(cc)) {
|
if (!fp16_mma_available(cc)) {
|
||||||
if (prec == GGML_PREC_DEFAULT) {
|
if (prec == GGML_PREC_DEFAULT) {
|
||||||
if (Q->ne[1] <= 8) {
|
if (Q->ne[1] <= 8) {
|
||||||
ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
|
ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
|
||||||
|
@ -265,6 +265,7 @@ void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst
|
||||||
// The MMA implementation needs Turing or newer, use the old WMMA code for Volta:
|
// The MMA implementation needs Turing or newer, use the old WMMA code for Volta:
|
||||||
if (cc == GGML_CUDA_CC_VOLTA) {
|
if (cc == GGML_CUDA_CC_VOLTA) {
|
||||||
ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst);
|
ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ggml_cuda_flash_attn_ext_mma_f16(ctx, dst);
|
ggml_cuda_flash_attn_ext_mma_f16(ctx, dst);
|
||||||
|
|
|
@ -5,9 +5,10 @@ template <typename T, typename type_acc, int block_size>
|
||||||
static __global__ void mul_mat_vec(
|
static __global__ void mul_mat_vec(
|
||||||
const T * __restrict__ x, const float * __restrict__ y, float * __restrict__ dst, const int64_t ncols2, const int64_t stride_row,
|
const T * __restrict__ x, const float * __restrict__ y, float * __restrict__ dst, const int64_t ncols2, const int64_t stride_row,
|
||||||
const int64_t channel_ratio, const int64_t stride_channel_x, const int64_t stride_channel_y, const int64_t stride_channel_dst) {
|
const int64_t channel_ratio, const int64_t stride_channel_x, const int64_t stride_channel_y, const int64_t stride_channel_dst) {
|
||||||
const int64_t row = blockIdx.x;
|
const int64_t row = blockIdx.x;
|
||||||
const int64_t channel = blockIdx.z;
|
const int64_t channel = blockIdx.z;
|
||||||
const int tid = threadIdx.x;
|
const int tid = threadIdx.x;
|
||||||
|
constexpr int warp_size = ggml_cuda_get_physical_warp_size();
|
||||||
|
|
||||||
x += (channel/channel_ratio)*stride_channel_x + row*stride_row;
|
x += (channel/channel_ratio)*stride_channel_x + row*stride_row;
|
||||||
y += channel *stride_channel_y;
|
y += channel *stride_channel_y;
|
||||||
|
@ -18,8 +19,8 @@ static __global__ void mul_mat_vec(
|
||||||
extern __shared__ char data_mmv[];
|
extern __shared__ char data_mmv[];
|
||||||
float * buf_iw = (float *) data_mmv;
|
float * buf_iw = (float *) data_mmv;
|
||||||
|
|
||||||
if (block_size > WARP_SIZE) {
|
if (block_size > warp_size) {
|
||||||
if (tid < WARP_SIZE) {
|
if (tid < warp_size) {
|
||||||
buf_iw[tid] = 0.0f;
|
buf_iw[tid] = 0.0f;
|
||||||
}
|
}
|
||||||
__syncthreads();
|
__syncthreads();
|
||||||
|
@ -67,16 +68,16 @@ static __global__ void mul_mat_vec(
|
||||||
static_assert(std::is_same<T, void>::value, "unsupported type");
|
static_assert(std::is_same<T, void>::value, "unsupported type");
|
||||||
}
|
}
|
||||||
|
|
||||||
sumf = warp_reduce_sum(sumf);
|
sumf = warp_reduce_sum<warp_size>(sumf);
|
||||||
|
|
||||||
if (block_size > WARP_SIZE) {
|
if (block_size > warp_size) {
|
||||||
buf_iw[tid/WARP_SIZE] = sumf;
|
buf_iw[tid/warp_size] = sumf;
|
||||||
__syncthreads();
|
__syncthreads();
|
||||||
if (tid >= WARP_SIZE) {
|
if (tid >= warp_size) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sumf = buf_iw[tid];
|
sumf = buf_iw[tid];
|
||||||
sumf = warp_reduce_sum(sumf);
|
sumf = warp_reduce_sum<warp_size>(sumf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tid != 0) {
|
if (tid != 0) {
|
||||||
|
@ -96,10 +97,19 @@ static void launch_mul_mat_vec_cuda(
|
||||||
GGML_ASSERT(stride_row % 2 == 0);
|
GGML_ASSERT(stride_row % 2 == 0);
|
||||||
GGML_ASSERT(nchannels_y % nchannels_x == 0);
|
GGML_ASSERT(nchannels_y % nchannels_x == 0);
|
||||||
const int64_t channel_ratio = nchannels_y / nchannels_x;
|
const int64_t channel_ratio = nchannels_y / nchannels_x;
|
||||||
|
int device;
|
||||||
|
int warp_size;
|
||||||
|
|
||||||
int64_t block_size_best = WARP_SIZE;
|
CUDA_CHECK(cudaGetDevice(&device));
|
||||||
int64_t niter_best = (ncols + 2*WARP_SIZE - 1) / (2*WARP_SIZE);
|
warp_size = ggml_cuda_info().devices[device].warp_size;
|
||||||
for (int64_t block_size = 2*WARP_SIZE; block_size <= 256; block_size += WARP_SIZE) {
|
|
||||||
|
int64_t block_size_best = warp_size;
|
||||||
|
int64_t niter_best = (ncols + 2*warp_size - 1) / (2*warp_size);
|
||||||
|
int64_t max_block_size = 256;
|
||||||
|
if(ggml_cuda_info().devices[device].cc > GGML_CUDA_CC_OFFSET_AMD && ggml_cuda_info().devices[device].cc < GGML_CUDA_CC_RDNA1) {
|
||||||
|
max_block_size = 128;
|
||||||
|
}
|
||||||
|
for (int64_t block_size = 2*warp_size; block_size <= max_block_size; block_size += warp_size) {
|
||||||
const int64_t niter = (ncols + 2*block_size - 1) / (2*block_size);
|
const int64_t niter = (ncols + 2*block_size - 1) / (2*block_size);
|
||||||
if (niter < niter_best) {
|
if (niter < niter_best) {
|
||||||
niter_best = niter;
|
niter_best = niter;
|
||||||
|
@ -107,7 +117,7 @@ static void launch_mul_mat_vec_cuda(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const int smem = WARP_SIZE*sizeof(float);
|
const int smem = warp_size*sizeof(float);
|
||||||
const dim3 block_nums(nrows, 1, nchannels_y);
|
const dim3 block_nums(nrows, 1, nchannels_y);
|
||||||
const dim3 block_dims(block_size_best, 1, 1);
|
const dim3 block_dims(block_size_best, 1, 1);
|
||||||
switch (block_size_best) {
|
switch (block_size_best) {
|
||||||
|
|
|
@ -18,7 +18,7 @@ __device__ float __forceinline__ t2f32<half>(half val) {
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wpass-failed"
|
#pragma clang diagnostic ignored "-Wpass-failed"
|
||||||
#endif
|
#endif // __clang__
|
||||||
template <bool use_shared, int ncols_template, int block_size_template, typename T>
|
template <bool use_shared, int ncols_template, int block_size_template, typename T>
|
||||||
static __global__ void soft_max_f32(
|
static __global__ void soft_max_f32(
|
||||||
const float * x, const T * mask, float * dst, const int ncols_par, const int nrows_y,
|
const float * x, const T * mask, float * dst, const int ncols_par, const int nrows_y,
|
||||||
|
@ -126,7 +126,7 @@ static __global__ void soft_max_f32(
|
||||||
}
|
}
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
#endif
|
#endif // __clang__
|
||||||
|
|
||||||
static __global__ void soft_max_back_f32(
|
static __global__ void soft_max_back_f32(
|
||||||
const float * grad, const float * dstf, float * dst, const int ncols, const float scale) {
|
const float * grad, const float * dstf, float * dst, const int ncols, const float scale) {
|
||||||
|
|
2
ggml/src/ggml-cuda/vendors/hip.h
vendored
2
ggml/src/ggml-cuda/vendors/hip.h
vendored
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#define HIP_ENABLE_WARP_SYNC_BUILTINS 1
|
||||||
#include <hip/hip_runtime.h>
|
#include <hip/hip_runtime.h>
|
||||||
#include <hipblas/hipblas.h>
|
#include <hipblas/hipblas.h>
|
||||||
#include <hip/hip_fp16.h>
|
#include <hip/hip_fp16.h>
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
// for rocblas_initialize()
|
// for rocblas_initialize()
|
||||||
#include "rocblas/rocblas.h"
|
#include "rocblas/rocblas.h"
|
||||||
#endif // __HIP_PLATFORM_AMD__
|
#endif // __HIP_PLATFORM_AMD__
|
||||||
|
|
||||||
#define CUBLAS_COMPUTE_16F HIPBLAS_R_16F
|
#define CUBLAS_COMPUTE_16F HIPBLAS_R_16F
|
||||||
#define CUBLAS_COMPUTE_32F HIPBLAS_R_32F
|
#define CUBLAS_COMPUTE_32F HIPBLAS_R_32F
|
||||||
#define CUBLAS_COMPUTE_32F_FAST_16F HIPBLAS_R_32F
|
#define CUBLAS_COMPUTE_32F_FAST_16F HIPBLAS_R_32F
|
||||||
|
|
|
@ -20,7 +20,10 @@
|
||||||
#define GGML_METAL_MAX_COMMAND_BUFFERS 8
|
#define GGML_METAL_MAX_COMMAND_BUFFERS 8
|
||||||
|
|
||||||
// create residency sets only on macOS >= 15.0
|
// create residency sets only on macOS >= 15.0
|
||||||
#if TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 150000
|
#if TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 150000 || \
|
||||||
|
TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= 180000 || \
|
||||||
|
TARGET_OS_TV && __TV_OS_VERSION_MAX_ALLOWED >= 180000 || \
|
||||||
|
TARGET_OS_VISION && __VISION_OS_VERSION_MAX_ALLOWED >= 200000
|
||||||
#define GGML_METAL_HAS_RESIDENCY_SETS 1
|
#define GGML_METAL_HAS_RESIDENCY_SETS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1071,7 +1074,7 @@ static bool ggml_backend_metal_buffer_rset_init(
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(GGML_METAL_HAS_RESIDENCY_SETS)
|
#if defined(GGML_METAL_HAS_RESIDENCY_SETS)
|
||||||
if (@available(macOS 15.0, *)) {
|
if (@available(macOS 15.0, iOS 18.0, tvOS 18.0, visionOS 2.0, *)) {
|
||||||
MTLResidencySetDescriptor * desc = [[MTLResidencySetDescriptor alloc] init];
|
MTLResidencySetDescriptor * desc = [[MTLResidencySetDescriptor alloc] init];
|
||||||
desc.label = @"ggml_backend_metal";
|
desc.label = @"ggml_backend_metal";
|
||||||
desc.initialCapacity = ctx->n_buffers;
|
desc.initialCapacity = ctx->n_buffers;
|
||||||
|
@ -1106,7 +1109,7 @@ static bool ggml_backend_metal_buffer_rset_init(
|
||||||
// rset free
|
// rset free
|
||||||
static void ggml_backend_metal_buffer_rset_free(struct ggml_backend_metal_buffer_context * ctx) {
|
static void ggml_backend_metal_buffer_rset_free(struct ggml_backend_metal_buffer_context * ctx) {
|
||||||
#if defined(GGML_METAL_HAS_RESIDENCY_SETS)
|
#if defined(GGML_METAL_HAS_RESIDENCY_SETS)
|
||||||
if (@available(macOS 15.0, *)) {
|
if (@available(macOS 15.0, iOS 18.0, tvOS 18.0, visionOS 2.0, *)) {
|
||||||
if (ctx->rset) {
|
if (ctx->rset) {
|
||||||
[ctx->rset endResidency];
|
[ctx->rset endResidency];
|
||||||
[ctx->rset removeAllAllocations];
|
[ctx->rset removeAllAllocations];
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
32f0b85987396945afea2291d5f4c5862434292b
|
694244a6e40dc255f6bb4376fb17431c06633e6c
|
||||||
|
|
|
@ -289,7 +289,7 @@ static void test_template(const common_chat_template & tmpl, const std::vector<s
|
||||||
static void test_template_output_parsers() {
|
static void test_template_output_parsers() {
|
||||||
json text_message {
|
json text_message {
|
||||||
{ "role", "assistant" },
|
{ "role", "assistant" },
|
||||||
{ "content", "Hello, world!" },
|
{ "content", "Hello, world!\nWhat's up?" },
|
||||||
};
|
};
|
||||||
json tool_calls = json::array({{
|
json tool_calls = json::array({{
|
||||||
{ "type", "function" },
|
{ "type", "function" },
|
||||||
|
@ -379,7 +379,7 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
common_chat_inputs inputs_no_tools;
|
common_chat_inputs inputs_no_tools;
|
||||||
inputs_no_tools.messages = {
|
inputs_no_tools.messages = {
|
||||||
{ { "role", "user" }, { "content", "Hey" } }
|
{ { "role", "user" }, { "content", "Hey\nThere" } }
|
||||||
};
|
};
|
||||||
|
|
||||||
common_chat_inputs inputs_tools = inputs_no_tools;
|
common_chat_inputs inputs_tools = inputs_no_tools;
|
||||||
|
@ -408,7 +408,8 @@ static void test_template_output_parsers() {
|
||||||
" {\"tool_call_id\": \"0\", \"tool_name\": \"special_function\", \"parameters\": {\"arg1\": 1}}\n"
|
" {\"tool_call_id\": \"0\", \"tool_name\": \"special_function\", \"parameters\": {\"arg1\": 1}}\n"
|
||||||
"]<|END_ACTION|>");
|
"]<|END_ACTION|>");
|
||||||
test_template(tmpl, end_tokens, text_message, tools,
|
test_template(tmpl, end_tokens, text_message, tools,
|
||||||
"<|START_RESPONSE|>Hello, world!<|END_RESPONSE|>",
|
"<|START_RESPONSE|>Hello, world!\n"
|
||||||
|
"What's up?<|END_RESPONSE|>",
|
||||||
/* expect_grammar_triggered= */ false);
|
/* expect_grammar_triggered= */ false);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -428,7 +429,7 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
assert_msg_equals(msg_from_json(text_message),
|
assert_msg_equals(msg_from_json(text_message),
|
||||||
common_chat_parse("{\n"
|
common_chat_parse("{\n"
|
||||||
" \"response\": \"Hello, world!\"\n"
|
" \"response\": \"Hello, world!\\nWhat's up?\"\n"
|
||||||
"}",
|
"}",
|
||||||
common_chat_params_init(tmpl, inputs_tools).format));
|
common_chat_params_init(tmpl, inputs_tools).format));
|
||||||
test_template(tmpl, end_tokens, tool_call_message_with_id, tools,
|
test_template(tmpl, end_tokens, tool_call_message_with_id, tools,
|
||||||
|
@ -451,7 +452,7 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
assert_equals(COMMON_CHAT_FORMAT_MISTRAL_NEMO, common_chat_params_init(tmpl, inputs_tools).format);
|
assert_equals(COMMON_CHAT_FORMAT_MISTRAL_NEMO, common_chat_params_init(tmpl, inputs_tools).format);
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!", /* expect_grammar_triggered= */ false);
|
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false);
|
||||||
test_template(
|
test_template(
|
||||||
tmpl, end_tokens, tool_call_message_with_id, tools,
|
tmpl, end_tokens, tool_call_message_with_id, tools,
|
||||||
"[TOOL_CALLS][{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}, \"id\": \"123456789\"}]");
|
"[TOOL_CALLS][{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}, \"id\": \"123456789\"}]");
|
||||||
|
@ -476,7 +477,7 @@ static void test_template_output_parsers() {
|
||||||
inputs_tools)
|
inputs_tools)
|
||||||
.format);
|
.format);
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!", /* expect_grammar_triggered= */ false);
|
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false);
|
||||||
test_template(tmpl, end_tokens, tool_call_message, tools,
|
test_template(tmpl, end_tokens, tool_call_message, tools,
|
||||||
"<tool_call>\n"
|
"<tool_call>\n"
|
||||||
"{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}\n"
|
"{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}\n"
|
||||||
|
@ -516,7 +517,7 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
assert_equals(COMMON_CHAT_FORMAT_LLAMA_3_X, common_chat_params_init(tmpl, inputs_tools).format);
|
assert_equals(COMMON_CHAT_FORMAT_LLAMA_3_X, common_chat_params_init(tmpl, inputs_tools).format);
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!", /* expect_grammar_triggered= */ false);
|
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false);
|
||||||
test_template(tmpl, end_tokens, tool_call_message, tools,
|
test_template(tmpl, end_tokens, tool_call_message, tools,
|
||||||
"{\"name\": \"special_function\", \"parameters\": {\"arg1\": 1}}");
|
"{\"name\": \"special_function\", \"parameters\": {\"arg1\": 1}}");
|
||||||
}
|
}
|
||||||
|
@ -528,7 +529,7 @@ static void test_template_output_parsers() {
|
||||||
assert_equals(COMMON_CHAT_FORMAT_FUNCTIONARY_V3_1_LLAMA_3_1,
|
assert_equals(COMMON_CHAT_FORMAT_FUNCTIONARY_V3_1_LLAMA_3_1,
|
||||||
common_chat_params_init(tmpl, inputs_tools).format);
|
common_chat_params_init(tmpl, inputs_tools).format);
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!", /* expect_grammar_triggered= */ false);
|
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false);
|
||||||
test_template(tmpl, end_tokens, tool_call_message, tools,
|
test_template(tmpl, end_tokens, tool_call_message, tools,
|
||||||
"<function=special_function>{\"arg1\": 1}</function>");
|
"<function=special_function>{\"arg1\": 1}</function>");
|
||||||
}
|
}
|
||||||
|
@ -542,7 +543,8 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, {},
|
test_template(tmpl, end_tokens, text_message, {},
|
||||||
"all\n"
|
"all\n"
|
||||||
"Hello, world!",
|
"Hello, world!\n"
|
||||||
|
"What's up?",
|
||||||
/* expect_grammar_triggered= */ false);
|
/* expect_grammar_triggered= */ false);
|
||||||
test_template(tmpl, end_tokens, tool_call_message, tools,
|
test_template(tmpl, end_tokens, tool_call_message, tools,
|
||||||
"special_function\n"
|
"special_function\n"
|
||||||
|
@ -555,7 +557,7 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
assert_equals(COMMON_CHAT_FORMAT_FIREFUNCTION_V2, common_chat_params_init(tmpl, inputs_tools).format);
|
assert_equals(COMMON_CHAT_FORMAT_FIREFUNCTION_V2, common_chat_params_init(tmpl, inputs_tools).format);
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!", /* expect_grammar_triggered= */ false);
|
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false);
|
||||||
test_template(tmpl, end_tokens, tool_call_message, tools,
|
test_template(tmpl, end_tokens, tool_call_message, tools,
|
||||||
" functools[{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}]");
|
" functools[{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}]");
|
||||||
}
|
}
|
||||||
|
@ -566,7 +568,7 @@ static void test_template_output_parsers() {
|
||||||
|
|
||||||
assert_equals(COMMON_CHAT_FORMAT_DEEPSEEK_R1, common_chat_params_init(tmpl, inputs_tools).format);
|
assert_equals(COMMON_CHAT_FORMAT_DEEPSEEK_R1, common_chat_params_init(tmpl, inputs_tools).format);
|
||||||
|
|
||||||
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!", /* expect_grammar_triggered= */ false);
|
test_template(tmpl, end_tokens, text_message, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false);
|
||||||
test_template(tmpl, end_tokens, tool_call_message, tools,
|
test_template(tmpl, end_tokens, tool_call_message, tools,
|
||||||
"<|tool▁calls▁begin|><|tool▁call▁begin|>function<|tool▁sep|>special_function\n"
|
"<|tool▁calls▁begin|><|tool▁call▁begin|>function<|tool▁sep|>special_function\n"
|
||||||
"```json\n"
|
"```json\n"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue