Cohere Command — революция, которую мы пропустили

от автора

Исходный код, разобранный в данной статье, опубликован в этом репозитории

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

https://huggingface.co/tripolskypetr/command_r_gguf

Если десятки миллиардов параметров языковой модели потребуют покупать специлизированную видеокарту стоимостью 5 тысяч долларов, которую ещё нужно привезти и вставить в подходящую системную плату, такой бизнес нельзя масштабировать

Была поставлена задача: максимально использовать существующее железо. Исторически сложилось так, что офис укомплектован системными блоками с 32ГБ оперативной памяти и видеокартами RTX 3060 с 12ГБ видеопамяти

Результат поиска

В библиотеке моделей ollama была найдена модель command-r. Изначально, инструменты в ней были сломаны, однако, так как в issues началась ругонь, была получена копипаста, чтобы их починить.

ollama run oybekdevuz/command-r

ollama run oybekdevuz/command-r

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

Вызов инструметов заработал

Вызов инструметов заработал

Протестировали вызов инструментов. Есть различия с OpenAI: так как модель изначально позицинирует себя как оптимизированная под вызов внешних API, любое действие пользователя приходится прописывать как отдельный инструмент. В этом есть плюсы: поведение чата предсказуемо, если модель пишет, что товар добавлен в корзину, значит вместо текста-заглушки именно был отправлен HTTP запрос на сервер.

Что именно мы пропустили?

У cohere, производителя LLM, помимо облака, файлы модели в опенсорсе. Это тоже самое, что получить GGUF от GPT-4o и запустить локально. В итоге, получилось так, что на само облако мы не обратили внимание

https://docs.cohere.com/docs/rate-limits

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

https://dashboard.cohere.com/api-keys

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

https://cohere.com/pricing

Весёлая карусель

Наш движок роя агентов, для подключения облачных 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 моя веселая карусель не будет сильно грустной и накладной по финансам 🙁


ссылка на оригинал статьи https://habr.com/ru/articles/893232/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *