Есть такая шведская компания Legora. Они делают AI агентов для автоматизации юридических (Law) процессов.
На недавней конференции AI Eng (писал впечатления чуть выше) их CTO выступал с докладом.
Рассказывал, что документооборот и юр. контракты хорошо укладываются в дилемму верификации решений: то есть довольно легко сгенерировать правдоподобное решение (контракт, сделку) c помощью умных моделей, но очень тяжело валидировать его фактическую корректность. Основной способ борьбы с этим – декомпозиция. Legora предлагает юристам редактор, по типу Notion, под капотом которого крутятся агенты и помогают с этой самой разбивкой на более мелкие задачи.
✨ Но пост написан только из-за Джуда Лоу. А точнее из-за рекламной компании Legora с его участием. Ролики сделали мой день (их там несколько)
По-моему, здесь замечательно все, от задумки до исполнения
https://www.youtube.com/watch?v=1oWR_gpR6GY
На недавней конференции AI Eng (писал впечатления чуть выше) их CTO выступал с докладом.
Рассказывал, что документооборот и юр. контракты хорошо укладываются в дилемму верификации решений: то есть довольно легко сгенерировать правдоподобное решение (контракт, сделку) c помощью умных моделей, но очень тяжело валидировать его фактическую корректность. Основной способ борьбы с этим – декомпозиция. Legora предлагает юристам редактор, по типу Notion, под капотом которого крутятся агенты и помогают с этой самой разбивкой на более мелкие задачи.
По-моему, здесь замечательно все, от задумки до исполнения
https://www.youtube.com/watch?v=1oWR_gpR6GY
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Law just got more attractive
Hello. We recently hired Jude Law to be the face of our brand. So, moving forward, we would prefer that you associate him with precise drafting, seamless collaboration and the ability to analyze thousands of legal documents simultaneously. In line with his…
1🤣20😁11❤8👏2
How Well Do Agentic Skills Work in the Wild?
Про скиллы для кодинг агентов не слышал уже наверное только ленивый. Их легко создавать, появляются маркетплейсы, чтобы их было легче распространять и они точно помогают заставить агента учитывать преференции каждого конкретного инженера.
А вот исследований, чтобы численно померить импакт от скиллов, как делать их эвалы (сейчас в вялом режиме пишу статью для воркшопа на KDD, так что может быть будет пополнение) и, самое главное, как улучшать – пока мало. Исследовательская группа из MIT практично копают в эту тему в своей свежей статье
Разберу основные мысли.
Как бенчмаркать скиллы? В коммьюнити сейчас есть один бенчмарк, чтобы мерить полезность скиллов в разных доменах – SkillsBench. Он завирусился в твиттере (но статью на ICML не взяли – недостаточно новизны), авторы собрали людей, получился бенч на ~100 задач в формате Terminal-Bench тасок: есть текстовое описание задачи, докер среда с окружением, набор скиллов которые должны помочь решить задачу и юнит тесты, чтобы проверить. В статье которую разбираем в этом посте авторы делают эксперименты в основном на этом бенче.
Проблема загрузки скиллов в контекстное окно агента. Любой кто брался за создание своего скилла читал гайд Антропиков как писать хороший скилл. Ключевую роль играет поле description – в момент старта агента только это короткое поле с описанием сути скилла будет загружено в контекст модели. Так можно загрузить сотни скиллов и не перегрузить контекстное окно. Целиком же скилл будет загружен только когда модель понимает, что он ей нужен исходя из контекста. Авторы статьи решают симулировать проблему выбора – пусть у агента будут загружены не только релевантные скиллы, но и скиллы дистракторы. Идеальную модель это не смутит и она разберется какой скилл использовать. На практике оказывается, что дистракторы серьезно влияют, перформанс opus 4.6 падает на 8% (первый график, первые 2 столбца)
Почему так происходит? Оказывается все просто. Модель просто не понимает, что ей нужно использовать скилл. То есть даже в идеализированном сетапе, где есть текст задачи + несколько релевантных скиллов – опус реально будет использовать скилл только в 50% случаев (второй график). Все это поправимо – пост-трейн решает.
Представим недалекое будущее. Это такое, в котором нет необходимости писать свои скиллы принципе. Ну действительно, нет смысла каждому писать свой для документации к какой-нибудь популярной библиотеке. Гораздо быстрее скачать готовый с маркетплейса. Тогда появляется проблема поиска и ранжирования. Авторы скачали скиллы из маркетплейса skills.sh и сделали из него индекс. Теперь протестировали агента на решении задач в двух сетапах: в одном был доступ к индексу с заведомо нужными скиллами, во втором только к индексу. результаты естественно просели еще сильнее, у опуса на 20% (первый график, столбцы 3 и 4).
Как улучшить свой скилл? Это вполне себе резонынй вопрос. Одна стратегия, это просить агента-валидатора как-нибудь его переписать: учитывать гайды антропика, смерджить несколько – короче self-improvement loop. Чтобы померить эффект авторы добавляют еще один бенчмарк – Terminal-Bench 2.0. Ретривят к каждой задаче релевантные скиллы (по мнению ретривера), применяют к ним оптимайзер, и дальше решают задачу с учетом доступа теперь к скиллам. Оптимайзер имеет доступ только к тексту скиллов. Бонусов от такого как правило не наблюдается. Иными словами, не получается улучшить скилл только на основе каких-то чисто синтетических рассуждений.
Другой способ улучшить скилл – это дать агенту доступ к тексту задаче и среде, где он может ее решать – но без доступа к фидбэку о том, правильно ли агент ее решил. В этом случае это тоже self-improvement loop, но теперь есть сама задача, а самое главное возможность попытаться ее решить. Такой оптимайзер часто решает смерджить скиллы или переписать description. От такого оптимайзера толку уже сильно больше и он дает значимые бусты почти во всех сетапах. Но при этом создается, конечно, немного читерская ситуация – все-таки агент видел текст задачи.
Про скиллы для кодинг агентов не слышал уже наверное только ленивый. Их легко создавать, появляются маркетплейсы, чтобы их было легче распространять и они точно помогают заставить агента учитывать преференции каждого конкретного инженера.
А вот исследований, чтобы численно померить импакт от скиллов, как делать их эвалы (сейчас в вялом режиме пишу статью для воркшопа на KDD, так что может быть будет пополнение) и, самое главное, как улучшать – пока мало. Исследовательская группа из MIT практично копают в эту тему в своей свежей статье
Разберу основные мысли.
Как бенчмаркать скиллы? В коммьюнити сейчас есть один бенчмарк, чтобы мерить полезность скиллов в разных доменах – SkillsBench. Он завирусился в твиттере (но статью на ICML не взяли – недостаточно новизны), авторы собрали людей, получился бенч на ~100 задач в формате Terminal-Bench тасок: есть текстовое описание задачи, докер среда с окружением, набор скиллов которые должны помочь решить задачу и юнит тесты, чтобы проверить. В статье которую разбираем в этом посте авторы делают эксперименты в основном на этом бенче.
Проблема загрузки скиллов в контекстное окно агента. Любой кто брался за создание своего скилла читал гайд Антропиков как писать хороший скилл. Ключевую роль играет поле description – в момент старта агента только это короткое поле с описанием сути скилла будет загружено в контекст модели. Так можно загрузить сотни скиллов и не перегрузить контекстное окно. Целиком же скилл будет загружен только когда модель понимает, что он ей нужен исходя из контекста. Авторы статьи решают симулировать проблему выбора – пусть у агента будут загружены не только релевантные скиллы, но и скиллы дистракторы. Идеальную модель это не смутит и она разберется какой скилл использовать. На практике оказывается, что дистракторы серьезно влияют, перформанс opus 4.6 падает на 8% (первый график, первые 2 столбца)
Почему так происходит? Оказывается все просто. Модель просто не понимает, что ей нужно использовать скилл. То есть даже в идеализированном сетапе, где есть текст задачи + несколько релевантных скиллов – опус реально будет использовать скилл только в 50% случаев (второй график). Все это поправимо – пост-трейн решает.
Представим недалекое будущее. Это такое, в котором нет необходимости писать свои скиллы принципе. Ну действительно, нет смысла каждому писать свой для документации к какой-нибудь популярной библиотеке. Гораздо быстрее скачать готовый с маркетплейса. Тогда появляется проблема поиска и ранжирования. Авторы скачали скиллы из маркетплейса skills.sh и сделали из него индекс. Теперь протестировали агента на решении задач в двух сетапах: в одном был доступ к индексу с заведомо нужными скиллами, во втором только к индексу. результаты естественно просели еще сильнее, у опуса на 20% (первый график, столбцы 3 и 4).
Как улучшить свой скилл? Это вполне себе резонынй вопрос. Одна стратегия, это просить агента-валидатора как-нибудь его переписать: учитывать гайды антропика, смерджить несколько – короче self-improvement loop. Чтобы померить эффект авторы добавляют еще один бенчмарк – Terminal-Bench 2.0. Ретривят к каждой задаче релевантные скиллы (по мнению ретривера), применяют к ним оптимайзер, и дальше решают задачу с учетом доступа теперь к скиллам. Оптимайзер имеет доступ только к тексту скиллов. Бонусов от такого как правило не наблюдается. Иными словами, не получается улучшить скилл только на основе каких-то чисто синтетических рассуждений.
Другой способ улучшить скилл – это дать агенту доступ к тексту задаче и среде, где он может ее решать – но без доступа к фидбэку о том, правильно ли агент ее решил. В этом случае это тоже self-improvement loop, но теперь есть сама задача, а самое главное возможность попытаться ее решить. Такой оптимайзер часто решает смерджить скиллы или переписать description. От такого оптимайзера толку уже сильно больше и он дает значимые бусты почти во всех сетапах. Но при этом создается, конечно, немного читерская ситуация – все-таки агент видел текст задачи.
3🔥24❤9👍4🐳3🆒1
Вчера стартап Миры Мурати, Thinking Machines, анонсировал новый продукт – Interaction Model: реал-тайм мультимодального голосового ассистента.
Анонс вышел тихим. Выкатили технический блог пост и записали несколько демок (комментарии к видео отключены😁 ) Возможно так тихо, потому что показать пока реально нечего – обещают лимитированное ревью в течение следующих месяцев. Более крупный запуск обещают когда-то в этому году.
В основе нативная мультимодальная модель: обучили с нуля свой трансформер на 276B, на каждом шаге обрабатывает текст+видео+аудио, далее генерирует текст+аудио. Дополнительно есть background модель, которая может делать поиск, чтобы не блокировать главную модель, создавая тем самым эффект риал-тайма.
Демка выглядит слабо. Задержки в ответах даже на предзаписанных демо сильно ощущаются. Голос модели деревянный, как будто взяли старую Алексу из 2017-го.
Работал над похожим еще в свое время в Амазоне. По существу все архитектурные решения были теми же, как и асинхронные бэкгруанд модели, чтобы делать поиск и суммаризировать ответ. Только без видео. Что-то из этого докатилось уже давным давно до прода, Alexa+ дуплексная.
Может и ошибаюсь и оно полетит. Но как будто прошлый большой запуск компании, Tinker, выглядел сильно интереснее. Команда явно ищет нишу и их бросает от инфры для обучения моделей к обучению своих омни моделей. Хотя когда у тебя раунд на 2B$ можно и не такое делать.
Анонс вышел тихим. Выкатили технический блог пост и записали несколько демок (комментарии к видео отключены
В основе нативная мультимодальная модель: обучили с нуля свой трансформер на 276B, на каждом шаге обрабатывает текст+видео+аудио, далее генерирует текст+аудио. Дополнительно есть background модель, которая может делать поиск, чтобы не блокировать главную модель, создавая тем самым эффект риал-тайма.
Демка выглядит слабо. Задержки в ответах даже на предзаписанных демо сильно ощущаются. Голос модели деревянный, как будто взяли старую Алексу из 2017-го.
Работал над похожим еще в свое время в Амазоне. По существу все архитектурные решения были теми же, как и асинхронные бэкгруанд модели, чтобы делать поиск и суммаризировать ответ. Только без видео. Что-то из этого докатилось уже давным давно до прода, Alexa+ дуплексная.
Может и ошибаюсь и оно полетит. Но как будто прошлый большой запуск компании, Tinker, выглядел сильно интереснее. Команда явно ищет нишу и их бросает от инфры для обучения моделей к обучению своих омни моделей. Хотя когда у тебя раунд на 2B$ можно и не такое делать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Thinking Machines Lab
Interaction Models: A Scalable Approach to Human-AI Collaboration
Interaction models move beyond turn-based AI interfaces by handling multimodal, real-time collaboration natively across audio, video, and text.
👍17😴6❤4😁2🤣2⚡1👏1
А вы знали, что в стандартном механизме внимания есть неэффективность?
Она называется attention similarity bias.
Разберемся. В стандартной формуле attention для каждого токена мы считаем query, key и value, затем считаем attention scores: насколько query текущего токена похож на ключи других токенов. После этого агрегируем value векторы с attention-весами и получаем выходной вектор для токена, условный y.
Оказывается, что этот выходной вектор y может быть сильно похож (по cosine similarity) на собственный value вектор токена. И чем глубже слой трансформера, тем сильнее проявляется эффект (Картинка 1).
Этот и называется attention similarity bias.
Его можно интерпретировать как признак того, что часть емкости SA слоя может уходить не совсем туда. Основная роль аттеншена в моделировании контекстных фичей: собирать информацию из других токенов и позиций. А point-wise feature transformation, то есть преобразование признаков самого токена, обычно ожидается от отдельного блока – FFN слоя.
Это может сказываться на качестве модели, как минимум на language modeling способностях. Особенно в маленьких моделях, где каждый вес важен.
Фикс такого “бага” технически оказывается простым: нужно убрать из выходного вектора y проекцию собственного value вектора. В реализации это несколько строк (Картинка 2).
Такая модификация красиво называется XSA (Exclusive Self-Attention) И, судя по экспериментам, действительно помогает на маленьких моделях. На размерах 0.7B – 2.7B XSA приводил к более низкому train/val loss по сравнению с обычным аттеншном (Картинка 3).
Как это обобщается на сильно большие модели и конкретные downstream-задачи – отдельный открытый вопрос. Возможно, на больших масштабах эффект будет меньше из-за огромного числа параметров.
Работу сделал исследователь из Apple. Статья, реализация, эксперименты и сам эффект на маленьких моделях для задачи Next Token Prediction можно посмотреть здесь. А сделал он это все в рамках конкусра от OpenAI – Parameter Golf (правило одно:
#статья
Она называется attention similarity bias.
Разберемся. В стандартной формуле attention для каждого токена мы считаем query, key и value, затем считаем attention scores: насколько query текущего токена похож на ключи других токенов. После этого агрегируем value векторы с attention-весами и получаем выходной вектор для токена, условный y.
Оказывается, что этот выходной вектор y может быть сильно похож (по cosine similarity) на собственный value вектор токена. И чем глубже слой трансформера, тем сильнее проявляется эффект (Картинка 1).
Этот и называется attention similarity bias.
Его можно интерпретировать как признак того, что часть емкости SA слоя может уходить не совсем туда. Основная роль аттеншена в моделировании контекстных фичей: собирать информацию из других токенов и позиций. А point-wise feature transformation, то есть преобразование признаков самого токена, обычно ожидается от отдельного блока – FFN слоя.
Это может сказываться на качестве модели, как минимум на language modeling способностях. Особенно в маленьких моделях, где каждый вес важен.
Фикс такого “бага” технически оказывается простым: нужно убрать из выходного вектора y проекцию собственного value вектора. В реализации это несколько строк (Картинка 2).
Такая модификация красиво называется XSA (Exclusive Self-Attention) И, судя по экспериментам, действительно помогает на маленьких моделях. На размерах 0.7B – 2.7B XSA приводил к более низкому train/val loss по сравнению с обычным аттеншном (Картинка 3).
Как это обобщается на сильно большие модели и конкретные downstream-задачи – отдельный открытый вопрос. Возможно, на больших масштабах эффект будет меньше из-за огромного числа параметров.
Работу сделал исследователь из Apple. Статья, реализация, эксперименты и сам эффект на маленьких моделях для задачи Next Token Prediction можно посмотреть здесь. А сделал он это все в рамках конкусра от OpenAI – Parameter Golf (правило одно:
Train the smallest LM you can that fits in 16MB. Best model wins!). Судя по лидерборду, многие решения используют этот подход.#статья
4👍36❤18🔥11⚡2
Реклама AI инструментов продолжает захватывать Лондонскую подземку.
В коллекцию к JetBrains и Lovable добавляется Vercel
Если первые две компании точно все знают, то Vercel не такой очевидный (ну или мне так кажется). Они делают тулы для быстрого/безопасного деплоя веб приложений. Отмечу что действительно очень удобно и круто (Next.js тоже был разработан ими).
Сейчас ударились в агентов и предлагают какие-то автоматизации. По иронии, интернета на ветки Виктории все так же нет, а потому и посмотреть что же они там рекламируют сразу не выходит
В коллекцию к JetBrains и Lovable добавляется Vercel
Если первые две компании точно все знают, то Vercel не такой очевидный (ну или мне так кажется). Они делают тулы для быстрого/безопасного деплоя веб приложений. Отмечу что действительно очень удобно и круто (Next.js тоже был разработан ими).
Сейчас ударились в агентов и предлагают какие-то автоматизации. По иронии, интернета на ветки Виктории все так же нет, а потому и посмотреть что же они там рекламируют сразу не выходит
😁29❤6👍3🤣2🔥1👏1
Хочу поделиться крутым образовательным ресурсом. А именно ссылкой на ютуб канал рисерчера и профессора из университета Мэриленда Jia-Bin Huang (он еще будет себе осенью набирать phd студентов – кому актуально)
Здесь можно найти множество интересных разборов из современного DL, а последние видео точечно рассказывают про концепции из архитектур и обучения свежих LLM-ок:
- Как устроен оптимизатор Muon
- Как дизайнить MoE и разные подводные камни
- Линейный аттеншн
- Что такое Engram и как он делает трансформеры эффективнее
Exclusive Self Attention, или почему стандартный механизм внимания может неэффективно представлять данные, который я разбирал чуть выше, тут тоже есть, да еще и с существенно большим количеством наглядности (и даже с объяснением всей линейной алгебры, которой нет в статье!)
Контента у него очень много, рекомендую. Особенно если ведете рисерч, читаете статьи и хочется получить хорошее первое представление о свежей идее (все-таки из самой статьи иногда это сделать довольно трудно – нужно смотреть на предыдущие работы и долго вникать) или сами практикуете обучение моделей, чтобы глубже разбираться как что работает и где можно улучшить.
Здесь можно найти множество интересных разборов из современного DL, а последние видео точечно рассказывают про концепции из архитектур и обучения свежих LLM-ок:
- Как устроен оптимизатор Muon
- Как дизайнить MoE и разные подводные камни
- Линейный аттеншн
- Что такое Engram и как он делает трансформеры эффективнее
Exclusive Self Attention, или почему стандартный механизм внимания может неэффективно представлять данные, который я разбирал чуть выше, тут тоже есть, да еще и с существенно большим количеством наглядности (и даже с объяснением всей линейной алгебры, которой нет в статье!)
Контента у него очень много, рекомендую. Особенно если ведете рисерч, читаете статьи и хочется получить хорошее первое представление о свежей идее (все-таки из самой статьи иногда это сделать довольно трудно – нужно смотреть на предыдущие работы и долго вникать) или сами практикуете обучение моделей, чтобы глубже разбираться как что работает и где можно улучшить.
YouTube
Jia-Bin Huang
Sharing what I learned along the way!
1👍38❤12🔥7🥰2❤🔥1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Поиграть в браузере можно тут, на телефоне тоже запускается, но с ноута сильно комфортнее.
За одно и возможность потестить агентов на реальных Long Horizon Tasks.
Длинные автономные сессии агентов один из тренд текущего года. Вместо того чтобы постоянно сидеть рядом и поправлять агента вручную, мы заранее готовим ему среду, даём подробные инструкции и отправляем работать на несколько часов самостоятельно.
В такую парадигму укладывается много задач, от научных экспериментов до "Вот тебе CLI на Python перенеси его на Rust" (по такому принципу устроен наследник SWEBench – ProgramBench)
Самое важное дать агенту валидироваться, чтобы он понимал, что именно нужно улучшить.
Клонирование игры проходило в нескольких cетапах, где каждый следующий был надстройкой над предыдущим. Везде использовал Opus 4.8 с xhigh effort. В каждой попытке агент запускался автономно через`claude -p ...`. Игра делалась под three.js. У агента был доступ к playwright / agentbrowser чтобы смотреть на свой прогресс.
Вышло играбельно. Механика в местах не такая чувствительная, боты не очень естественные да и визуал бюджетнее. Но порцию ностальгии я словил и с удовольствием поиграл. Фиксить механику без вмешательства в код тяжело, надо играть и калибровать баланс, у агента с чувством плавности жуткие проблемы. А вот допилить визуал, при наличии качественных моделек героев и анимаций (что конечно отдельный челлендж) – это уже дело техники.
Удачный запуск, сетап 3 + сетап 4, потребовал 3 часов работы агента. Самая длинная автономная работа одного агента длилась 35 минут.
Please open Telegram to view this post
VIEW IN TELEGRAM
30🔥35❤10🏆3🦄2👏1🆒1
Так появился GoalStake – площадка, где можно создать турнир, пригласить друзей, выдать всем стартовый капитал игровых монет и соревноваться в прогнозах на исходы матчей, используя реальные вероятности исходов. Весело (потому что играешь с друзьями). Непредсказуемо (потому что чемпионаты всегда такие)
Ссылку на проект публично не шейрю, так как: а) этические соображения b) чтобы все это не развалилось под нагрузкой, так как держится на free tier планах
Но если хотите поиграть с друзьями или потыкать сами, то напишите в личку( в описании канала есть мой профиль) или в комментах и скину!
Кстати, у сервиса кроме облачных БД еще куча развиающихся фишек. Например, прокачанная авторизация (что я тоже попробовал), по почте/телефону/смс - все это можно довольно быстро подключить. Из интересного увидел еще поддержку realtime на базе WebSocket-ов
Кстати, вот тут большая подборка скиллов от популярных больших компаний.
—-
UPD 1. Пришло 23 запроса на попробовать, обнаружено 2 не критических бага. Фиксы подъедут когда-то на неделе
Please open Telegram to view this post
VIEW IN TELEGRAM
7❤20🏆8👍5
Расскажу чем занимался последний год и куда двинулся теперь.
Please open Telegram to view this post
VIEW IN TELEGRAM
36❤125🔥75🎉32🤔4🐳3👍1
Начинаю рассказывать, что интересного получилось поделать в свой финальный отрезок работы в стартапе.
И начну с статьи. Почитать можно тут.
Из приятного, ее недавно приняли на KDD – такая конфа с фокусом на приложения ML в индустрии, датасеты и эвалы. В этом году пройдет в Корее (что-то на азию всех потянуло, сейчас там проходит ICML).
Теперь к сути. К нам часто приходили энтерпрайзы с одними и теми же вопросами: вот есть у меня набор агентских скиллов, а как мне понять, что он вообще что-то делает? насколько он полезный? и что будет, если я заменю одну модель на другую, а скилл оставлю?
Мы соорудили многоступенчатый пайплайн генерации эвалов, чтобы отвечать на такие вопросы. Бенчмаркали все компоненты на опенсоурсных скиллах. Так и появилась статья.
А именно: берем реальный скилл, генеирурем на основе него реалистичную задачу + набор рубрик, заточенных под Instruction Following (IF). Потом решаем эту задачу целевой моделью + выбранным агентским харнессом в изолированной среде. Дальше измеряем качество решения с помощью рубрик, используя логи агента + решение задачи. Логи в данном случае очень важная штука, так как позволяют ловить какие промежуточные шаги делает агент и делает ли что-то такое, что прямо противоречит скиллу.
Померили такой пайплайн на качественных скиллах от больших вендоров (11labs, hugging face, ...) для большого количество моделей, открытх и закрытых + различных размеров.
Ключевой результат на картинке к посту.
Из основного:
• размер модели решает: чем она больше, тем как правило лучше, хорошо видно на семействе всех фронтир лаб
• новизна модели тоже решает; более свежая Gemini Flash 3.5 на уровне старой Pro 3.1
• опенсоурс отстает, но местами может быть очень компетитив, взять GLM - по результатам на уровне Сонета (тестил эту модельку в кодинге сам и впечатления очень хорошие; в отличие от Kimi - но кими и на нашем бенче проседает сильно)
• Прогнав агента с скиллом и без него можно измерить насколько скилл вообще важен (или модель и без скилла уже действовала как ожидается)
Последний пункт особенно полезен на практике. Конкретный пример. HF относительно недавно меняли свой cli - заменив его с
—
Будете делать какой-то рисерч про скиллы, буду благодарен, если поцитируете. Если есть ресурсы (токены и люди) вести рисерч в области кодинг агентов и бенчей, буду рад поколабить тоже, напишите в лс)
Статья была побочной активностью, как это и бывает в прикладных командах. Но все равно приятно, что наконец-то что-то докатилось до публикации. За последние 4 года 2 мои статьи эпохи работы в Амазоне попали под эмбарго и уже никогда не увидят свет
И начну с статьи. Почитать можно тут.
Из приятного, ее недавно приняли на KDD – такая конфа с фокусом на приложения ML в индустрии, датасеты и эвалы. В этом году пройдет в Корее (что-то на азию всех потянуло, сейчас там проходит ICML).
Теперь к сути. К нам часто приходили энтерпрайзы с одними и теми же вопросами: вот есть у меня набор агентских скиллов, а как мне понять, что он вообще что-то делает? насколько он полезный? и что будет, если я заменю одну модель на другую, а скилл оставлю?
Мы соорудили многоступенчатый пайплайн генерации эвалов, чтобы отвечать на такие вопросы. Бенчмаркали все компоненты на опенсоурсных скиллах. Так и появилась статья.
А именно: берем реальный скилл, генеирурем на основе него реалистичную задачу + набор рубрик, заточенных под Instruction Following (IF). Потом решаем эту задачу целевой моделью + выбранным агентским харнессом в изолированной среде. Дальше измеряем качество решения с помощью рубрик, используя логи агента + решение задачи. Логи в данном случае очень важная штука, так как позволяют ловить какие промежуточные шаги делает агент и делает ли что-то такое, что прямо противоречит скиллу.
Померили такой пайплайн на качественных скиллах от больших вендоров (11labs, hugging face, ...) для большого количество моделей, открытх и закрытых + различных размеров.
Ключевой результат на картинке к посту.
Из основного:
• размер модели решает: чем она больше, тем как правило лучше, хорошо видно на семействе всех фронтир лаб
• новизна модели тоже решает; более свежая Gemini Flash 3.5 на уровне старой Pro 3.1
• опенсоурс отстает, но местами может быть очень компетитив, взять GLM - по результатам на уровне Сонета (тестил эту модельку в кодинге сам и впечатления очень хорошие; в отличие от Kimi - но кими и на нашем бенче проседает сильно)
• Прогнав агента с скиллом и без него можно измерить насколько скилл вообще важен (или модель и без скилла уже действовала как ожидается)
Последний пункт особенно полезен на практике. Конкретный пример. HF относительно недавно меняли свой cli - заменив его с
huggingface-cli на просто hf. Первый депрекейтят и четко пишут не использовать. Но без скилла модель зачастую упорно выбирает старый вариант.—
Будете делать какой-то рисерч про скиллы, буду благодарен, если поцитируете. Если есть ресурсы (токены и люди) вести рисерч в области кодинг агентов и бенчей, буду рад поколабить тоже, напишите в лс)
Статья была побочной активностью, как это и бывает в прикладных командах. Но все равно приятно, что наконец-то что-то докатилось до публикации. За последние 4 года 2 мои статьи эпохи работы в Амазоне попали под эмбарго и уже никогда не увидят свет
6🔥31❤11⚡3👍3🆒2👏1
https://m.youtube.com/watch?v=gFx-NjTw3sM
Для чего еще нужен AI, если не для этого
И правда Claude’s plan
Для чего еще нужен AI, если не для этого
И правда Claude’s plan
YouTube
I asked Fable 5 to make me a lyric video
Claude's Plan Lyric Video
Available on all platforms
Lyrics:
And they shipping, they shipping, they shipping, they shipping, they shipping for me
Yeah
Honestly can't tell if it's a bubble to me
Tryna keep up with it struggle for me
Leetcode problems…
Available on all platforms
Lyrics:
And they shipping, they shipping, they shipping, they shipping, they shipping for me
Yeah
Honestly can't tell if it's a bubble to me
Tryna keep up with it struggle for me
Leetcode problems…
🤣19❤4😁4👍2🌚2
Еще одна идея над которой успел поработать перед уходом из стартапа – это AI код ревьюеры.
В какой-то момент, как и многие стартапы, мы стали строить свою Software Factory (воркшоп от Курсора, если интересуетесь) с идей того, чтобы 0) cтать настоящей AI Native Dev компанией 1) еще быстрее шипить новый софт 2) продавать это другим.
Агентские код ревьюеры – это один из блоков такой фабрики, я и исследовал, какие существуют опции. Полигон для тестов – мои коллеги и их отзывы, исторические PR-ы с ревизиями, чтобы делать офлайн эвалы.
Начал я с коробчных решений. На слуху был Code Rabbit, шустрый грейдер, хорошо советовал на уровне файлов, отлавливая очевидный слоп. Но в общем-то на этом и все. Более сложные архитектурные вопросы он полностью игнорировал. Еще одна подобная штука - это Qodo, у них была интеграция с разными агентскими файлами (cursor rules, agents.md), но завести адекватно так и не смог
Другое коробочное решение – это Code Review от Claude Code. Вот это было прям хорошо: обшираная кастомизация (REVIEW.md для своих пожеланий, настраиваемые проверки для конкретного репозитория, калибровка severity). Работало правда как будто не обоснованно медленно, иногда ревьюер уходил в долгое изучения репозитория; крошечные изменения могли занимать 30 минут. В итоге очень большой расход токенов + лок ин на модели антропика. Запустить Claude Code + свои скиллы для ревью тоже пробовал, но получалось заметно хуже.
В идеале хотелось большего детерминированного контроля, возможности кастомизировать глубину ревью, и конечно поддержать разные модели. В общем по классике - надо писать свое.
Но писать c нуля для пилота мне не пришлось. Арсений, автор @partially_unsupervised в марте выложил в опенсоурс nitpicker, и быстро довел его до крайне полезной штуки. Большая мобильность, можно запускать не только на PR, но и просто на репе + интересующих файлах, чтобы мониторить состояние кодовой базы. Быстро я приблизился к качеству ревью от антропиков за счет запусков нескольких nitpicker-ов под разные цели, сделав при этом заметно быстрее.
По итогу всех экспериментов на живых PR-ах получилась система с высокой полнотой. Ревьюер регулярно предлагал правки, которые разработчики считали полезными. Но на одно хорошее срабатывание приходилось много ложных, такой шум регулярно раздражал кожаных ревьюеров.
Что из моих поделок доехало до продукта уже не знаю, но Tessl недавно выпустил Tessl Agent, первая версия фабрики.
В мире Loop Engineering-а, где агент сам занимается эволюцией кодовой базы human review уже не имеет значения. А вот возможны ли такие фабрики в принципе – вопрос открытый. Среди стартаперов уже есть хайповые скептики. Посмотрите свежий доклад Harness Engineering is not Enough: Why Software Factories Fail если интересно.
В какой-то момент, как и многие стартапы, мы стали строить свою Software Factory (воркшоп от Курсора, если интересуетесь) с идей того, чтобы 0) cтать настоящей AI Native Dev компанией 1) еще быстрее шипить новый софт 2) продавать это другим.
Агентские код ревьюеры – это один из блоков такой фабрики, я и исследовал, какие существуют опции. Полигон для тестов – мои коллеги и их отзывы, исторические PR-ы с ревизиями, чтобы делать офлайн эвалы.
Начал я с коробчных решений. На слуху был Code Rabbit, шустрый грейдер, хорошо советовал на уровне файлов, отлавливая очевидный слоп. Но в общем-то на этом и все. Более сложные архитектурные вопросы он полностью игнорировал. Еще одна подобная штука - это Qodo, у них была интеграция с разными агентскими файлами (cursor rules, agents.md), но завести адекватно так и не смог
Другое коробочное решение – это Code Review от Claude Code. Вот это было прям хорошо: обшираная кастомизация (REVIEW.md для своих пожеланий, настраиваемые проверки для конкретного репозитория, калибровка severity). Работало правда как будто не обоснованно медленно, иногда ревьюер уходил в долгое изучения репозитория; крошечные изменения могли занимать 30 минут. В итоге очень большой расход токенов + лок ин на модели антропика. Запустить Claude Code + свои скиллы для ревью тоже пробовал, но получалось заметно хуже.
В идеале хотелось большего детерминированного контроля, возможности кастомизировать глубину ревью, и конечно поддержать разные модели. В общем по классике - надо писать свое.
Но писать c нуля для пилота мне не пришлось. Арсений, автор @partially_unsupervised в марте выложил в опенсоурс nitpicker, и быстро довел его до крайне полезной штуки. Большая мобильность, можно запускать не только на PR, но и просто на репе + интересующих файлах, чтобы мониторить состояние кодовой базы. Быстро я приблизился к качеству ревью от антропиков за счет запусков нескольких nitpicker-ов под разные цели, сделав при этом заметно быстрее.
По итогу всех экспериментов на живых PR-ах получилась система с высокой полнотой. Ревьюер регулярно предлагал правки, которые разработчики считали полезными. Но на одно хорошее срабатывание приходилось много ложных, такой шум регулярно раздражал кожаных ревьюеров.
Что из моих поделок доехало до продукта уже не знаю, но Tessl недавно выпустил Tessl Agent, первая версия фабрики.
В мире Loop Engineering-а, где агент сам занимается эволюцией кодовой базы human review уже не имеет значения. А вот возможны ли такие фабрики в принципе – вопрос открытый. Среди стартаперов уже есть хайповые скептики. Посмотрите свежий доклад Harness Engineering is not Enough: Why Software Factories Fail если интересно.
8🔥30👍8❤6⚡4🎉3🆒1
Это я интересно на новое место вышел.
Только пришел и сразу переезд в новый офис.
Сочный вид на город и центральный вокзал с террасы на крыше.
Еще и набор лего подарили. Воспроизведение культовой партии AlphaGo против Lee Sedol, где машина сделала тот самый ход 37.
Если кто не смотрел документальный фильм про альфа го, то к просмотру обязательно. Драма уровня праймового Нолана.
Некоторые место работы выбирают под впечатлением от увиденного.
Только пришел и сразу переезд в новый офис.
Сочный вид на город и центральный вокзал с террасы на крыше.
Еще и набор лего подарили. Воспроизведение культовой партии AlphaGo против Lee Sedol, где машина сделала тот самый ход 37.
Если кто не смотрел документальный фильм про альфа го, то к просмотру обязательно. Драма уровня праймового Нолана.
Некоторые место работы выбирают под впечатлением от увиденного.
10❤64🔥34👍9⚡4👏1🆒1
Небольшой анекдот-история, чтобы задать правильный ритм на неделю. А кому и настроение поднять
Наблюдал я как-то следующую ситуацию. Была у компании умная модель. И ее через кастомизированные харнессы (system prompts + тулы + конеткст) адаптировали к разным прикладным доменам.
Одна из задач была помочь оптмизировать работу фиансовых аналитиков. Техническая команда быстро собрала агентскую обвязку и добавила разных профильных тулов. Среди прочих были и более классические: bash с файловой системой и web_search
Чтобы померить качество своего агента, команда взяля набор открытых публичных бенчмарков, которые пересекались с реальными приложениями хотя бы на уровне инструментов.
Сделали прогоны. На каждый бенчмарк по 5 попыток решить задачу - все честно и с стат значимостью. Бэйзлайны других агентов/моделей гонять не стали – взяли открытые цифры. Получалась SOTA! На каждом бенчмарке! Где-то 15%, где-то и все 30%. Кто следит за лабами, тот знает всю эту кухню бенчмаксинга.
Большие цифры никого не смущали. Был проделан быстрый human expert анализ траекторий агентов на небольшом подмножестве сэмплов из каждого бенчмарка. Все клеилось. Агент просто хорош.
Стали готовить презентации, рисовать те самые заветные bar charts, показывая в каком далеком космосе новый агент.
Но все-таки бывалых инженеров что-то насторожило. Проделали еще один инженерный анализ. Выяснилось, что один из инструментов, web_search, так мощно работал, что когда агент решал его использовать, то в выдаче регулярно оказывались ссылки на...исходники бенчмарков! либо на гитхаб репозиторий, либо на hugging face, либо куда-то еще. Бенчи то опенсоурсные и все ответы лежат в открытом доступе! Стоит добавить, что не каждый поисковый движок такой сильный, чтобы глубоко индексировать интернет
Обнаружить такое было и правда не тривиально (без некоторых проверок на уровне эвала), потому что модель по-умному читерила. Понимала, что нашла ответ, но якобы проверяла себя, сначала «честно» пытаясь решить задачу, используя все валидные инструменты, а при не удаче, просто копируя ответ. Так траектории получались достаточно реалистичными.
Презентации свернули. Продакты краснели от негодования. Молодые рисерчеры краснели еще сильнее. Бывалые соколы оправдывали свое призвание бывалых.
Баги устранили, определенные веб домены были добавлены в исключения, агенту в системном пропмтпе запретели лазить по некоторым сайтам, а в рубрики валидаторов добавили проверку на рассуждения. Эксперимент был перезапущен.
Цифры стали скромнее. SOTA испарилась. Но на некоторых бенчах результаты все равно радовали глаз.
Проверйте результаты, вставляйте все возможные проверки, чтобы отловить читерство.
Наблюдал я как-то следующую ситуацию. Была у компании умная модель. И ее через кастомизированные харнессы (system prompts + тулы + конеткст) адаптировали к разным прикладным доменам.
Одна из задач была помочь оптмизировать работу фиансовых аналитиков. Техническая команда быстро собрала агентскую обвязку и добавила разных профильных тулов. Среди прочих были и более классические: bash с файловой системой и web_search
Чтобы померить качество своего агента, команда взяля набор открытых публичных бенчмарков, которые пересекались с реальными приложениями хотя бы на уровне инструментов.
Сделали прогоны. На каждый бенчмарк по 5 попыток решить задачу - все честно и с стат значимостью. Бэйзлайны других агентов/моделей гонять не стали – взяли открытые цифры. Получалась SOTA! На каждом бенчмарке! Где-то 15%, где-то и все 30%. Кто следит за лабами, тот знает всю эту кухню бенчмаксинга.
Большие цифры никого не смущали. Был проделан быстрый human expert анализ траекторий агентов на небольшом подмножестве сэмплов из каждого бенчмарка. Все клеилось. Агент просто хорош.
Стали готовить презентации, рисовать те самые заветные bar charts, показывая в каком далеком космосе новый агент.
Но все-таки бывалых инженеров что-то насторожило. Проделали еще один инженерный анализ. Выяснилось, что один из инструментов, web_search, так мощно работал, что когда агент решал его использовать, то в выдаче регулярно оказывались ссылки на...исходники бенчмарков! либо на гитхаб репозиторий, либо на hugging face, либо куда-то еще. Бенчи то опенсоурсные и все ответы лежат в открытом доступе! Стоит добавить, что не каждый поисковый движок такой сильный, чтобы глубоко индексировать интернет
Обнаружить такое было и правда не тривиально (без некоторых проверок на уровне эвала), потому что модель по-умному читерила. Понимала, что нашла ответ, но якобы проверяла себя, сначала «честно» пытаясь решить задачу, используя все валидные инструменты, а при не удаче, просто копируя ответ. Так траектории получались достаточно реалистичными.
Презентации свернули. Продакты краснели от негодования. Молодые рисерчеры краснели еще сильнее. Бывалые соколы оправдывали свое призвание бывалых.
Баги устранили, определенные веб домены были добавлены в исключения, агенту в системном пропмтпе запретели лазить по некоторым сайтам, а в рубрики валидаторов добавили проверку на рассуждения. Эксперимент был перезапущен.
Цифры стали скромнее. SOTA испарилась. Но на некоторых бенчах результаты все равно радовали глаз.
Проверйте результаты, вставляйте все возможные проверки, чтобы отловить читерство.
👍42😁9⚡8❤8🤣6🆒2👏1
🏎 Пост для для любителей контестов.
Цель конкурса: разработать систему, которая передает поток данных от одного источника нескольким получателям с минимальной задержкой. Добиться низкой задержки в среднем или на медиане можно достаточно стандартными приемами. А вот хардовая часть – сделать так, чтобы на высоких квантилях и под нагрузкой задержка ухудшалась минимально, даже когда растут объем передаваемых данных и количество получателей. В общем оптимизировать P99 (по своему опыту работы с low latency аудио моделями знаю как это тяжело).
Конкурс проводит Spectral::Technologies - команда занимается высокочастотным трейдингом (HFT), торгует на рынках по всему миру своими стратегиями. Чтобы чуть лучше дать понять, чем занимаются их инженеры – открыли одну из задач, которую решали сами, в формате соревнования.
Из прикольного. Вместе с участниками задачу будет решать и Claude Code. Его решение будет находиться в публичном доступе. Можно использовать как бэйзлайн и источник для вдохновения. Recursive Self-Improvement тема горячая, поэтому хорошая площадка для экспериментов по дизайну таких агентов. Экспертиза по распределенным сетям и прокачанный C++ тоже явно не помешают.
Оценивать будут распределение задержки, масштабируемость, корректность и воспроизводимость решения.
🏆 Бонусом хорошие призовые (участие индивидуально):
1 место – 6 000 USD gross
2 место – 3 600 USD gross
3 место – 2 400 USD gross
Авторам лучших работ – и не только участникам из топ-3 – предложат сокращенный трек найма на позиции C++ Software Engineer или AI Software Engineer. Платят ребята очень хорошо, вилки публичные (ссылка на блог на codeforces)
Дедлайн конкурса – 30 августа, 23:59 GMT+3
Регистрация и доступ к задаче через бота компании – @spectral_challenge_bot
Цель конкурса: разработать систему, которая передает поток данных от одного источника нескольким получателям с минимальной задержкой. Добиться низкой задержки в среднем или на медиане можно достаточно стандартными приемами. А вот хардовая часть – сделать так, чтобы на высоких квантилях и под нагрузкой задержка ухудшалась минимально, даже когда растут объем передаваемых данных и количество получателей. В общем оптимизировать P99 (по своему опыту работы с low latency аудио моделями знаю как это тяжело).
Конкурс проводит Spectral::Technologies - команда занимается высокочастотным трейдингом (HFT), торгует на рынках по всему миру своими стратегиями. Чтобы чуть лучше дать понять, чем занимаются их инженеры – открыли одну из задач, которую решали сами, в формате соревнования.
Из прикольного. Вместе с участниками задачу будет решать и Claude Code. Его решение будет находиться в публичном доступе. Можно использовать как бэйзлайн и источник для вдохновения. Recursive Self-Improvement тема горячая, поэтому хорошая площадка для экспериментов по дизайну таких агентов. Экспертиза по распределенным сетям и прокачанный C++ тоже явно не помешают.
Оценивать будут распределение задержки, масштабируемость, корректность и воспроизводимость решения.
🏆 Бонусом хорошие призовые (участие индивидуально):
1 место – 6 000 USD gross
2 место – 3 600 USD gross
3 место – 2 400 USD gross
Авторам лучших работ – и не только участникам из топ-3 – предложат сокращенный трек найма на позиции C++ Software Engineer или AI Software Engineer. Платят ребята очень хорошо, вилки публичные (ссылка на блог на codeforces)
Дедлайн конкурса – 30 августа, 23:59 GMT+3
Регистрация и доступ к задаче через бота компании – @spectral_challenge_bot
9🔥11🏆7❤3🍓2🌭1💋1
К слову о конкурсах. И почему в них круто участвовать.
Расскажу свою историю.
В 2018 году я учился на третьем курсе универа по компьютерной специальности. Мне точно нравилась идея карьеры в it, но чем именно я буду заниматься, толком не знал. К продакшн разработке c c# / java душа точно не лежала.
В свободное время я заглядывался на машинное обучение. К тому моменту уже прошел легендарный курс от ODS (Юра, привет!) и посматривал лекции на Coursera в специализации от МФТИ (какие же были времена!)
Очень нравилось как математические концепты трансформируются в какие-то обучающие алгоритмы, fit, predict, вжух вжух и можно предсказывать рейтинг фильма!
Тогда я точно решил, что буду стремиться попасть на какую-нибудь работу, где можно будет пощупать этот ML вживую и понять, мое или нет. Нужна была хоть какая-то практика, чтобы создать видимость опыта. И я стал смотреть на конкурсы. Но начать участвовать вот так с ходу было тяжело: ничего непонятно и страшно.
Мне очень повезло, что в этом же году проходил курс DMIA – бесплатной онлайн программы по анализу данных от Виктора Кантора. Я выбрал трек "Соревнования по Машинному Обучению", лекции вел Дмитрий Гущин (Дима, привет!), рассказывая разные трюки построения сильных ансамблей. А домашками были реальные конкурсы! Тот факт, что участвуешь не один, есть чат, где можно позадавать вопросы или почитать идей очень помогал побороть страх первого сабмита.
Одним из конкурсов было соревнование от Яндекса на их платформе для контестов. Если память не изменяет, то задача была от команды Алисы на ранжирование ответов модели (да, да, тогда до генеративного ИИ было еще далеко!). В моем арсенале навыков были только линейные модели на tf-idf, деревья решений, а также слабенький ноут. Нейронные сети, word2vec и нечто из обсуждений под названием DSSM были темным лесом. Поэтому, естественно, до высоких мест мне было далеко.
Я приземлился в районе 60 места. Это было немного, но это была честная работа. Я пыхтел над своими решениями и вкладывал весь скилл в подбор параметров на кросс-валидации. И всем кто финишировал в диапазоне выше определенного места дарили памятные сувениры. В том году это было поло с красивой эмблемой Контеста! В каком же восторге я был, что получилось что-то выиграть! Потом довольный ходил еще несколько лет в этом поло пока оно не стало совсем мало.
После конкурса меня прям потянуло в NLP и я стал еще активнее смотреть курсы, читать теорию и интересоваться темой. А первые стажировки оказалось найти не так уж и сложно. Той самой истории про мое решение с конкурса + что бы я сейчас сделал по-другому слихвой хватилона собеседованиях в тот же яндекс в том же самом году. Правда там я так и не поработал, выбрав тем летом стажировку в СКБ Контуре, где уже познакомился с кластеризациями и потрогал RNN-ы.
Расскажу свою историю.
В 2018 году я учился на третьем курсе универа по компьютерной специальности. Мне точно нравилась идея карьеры в it, но чем именно я буду заниматься, толком не знал. К продакшн разработке c c# / java душа точно не лежала.
В свободное время я заглядывался на машинное обучение. К тому моменту уже прошел легендарный курс от ODS (Юра, привет!) и посматривал лекции на Coursera в специализации от МФТИ (какие же были времена!)
Очень нравилось как математические концепты трансформируются в какие-то обучающие алгоритмы, fit, predict, вжух вжух и можно предсказывать рейтинг фильма!
Тогда я точно решил, что буду стремиться попасть на какую-нибудь работу, где можно будет пощупать этот ML вживую и понять, мое или нет. Нужна была хоть какая-то практика, чтобы создать видимость опыта. И я стал смотреть на конкурсы. Но начать участвовать вот так с ходу было тяжело: ничего непонятно и страшно.
Мне очень повезло, что в этом же году проходил курс DMIA – бесплатной онлайн программы по анализу данных от Виктора Кантора. Я выбрал трек "Соревнования по Машинному Обучению", лекции вел Дмитрий Гущин (Дима, привет!), рассказывая разные трюки построения сильных ансамблей. А домашками были реальные конкурсы! Тот факт, что участвуешь не один, есть чат, где можно позадавать вопросы или почитать идей очень помогал побороть страх первого сабмита.
Одним из конкурсов было соревнование от Яндекса на их платформе для контестов. Если память не изменяет, то задача была от команды Алисы на ранжирование ответов модели (да, да, тогда до генеративного ИИ было еще далеко!). В моем арсенале навыков были только линейные модели на tf-idf, деревья решений, а также слабенький ноут. Нейронные сети, word2vec и нечто из обсуждений под названием DSSM были темным лесом. Поэтому, естественно, до высоких мест мне было далеко.
Я приземлился в районе 60 места. Это было немного, но это была честная работа. Я пыхтел над своими решениями и вкладывал весь скилл в подбор параметров на кросс-валидации. И всем кто финишировал в диапазоне выше определенного места дарили памятные сувениры. В том году это было поло с красивой эмблемой Контеста! В каком же восторге я был, что получилось что-то выиграть! Потом довольный ходил еще несколько лет в этом поло пока оно не стало совсем мало.
После конкурса меня прям потянуло в NLP и я стал еще активнее смотреть курсы, читать теорию и интересоваться темой. А первые стажировки оказалось найти не так уж и сложно. Той самой истории про мое решение с конкурса + что бы я сейчас сделал по-другому слихвой хватилона собеседованиях в тот же яндекс в том же самом году. Правда там я так и не поработал, выбрав тем летом стажировку в СКБ Контуре, где уже познакомился с кластеризациями и потрогал RNN-ы.
❤37🆒9👍7⚡2🔥2🥴1🤝1