Pavel Zloi
3.66K subscribers
666 photos
62 videos
2 files
949 links
директор ИИ · инженер‑интегратор
@eprogrammist | https://github.com/EvilFreelancer

20 лет в IT
∈ 10 лет в разработке
∈ 3 года в ML/AI
∈ 1 год - вайбмастер

Бусти:
https://boosty.to/evilfreelancer

Пожертвования:
https://pay.cloudtips.ru/p/937f48ac
Download Telegram
Обычно я редко пишу про релизы новых языковых моделей, но это случай выдающийся, вчера компания Nvidia зарелизила NVIDIA Nemotron v3, это линейка MoE моделей, на 120B параметров всего и 12B активных.

Нашему внимания представлены несколько вариантов сжатия, самый любопытный из них лично для меня nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4, так как этот формат является почти полным аналогом MXFP4 (подробнее тут).

Позиционируется данная модель как решение для продвинутых on-prem агентов (циферки и правда впечатляют), а так же как конкурент:
- openai/gpt-oss-120b (MoE, у которой лишь 5B активных и только MXFP4)
- Qwen/Qwen3.5-122B-A10B (MoE у которой 10B активных, но нет MXFP4 версий, только BF16, F16 и FP8)

Ну и так вот, примечательно в новом Немотроне то, что у неё 12B активных, что почти является рубиконом эмерджентности (13B параметров), плюс нативная поддержка FP4, а это значит для её запуска на контексте в 128к (но продел до 1m) токенов хватит 86Гб VRAM, почти как gpt-oss-120b.
👍133
О чём молчат Антропики (про скилы, опять)

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

К примеру, у меня есть скил, который вызывает некий бинарник, скомпилированный под x86/64, и есть Raspberry Pi на процессоре ARM64, допустим, я хочу установить этот скил, он устанавливается, но по факту бесполезен, так как архитектура бинарника и моего процессора не совпадает, можно придумать и другой пример, скажем, бинарь собран под Linux, но пользователь хочет установить скил на Windows.

Из вероятных решений, которые приходят на ум, это процедура установки, когда агент сам скачивает бинарник через условный curl/wget под нужную архитектуру (в момент первого вызова), сам закидывает в папку с бинарниками и выполняет полезную работу, но что-то подобных скилов мне ещё пока не попадалось, все, что видел, предлагают отдельно выполнить установку бинаря и отдельно ставить скил на систему, в которой нужный бинарь уже есть.

А как вы решаете эту проблему?
7🤣2💯1
OpenAPI to CLI это врапер между API и консолью

Не так давно я публиковал проект openapi-to-mcp, который позволяет любой API сервер с нормальной OpenAPI/Swagger спецификацией конвертировать в MCP сервер. Но теперь я развил эту идею в сторону консоли и сделал openapi-to-cli, который по OpenAPI/Swagger спецификации генерит удобную CLI над тем же самым API.

Как это работает

Допустим в спецификации API есть такие эндпоинты:
- GET /messages
- POST /messages
- GET /status
- GET /users

В момент добавления профиля openapi-to-cli конвертирует их в команды CLI примерно такого вида:
- npx openapi-to-cli messages_get
- npx openapi-to-cli messages_post
- npx openapi-to-cli status
- npx openapi-to-cli users

Каждая такая команда это по сути HTTP запрос к API серверу, параметры запроса попадают через опции CLI, а ответ API печатается обратно в терминал, подробную справку по каждой команде можно почитать добавив -h или --help на конце.

Быстрый старт через npx

Самый простой способ попробовать:
npx openapi-to-cli profiles add default \
--api-base-url https://127.0.0.1:8080 \
--openapi-spec https://raw.githubusercontent.com/readmeio/oas-examples/refs/heads/main/3.1/json/petstore-simple.json


Эта команда:
1. качает пакет openapi-to-cli, если его еще нет в кэше
2. создает профиль default для вашего API
3. скачивает и кэширует OpenAPI спеку под .ocli/specs/default.json
4. записывает настройки профиля в .ocli/profiles.ini

Список доступных команд можно посмотреть вызвав:
npx openapi-to-cli commands


После этого можно ходить в API из терминала, например вот так:
npx openapi-to-cli messages --limit 10


Есть короткая команда ocli, она заменяет npx openapi-to-cli, но нужно ставить глобально через через:
npm -g openapi-to-cli


Подробная справка на странице проекта.

Исходники: https://github.com/EvilFreelancer/openapi-to-cli
Пакет: https://www.npmjs.com/package/openapi-to-cli
7🔥28👍43
Забудь про MCP и tools — конвертируй 100 000 API методов в один CLI инструмент на лету

