Исходный код, разобранный в данной статье, опубликован в этом репозитории
Длительный промежуток времени я искал модель, специально заточенную под вызов инструментов для внешних интеграций. Критерием поиска являлось минамальное количество галлюцинаций при использовании железа с потребительского рынка

Если десятки миллиардов параметров языковой модели потребуют покупать специлизированную видеокарту стоимостью 5 тысяч долларов, которую ещё нужно привезти и вставить в подходящую системную плату, такой бизнес нельзя масштабировать
Была поставлена задача: максимально использовать существующее железо. Исторически сложилось так, что офис укомплектован системными блоками с 32ГБ оперативной памяти и видеокартами RTX 3060 с 12ГБ видеопамяти
Результат поиска
В библиотеке моделей ollama была найдена модель command-r. Изначально, инструменты в ней были сломаны, однако, так как в issues началась ругонь, была получена копипаста, чтобы их починить.

И модель запустилась, заняв 90% ресурсов описанного выше системного блока. Вызов инструментов заработал, без тормозов и галюнов, средствами видеокарты. Это самый лучший вариант, так как мы максимально используем наше минимальное железо

Протестировали вызов инструментов. Есть различия с OpenAI: так как модель изначально позицинирует себя как оптимизированная под вызов внешних API, любое действие пользователя приходится прописывать как отдельный инструмент. В этом есть плюсы: поведение чата предсказуемо, если модель пишет, что товар добавлен в корзину, значит вместо текста-заглушки именно был отправлен HTTP запрос на сервер.
Что именно мы пропустили?
У cohere, производителя LLM, помимо облака, файлы модели в опенсорсе. Это тоже самое, что получить GGUF от GPT-4o и запустить локально. В итоге, получилось так, что на само облако мы не обратили внимание

У cohere есть free tier на 20 запросов в минуту на api key. Ограничение на количество времени, сколько живет trial токен я не нашел

Цена радикально более демократичная, чем в OpenAi. Однако, это не то, про что я хотел написать статью: А что если сделать карусель триальных токенов?

Весёлая карусель
Наш движок роя агентов, для подключения облачных LLM, использует адаптер: чтобы мы могли выскочить из Yandex Cloud или любого другого облака, если оно взвинтит цену подписки
import { Adapter, addCompletion, RoundRobin } from "agent-swarm-kit"; import { CompletionName } from "../enum/CompletionName"; import { CohereClientV2 } from "cohere-ai"; const getCohere = (token: string) => new CohereClientV2({ token, }); const COHERE_TOKENS = [process.env.COHERE_API_KEY, /* Вы знаете, что делать :-) */]; addCompletion({ completionName: CompletionName.CohereCompletion, getCompletion: RoundRobin.create(COHERE_TOKENS, (apiKey) => Adapter.fromCohereClientV2(getCohere(apiKey), "command-r-08-2024") ), });
Соответственно, помимо запуска command-r в облаке, в академический проект был добавлен коннектор для Ollama
import { Adapter, addCompletion } from "agent-swarm-kit"; import { CompletionName } from "../enum/CompletionName"; import { singleshot } from "functools-kit"; import { Ollama } from "ollama"; const getOllama = singleshot( () => new Ollama({ host: "http://127.0.0.1:11434" }) ); addCompletion({ completionName: CompletionName.OllamaCompletion, getCompletion: Adapter.fromOllama(getOllama(), "oybekdevuz/command-r", ""), });
И коннектор для LMStudio. Дополнительно, GGUF образ модели был выгружен в HuggingFace по этой ссылке, для удобства тем, кто предпочитает запускать модели мышкой, а не из консоли
import { Adapter, addCompletion } from "agent-swarm-kit"; import { singleshot } from "functools-kit"; import OpenAI from "openai"; import { CompletionName } from "../enum/CompletionName"; const getOpenAI = singleshot( () => new OpenAI({ baseURL: "http://127.0.0.1:1234/v1", apiKey: "noop" }) ); addCompletion({ completionName: CompletionName.LMStudioCompletion, getCompletion: Adapter.fromLMStudio(getOpenAI(), "command_r_gguf"), });
От себя добавлю, что локальная и облачная модели ведут себя абсолютно одинакого, что большой плюс, так как я не знаю, сколько ещё такая веселая карусель проработает...
Спасибо за внимание!
Надеюсь, компании cohere моя веселая карусель не будет сильно грустной и накладной по финансам :-(
