Floneum facilite le développement d'applications qui utilisent des modèles d'IA pré-formés locaux. Il y a deux projets principaux dans ce monorepo:
Le kalosm est une interface simple pour les modèles pré-formés dans la rouille qui soutient le floneum. Il est facile d'interagir avec les modèles pré-formés, linguistiques, audio et d'images.
Kalosm prend en charge une variété de modèles. Voici une liste des modèles actuellement pris en charge:
| Modèle | Modalité | Taille | Description | Quantifié | Cuda + Metal accéléré | Exemple |
|---|---|---|---|---|---|---|
| Lama | Texte | 1B-70B | Modèle de langue à usage général | ✅ | ✅ | LLAMA 3 CHAT |
| Mistral | Texte | 7-13b | Modèle de langue à usage général | ✅ | ✅ | chat de Mistral |
| Phi | Texte | 2B-4B | Modèle de langue focalisé sur un petit raisonnement | ✅ | ✅ | Phi 3 Chat |
| Chuchoter | Audio | 20 Mo-1 Go | Modèle de transcription audio | ✅ | ✅ | Transcription en direct |
| Rwuerstchen | Image | 5 Go | Modèle de génération d'images | ✅ | Génération d'images Rwuerstchen | |
| Troc | Image | 3 Go | Modèle de reconnaissance des caractères optiques | ✅ | Reconnaissance de texte | |
| Segmenter quoi que ce soit | Image | 50 Mo-400 Mo | Modèle de segmentation d'image | Segmentation d'image | ||
| Bert | Texte | 100 Mo-1 Go | Modèle d'intégration de texte | ✅ | Recherche sémantique |
Kalosm prend également en charge une variété de services publics autour des modèles pré-formés. Ceux-ci incluent:
Kalosm utilise la bibliothèque d'apprentissage des chandelles pour exécuter des modèles en rouille pure. Il prend en charge les modèles quantifiés et accélérés avec des performances à égalité avec llama.cpp :
Mistral 7b
| Accélérateur | Kalosm | lama.cpp |
|---|---|---|
| Métal (M2) | 39 T / S | 27 T / S |
Kalosm prend en charge la génération structurée avec des analyseurs arbitraires. Il utilise un moteur d'analyseur personnalisé et une accélération de l'échantillonneur et de la structure pour rendre la génération de structure encore plus rapide que la génération de texte incontrôlée. Vous pouvez prendre n'importe quel type de rouille et ajouter #[derive(Parse, Schema)] pour le rendre utilisable avec une génération structurée:
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:?}" ) ;
}En plus de Regex, vous pouvez fournir votre propre grammaire pour générer des données structurées. Cela vous permet de contraindre la réponse à toute structure que vous souhaitez, y compris des structures de données complexes comme JSON, HTML et XML.
Ce quickstart vous fera fonctionner avec un simple chatbot. Commençons!
Un guide plus complet pour Kalosm est disponible sur le site Web de Kalosm, et des exemples sont disponibles dans le dossier Exemples.
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 vous êtes intéressé par l'un ou l'autre projet, vous pouvez rejoindre la discorde pour discuter du projet et obtenir de l'aide.