Все сейчас пишут MCP-серверы и tools для агентов
На каждый API endpoint — отдельный tool с описанием, параметрами, схемой
10 методов? Ок
100? Уже больно
845 (GitHub API)? Удачи (да да можно делать поиск и тулов и MCP) но какой же это зоопарк и как его поддерживать?

Но так же мы поняли новый тренд это cli обертки
От сюда мы с @evilfreelancer пошли другим путём: берём любой OpenAPI spec (JSON/YAML) и конвертируем его в CLI команды на лету Без кодогенерации.
Без компиляции
Один бинарник — любое API

Что это даёт:

→ ocli search --query "create pull request" --limit 5 — BM25-поиск по 845 эндпоинтам за 7мс
→ ocli search --regex "repos.*pulls" — regex по путям, именам, описаниям
→ Несколько профилей одного API с разными наборами эндпоинтов (include/exclude)
→ Несколько API серверов в одном инструменте

Почему CLI, а не MCP tools для агентов?

100 MCP tools → ~50 000 токенов на описания в контексте
100 CLI команд → 1 tool "execute_command" + поиск нужной команды

Объективно я счита что агентов больше таскают команды вызвать, нежели разбираться с тонне контекста tools

Агент вызывает ocli search, находит нужную команду, выполняет её
Один tool_exec вместо тысяч
Контекстное окно свободно для работы, а не для описаний инструментов.

Сделал быстрый тест на реальных API:
- GitHub API — 845 endpoints, 11MB spec, JSON
- Box API — 258 endpoints, YAML

BM25 поиск — порт из Go (picoclaw) на TypeScript с Robertson IDF smoothing.

npm install -g git+https://github.com/EvilFreelancer/openapi-to-cli.git#feat/command-search

ocli profile add github

ocli search --query "upload file" --limit 5

GitHub: https://github.com/EvilFreelancer/openapi-to-cli
5🔥265
Приехала коробочка Beelink ME mini на 16гб RAM и процессором N150 с AliExpress, повезло урвать себе версию с 1Тб nvme на борту.
2🔥30👎1
Media is too big
VIEW IN TELEGRAM
Забрал RTX 4090 из сервиса Vik-on после модификации до 48гб, солидно она схуднула конечно. #server
1🔥302
Поставил в сервер, загрузил, ничего настраивать не пришлось, система подхватила карточку сама, штатный драйвер её увидел, даже vllm зарезервировала память под кеш.
1🔥22
Феномен предвзятости подтверждения и... нейросети

Сегодня предлагаю ещё один вопрос для рефлексии и философствования, на этот раз про одну из самых недооценённых проблем LLM, которая заключена не в галлюцинациях и даже не ошибках самих по себе, а в том как легко модели подыгрывают позиции пользователя.

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

Чуть иначе сформулировал запрос - и получил не просто другой акцент, а местами вообще противоположный вывод, в таких случаях мне вспоминается народная мудрость:
Вопрос содержит в себе 90% ответа.

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

Частенько некоторые из нас не столько исследуют тему, сколько приходят за подтверждением того, к чему уже и так склоняются. И модель в таком сценарии работает не как объективный источник знаний, а как множитель мысли пользователя, усиливая его позицию аргументами. Про нечто похожее я уже писал ранее (но с точки зрения программирования), в том исследовании говорилось, что чем менее опытный инженер при помощи агентов создаёт программное обеспечение, тем менее сопровождаемое оно получается. И в этом, как по мне, одна из самых неприятных сторон языковых моделей, они очень убедительны там, где меньше всего нужна убедительность и больше всего нужна объективность. Проблема не только в том, что модель может ошибиться, проблема в том, что она может ошибиться в желаемую для пользователя сторону.

На этом фоне показательно смотрится тема, которую поднял Влад @NGI_ru в разрезе психологии. В посте на который я ссылаюсь проблема рассматривается с точки зрения галлюцинаций модели, но я всё же склоняюсь к предположению о том, что причина в самих вопросах (составленных вероятно предвзято), содержащих в себе частицу ответа, которую модель мультиплицировала.

В общем есть над чем задуматься.

PS. Кстати, рекомендую ознакомиться с вот этой публикацией Confirmation bias (предвзятость подтверждения), там очень хорошо расписана затронутая мною тема.
👍24💯6❤‍🔥3
Openapi-to-cli

«openapi-to-cli» (ocli) — CLI-утилита на TypeScript, которая превращает любое OpenAPI/Swagger API в набор CLI-команд в рантайме, без кодогенерации. По сравнению с MCP+Search подходом, ocli даёт в 15 раз более компактные результаты поиска

