Floneum erleichtert es einfach, Anwendungen zu entwickeln, die lokale vorgebrachte KI-Modelle verwenden. In diesem Monorepo gibt es zwei Hauptprojekte:
Kalosm ist eine einfache Schnittstelle für vorgeborene Modelle in Rost, die Floneum zurückbilden. Es macht es einfach, mit vorgebliebenen, Sprach-, Audio- und Bildmodellen zu interagieren.
Kalosm unterstützt eine Vielzahl von Modellen. Hier ist eine Liste der Modelle, die derzeit unterstützt werden:
| Modell | Modalität | Größe | Beschreibung | Quantisiert | CUDA + Metall beschleunigt | Beispiel |
|---|---|---|---|---|---|---|
| Lama | Text | 1B-70b | Allzweck -Sprachmodell | ✅ | ✅ | Lama 3 Chat |
| Mistral | Text | 7-13b | Allzweck -Sprachmodell | ✅ | ✅ | Mistral Chat |
| Phi | Text | 2B-4b | Kleine argumentationorientierte Sprachmodell | ✅ | ✅ | Phi 3 Chat |
| Flüstern | Audio | 20MB-1GB | Audio -Transkriptionsmodell | ✅ | ✅ | Live Whisper Transkription |
| Rwuerstchen | Bild | 5 GB | Modellgenerierungsmodell | ✅ | Rwuerstho -Bildgenerierung | |
| Trocr | Bild | 3 GB | Optisches Charaktererkennungsmodell | ✅ | Texterkennung | |
| Irgendetwas segmentieren | Bild | 50 MB-400MB | Bildsegmentierungsmodell | Bildsegmentierung | ||
| Bert | Text | 100MB-1GB | Texteinbettungsmodell | ✅ | Semantische Suche |
Kalosm unterstützt auch eine Vielzahl von Versorgungsunternehmen für vorgebreitete Modelle. Dazu gehören:
Kalosm verwendet die Library für maschinelles Lernen von Kerzenlern, um Modelle in reinem Rost auszuführen. Es unterstützt quantisierte und beschleunigte Modelle mit Leistung mit llama.cpp :
Mistral 7b
| Beschleuniger | Kalosm | lama.cpp |
|---|---|---|
| Metall (M2) | 39 t/s | 27 t/s |
Kalosm unterstützt die strukturierte Generation mit willkürlichen Parern. Es verwendet eine benutzerdefinierte Parser-Engine und einen Sampler und eine strukturbewusste Beschleunigung, um die Strukturerzeugung noch schneller zu gestalten als die unkontrollierte Textgenerierung. Sie können jeden Rosttyp einnehmen und #[derive(Parse, Schema)] hinzufügen, um ihn mit strukturierter Generation verwendbar zu machen:
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:?}" ) ;
}Zusätzlich zu Regex können Sie Ihre eigene Grammatik bereitstellen, um strukturierte Daten zu generieren. Auf diese Weise können Sie die Reaktion auf jede Struktur einschränken, die Sie möchten, einschließlich komplexer Datenstrukturen wie JSON, HTML und XML.
Dieser QuickStart bringt Sie mit einem einfachen Chatbot zum Einsatz. Fangen wir an!
Eine vollständigere Anleitung für Kalosm ist auf der Kalosm -Website verfügbar. Beispiele finden Sie im Beispiele -Ordner.
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 -Datei hinzu 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 --releaseWenn Sie an einem Projekt interessiert sind, können Sie sich der Zwietracht anschließen, um das Projekt zu besprechen und Hilfe zu erhalten.