LLumiverse — это универсальный интерфейс для взаимодействия с моделями большого языка для экосистемы Typescript/Javascript. Он предоставляет легкую модульную библиотеку для взаимодействия с различными моделями LLM и платформами выполнения.
Он фокусируется исключительно на абстрагировании LLM и платформ их выполнения и не предоставляет быстрых шаблонов, RAG или цепочек, что позволяет вам выбрать лучший инструмент для работы.
В текущей версии поддерживаются следующие платформы LLM:
Поставщик | Завершение | Чат | Список моделей | Мультимодальный | Тонкая настройка |
---|---|---|---|---|---|
AWS Основа | ✅ | ✅ | ✅ | ✅ | ✅ |
Azure OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
Google Вертекс ИИ | ✅ | ✅ | Н/Д | ✅ | По запросу |
Грок | ✅ | ✅ | ✅ | Н/Д | Н/Д |
Конечные точки вывода HuggingFace | ✅ | ✅ | Н/Д | Н/Д | Н/Д |
IBM WatsonX | ✅ | ✅ | ✅ | Н/Д | По запросу |
Мистраль ИИ | ✅ | ✅ | ✅ | Н/Д | По запросу |
ОпенАИ | ✅ | ✅ | ✅ | ✅ | ✅ |
Репликация | ✅ | ✅ | ✅ | Н/Д | ✅ |
Вместе ИИ | ✅ | ✅ | ✅ | Н/Д | По запросу |
Новые возможности и платформу можно легко добавить, создав новый драйвер для платформы.
@llumiverse/core
и @llumiverse/drivers
npm install @llumiverse/core @llumiverse/drivers
@llumiverse/core
npm install @llumiverse/core
@llumiverse/core
npm install @llumiverse/core
Во-первых, вам необходимо создать экземпляр драйвера для целевой платформы LLM, с которой вы также хотите взаимодействовать. Каждый драйвер принимает свой собственный набор параметров при создании экземпляра.
import { OpenAIDriver } from "@llumiverse/drivers" ;
// create an instance of the OpenAI driver
const driver = new OpenAIDriver ( {
apiKey : "YOUR_OPENAI_API_KEY"
} ) ;
В этом примере мы создадим экземпляр драйвера Bedrock, используя учетные данные из файла общих учетных данных (т. е. ~/.aws/credentials). Узнайте больше о том, как настроить учетные данные AWS в узле.
import { BedrockDriver } from "@llumiverse/drivers" ;
const driver = new BedrockDriver ( {
region : 'us-west-2'
} ) ;
Чтобы следующий пример работал, вам необходимо определить переменную среды 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" ,
} ) ;
После создания экземпляра драйвера вы можете перечислить доступные модели. Некоторые драйверы принимают аргумент метода listModel
для поиска подходящих моделей. Некоторые драйверы, такие как, например, replicate
, перечисляют предварительно выбранный набор моделей. Чтобы просмотреть другие модели, вам необходимо выполнить поиск, указав текстовый запрос в качестве аргумента.
В следующем примере мы предполагаем, что уже создали экземпляр драйвера, который доступен как переменная 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 } ]` ) ;
}
Чтобы выполнить приглашение, нам нужно создать приглашение в формате LLumiverse и передать его методу execute
драйвера.
Формат приглашения очень похож на формат приглашения OpenAI. Это массив сообщений с content
и свойством role
. Роли могут быть любыми: "user" | "system" | "assistant" | "safety"
.
Роль safety
аналогична system
, но имеет больший приоритет по сравнению с другими сообщениями. Таким образом, оно будет игнорировать любое user
или system
сообщение, в котором говорится что-то, противоречащее сообщению safety
.
Чтобы выполнить приглашение, нам также необходимо указать целевую модель с учетом идентификатора модели, который известен целевому LLM. Мы также можем указать параметры выполнения, такие как temperature
, max_tokens
и т. д.
В следующем примере мы снова предполагаем, что уже создали экземпляр драйвера, который доступен как переменная driver
.
Кроме того, мы предполагаем, что идентификатор модели, на который мы хотим ориентироваться, доступен в качестве переменной model
. Чтобы получить список существующих моделей (и их идентификаторов), вы можете указать модель, как показано в предыдущем примере.
Вот пример идентификаторов моделей в зависимости от типа драйвера:
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 ) ;
В этом примере мы выполним приглашение и отправим результат для отображения на консоли, когда он будет возвращен целевой платформой LLM.
Обратите внимание , что некоторые модели не поддерживают потоковую передачу. В этом случае драйвер будет моделировать потоковую передачу, используя один фрагмент текста, соответствующий всему ответу.
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 ) ;
Драйверы LLumiverse предоставляют метод создания векторных вложений для заданного текста. Драйверы, поддерживающие встраивания начиная с версии 0.10.0, — это bedrock
, openai
, vertexai
. Если внедрения еще не поддерживаются, методgenerEmbeddings выдаст ошибку.
Вот пример использования драйвера vertexai
. Чтобы пример работал, вам необходимо определить переменную env GOOGLE_APPLICATION_CREDENTIALS
, чтобы иметь доступ к вашему проекту gcloud.
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 ) ;
Объект результата содержит вектор в качестве свойства values
, model
используемую для создания вложений, и необязательный параметр token_count
, который, если он определен, является количеством токенов входного текста. В зависимости от драйвера результат может содержать дополнительные свойства.
Также вы можете указать конкретную модель, которая будет использоваться, или передать другой параметр, поддерживаемый драйвером.
Пример:
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 ) ;
Параметр task_type
специфичен для модели textembedding-gecko.
Вклады приветствуются! Пожалуйста, посетите CONTRIBUTING.md для более подробной информации.
Llumivers распространяется по лицензии Apache License 2.0. Не стесняйтесь использовать его соответственно.