O fóneo facilita o desenvolvimento de aplicativos que usam modelos locais de IA pré-treinados. Existem dois projetos principais neste monorepo:
O Kalosm é uma interface simples para modelos pré-treinados em ferrugem que apoia o fóneo. Isso facilita a interagir com os modelos pré-treinados, de idioma, áudio e imagens.
O KALOSM suporta uma variedade de modelos. Aqui está uma lista dos modelos que são suportados atualmente:
| Modelo | Modalidade | Tamanho | Descrição | Quantizado | Cuda + metal acelerado | Exemplo |
|---|---|---|---|---|---|---|
| Lhama | Texto | 1B-70B | Modelo de linguagem de uso geral | ✅ | ✅ | lhama 3 bate -papo |
| Mistral | Texto | 7-13b | Modelo de linguagem de uso geral | ✅ | ✅ | Chat Mistral |
| Phi | Texto | 2b-4b | Modelo de linguagem focada de pequeno raciocínio | ✅ | ✅ | Phi 3 Chat |
| Sussurrar | Áudio | 20MB-1GB | Modelo de transcrição de áudio | ✅ | ✅ | Transcrição do sussurro ao vivo |
| RWUSTCHEN | Imagem | 5 GB | Modelo de geração de imagens | ✅ | Geração de imagem RWuerstchen | |
| TROC | Imagem | 3 GB | Modelo de reconhecimento de caracteres ópticos | ✅ | Reconhecimento de texto | |
| Segmentar qualquer coisa | Imagem | 50MB-400MB | Modelo de segmentação de imagem | Segmentação de imagem | ||
| Bert | Texto | 100MB-1GB | Modelo de incorporação de texto | ✅ | Pesquisa semântica |
O KALOSM também suporta uma variedade de serviços públicos em torno de modelos pré-treinados. Estes incluem:
O Kalosm usa a biblioteca de aprendizado de máquina de velas para executar modelos em ferrugem pura. Ele suporta modelos quantizados e acelerados com desempenho em pé de igualdade com llama.cpp :
Mistral 7b
| Acelerador | Kalosm | llama.cpp |
|---|---|---|
| Metal (M2) | 39 T/S. | 27 t/s |
O KALOSM suporta geração estruturada com analisadores arbitrários. Ele usa um mecanismo de analisador personalizado e uma aceleração com reconhecimento de estrutura para tornar a geração da estrutura ainda mais rápida que a geração de texto não controlada. Você pode pegar qualquer tipo de ferrugem e adicionar #[derive(Parse, Schema)] para torná -lo utilizável com geração estruturada:
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:?}" ) ;
}Além da Regex, você pode fornecer sua própria gramática para gerar dados estruturados. Isso permite restringir a resposta a qualquer estrutura desejada, incluindo estruturas de dados complexas como JSON, HTML e XML.
Este Quickstart o colocará em funcionamento com um chatbot simples. Vamos começar!
Um guia mais completo para o KALOSM está disponível no site do KALOSM, e os exemplos estão disponíveis na pasta Exemplos.
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 --releaseSe você estiver interessado em qualquer projeto, poderá ingressar na discórdia para discutir o projeto e obter ajuda.