🐍 Python Gotcha: как правильно логировать необработанные исключения
В этой статье разбирают частую проблему: программа падает, но в логах — тишина. Необработанные исключения отправляются в stderr, а не в лог-файл, и вы не знаете, что пошло не так.
Пример кода:
📄 В логе:
❗ А сам ZeroDivisionError — только в консоли. Лог молчит.
✅ Решение — использовать sys.excepthook:
Теперь, если произойдёт ошибка, она попадёт в лог:
📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно
🔗 Подробнее
@pythonl
В этой статье разбирают частую проблему: программа падает, но в логах — тишина. Необработанные исключения отправляются в stderr, а не в лог-файл, и вы не знаете, что пошло не так.
Пример кода:
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)
def divide(a, b):
return a / b
def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")
if __name__ == "__main__":
main()
📄 В логе:
2025-07-24 12:00:00 __main__ INFO Start
❗ А сам ZeroDivisionError — только в консоли. Лог молчит.
✅ Решение — использовать sys.excepthook:
import sys
def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))
sys.excepthook = handle_uncaught_exception
Теперь, если произойдёт ошибка, она попадёт в лог:
CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно
🔗 Подробнее
@pythonl
❤12👍5🔥5
🐍 Продвинутый трюк в Python: свой `with` без классов
Хочешь выполнять код до и после блока
📌 До yield — код до with
📌 После yield — код после with
🔥 Это мощный способ:
- логировать действия,
- временно менять окружение (stdout, переменные, режимы),
- управлять ресурсами, не создавая классы.
@pythonl
Хочешь выполнять код до и после блока
with
, но не писать громоздкий класс с __enter__
и __exit__
? Используй @contextmanager
из contextlib
:
from contextlib import contextmanager
import time
@contextmanager
def timer(label="Block"):
start = time.time()
print(f"[{label}] Start")
try:
yield
finally:
end = time.time()
print(f"[{label}] End — elapsed: {end - start:.3f}s")
# Пример использования
with timer("Download step"):
time.sleep(1.2)
📌 До yield — код до with
📌 После yield — код после with
🔥 Это мощный способ:
- логировать действия,
- временно менять окружение (stdout, переменные, режимы),
- управлять ресурсами, не создавая классы.
@pythonl
❤11🔥7👍5
📦 Гайд: “The Step-by-Step Guide to Python Packaging Tools 2025”
Python-инфраструктура сильно изменилась.
Выбор между
В этом гайде сравниваются 6 ключевых инструментов, каждый со своими сильными и слабыми сторонами:
1️⃣ uv — самый быстрый и универсальный (написан на Rust)
✅ До 100× быстрее pip
✅ Объединяет pip, virtualenv и pip-tools
✅ Поддержка PyPI-паблишинга и Python-менеджмента
📌 Выбор для CI/CD и monorepo-проектов
2️⃣ Poetry 2 — стандарт для библиотек и модульных приложений
✅ Поддержка semantic versioning, lock-файлов, плагинов
✅ Отлично подходит для open source
📌 Идеален для reproducible builds и PyPI
3️⃣ Hatch — “Cargo для Python”
✅ Поддержка матриц окружений, monorepo, хуков
✅ Интеграция с uv для скорости
📌 Выбор для сложных enterprise-проектов и тестовых фреймворков
4️⃣ PDM — стандартизированный менеджер без virtualenv
✅ Поддержка PEP 582 (__pypackages__), PEP 621
✅ Изоляция без виртуалок, удобен для прототипов
📌 Подходит для rapid dev и экспериментальных сборок
5️⃣ Pipenv — простой интерфейс для приложений
✅ Pipfile, auto-venv, чистый CLI
📌 Хорош для небольших проектов и начинающих
6️⃣ pip — классика
✅ Совместим везде, гибкий
❌ Нет lock-файлов, окружений, требует внешних тулов
📌 Решение для легаси-проектов или скриптов
💡 Выводы:
• uv — лучший выбор для скорости, CI и автоматизации
• Poetry — стандарт для библиотек, особенно с open source
• Hatch — для сложных проектов и продвинутых пайплайнов
• PDM — для быстрой разработки и современных стандартов
• Pipenv — простой, но морально устарел
• pip — базовый минимум, но требует ручной сборки обвязки
Если ты:
🔹 Собираешь ML‑пайплайн → смотри в сторону uv + Hatch
🔹 Работаешь над библиотекой → Poetry 2 будет логичным выбором
🔹 Строишь монорепу или сложный фреймворк → Hatch + workspace
🔹 Пишешь простые скрипты или MVP → подойдёт PDM или Pipenv
🔗 Полный гайд
@pythonl
Python-инфраструктура сильно изменилась.
Выбор между
pip
, poetry
, uv
, hatch
, pdm
и др. — это уже не просто "pip install", а стратегическое решение.В этом гайде сравниваются 6 ключевых инструментов, каждый со своими сильными и слабыми сторонами:
1️⃣ uv — самый быстрый и универсальный (написан на Rust)
✅ До 100× быстрее pip
✅ Объединяет pip, virtualenv и pip-tools
✅ Поддержка PyPI-паблишинга и Python-менеджмента
📌 Выбор для CI/CD и monorepo-проектов
2️⃣ Poetry 2 — стандарт для библиотек и модульных приложений
✅ Поддержка semantic versioning, lock-файлов, плагинов
✅ Отлично подходит для open source
📌 Идеален для reproducible builds и PyPI
3️⃣ Hatch — “Cargo для Python”
✅ Поддержка матриц окружений, monorepo, хуков
✅ Интеграция с uv для скорости
📌 Выбор для сложных enterprise-проектов и тестовых фреймворков
4️⃣ PDM — стандартизированный менеджер без virtualenv
✅ Поддержка PEP 582 (__pypackages__), PEP 621
✅ Изоляция без виртуалок, удобен для прототипов
📌 Подходит для rapid dev и экспериментальных сборок
5️⃣ Pipenv — простой интерфейс для приложений
✅ Pipfile, auto-venv, чистый CLI
📌 Хорош для небольших проектов и начинающих
6️⃣ pip — классика
✅ Совместим везде, гибкий
❌ Нет lock-файлов, окружений, требует внешних тулов
📌 Решение для легаси-проектов или скриптов
💡 Выводы:
• uv — лучший выбор для скорости, CI и автоматизации
• Poetry — стандарт для библиотек, особенно с open source
• Hatch — для сложных проектов и продвинутых пайплайнов
• PDM — для быстрой разработки и современных стандартов
• Pipenv — простой, но морально устарел
• pip — базовый минимум, но требует ручной сборки обвязки
Если ты:
🔹 Собираешь ML‑пайплайн → смотри в сторону uv + Hatch
🔹 Работаешь над библиотекой → Poetry 2 будет логичным выбором
🔹 Строишь монорепу или сложный фреймворк → Hatch + workspace
🔹 Пишешь простые скрипты или MVP → подойдёт PDM или Pipenv
🔗 Полный гайд
@pythonl
❤12🔥6👍4😢1
This media is not supported in your browser
VIEW IN TELEGRAM
🧹 ObjectClear — инструмент для удаления объектов с изображений с помощью ИИ
Что умеет:
🖼 Загружаешь изображение
🎯 Выделяешь объект, который хочешь убрать
✨ Модель автоматически удаляет его и восстанавливает фон
Под капотом:
— Segment Anything (SAM) от Meta для выделения объекта
— Inpaint-Anything для генерации фона
— Поддержка работы в браузере (Gradio UI)
Можно запускать локально. Всё open-source.
📎 GitHub: https://github.com/zjx0101/ObjectClear
@pythonl
Что умеет:
🖼 Загружаешь изображение
🎯 Выделяешь объект, который хочешь убрать
✨ Модель автоматически удаляет его и восстанавливает фон
Под капотом:
— Segment Anything (SAM) от Meta для выделения объекта
— Inpaint-Anything для генерации фона
— Поддержка работы в браузере (Gradio UI)
Можно запускать локально. Всё open-source.
📎 GitHub: https://github.com/zjx0101/ObjectClear
@pythonl
🔥12❤8👍6
⚡️ Почему лучшие разработчики всегда на шаг впереди?
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.me/ai_machinelearning_big_data
Python: t.me/python_job_interview
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🖥 Chatgpt для кода в тг: @Chatgpturbobot -
📕Ит-книги: https://yangx.top/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.me/ai_machinelearning_big_data
Python: t.me/python_job_interview
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
📕Ит-книги: https://yangx.top/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🔥2
🔥 Нашёл 100% open-source AI-агента для задач в разработке ПО!
ByteDance выпустили Trae Agent — LLM-агент для автоматизации задач в области программной инженерии.
✅ Планирование и использование инструментов из коробки
✅ Умеет рефакторить, дебажить, разбираться в коде
✅ Полностью автономный
✅ Абсолютно открытый код
Отличная база, если вы строите что-то с AI.
https://github.com/bytedance/trae-agent
@pythonl
ByteDance выпустили Trae Agent — LLM-агент для автоматизации задач в области программной инженерии.
✅ Планирование и использование инструментов из коробки
✅ Умеет рефакторить, дебажить, разбираться в коде
✅ Полностью автономный
✅ Абсолютно открытый код
Отличная база, если вы строите что-то с AI.
git clone https://github.com/bytedance/trae-agent.git
cd trae-agent
uv venv
uv sync --all-extras
https://github.com/bytedance/trae-agent
@pythonl
🔥9❤7👍4
E-CUP возвращается. Реальные данные. Масштабные проекты. Большие призы
Решайте ML-задачи в стиле Ozon Tech. Девять победителей разделят призовой фонд соревнования — 7 200 000 рублей 🔥
Тест-драйв работы в e-com бигтехе стартует здесь.
🗓 Регистрация: https://cnrlink.com/ecup25pythondjango
💻 Формат участия: онлайн
👥 Команда: от 1 до 5 человек
🎯 Для кого: Data Scientists, ML-специалисты, аналитики данных, дата-инженеры, специалисты Big Data и разработчики, которые интересуются ML/DS.
Что вас ждёт:
🔹 Работа над проектом для миллионов пользователей на основе данных от ведущего e-com в России.
🔹 Обмен опытом с экспертами Ozon Tech.
🔹 Эксклюзивный мерч для победителей и подарки для самых активных участников.
🔹 Питчинг — 13 сентября на конференции E-CODE. Ozon Tech предоставит финалистам билеты и оплатит поездку.
Три трека E-CUP:
1️⃣ Рекомендации: предсказание следующей покупки пользователя
2️⃣ Логистика: автопланирование курьеров
3️⃣ Контроль качества: автоматическое выявление поддельных товаров
Регистрация на платформе Codenrock: https://cnrlink.com/ecup25pythondjango
Решайте ML-задачи в стиле Ozon Tech. Девять победителей разделят призовой фонд соревнования — 7 200 000 рублей 🔥
Тест-драйв работы в e-com бигтехе стартует здесь.
Что вас ждёт:
🔹 Работа над проектом для миллионов пользователей на основе данных от ведущего e-com в России.
🔹 Обмен опытом с экспертами Ozon Tech.
🔹 Эксклюзивный мерч для победителей и подарки для самых активных участников.
🔹 Питчинг — 13 сентября на конференции E-CODE. Ozon Tech предоставит финалистам билеты и оплатит поездку.
Три трека E-CUP:
Регистрация на платформе Codenrock: https://cnrlink.com/ecup25pythondjango
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥1🎉1
💡 Хотите, чтобы
print()
не мешал логике и при этом легко отключался или сохранялся в файл?Вместо того чтобы комментировать все
print()
в проде, подмените стандартный вывод через контекстный менеджер — и легко направляйте вывод в файл, /dev/null или даже буфер для последующей обработки.Это особенно полезно при отладке в прод-среде или при генерации логов без сторонних библиотек.
import sys
from contextlib import contextmanager
from io import StringIO
import os
@contextmanager
def capture_stdout(to_file=None, suppress=False):
original_stdout = sys.stdout
try:
if suppress:
sys.stdout = open(os.devnull, 'w')
elif to_file:
sys.stdout = open(to_file, 'w')
else:
buffer = StringIO()
sys.stdout = buffer
yield sys.stdout
finally:
sys.stdout.close() if sys.stdout not in (original_stdout, sys.__stdout__) else None
sys.stdout = original_stdout
# Пример использования:
with capture_stdout(suppress=True):
print("Этого вы не увидите")
with capture_stdout(to_file="output.log"):
print("А это уйдёт в файл")
with capture_stdout() as captured:
print("Это записано во внутренний буфер")
print("Буфер содержит:", captured.getvalue().strip())
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤7🔥4😁3
This media is not supported in your browser
VIEW IN TELEGRAM
🌐 BrowserOS — операционная система внутри браузера на базе AI
BrowserOS — это экспериментальный проект, превращающий браузер в полноценную AI‑среду с "живущими" агентами. По сути, это OS-слой внутри вкладки браузера, где ИИ-агенты могут взаимодействовать с интерфейсами как пользователи.
🧠 Основные идеи:
— Агент может кликать, печатать, читать и взаимодействовать с окнами внутри браузера
— Поддержка многозадачности: можно открыть несколько окон, как в реальной ОС
— Простое API для создания интерфейсов и запуска ИИ-агентов
— Можно подключать LLM и наделять их возможностью выполнять действия
📦 Особенности:
— UI построен на React
— Использует WebAssembly и Web Workers
— Позволяет тестировать и запускать агента в контролируемой "песочнице"
💡 Подходит для:
— Исследований в области AI-агентов
— Прототипирования мультимодальных систем
— Демонстрации взаимодействия LLM с интерфейсами
🔗 GitHub
@pythonl
BrowserOS — это экспериментальный проект, превращающий браузер в полноценную AI‑среду с "живущими" агентами. По сути, это OS-слой внутри вкладки браузера, где ИИ-агенты могут взаимодействовать с интерфейсами как пользователи.
🧠 Основные идеи:
— Агент может кликать, печатать, читать и взаимодействовать с окнами внутри браузера
— Поддержка многозадачности: можно открыть несколько окон, как в реальной ОС
— Простое API для создания интерфейсов и запуска ИИ-агентов
— Можно подключать LLM и наделять их возможностью выполнять действия
📦 Особенности:
— UI построен на React
— Использует WebAssembly и Web Workers
— Позволяет тестировать и запускать агента в контролируемой "песочнице"
💡 Подходит для:
— Исследований в области AI-агентов
— Прототипирования мультимодальных систем
— Демонстрации взаимодействия LLM с интерфейсами
🔗 GitHub
@pythonl
👍6❤5🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Многие проекты тянут за собой ненужные зависимости, особенно после десятков итераций.
С помощью vulture ты можешь найти неиспользуемый код и импорты — и легко вычистить проект от мусора.
Установка vulture
pip install vulture
Поиск неиспользуемого кода и импортов
vulture your_project/ > unused.txt
Пример: посмотреть, что не используется
cat unused.txt
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤6👍6
🔥 WaterCrawl — продвинутая платформа для веб-краулинга и подготовки данных под LLM
Если нужно собрать и структурировать контент с сайтов для ИИ — это мощный инструмент.
🧠 В основе:
— Django + Scrapy + Celery
— Асинхронный краулинг, API и UI
— Скриншоты, PDF, JS-рендер, SSE
🚀 Возможности:
— Быстрый запуск через Docker (`docker compose up`)
— Интеграции с Dify, n8n, Langflow
— Пакетная отправка запросов через REST API
— SDK для Python, Go, Node, PHP
⚙️ Репозитории
@pythonl
Если нужно собрать и структурировать контент с сайтов для ИИ — это мощный инструмент.
🧠 В основе:
— Django + Scrapy + Celery
— Асинхронный краулинг, API и UI
— Скриншоты, PDF, JS-рендер, SSE
🚀 Возможности:
— Быстрый запуск через Docker (`docker compose up`)
— Интеграции с Dify, n8n, Langflow
— Пакетная отправка запросов через REST API
— SDK для Python, Go, Node, PHP
⚙️ Репозитории
@pythonl
❤8👍4🔥3
Новость для тех, кто хочет строить карьеру в computer science
Яндекс Образование вместе с Неймарком и ФКН ВШЭ организуют студкемп в Нижнем Новгороде на тему компьютерного зрения.
🔹 Интенсивная теория: лекции и семинары от Яндекса, Неймарка, ФКН ВШЭ, личное общение со специалистами
🔹 Практическая часть: командные проекты и работа над навыками создания и внедрения компьютерного зрения в автономные системы и робототехнику.
Участие в студкемпе бесплатно, но есть отбор. Победителям организаторы оплатят дорогу и проживание. Регистрация до 14 августа, по ссылке.
Яндекс Образование вместе с Неймарком и ФКН ВШЭ организуют студкемп в Нижнем Новгороде на тему компьютерного зрения.
🔹 Интенсивная теория: лекции и семинары от Яндекса, Неймарка, ФКН ВШЭ, личное общение со специалистами
🔹 Практическая часть: командные проекты и работа над навыками создания и внедрения компьютерного зрения в автономные системы и робототехнику.
Участие в студкемпе бесплатно, но есть отбор. Победителям организаторы оплатят дорогу и проживание. Регистрация до 14 августа, по ссылке.
❤2😁1
🆕 В pyfonts — мощное обновление!
Теперь можно задать глобальный шрифт по умолчанию — и он применится ко всем текстам автоматически.
Больше не нужно вручную проставлять font в каждом элементе 🎯
Идеально для проектов с единой визуальной стилистикой — экономит кучу времени и кода.
🔥 Фичу реализовал John Gardner — спасибо!
Ждём фидбек, звёзды и предложения ✨
📦 GitHub: http://github.com/JosephBARBIERDARNAL/pyfonts
@pythonl
Теперь можно задать глобальный шрифт по умолчанию — и он применится ко всем текстам автоматически.
Больше не нужно вручную проставлять font в каждом элементе 🎯
Идеально для проектов с единой визуальной стилистикой — экономит кучу времени и кода.
🔥 Фичу реализовал John Gardner — спасибо!
Ждём фидбек, звёзды и предложения ✨
📦 GitHub: http://github.com/JosephBARBIERDARNAL/pyfonts
@pythonl
1🔥3❤2😢2
Чтобы получить все уникальные пары элементов из списка, вовсе не обязательно писать громоздкие вложенные циклы. Python предоставляет модуль itertools, который содержит готовые инструменты для таких задач.
Например, для списка
Функция combinations берёт на вход итерируемый объект и размер комбинации.
В нашем случае размер равен 2, поэтому мы получаем все возможные неупорядоченные пары без повторов.
Это решение не только короче, но и легче читается. Пользуйтесь библиотекой itertools, чтобы избавляться от рутины и писать более чистый код!
@pythonl
Например, для списка
features = ['price', 'size', 'rating']
можно написать так:
from itertools import combinations
pairs = list(combinations(features, 2))
print(pairs) # [('price', 'size'), ('price', 'rating'), ('size', 'rating')]
Функция combinations берёт на вход итерируемый объект и размер комбинации.
В нашем случае размер равен 2, поэтому мы получаем все возможные неупорядоченные пары без повторов.
Это решение не только короче, но и легче читается. Пользуйтесь библиотекой itertools, чтобы избавляться от рутины и писать более чистый код!
@pythonl
❤19👍4🔥2🤩2
Transfunctions — это инструмент для создания чистых, переиспользуемых и управляемых пайплайнов из функций. Подходит для задач, где нужно чётко контролировать каждый шаг выполнения.
Что такое транзакционные функции?
Это функции, которые:
• имеют чёткое начало и откат (rollback) — как в базах данных
• могут быть объединены в цепочки, где каждая часть знает, как отменить свои действия
• обрабатывают ошибки и контекст централизованно
• позволяют писать бизнес-логику без дублирования и хаоса
Что умеет Transfunctions:
• Объединение функций в контролируемые пайплайны
• Поддержка отката и логирования
• Контекстное выполнение (например, сессии, транзакции, данные)
• Минимум шаблонного кода
Подходит для ETL, финансовых операций, инфраструктурных обработчиков и сценариев с проверками и откатами.
pip install transfunctions
🔗 GitHub: https://github.com/pomponchik/transfunctions
#python #pipeline #transactions #opensource #architecture
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥2🤩1
Forwarded from Machinelearning
LangExtract - опенсорсная python-библиотека с функцией легковесного интерфейса к LLM, которая превращает большие объемы текста в структурированные данные.
Каждая извлеченная сущность, будь то имя, дата или дозировка лекарства, привязывается к точным символьным смещениям в исходном тексте. Это дает полную прослеживаемость и верифицируемость результата, просто подсветив найденные данные в оригинальном документе. Больше никаких «откуда модель это взяла?».
Вы определяете желаемый формат вывода с помощью специального представления данных и даете модели несколько примеров . Используя эти примеры, LangExtract следует заданной схеме, задействуя механизм контролируемой генерации, который поддерживается в моделях Gemini. Это гарантирует, что на выходе вы всегда будете получать данные в консистентном, предсказуемом формате.
Библиотека умеет бить текст на чанки, которые обрабатываются параллельно в несколько проходов, каждый из которых фокусируется на более узком контексте.
Для наглядности библиотека умеет генерировать интерактивную и полностью автономную HTML-визуализацию. Это позволяет за считаные минуты перейти от сырого текста к визуальному представлению, где можно исследовать тысячи извлеченных аннотаций.
При этом LangExtract не замыкается на экосистеме Google: он поддерживает гибкую смену LLM-бэкендов, позволяя работать как с облачными моделями, так и с опенсорсными решениями, развернутыми локально.
Информация может быть как явной (извлеченной из текста), так и основанной на внутренних знаниях модели. Разумеется, точность таких выведенных данных сильно зависит от возможностей конкретной LLM и качества предоставленных примеров в промпте.
Изначально идеи, заложенные в LangExtract, были применены для извлечения информации из медицинских текстов. Библиотека отлично справляется с идентификацией лекарств, их дозировок и других атрибутов в клинических записях.
Чтобы продемонстрировать возможности инструмента в узкоспециализированной области, Google создал на Hugging Face интерактивное демо RadExtract. В нем показано, как LangExtract может обработать радиологический отчет, написанный свободным текстом, и автоматически преобразовать его ключевые выводы в структурированный формат, подсвечивая важные находки.
@ai_machinelearning_big_data
#AI #ML #LangExtract #Google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍2
⚡️ Ускорь проверку качества кода в 10 раз с помощью pre-commit!
В серьезных проектах чистота и стиль кода — но ручные проверки отнимают кучу времени, которое лучше потратить на анализ данных.
💡 Решение: автоматизируй всё с помощью pre-commit хуков — и пусть код проверяется сам перед каждым коммитом.
😬 Без pre-commit:
Вы коммитите код — всё выглядит нормально.
Но потом на ревью находят кучу мелочей:
✖️ Нет type hints
✖️ Форматирование пляшет
✖️ Отсутствует docstring
✖️ Импорты в разнобой
🤖 С pre-commit всё иначе:
Перед коммитом автоматически запускается
✅ Код отформатирован
✅ Стиль и правила соблюдены
✅ Меньше замечаний на ревью
💡 Один раз настроил — и больше не паришься с форматированием вручную.
Идеально для любого Python-проекта.
@pythonl
В серьезных проектах чистота и стиль кода — но ручные проверки отнимают кучу времени, которое лучше потратить на анализ данных.
💡 Решение: автоматизируй всё с помощью pre-commit хуков — и пусть код проверяется сам перед каждым коммитом.
😬 Без pre-commit:
Вы коммитите код — всё выглядит нормально.
Но потом на ревью находят кучу мелочей:
✖️ Нет type hints
✖️ Форматирование пляшет
✖️ Отсутствует docstring
✖️ Импорты в разнобой
🤖 С pre-commit всё иначе:
Перед коммитом автоматически запускается
ruff format
и ruff check
:✅ Код отформатирован
✅ Стиль и правила соблюдены
✅ Меньше замечаний на ревью
💡 Один раз настроил — и больше не паришься с форматированием вручную.
Идеально для любого Python-проекта.
@pythonl
❤10👍4🔥4