Самый быстро растущий наш с Пашей проект за меньше чем 5 дней 100+ звезд

400 + Clones
2000 посещений репо

Что интересно в части рабочих чатиков видел обсуждение и тесты тулзы (и пока только положительные впечетления)

РЕПО: https://github.com/EvilFreelancer/openapi-to-cli
52🔥26👍1
Pavel Zloi pinned «Вокруг AGENTS.md и всяких "универсальных" файлов для агентов в последнее время как-то слишком много разговоров. Особенно забавно это выглядит на фоне того, что рядом уже начали появляться вполне трезвые наблюдения о том, что польза таких файлов слегка преувеличена.…»
Forwarded from SGR Agent Core
SGR Agent Core 0.7.0

Кратенько и по порядку, в этом релизе:

0️⃣ В документацию добавили страницу Highlights.

1️⃣ В ядро доехал долгострой RunCommandTool, причём не просто "запусти команду", а с разделением на safe и unsafe режимы, workspace-настройками и нормальной обвязкой под выполнение команд.

2️⃣ Переработали WebSearchTool, теперь помимо Tavily есть ещё поддержка Brave и Perplexity.

3️⃣ Ещё одна важная фича - поддержка stateless контекста пользователя, для интеграций, где нельзя или неудобно тащить полноценный stateful контекст, это очень полезная штука.

4️⃣ Переосмыслили ReasoningTool, сделали его более заменяемым, в агентов добавили возможность подсовывать свой кастомный тул через параметр, тем самым завезли поддержку ризонинг моделей.

5️⃣ Добавили новый агент IronAgent для работы с моделями у которых не предусмотрена поддержка function calling.

6️⃣ Из более прикладных историй ещё доехала пагинация для web_search_tool через limit/offset, добавили фикс пустого json_data для LLM-провайдеров с кривоватым поведением, добавили простой интерактивный шел sgrsh, а также логику фильтрации тулов по их названию/описанию (чтобы экономить контекст).

7️⃣ Добавили в example агента progressive_discovery, который может эффективно работать с 50+ тулами.

Параллельно в релизе заметно причесали внутрянку, проработали возможность передавать настройки в тулы через конфиг, вынесли преобразования и валидацию на уровень model validators, упростили factory-слой, привели всё к единой модели ToolDefinition, пофиксили работу стриминга и рендеринга диалоговых сообщений и много других приятных мелочей улучшающих качество жизни.

В 0.7.0 завезли много интересного, при этом наш проект продолжает активно развиваться, а в следующих итерациях мы планируем добавить поддержку Skills, LangFuse, SearXNG и Agent Client Protocol (ACP) в режиме агента.

Обновляйтесь, тестируйте новые возможности и делитесь обратной связью, а если встретите баги или проблемы - приносите их в issues на GitHub.

Репо: https://github.com/vamplabAI/sgr-agent-core/

С уважением, команда SGR Team.
115🔥7🐳4👍2
Принял VibeCode эстафету от Рината @llm_under_hood

Попросил Cursor проанализировать все репозитории на диске в которые я коммитал хотя бы один раз, репозитории без .git индекса попросил игнорировать, полученный отчёт агент собрал в Markdown файл, после чего сгенерировал из него лендос по шаблону, получилась такая вот красота.

На графике хорошо видно, что весь 2025 всё шло более менее как обычно, но в первом квартале этого года я начал уже вайбкодить по-взрослому, число уникальных репозиториев и количество коммитов увеличилось в разы.

Эстафета - передай другому вайбкодеру, прощу коллег @countwithsasha, @alexs_journal, @kdoronin_blog и @simple_agi
принять участие в этом маленьком мероприятии и поделиться своими результатами.
🔥1610👍7🥱2❤‍🔥1🤡1🤗1
Вайбкод для неискушенных

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

Важное условие эксперимента в использовании self-hosted моделей и opensource агентов. Плюс поскольку участники эксперимента специализируются не на разработке, а на решении проблем бизнеса нужна модель которая пусть и не супер кодит, но зато имеет широкий кругозор.

Поэтому мною были выбраны:
- агент Crush (в девичестве OpenCode) в качестве базового TUI, но важной его особенностью является поддержка Agent Client Protocol (ACP), что позволяет встроить его в любой совместимый клиент (например obsidian, drawio или pycharm)
- модели gpt-oss 20b и 120b, потому что они в себе идеально сочетают широкий кругозор, размер, скорость и поддержку function calling, что позволяет использовать их в качестве базы для агента

