LLumiverse adalah antarmuka universal untuk berinteraksi dengan Model Bahasa Besar, untuk ekosistem TypeScript/Javascript. Ini menyediakan perpustakaan modular ringan untuk berinteraksi dengan berbagai model LLM dan platform eksekusi.
Ini hanya berfokus pada abstraksi LLM dan platform eksekusinya, dan tidak menyediakan templating cepat, atau RAG, atau rantai, yang memungkinkan Anda memilih alat terbaik untuk pekerjaan itu.
Platform LLM berikut didukung dalam versi saat ini:
Penyedia | Penyelesaian | Mengobrol | Daftar Model | Multimoda | Penyempurnaan |
---|---|---|---|---|---|
Batuan Dasar AWS | ✅ | ✅ | ✅ | ✅ | ✅ |
Azure OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
Google Vertex AI | ✅ | ✅ | T/A | ✅ | Berdasarkan Permintaan |
Bagus | ✅ | ✅ | ✅ | T/A | T/A |
Titik Akhir Inferensi HuggingFace | ✅ | ✅ | T/A | T/A | T/A |
IBM WatsonX | ✅ | ✅ | ✅ | T/A | Berdasarkan Permintaan |
AI Mistral | ✅ | ✅ | ✅ | T/A | Berdasarkan Permintaan |
OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
Mengulangi | ✅ | ✅ | ✅ | T/A | ✅ |
Bersama AI | ✅ | ✅ | ✅ | T/A | Berdasarkan Permintaan |
Kemampuan dan platform baru dapat dengan mudah ditambahkan dengan membuat driver baru untuk platform tersebut.
@llumiverse/core
dan @llumiverse/drivers
npm install @llumiverse/core @llumiverse/drivers
@llumiverse/core
npm install @llumiverse/core
@llumiverse/core
npm install @llumiverse/core
Pertama, Anda perlu membuat instance driver untuk platform LLM target yang ingin Anda interaksi juga. Setiap driver menerima serangkaian parameternya sendiri saat membuat instance.
import { OpenAIDriver } from "@llumiverse/drivers" ;
// create an instance of the OpenAI driver
const driver = new OpenAIDriver ( {
apiKey : "YOUR_OPENAI_API_KEY"
} ) ;
Dalam contoh ini, kami akan membuat instance driver Batuan Dasar menggunakan kredensial dari File Kredensial Bersama (yaitu ~/.aws/credentials). Pelajari lebih lanjut tentang cara menyiapkan kredensial AWS di node.js.
import { BedrockDriver } from "@llumiverse/drivers" ;
const driver = new BedrockDriver ( {
region : 'us-west-2'
} ) ;
Agar contoh berikut berfungsi, Anda perlu mendefinisikan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS
.
import { VertexAIDriver } from "@llumiverse/drivers" ;
const driver = new VertexAIDriver ( {
project : 'YOUR_GCLOUD_PROJECT' ,
region : 'us-central1'
} ) ;
import { ReplicateDriver } from "@llumiverse/drivers" ;
const driver = new ReplicateDriver ( {
apiKey : "YOUR_REPLICATE_API_KEY"
} ) ;
import { TogetherAIDriver } from "@llumiverse/drivers" ;
const driver = new TogetherAIDriver ( {
apiKey : "YOUR_TOGETHER_AI_API_KEY"
} ) ;
import { HuggingFaceIEDriver } from "@llumiverse/drivers" ;
const driver = new HuggingFaceIEDriver ( {
apiKey : "YOUR_HUGGINGFACE_API_KEY" ,
endpoint_url : "YOUR_HUGGINGFACE_ENDPOINT" ,
} ) ;
Setelah Anda membuat instance driver, Anda dapat membuat daftar model yang tersedia. Beberapa driver menerima argumen untuk metode listModel
untuk mencari model yang cocok. Beberapa driver seperti replicate
mencantumkan serangkaian model yang telah dipilih sebelumnya. Untuk membuat daftar model lain, Anda perlu melakukan pencarian dengan memberikan kueri teks sebagai argumen.
Dalam contoh berikut, kita berasumsi bahwa kita telah membuat instance driver, yang tersedia sebagai variabel driver
.
import { AIModel } from "@llumiverse/core" ;
// instantiate the desired driver
const driver = createDriverInstance ( ) ;
// list available models on the target LLM. (some drivers may require a search parameter to discover more models)
const models : AIModel [ ] = await driver . listModels ( ) ;
console . log ( '# Available Models:' ) ;
for ( const model of models ) {
console . log ( ` ${ model . name } [ ${ model . id } ]` ) ;
}
Untuk menjalankan prompt kita perlu membuat prompt dalam format LLumiverse dan meneruskannya ke metode execute
driver.
Format prompt sangat mirip dengan format prompt OpenAI. Ini adalah array pesan dengan content
dan properti role
. Perannya dapat berupa "user" | "system" | "assistant" | "safety"
.
Peran safety
mirip dengan system
tetapi memiliki prioritas lebih besar dibandingkan pesan lainnya. Dengan demikian, ini akan mengesampingkan pesan user
atau system
apa pun yang mengatakan sesuatu yang bertentangan dengan pesan safety
.
Untuk menjalankan prompt kita juga perlu menentukan model target, dengan memberikan ID model yang diketahui oleh LLM target. Kami juga dapat menentukan opsi eksekusi seperti temperature
, max_tokens
dll.
Dalam contoh berikut, sekali lagi kita berasumsi bahwa kita telah membuat instance driver, yang tersedia sebagai variabel driver
.
Selain itu, kami mengasumsikan ID model yang ingin kami targetkan tersedia sebagai variabel model
. Untuk mendapatkan daftar model yang ada (dan ID-nya), Anda dapat membuat daftar model seperti yang kami tunjukkan pada contoh sebelumnya
Berikut ini contoh ID model tergantung pada jenis driver:
gpt-3.5-turbo
arn:aws:bedrock:us-west-2::foundation-model/cohere.command-text-v14
text-bison
meta/llama-2-70b-chat:02e509c789964a7ea8736978a43525956ef40397be9033abf9fd2badfe68c9e3
mistralai/Mistral-7B-instruct-v0.1
aws-mistral-7b-instruct-v0-1-015
import { PromptRole , PromptSegment } from "@llumiverse/core" ;
// instantiate the desired driver
const driver = createDriverInstance ( ) ;
const model = "the-model-id" ; // change with your desired model ID
// create the prompt.
const prompt : PromptSegment [ ] = [
{
role : PromptRole . user ,
content : 'Please, write a short story about winter in Paris, in no more than 512 characters.'
}
]
// execute a model and wait for the response
console . log ( `n# Executing prompt on ${ model } model: ${ prompt } ` ) ;
const response = await driver . execute ( prompt , {
model ,
temperature : 0.6 ,
max_tokens : 1024
} ) ;
console . log ( 'n# LLM response:' , response . result )
console . log ( '# Response took' , response . execution_time , 'ms' )
console . log ( '# Token usage:' , response . token_usage ) ;
Dalam contoh ini, kami akan menjalankan prompt dan mengalirkan hasilnya untuk ditampilkan di konsol saat dikembalikan oleh platform LLM target.
Perhatikan bahwa beberapa model tidak mendukung streaming. Dalam hal ini, driver akan mensimulasikan streaming menggunakan satu potongan teks yang sesuai dengan keseluruhan respons.
import { PromptRole , PromptSegment } from "@llumiverse/core" ;
// instantiate the desired driver
const driver = createDriverInstance ( ) ;
const model = "the-model-id" ; // change with your desired model ID
// create the prompt.
const prompt : PromptSegment [ ] = [
{
role : PromptRole . user ,
content : 'Please, write a short story about winter in Paris, in no more than 512 characters.'
}
]
// execute the prompt in streaming mode
console . log ( `n# Executing prompt on model ${ model } in streaming mode: ${ prompt } ` ) ;
const stream = await driver . stream ( prompt , {
model ,
temperature : 0.6 ,
max_tokens : 1024
} ) ;
// print the streaming response as it comes
for await ( const chunk of stream ) {
process . stdout . write ( chunk ) ;
}
// when the response stream is consumed we can get the final response using stream.completion field.
const streamingResponse = stream . completion ! ;
console . log ( 'n# LLM response:' , streamingResponse . result )
console . log ( '# Response took' , streamingResponse . execution_time , 'ms' )
console . log ( '# Token usage:' , streamingResponse . token_usage ) ;
Driver LLumiverse memaparkan metode untuk menghasilkan penyematan vektor untuk teks tertentu. Driver yang mendukung embeddings pada v0.10.0 adalah bedrock
, openai
, vertexai
. Jika penyematan belum didukung, metode generateEmbeddings akan menimbulkan kesalahan.
Berikut adalah contoh penggunaan driver vertexai
. Agar contoh ini berfungsi, Anda perlu mendefinisikan variabel env GOOGLE_APPLICATION_CREDENTIALS
agar dapat mengakses proyek gcloud Anda
import { VertexAIDriver } from "@llumiverse/drivers" ;
const driver = new VertexAIDriver ( {
project : 'your-project-id' ,
region : 'us-central1' // your zone
} ) ;
const r = await vertex . generateEmbeddings ( { content : "Hello world!" } ) ;
// print the vector
console . log ( 'Embeddings: ' , v . values ) ;
Objek hasil berisi vektor sebagai properti values
, model
yang digunakan untuk menghasilkan penyematan dan token_count
opsional yang jika ditentukan adalah jumlah token dari teks masukan. Tergantung pada drivernya, hasilnya mungkin berisi properti tambahan.
Anda juga dapat menentukan model tertentu yang akan digunakan atau meneruskan parameter lain yang didukung driver.
Contoh:
import { VertexAIDriver } from "@llumiverse/drivers" ;
const driver = new VertexAIDriver ( {
project : 'your-project-id' ,
region : 'us-central1' // your zone
} ) ;
const r = await vertex . generateEmbeddings ( {
content : "Hello world!" ,
model : "textembedding-gecko@002" ,
task_type : "SEMANTIC_SIMILARITY"
} ) ;
// print the vector
console . log ( 'Embeddings: ' , v . values ) ;
Parameter task_type
khusus untuk model textembedding-gecko.
Kontribusi dipersilahkan! Silakan lihat CONTRIBUTING.md untuk lebih jelasnya.
Llumivers dilisensikan di bawah Lisensi Apache 2.0. Jangan ragu untuk menggunakannya sebagaimana mestinya.