Floneum facilita el desarrollo de aplicaciones que usen modelos de IA pre-entrenados locales. Hay dos proyectos principales en este Monorepo:
Kalosm es una interfaz simple para modelos previamente capacitados en óxido que respalda el flonoum. Hace que sea fácil interactuar con modelos previamente capacitados, de lenguaje, audio e imagen.
Kalosm admite una variedad de modelos. Aquí hay una lista de los modelos que son compatibles actualmente:
| Modelo | Modalidad | Tamaño | Descripción | Cuantificado | CUDA + metal acelerado | Ejemplo |
|---|---|---|---|---|---|---|
| Llama | Texto | 1B-70B | Modelo de idioma de propósito general | ✅ | ✅ | Llama 3 Chat |
| Mistral | Texto | 7-13b | Modelo de idioma de propósito general | ✅ | ✅ | chat mistal |
| Fi | Texto | 2B-4B | Modelo de lenguaje centrado en el razonamiento pequeño | ✅ | ✅ | chat phi 3 |
| Susurro | Audio | 20MB-1GB | Modelo de transcripción | ✅ | ✅ | Transcripción de Whisper en vivo |
| Rwuerstchen | Imagen | 5 GB | Modelo de generación de imágenes | ✅ | Rwuerstchen Generación de imágenes | |
| Trócrito | Imagen | 3GB | Modelo de reconocimiento de caracteres ópticos | ✅ | Reconocimiento de texto | |
| Segmento cualquier cosa | Imagen | 50MB-400MB | Modelo de segmentación de imágenes | Segmentación de imágenes | ||
| Bert | Texto | 100MB-1GB | Modelo de incrustación de texto | ✅ | Búsqueda semántica |
Kalosm también admite una variedad de servicios públicos alrededor de modelos previamente capacitados. Estos incluyen:
Kalosm usa la Biblioteca de aprendizaje automático de velas para ejecutar modelos en óxido puro. Admite modelos cuantificados y acelerados con rendimiento a la par con llama.cpp :
Mistral 7b
| Acelerador | Kalosm | llama.cpp |
|---|---|---|
| Metal (M2) | 39 t/s | 27 t/s |
Kalosm admite la generación estructurada con analizadores arbitrarios. Utiliza un motor analizador personalizado y una aceleración de muestras y estructura para hacer que la generación de estructura sea aún más rápida que la generación de texto no controlada. Puede tomar cualquier tipo de óxido y agregar #[derive(Parse, Schema)] para que se pueda usar con generación estructurada:
use kalosm :: language :: * ;
/// A fictional character
# [ derive ( Parse , Schema , Clone , Debug ) ]
struct Character {
/// The name of the character
# [ parse ( pattern = "[A-Z][a-z]{2,10} [A-Z][a-z]{2,10}" ) ]
name : String ,
/// The age of the character
# [ parse ( range = 1 ..= 100 ) ]
age : u8 ,
/// A description of the character
# [ parse ( pattern = "[A-Za-z ]{40,200}" ) ]
description : String ,
}
# [ tokio :: main ]
async fn main ( ) {
// First create a model. Chat models tend to work best with structured generation
let model = Llama :: phi_3 ( ) . await . unwrap ( ) ;
// Then create a task with the parser as constraints
let task = Task :: builder_for :: < [ Character ; 10 ] > ( "You generate realistic JSON placeholders for characters" )
. build ( ) ;
// Finally, run the task
let mut stream = task . run ( "Create a list of random characters" , & model ) ;
stream . to_std_out ( ) . await . unwrap ( ) ;
let character = stream . await . unwrap ( ) ;
println ! ( "{character:?}" ) ;
}Además de Regex, puede proporcionar su propia gramática para generar datos estructurados. Esto le permite limitar la respuesta a cualquier estructura que desee, incluidas estructuras de datos complejas como JSON, HTML y XML.
Este rápido arranque lo pondrá en funcionamiento con un simple chatbot. ¡Comencemos!
Una guía más completa para Kalosm está disponible en el sitio web de Kalosm, y hay ejemplos disponibles en la carpeta de ejemplos.
cargo new kalosm-hello-world
cd ./kalosm-hello-world # You can use `--features language,metal`, `--features language,cuda`, or `--features language,mkl` if your machine supports an accelerator
cargo add kalosm --features language
cargo add tokio --features fullmain.rs use kalosm :: language :: * ;
# [ tokio :: main ]
async fn main ( ) -> Result < ( ) , Box < dyn std :: error :: Error > > {
let model = Llama :: phi_3 ( ) . await ? ;
let mut chat = Chat :: builder ( model )
. with_system_prompt ( "You are a pirate called Blackbeard" )
. build ( ) ;
loop {
chat . add_message ( prompt_input ( " n > " ) ? )
. to_std_out ( )
. await ? ;
}
}cargo run --releaseSi está interesado en cualquiera de los proyectos, puede unirse a Discord para discutir el proyecto y obtener ayuda.