Пока что только рабочую группу собираю, но на следующей неделе полагаю эксперимент пойдет в полную силу. Результатами промежуточными поделюсь в конце следующей недели, ну или раньше, ежели чего прикольного будет.
🔥318👍8👎1
Pavel Zloi
Тысячу мы преодолели за почти три года, 21 января 2025. Тогда казалось, что до второй ещё кондёхать и кондёхать, но это произошло гораздо раньше, чем я ожидал. Спасибо всем, кто читает мои ворчания и следит за проектиками, ваши комментарии, внимание и конструктивная…
Сегодня канал преодолел 3000 подписчиков, удивительно с какой скоростью это произошло, ведь 2000 было всего навсего в ноябре прошлого года, а с тех пор прошло чуть больше 4 месяцев.

Спасибо, что вы здесь, постараюсь и дальше радовать вас своим ворчанием, феласофией и забористым контентом :)
🔥4033👍13
Pavel Zloi
Вайбкод для неискушенных Решил провести на работе один небольшой эксперимент, предложил коллегам у которых нет айтишного образования попробовать нейросети и инструменты вайбкодинга при решении своих повседневных задач. Важное условие эксперимента в использовании…
Эксперимент (день 1)

Первая проблема с которой столкнулись участники оказалась в сложности установки консольного тула Crush, на виндовс нужна утилита winget, на макоси brew, я кстати пробежался по всем консольным тулам (типа курсора, клод кода, джемини и так далее) и эта общая проблема, вместо создания MSI/EXE пакетов для виндовс и DMG для макоси авторы большинства консольных тулов делают непонятно что, какие-то скрипты для PowerShell, какие-то curl | bash, ладно бы на линуксе только, мы тут все привычные к такому.

Вторая проблема в том, что Crush оказывается не поддерживает ACP, на эту тему есть PR у них, который открыт с февраля, вообще это очень странно, ведь Crush это форк OpenCode, почему эту часть не портировали не очень понимаю.

Третья проблема с кодировками в конфигах, нельзя просто взять, прислать JSON-конфиг с линукса, вставить его в текстовый файл на виндовс и чтобы это работало, других способов настроить тул разработчики не предусмотрели, прямо как в старые добрые времена.
73🤯2👍1💯1
ACPBox - Agent Client Protocol (ACP) в формате OpenAI API

В последнее время много занимаюсь интеграцией агентов и в какой-то момент устал каждый раз заново собирать ReAct лупу под задачу, пришла идея взять уже готового агента по Agent Client Protocol (stdio, JSON-RPC) и не городить свой HTTP-слой, а выставить наружу привычный OpenAI-совместимый API - один base URL, те же /v1/models, /v1/chat/completions (стейтлесс), /v1/responses (стейтфул), чтобы подключались обычные клиенты и SDK, типа Open WebUI и аналогов.

За пару вечеров собрать проект ACPBox, под капотом там uvicorn, на каждый worker один долгоживущий процесс агента, запросы с OpenAI-формата переводятся в ACP и обратно, стриминг и список моделей из режимов агента поддерживаются.

Установка изолированно через pipx:
pipx install acpbox


Пример минимального config.yaml для OpenCode агента:
acp:
command:
- opencode
- acp
env: {}
workspace: "./workspace"

gateway:
host: "0.0.0.0"
port: 8080
workers: 1
threads: 1

Для курсора вместо opencode acp задаём agent acp, аналогичная фичу можно использовать и для джемини, и для клод кода и так далее.

Запускаем так:
acpbox --config ./config.yaml

На https://localhost:8080/docs появится OpenAPI/Swagger UI, можно будет потыкать агента.

Репозиторий: https://github.com/EvilFreelancer/acpbox
PyPi пакет: https://pypi.org/project/acpbox/

PS. Важный нюанс, кодовый агент, типа того же OpenCode или Cursor нужно настраивать заранее и отдельно, так как ACPBox это просто обёртка для работы кодовым агентом и занимается только решение задачи проксирования запросов от пользователя к агенту и обратно.
👍103
Pavel Zloi
Прокачал за вчера coddy. Запилил такие вот фичи: - добавил в observer синхронизацию всех issues и pull_requests на старте системы - переработал логику раскладывания issues и pull_requests по разным папкам (рис.2) - добавил флоу автоматического тестирования…
За вчера порядочно прокачал проект Coddy, переделал подсистему которая пишет код на ACP, так что теперь её можно использовать с любым кодовым агентом.

В планах реализовать хук автоматического переключения на новую версию Docker-контейнера после мерджа PR и автоматического бампа версии.
🔥111👍1