llama.cpp ReleasesActualizado el

[Pre-lanzamiento / compilación continua] b11714

[Pre-lanzamiento / compilación continua] ui : Descubrir y Descargar Modelos desde HF Hub (#29584) * common : resolver - etiquetas de descarga y listar sidecars en caché Una etiqueta de estilo Q4_0-mtp ahora resuelve el…

Pre-lanzamiento / compilación continua: esta es una compilación experimental, no una versión estable.

ui : Descubrir y Descargar Modelos desde HF Hub (#29584) * common : resolver - etiquetas de descarga y listar sidecars en caché Una etiqueta de estilo Q4_0-mtp ahora resuelve el archivo sidecar cuando ningún archivo de modelo coincide con ella, de modo que una descarga solitaria de draft o mmproj realmente obtenga el archivo. Los archivos sidecar en caché se listan como entradas propias para que el estado sobreviva a un reinicio, y eliminar dicha etiqueta borra solo el sidecar. Asistido-por: pi:zai-org/GLM-5.3 * ui : HTML sin procesar saneado opcional en markdown Se añade una prop allowHtml a MarkdownContent: el HTML sin procesar encontrado en el markdown se renderiza después de la sanitización con DOMPurify en lugar de escaparse como texto literal. Por defecto permanece escapado. Asistido-por: pi:GLM-5.3-Flash * ui : añadir los componentes de descubrimiento de modelos La superficie Discover: la lista de catálogo curado con su búsqueda y esqueletos, el panel de detalles con su readme, metadatos, estadísticas del Hub y opciones de descarga, y la barra de progreso de descarga independiente que reemplaza a la simple. El botón de descarga de quant dimensiona su select con un nuevo trigger xs, por lo que el select gana ese tamaño y el aspecto de caja atenuada. El store permanece incompleto cuando un repo falla, de modo que el siguiente montaje lo reintenta. Asistido-por: pi:llama.cpp/DeepSeek-V4.1-Flash * ui : colocar la vista de descubrimiento en el gestor de modelos El diálogo del gestor gana su segunda vista: la llamada a la acción Descubrir Modelos desvanece la tabla, desliza el título con su marca de brújula y desvanece la superficie de descubrimiento; el botón de flecha regresa a la tabla. Asistido-por: pi:llama.cpp/DeepSeek-V4.1-Flash # Conflictos: # tools/ui/src/lib/components/ui/button/button.svelte * ui : añadir la configuración Enable Discover Models El flag controla la navegación y descarga de modelos GGUF de HuggingFace, por lo que se declara en la capa de descubrimiento; la búsqueda del árbol de repos en la capa del gestor superior lo lee de aquí. Asistido-por: pi:llama.cpp/DeepSeek-V4.1-Flash * ui : reanudar las descargas de modelos desde el punto de pausa Una descarga detenida conserva su archivo parcial en lugar de borrarlo, por lo que reenviar la etiqueta reanuda desde el disco. El primer registro de progreso ahora lleva el offset de reanudación, la instantánea en pausa sobrevive en la entrada reanudada, y una pausa se concreta tan pronto como se solicita. Asistido-por: pi * ui : encabezar la lista de descubrimiento con las descargas La barra lateral de descubrimiento lista las descargas en curso por encima de los modelos sugeridos, y se aparta mientras una consulta está activa. Una descarga en pausa permanece en la tabla del gestor, donde se reanuda o se descarta. Asistido-por: pi * ui : hacer que reanudar una descarga en pausa funcione Reenviar la etiqueta de una descarga en pausa chocaba con la comprobación «ya existe» del router, porque una descarga en pausa estaciona su entrada como DOWNLOADED hasta la siguiente recarga: ahora una entrada de descarga que no está en ejecución se reemplaza y se reanuda. La UI conserva la fila en pausa cuando la solicitud sigue fallando, en lugar de descartarla y parecer terminada. Asistido-por: pi * ui : recordar las descargas de modelos sin terminar Un archivo parcial recibe su nombre según el hash de su contenido, por lo que nada en el disco indica a qué modelo pertenece una vez que el router se reinicia. El router ahora conserva las etiquetas de las descargas que inició, borra una etiqueta cuando la descarga termina o se elimina, y lista lo que queda como todavía descargándose sin iniciar nada. La UI adopta esas etiquetas como en pausa en cada obtención de la lista, de modo que una actualización o una apertura nueva muestra una descarga incompleta y puede reanudarla desde los archivos ya presentes en el disco. Asistido-por: pi * ui : mostrar el estado de una descarga en pausa en su chip Un chip de quant en pausa se lee como en pausa en reposo, de la forma en que uno en ejecución muestra su spinner, y ofrece la acción de reanudar al pasar el cursor. La fila de descarga del selector recibe una acción Ver en Discover junto a su cancelar. Asistido-por: pi * ui : colapsar las opciones de descarga por defecto El comando de descarga copiable comienza colapsado para que las filas de opciones tengan protagonismo; expandirlo sigue estando a un clic de distancia. Asistido-por: pi * ui : mantener los modelos de decisión fuera de las listas del hub Los modelos de decisión responden con probabilidades calibradas en lugar de texto, por lo que llama-ui no puede ejecutarlos: la capa de datos del hub los elimina de el catálogo y cada búsqueda, indexados por la etiqueta del modelo de decisión o un pipeline de clasificación de texto. Assisted-by: pi * ui : leer las etiquetas de descarga como quant y sidecar Una etiqueta `:-` ahora se analiza en su quant y sidecar en lugar de un único token quant opaco, y ModelsService.draftSidecarsByRepo recopila las entradas de solo sidecar del listado del router por repositorio, reemplazando la copia inline en el almacén de modelos. Assisted-by: pi * ui : agrupar las descargas de borrador bajo su modelo principal Las descargas rastreadas se agrupan por repositorio: los pesos principales lideran y los sidecars de borrador viajan dentro de su elemento como sublíneas compactas, en el selector, la lista de descubrimiento y la tabla del gestor. Los controles del modelo principal pausan, reanudan y cancelan todo el clúster, y las filas de descarga del gestor se seleccionan en el panel de configuración. Assisted-by: pi * ui : actuar sobre las descargas rastreadas desde las filas de la tabla La tabla pasa las sublíneas de borrador de sus clústeres a las filas de modelos. Las acciones de una fila propagan pausa y reanudación, una fila en curso ofrece Cancelar descarga mientras que una pausada conserva Eliminar del disco, y el texto del diálogo de confirmación sigue el estado. Assisted-by: pi * ui : dar a las descargas un panel de configuración propio Seleccionar una descarga rastreada abre el panel en un modo de descarga: progreso en vivo con pausa, reanudación y cancelación, y Ver en Discover, en lugar de metadatos y acciones de carga que un modelo sin archivos no puede ofrecer. Assisted-by: pi * ui : hacer que los detalles del descubrimiento se autocompleten y sean responsivos ModelsDiscoverDetailsContainer es dueño de las recuperaciones de detalles, árbol y readme para que los hosts fuera de la vista de descubrimiento puedan renderizar el panel, y el diseño de detalles se adapta a paneles estrechos con container queries en lugar de breakpoints del viewport. Assisted-by: pi * ui : descargar un borrador coincidente junto con el modelo principal Una descarga de quant principal ahora también descarga el borrador coincidente por quant del tipo más preferido que incluya el repositorio (DFlash antes que MTP), en modo fire-and-forget, para que la decodificación especulativa esté lista cuando llegue el principal. Los chips manuales de borrador siguen disponibles; las opciones también se contraen a una sola columna en paneles estrechos. Assisted-by: pi * ui : mantener discover desactivado por defecto y acoplarlo con la configuración del hub Discover Models empieza desmarcado. Activarlo enciende la configuración de Hugging Face Hub y desactivarlo la vuelve a apagar, de modo que la casilla nunca miente; con discover desactivado, la configuración del hub sigue estando disponible por sí misma para los datos de visualización. El estado almacenado y el reiniciado se corrigen de la misma manera al cargar. Assisted-by: pi * ui : abrir el diálogo de gestión de modelos en la vista del gestor El diálogo ahora se abre en el gestor en lugar de volver a la última vista, las entradas de discover siguen aterrizando en la vista de descubrimiento mientras la configuración lo permita, y las superficies de discover siguen el estado de la configuración. Assisted-by: pi * ui : dar a la búsqueda de discover espacio para su anillo de foco La barra de búsqueda fija se separa de los bordes del panel para que el anillo de foco permanezca dentro del contenedor de desplazamiento, y las filas se desplazan detrás de una barra opaca en lugar de atravesarla. Assisted-by: pi * common: fijar los nombres de sidecar en el listado y descartar parciales inacabados Un token de sidecar infijo o al final es ambiguo: las cabezas de borrador lo usan (Model-MTP-BF16.gguf), y también los modelos completos con cabezas incrustadas (Model-Q8D-MTP.gguf). Tal nombre es un sidecar solo junto a pesos principales sin tokens de la misma familia, mientras que mmproj o imatrix en cualquier parte del nombre, o un token inicial, deciden por sí solos (mmproj_f16.gguf). Una etiqueta de quant siempre incluye su recuento de bits, así que un sidecar nombrado sin ningún quant (mtp-Model-it.gguf) recibe la etiqueta base: el listado, el plan y remove la usan todos. Una etiqueta de imatrix se resuelve en un espacio del plan propio, descargada pero nunca conectada a los params. remove resuelve la etiqueta igual que lo hace una descarga y borra los archivos parciales de cada blob planificado, de modo que cancelar una descarga en curso o descartar una que quedó inacabada de una ejecución anterior no deja nada en disco. El router pasa su token y libera su bloqueo alrededor de la llamada, y registra las descargas inacabadas con una escritura atómica. llama download tiene éxito en un plan de solo sidecar e imprime sus rutas. * ui : mover las vistas del diálogo y los estados de borrador a enums y constantes Las vistas del diálogo de modelos se convierten en el enum ModelsDialogView, los estados de la sublínea de borrador se unen a ModelRowDownloadState, el fundido de la vista y el reinicio del feedback de copia se trasladan a constantes de ui, y las marcas de brújula del diálogo provienen de DISCOVER_ICON. Assisted-by: pi * ui : eliminar la superficie de discover sin usar El gemelo muerto openDiscoverModels, el divisor de comandos comentado, el onClose sin usar del panel de detalles y su botón de cerrar en la cabecera, y un cast de tipo redundante se eliminan; el feedback de copia del comando se une a la constante de reinicio compartida. Assisted-by: pi * ui : recortar los comentarios de las opciones de descarga y resaltar la plantilla de chat La verbosidad de comentarios que llevaban el panel de opciones y sus chips se reduce al por qué no obvio, y el diálogo de la plantilla de chat se renderiza mediante SyntaxHighlightedCode como jinja en lugar de un bloque pre plano. Assisted-by: pi * common: solo un archivo .gguf es un sidecar, y mmproj/imatrix como palabras completas Un archivo que no es GGUF nombrado como un sidecar (quantization-mmproj-Q8_0.json) se elige como el mmproj, y una palabra de sidecar dentro de una palabra más larga de un nombre de modelo (Phi-2-OmniMatrix.i1-Q4_K_M.gguf) descarta el modelo. * ui: desduplicar las insignias de sidecar de borrador por quant Las insignias de sidecar de borrador se desduplicaban por tipo y repositorio sin el quant, de modo que con un borrador almacenado en caché en dos quants solo sobrevivía una insignia, y al borrar el otro quant principal no se encontraba insignia con la que eliminar su sidecar. También restaura la documentación de getDownloadEntries perdida cuando el método de clústeres llegó por encima de ella. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: adoptar el estado de descarga incompleta y descartar el registro de ids pausados El almacén infería una descarga inacabada a partir de una entrada en descarga de la que no tenía estado local, lo que leía una descarga en ejecución en otra pestaña como pausada y ofrecía una reanudación que el servidor rechaza. El listado ahora incluye el estado "incomplete", así que la adopción se basa directamente en él. Los ids pausados ya no necesitan sobreviven en localStorage: el servidor los recuerda entre reinicios, y la instantánea de progreso quedaba obsoleta de todos modos tras una recarga. La clave localStorage obsoleta se elimina. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: quant-match las cascadas de pausa y cancelación Pausar, reanudar y cancelar hacía cascada a todos los draft sidecar del repositorio, mientras que delete solo tomaba los que hacían quant-match, de modo que cancelar una descarga Q4_0 también mataba un borrador Q8_0 que pertenece al modelo principal de otra quant. Ahora cada cascada actúa sobre los borradores con quant-match, igualando lo que se lleva un delete. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: colapsar el marcado duplicado de la sublínea de borradores Las ramas de descargado y en curso repetían el mismo marcado de conector, etiqueta y badge; un solo bloque con una cola condicional mantiene los dos estados sincronizados. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: eliminar los estilos posicionados del html de model card saneado El atributo style sigue permitido para la salida de KaTeX, lo que permitía que una card de un tercero dibujara un overlay fijo sobre la app. El hook de saneado descarta los valores position:fixed y position:absolute y deja intactos los estilos de layout de KaTeX. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: ejecutar el fetch de montaje de discover una vez y reutilizar el helper compartido repoOf fetch() alternaba su flag de carga sincrónicamente dentro del efecto de montaje, lo que reejecutaba el fetch en cada alternancia y reintentaba sin fin los repos de catálogo fallidos; el efecto ahora desrastrea la llamada. La copia local de repoOf y la importación duplicada de services dan paso a los helpers compartidos. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: estrechar el mapa spec-type a los draft sidecars SPEC_TYPE llevaba entradas vacías para los sidecars auxiliares con los que nunca se indexa; el mapa y el componente de comando ahora tipan el badge como un draft sidecar mediante un helper draftBadgeOf en lugar de un cast. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: nombrar los tags del decision-model y las claves de caché de markdown El tag hub del decision-model y el tag de pipeline se trasladan a las constantes de huggingface junto a los demás tags de pipeline, y los prefijos de caché de las transformaciones de markdown reciben nombres en lugar de tokens de una sola letra. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: leer el ajuste de discover mediante una sola comprobación de veracidad Tres lugares leían el ajuste con !== false y uno con Boolean(); ahora los cuatro lo leen de la misma manera. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: comparar la vista del diálogo de modelos contra su enum La plantilla comparaba el estado de la vista contra el literal 'manage' en tres sitios mientras que el script usaba el enum. Assisted-by: pi (zai-org/GLM-5.3-Flash) * nit: Eliminar `+` antes del badge del draft sidecar * server: listar las descargas sin terminar como incompletas Una descarga que nunca terminó se reportaba como "downloading", el mismo estado que lleva una descarga activa, de modo que un cliente no podía distinguir una descarga en marcha de una muerta. Los tags recordados en unfinished-downloads ahora se listan bajo un estado dedicado "incomplete", sin una instancia. Assisted-by: pi (zai-org/GLM-5.3-Flash) * server: descargar un modelo con sus sidecars como hace -hf La resolución vuelve a master. POST /models recibe los tipos de sidecar a traer con el modelo (mmproj por defecto) y el hijo de descarga los recibe como flags -hf, de modo que el servidor elige los archivos. /models lista solo modelos reales, cada uno con los sidecars que tiene en disco, y las descargas incompletas conservan sus sidecars entre reinicios. Una descarga detenida conserva sus archivos parciales para el siguiente intento, y DELETE los purga mediante el mismo plan que sigue la descarga. * ui: descargar los sidecars como parámetros de su modelo Las opciones de descarga conservan sus chips, pero un chip ya no publica un tag de sidecar: el store lo mapea a su modelo y a los tipos de sidecar a traer, el chip de quant toma su draft compañero en la misma descarga, y los badges de draft provienen de los sidecars que cada modelo en caché lista. El servidor añade los sidecars que le faltan a un modelo en caché cuando se publica de nuevo, y DELETE elimina un solo sidecar de un modelo en caché. * ui : espejar la búsqueda de sidecars del servidor en los badges de draft El servidor resuelve un sidecar por el token `-` sensible a mayúsculas en el mismo directorio que los pesos. La UI emparejaba el token de forma laxa, de modo que un badge podía ofrecer un draft que el servidor nunca traería. Assisted-by: DeepSeek-V4.1-Flash * ui : publicar los tipos de sidecar del modelo con su descarga El store mantiene una descarga por modelo: los tipos del chip viajan junto con los sidecars propios del modelo, y una fila de descarga ya no se expande en una fila por sidecar. Los badges de draft aún no llevan quant propia, de modo que a un sidecar de un modelo en caché nunca se le etiqueta con la quant del modelo. Assisted-by: DeepSeek-V4.1-Flash * ui : unir el draft de una quant en su chip de descarga Un chip por quant, con su draft etiquetado dentro y su tamaño cubriendo ambos archivos. El draft es el archivo que el servidor elegiría: el mismo directorio, la quant exacta, o si no la profundidad de bits más cercana, de modo que un modelo de 4 bits puede emparejarse con una cabeza de 16 bits. Assisted-by: DeepSeek-V4.1-Flash * ui : eliminar las filas de descarga de drafts del gestor y del selector Una descarga vuelve a ser una fila por modelo: los drafts viajan con ella, y las filas leen los sidecars en disco del listado en lugar de emparejar entradas de sidecar con su modelo. Pausar, reanudar y cancelar actúan sobre la descarga propia del modelo. Assisted-by: DeepSeek-V4.1-Flash * ui : mantener la lista de descargas de discover con una fila por modelo La lista encabeza con una fila por modelo en descarga, con sus sidecars como sublíneas. Una fila solo etiqueta los tipos de draft que el servidor puede resolver, de modo que un badge nunca sobrevive al archivo que su búsqueda elegiría. Assisted-by: DeepSeek-V4.1-Flash * ui : mantener los chips de discover legibles en modo oscuro Los chips de metadatos, el botón de chat template y el enlace View on Hugging Face cargaban un borde tenue y ninguna superficie sobre el fondo del diálogo, de modo que eran casi invisibles. Ahora toman la superficie de botón terciaria, y sus iconos se dimensionan con size-* para que la regla base de la variante los deje tranquilos. Assisted-by: DeepSeek-V4.1-Flash * ui : llevar el draft a través de las opciones de descarga Un chip por quant principal, con su borrador identificado en él y el estado de descarga del chip cubriendo ambos archivos. Los borradores se sitúan tras una casilla de aceptación voluntaria con una selección de tipo en línea, y cada fila abre su propio comando: fija el quant de la fila y solo nombra el tipo de borrador, así que -hfd ha desaparecido. Assisted-by: DeepSeek-V4.1-Flash * ui : alinear el esqueleto de detalles con el panel cargado El mismo padding de raíz y contexto de contenedor que la vista cargada, para que las container queries se resuelvan igual. La tarjeta de opciones de descarga aplica padding a sus bloques en vez de a sí misma, el readme recibe su tarjeta, y una línea de descripción sustituye al párrafo del catálogo. Assisted-by: DeepSeek-V4.1-Flash * common : eliminar los parciales de un sidecar eliminado Eliminar solo un sidecar dejaba los archivos .downloadInProgress que la descarga del sidecar había planificado en blobs/. La eliminación los purga siguiendo el mismo plan que la descarga, y la prueba cubre un borrador terminado junto a uno sin terminar, cuyo parcial desaparece mientras el modelo conserva sus archivos. Assisted-by: DeepSeek-V4.1-Flash * server : indicar por qué se rechaza una descarga Un modelo que ya se estaba descargando, o que estaba en ejecución, respondía "already exists". Ahora dice cuál de las dos: "is already downloading" o "is running, unload it first", ambos antes de la comprobación de reanudable. La prueba del router cubre los dos casos. Assisted-by: DeepSeek-V4.1-Flash * ui : enviar una descarga una vez por clic Dos clics rápidos en el mismo chip enviaban dos peticiones, y la segunda respuesta era "already exists". El store marca el modelo como pendiente, retorna temprano mientras está pendiente o en vuelo, y lo lee como en vuelo antes de que el servidor responda, así que el chip muestra la descarga de inmediato. La nueva prueba de cliente fija los flujos: un POST por doble clic, el chip leyéndose como descargado una vez que la lista informa del modelo, una reanudación que conserva sus sidecars, una cancelación que descarta toda la descarga y una recarga que restaura el estado en pausa. Assisted-by: DeepSeek-V4.1-Flash * ui : mantener una fila de descarga simple a la altura de las demás El envoltorio de sub-líneas de una fila de descarga se mostraba incluso sin nada dentro, así que su padding hacía la fila más alta que una simple y la barra de progreso superpuesta quedaba en esa franja vacía. Ahora solo se muestra con sub-líneas, tanto en el selector como en la lista de descubrimiento, y la fila del selector toma el padding de teléfono que tienen sus vecinas. Assisted-by: DeepSeek-V4.1-Flash * ui : identificar el borrador de un repositorio una sola vez Los args de un modelo cargado y el listado de uno en caché informan del mismo borrador con palabras distintas, uno con el quant del archivo y otro solo con el tipo, así que la fusión conservaba ambos y una fila de repositorio mostraba el mismo tipo dos veces. Las etiquetas ahora se fusionan por tipo, ganando la de los args por conocer el quant, y la prueba fija ambas fuentes de un repositorio real. Assisted-by: DeepSeek-V4.1-Flash * server : informar de los sidecars de un preset o de una descarga en curso Un modelo que un preset también nombra se registra como preset, así que sus borradores nunca se informaban y ninguna fila podía etiquetarlos. Una descarga en curso tampoco informaba de ninguno, aunque el registro de los tipos que obtiene está justo ahí: esos prevalecen ahora sobre el plan, el plan se resuelve a través del hf-repo del preset, y un directorio de modelos queda fuera de ello. Assisted-by: DeepSeek-V4.1-Flash * ui : etiquetar los borradores de una descarga y abrir su modelo desde la fila Un borrador que aún se descarga etiqueta ahora el id del modelo, igual que uno ya descargado, mientras que un borrador en disco conserva su sub-línea marcada. La fila en sí abre el modelo, la ranura de estado junto a ella pausa o reanuda, y el gestor resuelve un foco en una fila de descarga para que su panel se abra. Assisted-by: DeepSeek-V4.1-Flash * common : informar de un sidecar eliminado que solo tenía un parcial Eliminar solo un sidecar descartaba el resultado de la purga del parcial, así que un sidecar que solo llegó a existir como un blob .downloadInProgress respondía false y la UI no tenía motivo para volver a obtener datos. El resultado de la purga ahora se incorpora al valor de retorno, y la prueba cubre una eliminación de solo parcial. Assisted-by: DeepSeek-V4.1-Flash * ui : ignorar una pausa mientras el POST de descarga sigue en camino El chip se lee como descargándose antes de que el servidor responda, así que un segundo clic rápido descargó un modelo que no había empezado y dejó el store ni en vuelo ni en pausa. Una pausa retorna temprano mientras el POST está pendiente, antes de tocar el feed o el marcador de pausa. La prueba de cliente mantiene el POST abierto y lo fija. Assisted-by: DeepSeek-V4.1-Flash * ui : ofrecer un borrador ausente como su propio chip Un modelo ya en disco sin su borrador no tenía forma de añadirlo: el chip del quant llevaba el borrador, así que se leía como una descarga de ambos. El chip del quant se ciñe ahora a su propio estado, su borrador unido solo se muestra mientras va acompañado o está en disco, y un quant descargado al que le falta su borrador recibe un chip propio: etiqueta, tamaño, descarga, que envía el modelo con ese tipo, así que el servidor conserva los archivos ya presentes y obtiene el borrador. Assisted-by: DeepSeek-V4.1-Flash * server : listar una descarga de sidecar en pausa por los archivos en disco Un modelo en disco cuya descarga de sidecar se detiene conserva su registro sin terminar, y el listado informaba de los tipos que ese registro planifica como si estuvieran en disco: la UI marcaba un borrador que nunca llegó y no ofrecía forma de añadirlo. Los tipos planificados ahora solo sustituyen mientras la descarga se ejecuta. * chore: Clean up comments * server : listar sidecars solo para un modelo que se resuelve desde un repositorio de HF Un preset sobre un archivo local no tiene repositorio de HF, y sin embargo el listado resolvía su nombre como si lo tuviera: el plan fallaba por el formato de repositorio inválido y GET /models fallaba para cada modelo. Los sidecars ahora provienen del repositorio que nombra un preset o bajo el cual se lista un modelo en caché, y un archivo local se lista sin ellos. * common : corregir la regresión de cancelación de descargas Signed-off-by: Adrien Gallouët * common : conservar los parciales del modelo al eliminar sidecars Signed-off-by: Adrien Gallouët * server : una tabla de sidecars y una clase de descargas sin terminar Atiende la revisión de @ggerganov. Los tipos de sidecar viven en una sola tabla en common/download, que mapea cada nombre a su descarga option y plan file; el servidor valida, construye sus options y lista los sidecars en caché a través de ella en lugar de sus propias listas. Las descargas sin terminar se mueven a server_unfinished_downloads, un registro con su propio mutex y una struct por entrada, y server_models las expone mediante unfinished_downloads_get y unfinished_downloads_remove. * common: una tabla de sidecars, y eliminaciones que conservan los archivos compartidos La resolución, el listado en caché y la eliminación siguen una única tabla de tipos de sidecar, de modo que un tipo se declara una sola vez con su palabra clave de archivo, si es un draft, su option y su plan file. El servidor lee la misma tabla para los tipos que acepta, los sidecars predeterminados y las flags de hijos. Eliminar una tag conserva los archivos que otra tag en caché todavía carga, como un mmproj nombrado según el quant eliminado. Un sidecar eliminado por sí solo se va para todas las tags que lo resuelven. Una descarga sin terminar registra las rutas exactas de sus partials cuando comienza. Una eliminación los borra sin preguntar al hub, y conserva un partial que otra descarga registrada también escribe. El registro se toma una vez que el hijo se ha lanzado, y los archivos se eliminan bajo el lock de models, de modo que una descarga de la misma tag no pueda iniciarse mientras se eliminan. * server: descartar partials obsoletos y rechazar una tag que no resuelve nada Registrar de nuevo una descarga elimina los partials del registro anterior que el nuevo plan ya no escribe, como los de una revisión anterior del hub o los de un sidecar que la nueva petición omite. Una tag enviada que no resuelve ningún archivo del repo se rechaza antes de que la descarga comience. Eliminar un modelo sigue un único camino, tanto si el reload borró su entrada durante la espera como si no. * server: corregir la carrera de CI entre las pruebas de descarga del router Los workers de pytest se ejecutan en paralelo sobre una caché compartida, de modo que una prueba de descarga podía encontrar el archivo que otra prueba acababa de descargar y no ver progreso, o partir del registro de descargas sin terminar que otra prueba había escrito. Cada prueba de descarga se ejecuta ahora sobre una caché vacía propia. * server: rechazar un DELETE de un nombre desconocido y decidir las descargas en load() Un DELETE de un nombre que no es ni un modelo ni una descarga registrada iba a common_download_remove, y sin una tag borraba toda la caché del repo, incluidos los archivos de un quant cargado o de una descarga en curso. Tal nombre ahora no se encuentra, como era antes. Un POST que descarga sobre una entrada existente comprobaba su estado fuera del lock, de modo que una carga del mismo modelo en medio mataba su instancia. Las comprobaciones ahora se ejecutan en load(), bajo el lock, justo antes del spawn. El tiempo de carga falso de las pruebas se aplica solo a cargas de modelos, ya que un worker de descarga no carga ninguno. * server: añadir incomplete_sidecars a la API /models Un sidecar añadido a un modelo en caché y luego pausado conservaba su registro, pero el listado mostraba solo el modelo completo, de modo que una UI nueva perdía la pausa. La entrada del modelo lleva ahora incomplete_sidecars, los tipos que su descarga sin terminar aún no ha escrito; un POST con el tipo reanuda uno y un DELETE con él descarta su partial. * common : descartar un partial conservado cuando una reanudación recibe 416 Ahora que los partials sobreviven entre intentos, un partial antiguo o completo hace que cada reintento falle con el mismo 416. Elimínalo para que el siguiente intento pueda empezar de cero. Signed-off-by: Adrien Gallouët * common: descartar un partial conservado cuando una reanudación recibe 200 Un servidor que ignora el range responde 200 a una reanudación, y el partial conservado entonces falla en cada intento igual que con un 416. Descártalo también, de modo que el siguiente intento empiece de cero sin un range. * server: rechazar una descarga que comparte un partial con otra en curso Dos descargas de quants que comparten un archivo, el mmproj o un mtp elegido por los bits más cercanos, añadían al mismo partial y renombraban un archivo con bytes entrelazados. Una descarga cuyo plan escribe un partial que una descarga en marcha también escribe ahora se rechaza hasta que esa termine. * common : comprobar el etag guardado antes de reanudar una descarga parcial Antes de reanudar, compara el etag guardado con el partial con el que el servidor sirve ahora. Si falta o es diferente, empieza de nuevo, de modo que una descarga reanudada nunca mezcle bytes de dos versiones del archivo. Signed-off-by: Adrien Gallouët --------- Signed-off-by: Adrien Gallouët Co-authored-by: Pascal Co-authored-by: Adrien Gallouët

Sitio web: - https://llama.app

Atestaciones: - https://github.com/ggml-org/llama.cpp/attestations/56975123

macOS/iOS: - macOS Apple Silicon (arm64) - macOS Apple Silicon (arm64, KleidiAI habilitado) DISABLED - macOS Intel (x64) - iOS XCFramework

Linux: - Ubuntu x64 (CPU) - Ubuntu arm64 (CPU) - Ubuntu s390x (CPU) - Ubuntu x64 (Vulkan) - Ubuntu arm64 (Vulkan) - Ubuntu x64 (CUDA 12) - Bibliotecas CUDA 12.8 - Ubuntu x64 (CUDA 13) - Bibliotecas CUDA 13.4 - Ubuntu arm64 (CUDA 13) - Bibliotecas CUDA 13.4 - Ubuntu x64 (ROCm 10.0) - Ubuntu x64 (OpenVINO) - Ubuntu x64 (SYCL FP32) - Ubuntu x64 (SYCL FP16) - Linux arm64 (Snapdragon: CPU, GPU Adreno, NPU Hexagon) - guía de configuración

Android: - Android arm64 (CPU) - Android arm64 (Snapdragon: CPU, GPU Adreno, NPU Hexagon) - guía de configuración

Windows: - Windows x64 (CPU) - Windows arm64 (CPU) - Windows arm64 (OpenCL Adreno) - Windows x64 (CUDA 12) - DLLs de CUDA 12.4 - Windows x64 (CUDA 13) - DLLs de CUDA 13.4 - Windows arm64 (CUDA 13) - DLLs de CUDA 13.4 - Windows x64 (Vulkan) - Windows arm64 (Vulkan) - Windows x64 (OpenVINO) - Windows x64 (SYCL) - Windows x64 (ROCm 10.0)

openEuler: - DISABLED - openEuler x86 (310p) - openEuler x86 (910b, ACL Graph) - openEuler aarch64 (310p) - openEuler aarch64 (910b, ACL Graph)

UI: - UI

Fuente original

llama.cpp Releases

Notas sobre el contenido

La publicación original y los derechos pertenecen a la fuente.

Traducción automática · Consulte el original