<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PyCharm : The only Python IDE you need. | The JetBrains Blog</title>
	<atom:link href="https://blog.jetbrains.com/pycharm/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.jetbrains.com</link>
	<description>Developer Tools for Professionals and Teams</description>
	<lastBuildDate>Tue, 21 Jul 2026 16:03:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.jetbrains.com/wp-content/uploads/2024/01/cropped-mstile-310x310-1-32x32.png</url>
	<title>PyCharm : The only Python IDE you need. | The JetBrains Blog</title>
	<link>https://blog.jetbrains.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>What’s New in PyCharm 2026.2</title>
		<link>https://blog.jetbrains.com/pycharm/2026/07/what-s-new-in-pycharm-2026-2/</link>
		
		<dc:creator><![CDATA[Ilia Afanasiev]]></dc:creator>
		<pubDate>Tue, 21 Jul 2026 15:53:12 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/PC-releases-BlogSocialShare-1280x720-1-2.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=723952</guid>

					<description><![CDATA[In PyCharm 2026.2, you can build Python extensions with the new Rust plugin and debug them using debugpy, which is now the default engine. Running external utilities is now managed through a redesigned settings UI for uvx, while multi-project setups are supported out of the box for uv, Poetry, and Hatch workspaces. This release also [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In PyCharm 2026.2, you can build Python extensions with the new Rust plugin and debug them using debugpy, which is now the default engine. Running external utilities is now managed through a redesigned settings UI for <code>uvx</code>, while multi-project setups are supported out of the box for uv, Poetry, and Hatch workspaces. This release also introduces an editor minimap, integrates the Pyrefly engine for faster type insights, adds AI project generation, and more.</p>


    <div class="buttons">
        <div class="buttons__row">
                                                <a href="https://www.jetbrains.com/pycharm/whatsnew/" class="btn" target="" rel="noopener">Read the full What&#8217;s New</a>
                                                    </div>
    </div>







<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="What&#039;s New in PyCharm 2026.2" src="https://www.youtube.com/embed/pQNecZTlyq4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 class="wp-block-heading">Python extension development with the Rust plugin [Beta][Pro]</h3>



<p>Work seamlessly with Python projects that leverage Rust modules to speed up performance-critical components.</p>



<h3 class="wp-block-heading">debugpy as the default debugger</h3>



<p>Following its introduction as an optional backend in 2026.1, debugpy is now enabled by default for all Python projects and Jupyter notebooks, using the Debug Adapter Protocol (DAP).</p>



<h3 class="wp-block-heading">Support for uv-backed tools and <code>uvx</code></h3>



<p>PyCharm now leverages the uv toolchain to streamline how you run your external development utilities, eliminating manual package setups that clutter your local environment.</p>



<h3 class="wp-block-heading">Support for uv, Poetry, and Hatch multi-projects and uv workspaces [Beta]</h3>



<p>Previously available as an <a href="https://blog.jetbrains.com/pycharm/2026/05/support-for-uv-poetry-and-hatch-workspaces-beta/">optional feature in PyCharm 2026.1.1</a>, this functionality is enabled by default in version 2026.2. It streamlines your subproject management and provides richer dependency insights directly within your configuration files.&nbsp;</p>



<h3 class="wp-block-heading">Editor minimap</h3>



<p>Navigate complex source files and notebooks more efficiently with the official editor minimap. It provides a high-level visual overview of your document structure across all supported file types – while offering a dedicated layout built just for Jupyter notebooks.</p>



<h3 class="wp-block-heading">Pyrefly type engine integration</h3>



<p>Use Pyrefly as an external type engine to significantly accelerate code insight features for large-scale Python codebases.</p>



<h3 class="wp-block-heading">Start new projects with AI</h3>



<p>If you have a JetBrains AI license, you can now generate fully configured, runnable projects from scratch using natural language prompts directly from the Welcome screen.</p>



<h3 class="wp-block-heading">Agent skills manager</h3>



<p>AI agents are only as useful as the context they have. When they don’t have knowledge of your frameworks, conventions, and tooling, you end up re-explaining the same setup in every new chat window.</p>



<p>Agent skills fix that. Install them once in PyCharm, and your agents carry that domain knowledge across every project and session – automatically. Browse and manage skills directly from the IDE, expand the built-in library with external registries like public GitHub repositories, or let PyCharm import skills you’ve already set up for Claude Code or Codex.&nbsp;</p>


    <div class="buttons">
        <div class="buttons__row">
                                                <a href="https://www.jetbrains.com/pycharm/whatsnew/" class="btn" target="" rel="noopener">Read the full What&#8217;s New</a>
                                                    </div>
    </div>




]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Best Object Detection Models for Machine Learning in 2026</title>
		<link>https://blog.jetbrains.com/pycharm/2026/07/best-object-detection-models-for-machine-learning-in-2026/</link>
		
		<dc:creator><![CDATA[Arina Belova]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 17:51:48 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/PC-social-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[data-science]]></category>
		<category><![CDATA[object-detection]]></category>
		<category><![CDATA[yolo]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=717397</guid>

					<description><![CDATA[Object detection powers transformative applications, from autonomous vehicles navigating city streets and security systems identifying threats in real time to retail analytics tracking inventory and medical imaging detecting tumors. But choosing the right model for your computer vision project can be challenging, especially with dozens of architectures claiming superiority across different metrics. In this guide, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Object detection powers transformative applications, from autonomous vehicles navigating city streets and security systems identifying threats in real time to retail analytics tracking inventory and medical imaging detecting tumors. But choosing the right model for your computer vision project can be challenging, especially with dozens of architectures claiming superiority across different metrics.</p>



<p>In this guide, we’ll examine the top object detection models available in 2026, comparing their architectures, performance characteristics, and ideal use cases to help you determine which models are best suited to your applications.&nbsp;</p>



<p>Whether you&#8217;re building real-time video analytics, high-precision inspection systems, or resource-constrained edge applications, you&#8217;ll find clear guidance on which model best fits your requirements.</p>



<h2 class="wp-block-heading" id="what-is-object-detection"><strong>What is object detection?</strong></h2>



<p>Object detection aims to <strong>identify</strong> and <strong>localize</strong> multiple objects within images or video frames. Unlike image classification, which only classifies the broad identity of an image, object detection identifies the objects in an image/video frame and their exact positions within it.<br>In a nutshell, object detection solves <strong>two interdependent problems</strong>:</p>



<ul class="wp-block-list">
<li><strong>Localizing (detecting) the objects on the image</strong>, by drawing the bounding boxes for the objects on the image (it is possible that there are zero objects!). A bounding box is usually defined as a tuple (x, y, h, w), where x and y are the top-left coordinates of the bounding box rectangle, and h and w are the height and width of the bounding box, respectively.&nbsp;</li>



<li><strong>Classifying the identities of these images</strong> (like a person, car, or dog).</li>
</ul>



<p>This dual capability makes object detection more complex than classification alone, requiring models that can handle multiple objects of different sizes appearing anywhere in an image.</p>



<p>As with classification tasks, a simple accuracy metric is not sufficient to assess model performance. We need metrics of two types. Firstly, <strong>performance metrics</strong> that gauge the trade-off between incorrectly detecting objects (false positives) and not detecting objects at all in the image when they were present (false negatives). Secondly, we also need metrics to assess how long it will take our model to perform the task in question: We will call these <strong>compute efficiency metrics. </strong>Usually, the new architectures for object detection are benchmarked on the validation partition of the <a href="https://cocodataset.org/#home" target="_blank" rel="noopener">COCO</a> dataset and run on T4 NVIDIA GPU hardware.</p>



<p>Here are the standard metrics used in the object detection community:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Basic building block of performance metric: Intersection over union (IoU)</strong> is the foundational geometric measure used to decide whether a predicted bounding box is correct. It is calculated as the area of overlap between the predicted box and the ground-truth box, divided by the area of their union – producing a score between 0 (no overlap) and 1 (perfect match). A detection is counted as a true positive only if its IoU with the nearest ground-truth box exceeds a chosen threshold (e.g. 0.5). A low IoU threshold is lenient about box placement; a high one demands tight localization.</li>



<li><strong>Performance metric: Mean average precision</strong> (mAP), which evaluates detection accuracy by measuring how well predicted boxes overlap with ground truth annotations across different confidence thresholds. The most commonly cited variant, <strong>mAP@[50:95]</strong> (also written AP50:95), averages precision over IoU thresholds from 0.50 to 0.95 in steps of 0.05, which is a stringent measure that penalizes imprecise localization as much as missed detections.
<ul class="wp-block-list">
<li><strong>mAP50 vs. mAP50:95:</strong> mAP50 measures detection at IoU ≥ 0.5 and scores appear higher, favoring faster models. mAP50:95 averages across IoU thresholds 0.5–0.95 – the stricter, preferred metric. For precision-critical applications (robotics, medical), it is common to optimize for mAP50:95.</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><strong>Compute efficiency metric: Frames per second</strong> (FPS), which measures inference speed, determining whether a model can process video in real-time. For standard videos, real-time is defined as &gt;= 30 FPS (Google or original YOLO paper) or latency &lt;= 33.3ms (1/FPS * 1000). Naturally, for such applications as self-driving cars or robotics, there are higher requirements on the FPS rate, going up as high as 60–100+ FPS.</li>



<li><strong>Compute efficiency metric: Parameter count </strong>is a quality of the model that influences its performance. There is a trade-off between the model&#8217;s accuracy and its parameter count. That&#8217;s why models are provided in different sizes of the same architecture (S, M, L, XL, etc.) to cater to various scenarios of this trade-off. This is similar to the concept of parameter count in LLMs.</li>
</ul>



<p>There are a few popular choices of datasets to evaluate the performance of object detection models. As mentioned above, the standard choice for benchmarking object detection is the<strong> </strong><a href="https://cocodataset.org/#home" target="_blank" rel="noopener"><strong>COCO dataset</strong></a>, containing 80 object categories across 330,000 images. Naturally, there are a lot of other datasets, specialized for certain domains, such as self-driving cars, or certain scenarios, such as the detection of objects in cluttered environments. What is important to remember is that the values of object detection metrics, IoU, and mAP depend on the dataset they were evaluated on, so mAP@[50:95]=60.1 on the COCO dataset may not be directly transferable to your custom dataset. These metrics should always be re-evaluated on your dataset to define the baseline performance of the models on it.</p>



<h2 class="wp-block-heading" id="object-detection-algorithms-and-architecture-families"><strong>Object detection algorithms and architecture families</strong></h2>



<p>Object detection models fall into two different processing flows and two different architectural families.</p>



<h3 class="wp-block-heading" id="architectures">Architectures</h3>



<h4 class="wp-block-heading" id="cnn-based"><strong>CNN-based</strong></h4>



<p><strong>Examples: </strong>Faster R-CNN, Mask R-CNN, Cascade R-CNN, YOLO</p>



<p>CNN-based detectors rely on convolutional layers to extract local features hierarchically across the image, traditionally using predefined anchor boxes as spatial priors for localizing objects. Spatial priors are predefined assumptions about where and what size objects are likely to appear in an image, giving the model a starting point for detection rather than searching randomly.</p>



<h4 class="wp-block-heading" id="transformer-based">Transformer-based</h4>



<p><strong>Examples: </strong>RF-DETR, RT-DETR, D-FINE</p>



<p>Transformer-based detectors, inspired by advances in natural language processing, instead apply global self-attention mechanisms that allow the model to reason about relationships across the entire image simultaneously.</p>



<p>Specifically, transformer-based detectors use learned object queries and global self-attention, where each query is trained to correspond to at most one object, unlike CNN-based detectors, which build spatial understanding locally through convolutional layers with limited receptive fields.</p>



<p>However, in modern architectures, there exists a fusion of the two architectures: a CNN network can use self-attention modules in its architecture, such as YOLOv12 or YOLOv13, leading to cross-architectural designs.</p>



<h3 class="wp-block-heading" id="processing-flows">Processing flows</h3>



<h4 class="wp-block-heading" id="two-stage-detectors">Two-stage detectors</h4>



<p><strong>Examples:</strong> Faster R-CNN, Mask R-CNN, Cascade R-CNN</p>



<p>The network makes two sequential passes, each with a distinct job:</p>



<ul class="wp-block-list">
<li><strong>Stage 1</strong>: Region Proposal:
<ul class="wp-block-list">
<li>Scans the image and proposes ~1000–2000 candidate regions (RoIs) that might contain objects.</li>



<li>Doesn&#8217;t care about class yet, just the fact that &#8220;something interesting is here&#8221;.</li>



<li>This is the region proposal network (RPN) in classic detectors</li>
</ul>
</li>



<li><strong>Stage 2:</strong> RoI classification and refinement:
<ul class="wp-block-list">
<li>Takes only the proposed regions from Stage 1.</li>



<li>Crops/pools features for each region.</li>



<li>Predicts the exact class and refined box coordinates for each proposal.</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading" id="h-4-single-stage-detectors">Single-stage detectors</h4>



<p><strong>Examples:</strong> YOLO series, SSD, RetinaNet, DETR</p>



<p>The network directly predicts class labels and bounding boxes from feature maps. It does everything in one forward pass. Usually, the following happens:</p>



<ul class="wp-block-list">
<li>A dense grid of <strong>anchor boxes</strong> (or points) is placed over the image.</li>



<li>For each anchor, the network simultaneously predicts:
<ul class="wp-block-list">
<li>Whether there is an object there (objectness/class score).</li>



<li>How the box should be adjusted (box regression offsets).</li>
</ul>
</li>



<li>In older versions of single-stage detectors, one needed to filter overlapping bounding boxes at the end; it was done using the non-maximum suppression (NMS) algorithm. From YOLOv10 on, using NMS is a redundant step.</li>
</ul>



<p>Furthermore, modern single-stage detectors have moved away from anchor-based designs entirely, predicting box coordinates directly from grid points and pixels, eliminating the need for dataset-specific anchor tuning altogether.</p>



<p>Historically, two-stage detectors offered better accuracy at the cost of speed, but modern single-stage detectors have largely closed this gap, achieving comparable or superior results while remaining significantly faster. Thus, we will focus on single-stage detectors only when evaluating the state-of-the-art models for practical applications.</p>



<h2 class="wp-block-heading" id="top-object-detection-models-in-2026"><strong>Top object detection models in 2026</strong></h2>



<p>Two-stage pipelines (Faster R-CNN, Mask R-CNN) are no longer competitive. The current frontier is defined by single-stage NMS-free transformer architectures and models of the YOLO family. Each model below excels in a specific deployment scenario.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="rf-detr-by-roboflow-highest-accuracy">RF-DETR (by Roboflow) – Highest Accuracy</h3>



<p><em>Real-Time Detection Transformer · ICLR 2026</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Metric</strong></th><th><strong>Value</strong></th></tr></thead><tbody><tr><td>mAP50:95 (N)</td><td>48.4</td></tr><tr><td>mAP50:95 (M)</td><td>54.7</td></tr><tr><td>Latency (N)</td><td>2.3 ms</td></tr><tr><td>Latency (M)&nbsp;</td><td>4.4 ms</td></tr><tr><td>mAP50:95 (2XL)</td><td>60.1 (COCO record)</td></tr><tr><td>Latency (2XL)</td><td>21.8 ms</td></tr></tbody></table></figure>



<p>The strongest real-time model available. RF-DETR uses <a href="https://dinov2.metademolab.com/" target="_blank" rel="noopener">DINOv2</a> to extract deeply rich, globally-aware feature representations of the input image, then uses deformable cross-attention in the detection head to efficiently query those features and predict bounding boxes without needing anchor boxes or NMS post-processing. The result is a model that&#8217;s simultaneously more accurate on complex scenes and faster at inference than the naive combination of those components would suggest. RF-DETR is the first real-time detector to break 60 mAP on MS COCO. Designed from the ground up for fine-tuning, DINOv2 pre-training on internet-scale data gives it unmatched domain adaptability across aerial imagery, medical scans, industrial inspection, and more. It comes in four sizes: Nano, Small, Medium, Large (plus XL/2XL under a PML license).</p>



<p><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>Highest mAP of any real-time model.</li>



<li>Exceptional domain transfer (fine-tunes fast).</li>



<li>Best on occluded and complex scenes.</li>



<li>Supports detection + segmentation in a single API.</li>



<li>Apache 2.0, fully commercial-friendly.</li>
</ul>



<p><strong>Limitations:</strong></p>



<ul class="wp-block-list">
<li>Heavier than YOLO on edge/mobile.</li>



<li>XL/2XL models require a PML license.</li>



<li>Higher GPU memory vs. YOLO variants.</li>
</ul>



<p><strong>License:</strong> Apache 2.0 (N/S/M/L) · PML 1.0 (XL/2XL)&nbsp;</p>



<p><strong>Repository:</strong> <a href="https://github.com/roboflow/rf-detr" target="_blank" rel="noopener">https://github.com/roboflow/rf-detr</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="yolo-12-tsinghua-university-research-benchmark">YOLO12 (Tsinghua University) – Research / Benchmark</h3>



<p><em>Attention-centric YOLO · NeurIPS 2025</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Metric</strong></th><th><strong>Value</strong></th></tr></thead><tbody><tr><td>mAP50:95 (N)</td><td>40.4</td></tr><tr><td>mAP50:95 (M)</td><td>52.5</td></tr><tr><td>Latency (N)</td><td>1.60 ms</td></tr><tr><td>Latency (M)&nbsp;</td><td>4.27 ms</td></tr><tr><td>License</td><td>AGPL-3.0</td></tr></tbody></table></figure>



<p>YOLO12 is the first YOLO model to place attention mechanisms at the core rather than CNNs, matching CNN-based inference speeds while gaining the global context benefits of self-attention. Key innovations: Area attention (A²) divides feature maps into regions to reduce the quadratic cost of full self-attention; Residual ELAN (R-ELAN) stabilizes training of large attention blocks; FlashAttention reduces memory bottlenecks. It is deployable on NVIDIA Jetson, NVIDIA GPUs, and macOS.</p>



<p><strong>A note on implementations.</strong> YOLO12 exists in two separate codebases, and the distinction matters in practice. The original authors (Tsinghua/University at Buffalo) actively maintain their own repository at <code>sunsmarterjie/yolov12</code>. In June 2025, they explicitly warned against using Ultralytics&#8217; integration, stating it &#8220;is inefficient, requires more memory, and has unstable training&#8221; – issues they have fixed in their own repo. The training instability and memory criticisms often cited against YOLO12 are therefore criticisms of the Ultralytics port, not the model itself. Ultralytics&#8217; recommendation to prefer YOLO26 over YOLO12 should be read with this context in mind: The comparison is partly against their own suboptimal implementation.</p>



<p>If you use YOLO12, install from the original repository rather than via <code>pip install ultralytics</code>.</p>



<p><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>Strong accuracy at the nano scale (beats YOLO11-N by 0.9% mAP).</li>



<li>Long-range context via attention mechanisms: It can take into account the entire image when detecting an object, rather than a local pixel neighborhood, as in pure CNN architectures.</li>



<li>Jetson-, Android-, and macOS-deployable.</li>



<li>Original repo fixes memory and training stability issues present in the Ultralytics port.</li>



<li>Actively maintained by original authors with ongoing updates (turbo variant, segmentation, and classification).</li>
</ul>



<p><strong>Limitations:</strong></p>



<ul class="wp-block-list">
<li>If using Ultralytics implementation:
<ul class="wp-block-list">
<li>AGPL-3.0 commercial use requires an enterprise license.</li>



<li>Training instability and high memory on large models.</li>
</ul>
</li>



<li>If using an open-source implementation:
<ul class="wp-block-list">
<li>AGPL-3.0 commercial use requires an enterprise license.</li>



<li>Claims to have stable training and inference in comparison with Ulitralytics implementation.</li>



<li>Requires installing from the original repo to avoid Ultralytics port issues, resulting in slightly more setup friction.</li>



<li>Smaller ecosystem and community support than Ultralytics-native models.</li>
</ul>
</li>
</ul>



<p><strong>License:</strong> AGPL-3.0 (open-source) · Enterprise license via Ultralytics for commercial use&nbsp;</p>



<p><strong>Open-source repository:</strong> <a href="https://github.com/sunsmarterjie/yolov12" target="_blank" rel="noopener">https://github.com/sunsmarterjie/yolov12</a></p>



<p><strong>Ultralytics</strong> <strong>repository: </strong><a href="https://github.com/ultralytics/ultralytics" target="_blank" rel="noopener">https://github.com/ultralytics/ultralytics</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="yolo-26-ultralytics-best-for-edge-production">YOLO26 (Ultralytics) – Best for edge / production</h3>



<p><em>Edge-first unified YOLO · September 2025</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Metric</strong></th><th><strong>Value</strong></th></tr></thead><tbody><tr><td>mAP50:95 range</td><td>40.9–57.5</td></tr><tr><td>Latency range</td><td>1.7–11.8 ms</td></tr><tr><td>CPU gain vs. YOLO11 (nano)</td><td>+43%</td></tr><tr><td>Unified tasks</td><td>5</td></tr></tbody></table></figure>



<p>Ultralytics&#8217; flagship for 2025–2026. YOLO26 shifts focus from accuracy maximization toward deployment-oriented simplification: It removes NMS and distribution focal loss (DFL) for end-to-end inference, introduces the MuSGD optimizer for stable convergence, and adds progressive loss balancing (ProgLoss), which makes sure that the model doesn&#8217;t over-optimize one objective at the expense of others, and small-target-aware label assignment (STAL), which ensures extra attention to small objects. Five tasks are solved by this one YOLO26: detection, segmentation, pose estimation, oriented bounding boxes detection, and open-vocabulary detection and segmentation. It is explicitly designed for NVIDIA Jetson Orin/Xavier, Qualcomm Snapdragon AI, and ARM CPUs. Supports INT8 and FP16 quantization, plus ONNX, TensorRT, CoreML, and TFLite export.</p>



<p><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>Best edge and mobile performance (Jetson Orin and Snapdragon).</li>



<li>NMS-free leads to lower latency.&nbsp;</li>



<li>43% faster CPU inference than YOLO11(N) at comparable accuracy, ideal for devices without a GPU.</li>



<li>Five tasks in one architecture.</li>



<li>Stable INT8/FP16 quantization.</li>
</ul>



<p><strong>Limitations:</strong></p>



<ul class="wp-block-list">
<li>AGPL-3.0: commercial use requires an enterprise license.</li>



<li>Lower peak accuracy than RF-DETR XL.</li>
</ul>



<p><strong>License:</strong> AGPL-3.0 (open-source) · Enterprise license via Ultralytics for commercial/industrial use.</p>



<p><strong>Repository:</strong> <a href="https://github.com/ultralytics/ultralytics" target="_blank" rel="noopener">https://github.com/ultralytics/ultralytics</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="benchmark-comparison">Benchmark comparison</h2>



<p>To give a comparison between the models, here are the exact benchmark values. All scores on MS COCO val2017. Latency was measured on an NVIDIA T4 GPU.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Model</strong></th><th><strong>mAP50</strong></th><th><strong>mAP50:95</strong></th><th><strong>Latency</strong></th><th><strong>Params</strong></th><th><strong>Edge-ready</strong></th><th><strong>License</strong></th></tr></thead><tbody><tr><td>RF-DETR-N</td><td>67.6</td><td>48.4</td><td>2.3 ms</td><td>30.5 M</td><td>Server GPU</td><td>Apache 2.0</td></tr><tr><td>RF-DETR-M</td><td>73.6</td><td>54.7</td><td>4.4 ms</td><td>33.7 M</td><td>Server GPU</td><td>Apache 2.0</td></tr><tr><td>RF-DETR-2XL</td><td>78.5</td><td>60.1</td><td>17.2 ms</td><td>126.9 M&nbsp;</td><td>Server GPU</td><td>PML 1.0</td></tr><tr><td>YOLO12-N</td><td>56.7</td><td>40.4</td><td>1.6 ms</td><td>2.5 M</td><td>ARM / Mobile / Jetson</td><td>AGPL-3.0</td></tr><tr><td>YOLO12-L</td><td>70.7</td><td>53.8</td><td>5.83 ms</td><td>26.5 M</td><td>Jetson / TensorRT</td><td>AGPL-3.0</td></tr><tr><td>YOLO26-N</td><td>—&nbsp;</td><td>40.1</td><td>1.7 ms</td><td>2.4 M</td><td>ARM / Mobile / Jetson</td><td>AGPL-3.0</td></tr><tr><td>YOLO26-X</td><td>—</td><td>56.9</td><td>11.8 ms</td><td>55.7 M</td><td>Jetson / TensorRT</td><td>AGPL-3.0</td></tr></tbody></table></figure>



<p>Here is a visualization of the above results alongside additional modern object detection models for a more holistic comparison:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" fetchpriority="high" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-57.png" alt="" class="wp-image-717451"/></figure></div>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="use-case-guidance">Use-case guidance</h2>



<p><strong>Occluded objects:</strong> RF-DETR (M/L) is the clear choice. Its DINOv2 backbone models global context across the full image, making it significantly better than CNN-based models at finding partially hidden objects.</p>



<p><strong>Small objects:</strong> RF-DETR uses multi-scale feature extraction. YOLO26 also includes STAL (small-target-aware label assignment), making it competitive for small objects on edge hardware.</p>



<p><strong>Edge / mobile / Jetson:</strong> YOLO26-N or YOLO12-N. YOLO26 is the Ultralytics recommendation for Jetson Orin/Xavier, Snapdragon AI, and ARM CPUs. It has 43% faster CPU inference than YOLO11n at comparable accuracy.</p>



<p><strong>Custom domain / fine-tuning:</strong> RF-DETR by a significant margin. DINOv2 pre-training means it adapts to new domains (medical, aerial, and industrial) faster and with less data than any other model here.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="licensing-summary">Licensing Summary</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Model</strong></th><th><strong>License</strong></th><th><strong>Commercial use</strong></th></tr></thead><tbody><tr><td>RF-DETR (base)</td><td>Apache 2.0</td><td>Free for all uses, including commercial products</td></tr><tr><td>RF-DETR XL/2XL</td><td>PML 1.0</td><td>Contact Roboflow for commercial licensing</td></tr><tr><td>YOLO12</td><td>AGPL-3.0</td><td>Free for open source / personal use; commercial applications require an Ultralytics Enterprise license</td></tr><tr><td>YOLO26</td><td>AGPL-3.0</td><td>Free for open source / personal use; commercial applications require an Ultralytics Enterprise license</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="quick-start-code">Quick-start code</h2>



<h3 class="wp-block-heading" id="rf-detr">RF-DETR</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Install
pip install rfdetr

# Inference
from rfdetr import RFDETRBase
model = RFDETRBase()
detections = model.predict("image.jpg")

# Fine-tune on your dataset
model.train(dataset_dir="./my_dataset", epochs=50, batch_size=4)</pre>



<h3 class="wp-block-heading" id="h-3-yolo-26-yolo-12-via-ultralytics">YOLO26 / YOLO12 (via Ultralytics)</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Install
pip install ultralytics

# Inference — YOLO26
from ultralytics import YOLO
model = YOLO("yolo26n.pt")          # or yolo26s/m/l/x
results = model.predict("image.jpg")

# Inference — YOLO12
model = YOLO("yolo12n.pt")
results = model.predict("image.jpg")

# Export for edge (TensorRT / CoreML / ONNX)
model.export(format="engine")       # TensorRT for Jetson
model.export(format="coreml")       # Apple Silicon / iOS
model.export(format="tflite")       # Android / ARM</pre>



<h3 class="wp-block-heading" id="h-3-yolo-12-use-original-open-source-repo-not-the-ultralytics-integration">YOLO12 (use original open-source repo – not the Ultralytics integration)</h3>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Install from the original authors' repo
conda create -n yolov12 python=3.11
conda activate yolov12
git clone https://github.com/sunsmarterjie/yolov12 &amp;&amp; cd yolov12
pip install -r requirements.txt
pip install -e .

# Inference
from ultralytics import YOLO
model = YOLO("yolov12n.pt")         # or s/m/l/x
results = model("path/to/image.jpg")
results[0].show()

# Export for edge
model.export(format="engine", half=True)   # TensorRT FP16
model.export(format="onnx")                # ONNX for broad compatibility</pre>
</div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-2-transfer-learning-and-fine-tuning">Transfer learning and fine-tuning</h2>



<p><strong>RF-DETR – recommended for domain shift. </strong>Thanks to a DINOv2 backbone that is pre-trained on internet-scale data, fine-tuning requires less labeled data and converges faster. Use the <code>rfdetr</code> package with a COCO pre-trained checkpoint. Roboflow also offers a hosted fine-tuning UI.</p>



<p><strong>YOLO26 / YOLO12 – easiest pipeline.</strong> Ultralytics&#8217; training API is the most mature fine-tuning ecosystem. It supports YOLO-format and COCO-format datasets and has good documentation and an active community.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Fine-tuning YOLO26 on a custom dataset (YOLO format)
from ultralytics import YOLO

model = YOLO("yolo26m.pt")          # start from pretrained weights
model.train(
    data="custom_dataset.yaml",     # path to your dataset config
    epochs=100,
    imgsz=640,
    batch=16,
    device=0,                       # GPU index; "cpu" for CPU
)
metrics = model.val()               # evaluate on validation set</pre>
</div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-2-summary-choosing-the-right-model-for-your-project">Summary: Choosing the right model for your project</h2>



<p>Selecting an object detection model requires matching your specific requirements against each model&#8217;s strengths. The decision framework below maps common scenarios to optimal model choices.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Your goal</strong></th><th><strong>Best choice</strong></th><th><strong>Runner-up</strong></th></tr></thead><tbody><tr><td>Highest accuracy, cloud deployment</td><td>RF-DETR M/XL</td><td>YOLO26-X</td></tr><tr><td>Edge / Jetson / mobile</td><td>YOLO26-N/S</td><td>YOLO12-N</td></tr><tr><td>Fine-tuning on a custom domain</td><td>RF-DETR</td><td>YOLO26</td></tr><tr><td>Occluded / complex scenes</td><td>RF-DETR</td><td>YOLO26</td></tr><tr><td>Research / benchmarking</td><td>YOLO12</td><td>RF-DETR</td></tr><tr><td>Apache 2.0 + commercial use</td><td>RF-DETR (base)</td><td>YOLO26</td></tr><tr><td>Multi-task (detect + segment + pose)</td><td>YOLO26</td><td>RF-DETR (det+seg)</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-2-get-started-with-py-charm-today">Get started with PyCharm today</h2>



<p>Selecting an object detection architecture in 2026 is a strategic decision dictated by the specific requirements of the application and the available computational budget. Whether prioritizing the record-breaking accuracy of RF-DETR for complex scenes or the unmatched efficiency of the YOLO family for edge deployment, the choice must balance mAP requirements against real-time latency constraints.</p>



<p>The landscape of computer vision is rapidly shifting toward zero-shot detection frameworks that recognize novel objects without task-specific supervision. As foundation models increasingly integrate sophisticated image embedders like <a href="https://openai.com/index/clip/" target="_blank" rel="noopener">CLIP</a> or <a href="https://dinov2.metademolab.com/" target="_blank" rel="noopener">DINOv2</a> into detection pipelines, the boundaries of high-precision detection on resource-constrained hardware will continue to expand. While transformer-based architectures are developing quickly, the YOLO family’s established ecosystem ensures it remains a cornerstone for real-time production environments.</p>



<p>To achieve the best results for your specific use case, we encourage you to experiment with the models and code samples provided in this guide. To that end, <a href="https://www.jetbrains.com/pycharm/data-science/" target="_blank" rel="noopener">PyCharm</a> provides the perfect ecosystem for experimentation with various open-source models via <code>Code -> Insert HF Model</code> interface. If you’d like to try this yourself, PyCharm Pro comes with a 30-day trial.</p>



<p>For a hands-on starting point, <a href="https://blog.jetbrains.com/pycharm/2026/05/build-a-live-object-detection-app-for-reachy-mini-with-tensorflow-and-pycharm/">this tutorial</a> shows how to build a live object detection app using TensorFlow and PyCharm Jupyter notebooks, then deploy it on a robot – covering everything from single-frame inference to a live web dashboard with annotated detections. Moreover, stay tuned for the next tutorial post, where we will discuss all three object detection models in action.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Explicit Lazy Imports Are Coming to Python 3.15</title>
		<link>https://blog.jetbrains.com/pycharm/2026/06/explicit-lazy-imports-are-coming-to-python-3-15/</link>
		
		<dc:creator><![CDATA[Cheuk Ting Ho]]></dc:creator>
		<pubDate>Thu, 25 Jun 2026 08:21:55 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/PC-social-BlogFeatured-1280x720-1-2.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=715892</guid>

					<description><![CDATA[A while ago at PyCon US 2026, I had the pleasure of listening to the Python Steering Council give updates about new features that are being added in Python 3.15. One that stood out was explicit lazy imports (via PEP 810), which defer module loading until first use. I am curious to see how this [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>A while ago at PyCon US 2026, I had the pleasure of listening to the Python Steering Council give updates about new features that are being added in Python 3.15. One that stood out was explicit lazy imports (via <a href="https://peps.python.org/pep-0810" target="_blank" rel="noopener">PEP 810</a>), which defer module loading until first use. I am curious to see how this new feature works, and I want to benchmark its performance with PyCharm. Let’s take a look together.</p>



<h2 class="wp-block-heading">Overview of explicit lazy imports</h2>



<p>PEP 810 introduces an explicit syntax for lazy imports, allowing you to defer the loading and execution of modules until their attributes are actually accessed, unlike standard eager imports that execute immediately. This feature aims to significantly reduce startup latency and memory consumption. Explicitly marking modules as `lazy` can deliver substantial improvements in initial responsiveness and baseline resource usage in large-scale applications and command-line tools.</p>



<p>Because the implementation approach uses proxy objects within the module&#8217;s namespace instead of modifying Python&#8217;s fundamental dictionary structures, it preserves critical interpreter optimizations.&nbsp;</p>



<p>This mechanism defers both the finding and the loading of the module to maximize efficiency, especially in environments with high-latency filesystems. To manage potential side effects and ensure backward compatibility, the proposal includes global control flags and a transitional variable for progressive adoption across different Python versions.</p>



<p>In short, Python 3.15 will let you optimize application performance by significantly reducing startup latency and memory consumption, as the loading and execution of modules are deferred until their attributes are actually accessed.</p>



<h2 class="wp-block-heading">Trying them out in Python 3.15.0b1</h2>



<p>At the time this is being written, Python 3.15.0b1 is already out, so we can give this new feature a try. You can build it from source at the CPython <a href="https://github.com/python/cpython" target="_blank" rel="noopener">GitHub repo</a>, but since getting Python 3.15.0b1 is easy when using `uv` or `pyenv`, we will do that instead.</p>



<p>Make sure you have the latest version of `uv` or `pyenv`, and then download Python 3.15.0b1 via either of the following commands:</p>



<ul class="wp-block-list">
<li>`uv python install 3.15.0b1`</li>



<li>`pyenv install 3.15.0b1`</li>
</ul>



<p>After that, select the new interpreter in your project in <a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noopener">PyCharm</a>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-40.png" alt="" class="wp-image-716121"/></figure>



<p>Now you will need to reinstall the dependencies for your project. You may have to build some of the libraries from source, as most of the libraries will not have a Python 3.15 wheel for download.</p>



<h2 class="wp-block-heading">Profiling against normal imports</h2>



<p>It is a common joke that the first thing data scientists will do is type `import pandas as pd` and `import numpy as np`, even if they are not actually going to use them. Let’s assume this is the case, and you received a script like this from your colleague:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def main():
    print("Initializing example data science project...")
    
    # Generate some dummy data
    data = {
        'x': np.linspace(0, 10, 100),
        'y': np.sin(np.linspace(0, 10, 100)) + np.random.normal(0, 0.1, 100)
    }
    
    # Plotting
    plt.figure(figsize=(10, 6))
    plt.plot(data['x'], data['y'], label='Sine Wave with Noise')
    plt.title('Sample Visualization')
    plt.xlabel('X-axis')
    plt.ylabel('Y-axis')
    plt.legend()
    
    # Save the plot instead of showing it (since this is non-interactive)
    plt.savefig('sine_wave.png')
    print("Project executed successfully. Plot saved as sine_wave.png.")

if __name__ == "__main__":
    main()
</pre>



<p>As you see, PyCharm highlights the unused pandas import for you, so removing it would be straightforward. However, for our experiment here, we’ll keep it.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-41.png" alt="" class="wp-image-716132"/></figure>



<p>To get a better visualization of import profiles, install a tool from PyPI called <a href="https://github.com/nschloe/tuna" target="_blank" rel="noopener">tuna</a><em>.</em></p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-42.png" alt="" class="wp-image-716143"/></figure>



<p>You can profile your script by setting a custom run script with this script text:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python -X importtime main.py 2> import_log.txt; tuna import_log.txt</pre>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-43.png" alt="" class="wp-image-716155"/></figure>



<p>When you use it, a new browser window will pop up with the import graph.&nbsp;</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-44.png" alt="" class="wp-image-716166"/></figure>



<p>As you see, importing pandas accounts for half of the time it takes to load all the modules, and we never use it!</p>



<p>Now let&#8217;s add `lazy` to all the imports.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-45.png" alt="" class="wp-image-716177"/></figure>



<p>Don’t worry about the syntax highlighting. PyCharm just doesn’t recognize it yet since `lazy` is a new keyword that has not been officially released.</p>



<p>Let’s profile the script again.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-46.png" alt="" class="wp-image-716188"/></figure>



<p>Now we see the pandas import is gone, and loading everything takes way less time.</p>



<p>So, if you have a script that imports a lot of large libraries, and some of them are only used in certain conditions (e.g. in if-else clauses), lazy import can save time by loading modules only when they are first used.</p>



<h2 class="wp-block-heading">Checking the inner workings with lazy imports</h2>



<p>Let’s see how lazy imports are handled internally.</p>



<p>When a module is imported “lazily”, meaning `__lazy_import__` is called instead of `__import__`, a `types.LazyImportType` proxy object will be created. The module name will then be listed in `sys.lazy_modules` instead of `sys.modules`. (See the <a href="https://peps.python.org/pep-0810/#lazy-import-mechanism" target="_blank" rel="noopener"><em>Lazy import mechanism</em></a> section in PEP 810.)</p>



<p>When a lazy object is used, it needs to be reified. CPython will try resolving the import at that point and replacing the proxy object with the actual module itself. In this process, `__import__` is called to resolve the import. At the same time, the module is removed from `sys.lazy_modules`.</p>



<p>If there’s an error during reification, AKA importing the module, the lazy object is not reified or replaced. The next time the lazy module is used, the import will try again. The exception raised during reification will also show both where the lazy import was defined and where it was accessed. (See the <a href="https://peps.python.org/pep-0810/#reification" target="_blank" rel="noopener"><em>Reification</em></a> section in PEP 810.)</p>



<p>To experiment with it ourselves, let’s add some breakpoints with `pdb` and check what’s happening in the code:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pdb
pdb.set_trace()

lazy import pandas as pd
lazy import matplotlib.pyplot as plt
lazy import numpy as np

pdb.set_trace()
…</pre>



<p>And</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">    # Generate some dummy data
    data = {
        'x': np.linspace(0, 10, 100),
        'y': np.sin(np.linspace(0, 10, 100)) + np.random.normal(0, 0.1, 100)
    }

    pdb.set_trace()
    
    # Plotting
    plt.figure(figsize=(10, 6))
    pdb.set_trace()
…
</pre>



<p>Now run the script in the console:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">python main.py</pre>



<p><em>Note that PyCharm 2026.1 does not yet support Python 3.15, so using the </em>Run <em>or </em>Debug<em> button to run a script using lazy import may result in unexpected behavior.</em></p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-47.png" alt="" class="wp-image-716199"/></figure>



<p>When it hits the first line of ` pdb.set_trace()` at the top, there should not be any module loaded in. Let’s check:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">(Pdb) import sys
(Pdb) sys.lazy_modules</pre>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-48.png" alt="" class="wp-image-716210"/></figure>



<p>As expected, none of our libraries – pandas, numpy, and matplotlib – are listed.</p>



<p>Now, let’s continue running the program and let it stop at the next breakpoint. In the console, type `continue` and once it stops, we can check by typing `sys.lazy_modules` again:</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-49.png" alt="" class="wp-image-716221"/></figure>



<p>Here, we see that all of our modules are in `lazy_modules`. Let’s check whether pandas is in `sys.modules`:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">(Pdb) 'pandas' in sys.modules</pre>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-50.png" alt="" class="wp-image-716232"/></figure>



<p>Nope, it’s not. You can try with numpy and matplotlib, and you will see that neither of those is in `sys.module`.</p>



<p>Now let’s type `continue` again and reach the next breakpoint, which occurs after numpy is used. Check `sys.lazy_module` again, and you’ll see that numpy is no longer on the list. When we check whether it is in `sys.module`, we get `True` this time.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-51.png" alt="" class="wp-image-716243"/></figure>



<p>However, pandas and matplotlib are still not in `sys.modules`.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-52.png" alt="" class="wp-image-716254"/></figure>



<p>When you check the next breakpoint, you’ll see that matplotlib is similarly removed from `sys.lazy_modules` and added to `sys.modules` after it is used.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-53.png" alt="" class="wp-image-716265"/></figure>



<h2 class="wp-block-heading">Trying it yourself with PyCharm</h2>



<p><a href="https://www.jetbrains.com/pycharm/download/" target="_blank" rel="noopener">Download the latest version of PyCharm</a> to experiment with Python 3.15.0b1 and experience firsthand how explicit lazy imports can optimize your application’s performance by significantly reducing startup latency and memory consumption.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Your JetBrains IDE Expertise, Now on LinkedIn</title>
		<link>https://blog.jetbrains.com/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</link>
		
		<dc:creator><![CDATA[Ekaterina Ryabukha]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 13:11:02 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/Blog-Featured-1280x720-4.png</featuredImage>		<product ><![CDATA[clion]]></product>
		<product ><![CDATA[dotnet]]></product>
		<product ><![CDATA[education]]></product>
		<product ><![CDATA[go]]></product>
		<product ><![CDATA[idea]]></product>
		<product ><![CDATA[phpstorm]]></product>
		<product ><![CDATA[pycharm]]></product>
		<product ><![CDATA[ruby]]></product>
		<product ><![CDATA[rust]]></product>
		<product ><![CDATA[webstorm]]></product>
		<category><![CDATA[news]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=blog&#038;p=711459</guid>

					<description><![CDATA[Every developer has tools they rely on daily. The workflows they&#8217;ve built around them, the ways they&#8217;ve learned to move faster, debug smarter, and write better code – that kind of hands-on experience can be hard to put into words. We’re collaborating with LinkedIn to make it easier for you to showcase your expertise with [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Every developer has tools they rely on daily. The workflows they&#8217;ve built around them, the ways they&#8217;ve learned to move faster, debug smarter, and write better code – that kind of hands-on experience can be hard to put into words.</p>



<p>We’re collaborating with LinkedIn to make it easier for you to showcase your expertise with JetBrains IDEs on the world’s largest professional network. You can now connect your IDE to LinkedIn and let your real tool usage speak for itself.</p>



<p align="center"><a class="jb-download-button" href="https://plugins.jetbrains.com/plugin/32011-linkedin-connected-apps" target="_blank" rel="noopener" data-test="blog-article-cta"><i class="download-icon"></i>Connect your IDE</a></p>



<p>IntelliJ IDEA, PyCharm, WebStorm, PhpStorm, Rider, GoLand, CLion, RustRover, and RubyMine are already supported via a free plugin, while support for DataGrip is coming soon.</p>



<p>In this blog post, we’ll explain what LinkedIn connected apps are, what they mean for your profile, and how to get started.</p>



<h2 class="wp-block-heading">What this is about</h2>



<p>Building on early <a href="https://www.linkedin.com/pulse/title-newways-stand-out-verify-skills-unlock-new-hari-srinivasan-zhtvc/" target="_blank" rel="noopener">collaboration</a> with Descript, Duolingo, Lovable, Relay.app, and Replit, LinkedIn is expanding the range of apps you can feature on your LinkedIn profile, turning real-world product usage into a credible, visible signal of practical tool experience. We’re glad to join forces with them to bring this to JetBrains IDE users.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>
<cite>“We&#8217;re building new ways for members to show real, credible proof of what they&#8217;re capable of, right on their LinkedIn profile. And for the brands behind these tools, there&#8217;s no better endorsement than a customer who&#8217;s actively using and loving your product.”<br>– Dan Shapero, CEO of LinkedIn</cite></blockquote>



<p>Connected apps let you link the tools you use in your daily work directly to your LinkedIn profile, where they appear prominently, helping you stand out to your professional network. Once connected, each app generates a simple statement based on how you actually use it. Unlike manually added skills, this is based on real usage and updates automatically as your experience evolves.</p>



<figure class="wp-block-image size-full is-style-default"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/In-LinkedIn-4.png" alt="" class="wp-image-713887"/></figure>



<h2 class="wp-block-heading">How to get started</h2>



<p>Open your JetBrains IDE, go to <em>Settings | Plugins</em>, search for the <em>LinkedIn Connected Apps</em> plugin under the <em>Marketplace</em> tab, and install it.&nbsp;</p>



<p>Once installed, the plugin starts collecting data locally about how you use your IDE. Depending on your usage history, you may receive an initial statement right away, which will then be updated once the plugin has collected enough data to better reflect your real IDE expertise.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/LinkedIn-integration-in-JetBrains-IDEs-example-1.png" alt="LinkedIn-integration-in-JetBrains-IDEs-example " class="wp-image-713131"/></figure>



<p><strong>Your IDE usage data stays on your machine</strong>. When you are ready, you can connect your LinkedIn account and share your IDE expertise badge there. If you keep the plugin installed, your badge will update automatically as your IDE usage evolves.</p>



<p>The plugin is free for all JetBrains IDE users.</p>



<h2 class="wp-block-heading">What’s included in this release</h2>



<p>This is the first version of the integration, delivered as a standalone plugin rather than being built directly into the IDE. It covers IntelliJ IDEA, PyCharm, WebStorm, GoLand, PhpStorm, Rider, CLion, RustRover, and RubyMine; DataGrip is not yet supported.&nbsp;</p>



<p>Usage is detected within the IDE itself, so if you use AI features via an external tool or terminal, those won&#8217;t be reflected yet.</p>



<h2 class="wp-block-heading">How your IDE expertise is determined</h2>



<p>The model is intentionally simple for now. It is designed to represent your practical use of JetBrains tools, <em>not </em>to rank developers or certify skill levels. Our goal was to provide a solid starting point, but we know there&#8217;s more to capture about how developers work with their IDEs.</p>



<p>Statements map to different levels of experience and are generated based on how you interact with your IDE – from writing and editing code using basic features to working with debugging tools, version control, and AI-assisted workflows. For more information, see <a href="https://www.jetbrains.com/help/idea/linkedin-connected-apps.html" target="_blank" rel="noopener">our documentation</a>.</p>



<h2 class="wp-block-heading">What’s coming next</h2>



<p>We’re already working on the next version, planned for later this year. We’ll focus on improving how IDE usage, including AI feature usage, is represented, expanding support to DataGrip, and making the overall experience feel more integrated.</p>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Which JetBrains IDEs are supported?</h3>



<p>IntelliJ IDEA, PyCharm, WebStorm, GoLand, PhpStorm, Rider, CLion, RustRover, and RubyMine. Support for DataGrip is coming soon.</p>



<h3 class="wp-block-heading">Why isn’t DataGrip supported yet?</h3>



<p>DataGrip is designed for working with databases and includes workflows that differ from our other IDEs. We plan to support it soon.</p>



<h3 class="wp-block-heading">Can I connect multiple IDEs?</h3>



<p>Yes, if you use multiple supported JetBrains IDEs, you can connect each of them. You’ll get a badge for all connected IDEs.</p>



<p><strong>Note</strong>: If you use multiple JetBrains accounts across different IDE instances but link them all to the same LinkedIn profile, IDE usage statements from each account will be displayed on that LinkedIn profile.</p>



<h3 class="wp-block-heading">Do I need to keep the plugin installed after connecting?&nbsp;</h3>



<p>You can share your IDE usage statement once and then remove the plugin, but note that it must remain installed if you want to track your ongoing progress and have any changes reflected on LinkedIn.</p>



<h3 class="wp-block-heading">Is this feature free?</h3>



<p>Yes, it’s available to all JetBrains IDE users at no cost.</p>



<h3 class="wp-block-heading">Is this a certification?</h3>



<p>Connected apps reflect real IDE usage and are designed to showcase applied experience, not to act as a formal certification or skill ranking. Certifications, degrees, and licenses remain important markers of professional achievement. Connected apps on LinkedIn add a different kind of signal: partner-validated tool usage that reflects practical work and can update over time.</p>



<h3 class="wp-block-heading">What data is shared with LinkedIn and JetBrains?</h3>



<p>Only the information required to represent your connected account and IDE usage statement.&nbsp;</p>



<h3 class="wp-block-heading">Will this help me get hired?</h3>



<p>Having connected apps on your LinkedIn profile is extra proof of your practical experience with leading tools. While connected apps make your expertise visible, they are just one part of your profile. Think of it as a way to let your tooling speak for itself.</p>



<p>Give it a try and let us know what you think in the comments below. We&#8217;re continuing to develop this integration, and your feedback will help shape what comes next.</p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[zh-hans]]></code>
                        <url>https://blog.jetbrains.com/zh-hans/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                                    <language>
                        <code><![CDATA[pt-br]]></code>
                        <url>https://blog.jetbrains.com/pt-br/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                                    <language>
                        <code><![CDATA[ko]]></code>
                        <url>https://blog.jetbrains.com/ko/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                                    <language>
                        <code><![CDATA[ja]]></code>
                        <url>https://blog.jetbrains.com/ja/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                                    <language>
                        <code><![CDATA[fr]]></code>
                        <url>https://blog.jetbrains.com/fr/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                                    <language>
                        <code><![CDATA[es]]></code>
                        <url>https://blog.jetbrains.com/es/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                                    <language>
                        <code><![CDATA[de]]></code>
                        <url>https://blog.jetbrains.com/de/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                	</item>
		<item>
		<title>Best Python AI Frameworks in 2026</title>
		<link>https://blog.jetbrains.com/pycharm/2026/06/best-python-ai-frameworks-in-2026/</link>
		
		<dc:creator><![CDATA[Evgenia Verbina]]></dc:creator>
		<pubDate>Thu, 11 Jun 2026 11:28:08 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/PC-social-BlogFeatured-1280x720-1-1.png</featuredImage>		<category><![CDATA[data-science]]></category>
		<category><![CDATA[hugging-face]]></category>
		<category><![CDATA[keras]]></category>
		<category><![CDATA[langchain]]></category>
		<category><![CDATA[pytorch]]></category>
		<category><![CDATA[scikit-learn]]></category>
		<category><![CDATA[tensorflow]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=712584</guid>

					<description><![CDATA[Whether you’re building chatbots, training computer vision models, or analyzing business data, choosing the right AI framework can make or break your project. Python has become the dominant language for AI and machine learning development, and the ecosystem of frameworks supporting this work has matured significantly. The right framework choice depends on what you’re building. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/PC-social-BlogFeatured-1280x720-1-1.png" alt="Best Python AI Frameworks in 2026" class="wp-image-712585"/></figure>



<p>Whether you’re building chatbots, training computer vision models, or analyzing business data, choosing the right AI framework can make or break your project. Python has become the dominant language for AI and machine learning development, and the ecosystem of frameworks supporting this work has matured significantly.</p>



<p>The right framework choice depends on what you’re building. A production recommendation system has different requirements than a research prototype. A chatbot powered by large language models (LLMs) needs different tools than a fraud detection system analyzing tabular data.</p>



<p>Let’s explore seven essential frameworks and where each excels so you can find the best AI framework for your specific project.</p>



<h2 class="wp-block-heading"><strong>What is an AI framework?</strong></h2>



<p>AI frameworks are pre-built libraries and tools that handle the complex mathematics, data structures, and computational operations underlying AI and machine learning models. Rather than implementing neural networks or gradient descent from scratch, AI frameworks provide abstractions that let you focus on model architecture, data preparation, and business logic.</p>



<p>These frameworks generally fall into three categories:</p>



<ul class="wp-block-list">
<li><strong>Deep learning frameworks</strong> like TensorFlow, PyTorch, and Keras specialize in neural networks and GPU acceleration for tasks involving images, text, and audio.</li>



<li><strong>Classical and tabular machine learning frameworks</strong> like scikit-learn and XGBoost focus on statistical and tree-based models for structured data, powering many real-world AI systems, including forecasting, risk-scoring, and decision-automation solutions.</li>



<li><strong>LLM and AI agent frameworks</strong> like LangChain and Hugging Face provide tools for building applications powered by large language models.</li>
</ul>



<h3 class="wp-block-heading">Why do AI frameworks matter?&nbsp;</h3>



<p>AI frameworks dramatically accelerate your development by providing tested, optimized implementations of complex algorithms. They offer strong community support with extensive documentation, tutorials, and troubleshooting resources. They provide production-ready tooling for deployment, monitoring, and scaling. They&#8217;re optimized for specific hardware like GPUs and TPUs, delivering performance that would be difficult to achieve with custom implementations.</p>



<h2 class="wp-block-heading"><strong>Open-source vs. commercial AI frameworks</strong></h2>



<p>Open-source AI frameworks are the dominant model in AI development today. And they offer compelling advantages, from community-driven innovation for rapid feature development and bug fixes to transparency that enables auditing and algorithm customization. There’s also no vendor lock-in or licensing fees, making them cost-effective for both experimentation and production deployment.</p>



<p>Commercial AI platforms also exist, with AWS SageMaker, Google Vertex AI, and Azure Machine Learning among the prominent examples. However, these platforms often use open-source frameworks underneath rather than competing with them directly. They provide managed infrastructure, automated workflows, and enterprise features on top of tools like TensorFlow and PyTorch.</p>



<p>If you’re thinking open source means they’re unsupported, think again. All seven frameworks below have robust ecosystems, and many are backed by major tech companies. Google supports TensorFlow, Meta backs PyTorch, and organizations like Microsoft contribute significantly to various projects in the ecosystem.</p>



<h2 class="wp-block-heading"><strong>Top Python AI frameworks</strong></h2>



<p>These seven frameworks represent the essential toolkit for Python AI development in 2026. Each performs strongly in specific domains, and many developers use multiple frameworks depending on project requirements.</p>



<h3 class="wp-block-heading"><strong>TensorFlow</strong></h3>



<p><a href="https://www.tensorflow.org/" target="_blank" rel="noopener">TensorFlow</a> is an open-source deep learning framework developed by Google for building and deploying machine learning models at enterprise scale. With a<a href="https://6sense.com/tech/data-science-machine-learning/tensorflow-market-share" target="_blank" rel="noopener"> 37% market share</a> in data science and machine learning and adoption by 25,000 companies globally, TensorFlow has proven itself in high-stakes production environments.</p>



<p>The framework evolved significantly from TensorFlow 1.x to 2.x, with Keras integration making it far more accessible while maintaining its enterprise-grade capabilities. If you’re building large-scale image recognition systems or natural language processing pipelines, or you need to deploy across web, mobile, and edge devices through TensorFlow Lite and TensorFlow.js, TensorFlow can help.</p>



<p>If you’re just getting started with TensorFlow, follow <a href="https://blog.jetbrains.com/pycharm/2026/04/how-to-train-your-first-tensorflow-model/">our step-by-step tutorial on how to train your first TensorFlow model</a> using PyCharm.</p>



<h4 class="wp-block-heading">Advantages of TensorFlow</h4>



<ul class="wp-block-list">
<li><strong>Enterprise-grade scalability</strong>: Built for production from day one, TensorFlow handles massive datasets and distributed training across multiple GPUs and TPUs seamlessly. You can scale from experimentation to serving millions of predictions without switching tools.</li>



<li><strong>Comprehensive deployment ecosystem</strong>: TensorFlow Serving handles model deployment, TensorFlow Lite optimizes for mobile and edge devices, and TensorFlow.js brings models to browsers. This complete deployment story reduces friction when moving from development to production.</li>



<li><strong>TPU optimization</strong>: Native support for Google’s Tensor Processing Units delivers superior performance for large-scale training workloads, offering significantly better performance per watt than traditional hardware.</li>



<li><strong>Strong industry adoption</strong>: Companies like Airbnb, Twitter, and Intel rely on TensorFlow for critical applications, giving you confidence in its production readiness and long-term viability.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of TensorFlow</h4>



<ul class="wp-block-list">
<li><strong>Steeper learning curve</strong>: Despite Keras integration, TensorFlow’s complexity can overwhelm beginners, especially when you move beyond high-level APIs to custom implementations.</li>



<li><strong>Verbose syntax for custom models</strong>: Building custom training loops or novel architectures requires significantly more code compared with PyTorch’s more Pythonic approach.</li>



<li><strong>Debugging challenges</strong>: Static graph optimization, while beneficial for performance, can make runtime errors harder to trace than in frameworks with dynamic computation graphs.</li>
</ul>



<h3 class="wp-block-heading"><strong>scikit-learn</strong></h3>



<p><a href="https://scikit-learn.org/" target="_blank" rel="noopener">scikit-learn</a> is an open-source Python library for classical machine learning, providing simple and efficient tools for classification, regression, clustering, and dimensionality reduction. With adoption by<a href="https://6sense.com/tech/data-science-and-machine-learning/scikit-learn-market-share" target="_blank" rel="noopener"> over 16,000 companies</a> worldwide, it’s your essential first stop for structured and tabular data before considering deep learning approaches.</p>



<p>The framework supports a wide range of supervised and unsupervised learning on structured business data, along with feature engineering and data preprocessing pipelines. Companies like<a href="https://scikit-learn.org/stable/testimonials/testimonials.html" target="_blank" rel="noopener"> J.P. Morgan use scikit-learn extensively</a> for classification tasks and predictive analytics in financial decision-making.</p>



<h4 class="wp-block-heading">Advantages of scikit-learn</h4>



<ul class="wp-block-list">
<li><strong>Beginner-friendly API</strong>: Consistent, intuitive syntax across all algorithms makes learning and switching between models effortless. The fit/predict pattern works the same whether you&#8217;re using linear regression or random forests.</li>



<li><strong>Comprehensive algorithm library</strong>: Its library covers virtually every classical ML algorithm – regression, classification, clustering, dimensionality reduction – with well-tested implementations ready for your projects.</li>



<li><strong>Excellent for tabular data</strong>: On structured data, traditional algorithms often outperform deep learning, and scikit-learn gives you the tools to maximize this advantage.</li>



<li><strong>Fast prototyping</strong>: Its simple syntax means you can build and test models in minutes, not hours, making it ideal for rapid experimentation.</li>



<li><strong>Seamless integration</strong>: scikit-learn works perfectly with NumPy, pandas, and Matplotlib, fitting naturally into your data science workflows.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of scikit-learn</h4>



<ul class="wp-block-list">
<li><strong>No deep learning support</strong>: scikit-learn is not designed for neural networks – you’ll need to switch to TensorFlow or PyTorch for complex deep learning architectures.</li>



<li><strong>Limited GPU acceleration</strong>: The framework is CPU-bound and struggles with very large datasets where GPU-accelerated frameworks perform better.</li>



<li><strong>Not suited for unstructured data</strong>: Images, text, and audio require deep learning frameworks that can handle high-dimensional, unstructured inputs.</li>
</ul>



<h3 class="wp-block-heading"><strong>PyTorch</strong></h3>



<p><a href="https://pytorch.org/" target="_blank" rel="noopener">PyTorch</a> is an open-source deep learning framework developed by Meta that prioritizes flexibility and a natural Python coding experience. It’s used in<a href="https://leapcell.io/blog/tensorflow-vs-pytorch-a-comparative-analysis-for-2025" target="_blank" rel="noopener"> approximately 85% of deep learning research papers</a> and has a 55% adoption rate in the research community. From its academic roots, PyTorch has evolved into a production-ready powerhouse.</p>



<p>The framework excels at cutting-edge research and experimentation with novel architectures. It supports natural language processing and generative AI models such as GPT, Llama, and Stable Diffusion, and enables computer vision research with custom model development. Its Pythonic philosophy makes it feel natural if you’re already comfortable with Python, reducing cognitive load and accelerating your development.</p>



<h4 class="wp-block-heading">Advantages of PyTorch</h4>



<ul class="wp-block-list">
<li><strong>Dynamic computation graphs</strong>: The define-by-run approach allows runtime model modifications, making debugging and experimentation intuitive. You can use standard Python control flow and debugging tools you already know.</li>



<li><strong>Pythonic and readable</strong>: PyTorch code feels like native Python, not a separate language. This flattens your learning curve and makes code more maintainable.</li>



<li><strong>Research-first innovation</strong>: Latest techniques and models appear in PyTorch first, driven by its dominance in academic research.</li>



<li><strong>Strong ecosystem</strong>: Hugging Face Transformers, PyTorch Lightning, and extensive community packages provide specialized tools for virtually any task you’ll encounter.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of PyTorch</h4>



<ul class="wp-block-list">
<li><strong>Deployment complexity</strong>: While TorchServe has improved the situation, PyTorch historically has had weaker production tooling compared to TensorFlow’s mature deployment ecosystem.</li>



<li><strong>Manual training loops</strong>: Greater control means more boilerplate code for standard training patterns, though libraries like PyTorch Lightning address this.</li>
</ul>



<h3 class="wp-block-heading"><strong>Keras</strong></h3>



<p><a href="https://keras.io/" target="_blank" rel="noopener">Keras</a> is a high-level deep learning API designed for fast experimentation with neural networks. With<a href="https://github.com/keras-team/keras" target="_blank" rel="noopener"> over 60,000 GitHub stars</a> and integration as TensorFlow’s default interface, Keras has become synonymous with rapid prototyping and ease of use. The release of Keras 3.0 changed the game by adding multi-backend support for TensorFlow, JAX, and PyTorch.</p>



<p>The framework is ideal for rapidly prototyping neural network architectures, working on educational projects to learn deep learning fundamentals, or tackling deep learning tasks that don’t require low-level customization.</p>



<h4 class="wp-block-heading">Advantages of Keras</h4>



<ul class="wp-block-list">
<li><strong>Simplest API in deep learning</strong>: You can build sophisticated models in just a few lines of code with the Sequential or Functional API, offering the lowest barrier to entry in deep learning.</li>



<li><strong>Multi-backend flexibility</strong>: Keras 3.0 runs on TensorFlow, JAX, or PyTorch – write once, run anywhere. This future-proofs your code and lets you switch backends as your needs change.</li>



<li><strong>Built-in best practices</strong>: The API guides you toward sound model architecture decisions and incorporates best practices by default.</li>



<li><strong>Fast experimentation</strong>: You can iterate quickly without wrestling with framework complexity, focusing on model design rather than implementation details.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of Keras</h4>



<ul class="wp-block-list">
<li><strong>Limited low-level control</strong>: The abstraction layer sacrifices fine-grained control needed for cutting-edge research or novel architectures.</li>



<li><strong>Performance overhead</strong>: The additional abstraction can introduce latency compared to native framework calls, though this is often negligible for most applications.</li>



<li><strong>Less suitable for custom architectures</strong>: Highly novel model designs may require you to drop down to the underlying framework.</li>
</ul>



<h3 class="wp-block-heading"><strong>LangChain</strong></h3>



<p><a href="https://www.langchain.com/" target="_blank" rel="noopener">LangChain</a> is an open-source framework that helps you build applications powered by large language models, providing core components for prompt management, chains, memory, and agent orchestration. It acts as an abstraction layer to easily connect LLMs to external data sources and computational tools. With over <a href="https://github.com/langchain-ai/langchain" target="_blank" rel="noopener">120,000 GitHub stars</a>, the framework has become essential infrastructure for the AI agent revolution.</p>



<p>LangChain is most commonly used for building conversational AI and chatbots with memory and context, retrieval-augmented generation (RAG) systems for enterprise knowledge bases, and multi-agent systems with autonomous workflows.</p>



<p>If you want to go beyond the basics, read our <a href="https://blog.jetbrains.com/pycharm/2026/02/langchain-tutorial-2026/"><em>LangChain Python Tutorial: A Complete Guide for 2026</em></a>. It takes a deeper look at what LangChain offers and walks through real-world use cases for building AI agents in Python.</p>



<h4 class="wp-block-heading">Advantages of LangChain</h4>



<ul class="wp-block-list">
<li><strong>Comprehensive LLM orchestration</strong>: Handles everything from prompt management to chains, memory, and tool use, giving you a complete infrastructure for LLM applications in one package.</li>



<li><strong>Provider-agnostic</strong>: Works seamlessly with OpenAI, Anthropic, Hugging Face, and local models, letting you avoid vendor lock-in and switch providers as your needs change.</li>



<li><strong>Rich agent capabilities</strong>: LangGraph enables complex, stateful workflows with human-in-the-loop patterns, supporting sophisticated agentic behaviors.</li>



<li><strong>Production-ready tooling</strong>: LangSmith provides monitoring, debugging, and tracing specifically designed for LLM applications, addressing the unique challenges you’ll face in production.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of LangChain</h4>



<ul class="wp-block-list">
<li><strong>Learning curve for abstractions</strong>: LangChain Expression Language (LCEL) and framework-specific concepts take time to master, especially if you’re new to LLM orchestration.</li>



<li><strong>Abstraction overhead</strong>: Additional layers between you and LLM APIs can sometimes obscure what’s happening, making debugging more challenging.</li>



<li><strong>Fast-moving target</strong>: Frequent updates mean your code can become outdated quickly, requiring ongoing maintenance to stay current.</li>
</ul>



<h3 class="wp-block-heading"><strong>Hugging Face</strong></h3>



<p><a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> is an open-source platform and library ecosystem for natural language processing and machine learning, with over one million models and 250,000 datasets to power your next project. It’s become a central hub for the AI community, with its <a href="https://github.com/huggingface/transformers" target="_blank" rel="noopener">Transformers library earning 150,000+ GitHub stars</a>.</p>



<p>The platform is particularly effective at accessing and fine-tuning pre-trained transformer models like BERT, GPT, and Llama, building NLP applications without training models from scratch, and sharing and deploying custom models to the community.</p>



<p>For a practical example, read <a href="https://blog.jetbrains.com/pycharm/2025/08/fine-tuning-and-deploying-gpt-models-using-hugging-face-transformers/"><em>A Practical Guide to Fine-Tuning and Deploying GPT Models Using Hugging Face Transformers</em></a>. It walks through using a pre-trained GPT model, fine-tuning it on custom data, and deploying the result with FastAPI.</p>



<h4 class="wp-block-heading">Advantages of Hugging Face</h4>



<ul class="wp-block-list">
<li><strong>Massive model repository</strong>: With hundreds of thousands of pre-trained models available, you rarely need to train from scratch. Models for virtually every task and language are ready for you to use.</li>



<li><strong>Transformers library dominance</strong>: This is the de facto standard for NLP, computer vision, and multimodal models, with support for the latest architectures as soon as they’re published.</li>



<li><strong>Framework interoperability</strong>: Models work with PyTorch, TensorFlow, and JAX, giving you maximum flexibility in your development workflow.</li>



<li><strong>Inference infrastructure</strong>: Hosted inference APIs and Spaces make deployment straightforward without managing your own infrastructure.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of Hugging Face</h4>



<ul class="wp-block-list">
<li><strong>Dependency complexity</strong>: The large dependency tree can lead to version conflicts and package management challenges, especially in complex environments.</li>



<li><strong>Model quality variance</strong>: Community-contributed models vary in quality and may not be production-ready without thorough vetting and testing on your part.</li>



<li><strong>Platform dependency</strong>: Heavy reliance on Hugging Face Hub creates some platform lock-in, though you can download models and host them independently.</li>
</ul>



<h3 class="wp-block-heading"><strong>XGBoost</strong></h3>



<p><a href="https://xgboost.readthedocs.io/" target="_blank" rel="noopener">XGBoost</a> is an optimized gradient boosting library designed for speed and performance on structured data. The algorithm continues to dominate machine learning competitions alongside other gradient-boosted decision tree libraries, earning its reputation through battle-tested performance on real-world problems.</p>



<p>You can use the framework for predictive modeling on structured business data, including sales forecasting, risk assessment, and feature importance analysis for model interpretability. Its gradient-boosting approach achieves outstanding precision on structured data, powering reliable insights for business applications.</p>



<h4 class="wp-block-heading">Advantages of XGBoost</h4>



<ul class="wp-block-list">
<li><strong>Superior accuracy on tabular data</strong>: XGBoost consistently outperforms deep learning on structured datasets, making it your default choice for business analytics and forecasting.</li>



<li><strong>Built-in regularization</strong>: L1 and L2 regularization prevents overfitting better than basic gradient boosting, producing more robust models for your production systems.</li>



<li><strong>Efficient computation</strong>: Handles large datasets efficiently with parallel processing and intelligent tree pruning, making it practical for production use.</li>



<li><strong>Missing value handling</strong>: Automatically learns optimal strategies for missing data, reducing your preprocessing burden.</li>



<li><strong>Feature importance scores</strong>: Built-in interpretability helps you understand model decisions, crucial for business applications and regulatory compliance.</li>
</ul>



<h4 class="wp-block-heading">Disadvantages of XGBoost</h4>



<ul class="wp-block-list">
<li><strong>Not suitable for unstructured data</strong>: Images, text, and audio require deep learning approaches. XGBoost is designed specifically for tabular data.</li>



<li><strong>Hyperparameter complexity</strong>: There are many parameters to tune for optimal performance, though tools like Optuna can automate this process for you.</li>



<li><strong>Limited interpretability compared with simple models</strong>: While more explainable than deep neural networks, XGBoost’s ensemble structure is harder to interpret than linear or rule-based models, even with feature importance and SHAP analysis.</li>
</ul>



<h2 class="wp-block-heading"><strong>How to choose an AI framework</strong></h2>



<p>Selecting the best AI framework depends on your specific project characteristics, but in practice, the choice is rarely binary. Many successful teams use multiple frameworks together. A common and effective pattern is to use scikit-learn for preprocessing and feature engineering, PyTorch for research and model development, TensorFlow for production deployment, and LangChain for LLM-powered features.</p>



<p>Your decision will likely come down to data type, team expertise, and where your model needs to run. Use this table as a starting point:</p>



<figure class="wp-block-table is-style-regular"><table class="has-black-color has-text-color"><tbody><tr><td><strong>Decision factor</strong></td><td><strong>Suitable Frameworks</strong></td></tr><tr><td><strong>By modeling approach and prediction type</strong></td><td></td></tr><tr><td>Single-value or label prediction (regression or classification using classical ML)</td><td>scikit-learn, XGBoost</td></tr><tr><td>Image and video modeling with neural networks</td><td>TensorFlow, PyTorch, Keras</td></tr><tr><td>Text and NLP with transformer models</td><td>Hugging Face, PyTorch, TensorFlow</td></tr><tr><td>LLM-powered and agent-based applications</td><td>LangChain, Hugging Face</td></tr><tr><td><strong>By level of abstraction and control required</strong></td><td></td></tr><tr><td>High-level APIs and rapid iteration</td><td>Keras, scikit-learn</td></tr><tr><td>Fine-grained control over training and architectures</td><td>PyTorch, TensorFlow</td></tr><tr><td>Research-driven experimentation and custom workflows</td><td>PyTorch</td></tr><tr><td>Managed LLM orchestration and tooling</td><td>LangChain<br></td></tr><tr><td><strong>By deployment target</strong></td><td></td></tr><tr><td>Production at scale</td><td>TensorFlow</td></tr><tr><td>Research/Experimentation</td><td>PyTorch</td></tr><tr><td>Mobile/Edge</td><td>TensorFlow Lite</td></tr><tr><td>Web applications</td><td>TensorFlow.js</td></tr><tr><td>LLM applications</td><td>LangChain</td></tr><tr><td><strong>By task and project objective</strong></td><td></td></tr><tr><td>Classical prediction and forecasting systems</td><td>scikit-learn, XGBoost</td></tr><tr><td>Neural network–based modelling</td><td>TensorFlow, PyTorch, Keras</td></tr><tr><td>Building and training novel architectures</td><td>PyTorch</td></tr><tr><td>Scalable production deployment</td><td>TensorFlow</td></tr><tr><td>LLM-powered features and workflows</td><td>LangChain, Hugging Face</td></tr></tbody></table></figure>



<p>If your choice comes down to PyTorch or TensorFlow, read our dedicated <a href="https://blog.jetbrains.com/pycharm/2026/05/pytorch-vs-tensorflow-choosing-framework-2026/"><em>PyTorch vs. TensorFlow: Choosing the Right Framework in 2026</em></a> guide, where we compare learning curves, deployment options, and use cases to help you choose the right deep learning framework.</p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[zh-hans]]></code>
                        <url>https://blog.jetbrains.com/zh-hans/pycharm/2026/06/best-python-ai-frameworks-in-2026/</url>
                    </language>
                	</item>
		<item>
		<title>Top Agentic Frameworks for Building Applications 2026</title>
		<link>https://blog.jetbrains.com/pycharm/2026/06/top-agentic-frameworks-for-building-applications-2026/</link>
		
		<dc:creator><![CDATA[Evgenia Verbina]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 12:12:37 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/PC-social-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[data-science]]></category>
		<category><![CDATA[ai-agents]]></category>
		<category><![CDATA[langchain]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=711444</guid>

					<description><![CDATA[In 2026, the world of AI is changing at a serious pace. The days of AI systems dealing solely in single-prompt interactions are coming to an end. Instead, these models are evolving into agentic systems – long-running, goal-driven software enabled by agentic frameworks that are becoming a critical layer in modern application architecture. This rapid [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In 2026, the world of AI is changing at a serious pace. The days of AI systems dealing solely in single-prompt interactions are coming to an end. Instead, these models are evolving into <a href="https://www.jetbrains.com/pycharm/data-science/" target="_blank" rel="noopener">agentic systems</a> – long-running, goal-driven software enabled by agentic frameworks that are becoming a critical layer in modern application architecture.</p>



<p>This rapid shift means that Python developers building autonomous systems are increasingly relying on agentic frameworks to manage reasoning, memory, tools, and collaboration among multiple agents.</p>



<p>You’ve probably already heard of some of the most popular frameworks. LangChain and AutoGen have risen to prominence, but there are dozens more, many of them open-source and only one to two years old. With so many frameworks promising different agentic capabilities, the real challenge is knowing which ones are best suited for the kind of application you want to build.</p>



<p>Let’s take a closer look at some of the most important agentic frameworks on the market in 2026, comparing what each does best and rating them based on our key comparison criteria to help you discover which is best for your projects.</p>



<h2 class="wp-block-heading">What are AI agents?</h2>



<p>An <a href="https://www.jetbrains.com/pycharm/features/ai/" target="_blank" rel="noopener">AI agent</a> is a piece of software capable of autonomously reasoning, setting goals, and performing tasks on behalf of a user or another system. As the name suggests, AI agents have a level of agency to learn, adapt, and make decisions independently. This means they can improve their behavior and, over time, choose their own actions to achieve specific goals or outcomes.</p>



<p>AI agents work by following a perceive, reason, act, reflect (PRAR) cycle, which allows them to:</p>



<ul class="wp-block-list">
<li><strong>Perceive:</strong> Observe the environment, including user input, system state, tools, and memory, to understand the current context and constraints of the task.</li>



<li><strong>Reason:</strong> Plan, make decisions, and select actions using a large language model (LLM) or hybrid logic.</li>



<li><strong>Act:</strong> Execute actions like calling tools, updating memory, or triggering workflows.</li>



<li><strong>Reflect:</strong> Evaluate the outcome of previous actions and adjust future decisions, plans, or prompts to improve results.</li>
</ul>



<p>AI agents rely on the natural language processing capabilities of large language models, but unlike traditional LLMs and AI chatbots, they don’t require continuous user input to perform tasks. Agents are proactive, working autonomously to achieve a goal based on a specified set of rules and parameters.</p>



<h2 class="wp-block-heading">What is an agentic framework?</h2>



<p>An agentic framework provides the infrastructure needed to <a href="https://lp.jetbrains.com/pycharm-for-ai-engineers/" target="_blank" rel="noopener">build, run, and control AI agents</a> at scale. Most modern frameworks offer three core capabilities:</p>



<ul class="wp-block-list">
<li><strong>Orchestration:</strong> Controls how agents are sequenced, coordinated, or allowed to collaborate.</li>



<li><strong>Tools:</strong> Define how agents interact with external systems like APIs or databases.</li>



<li><strong>Memory:</strong> Sets out how agents retain and retrieve information across steps or sessions.</li>
</ul>



<p>While it’s possible to build an agent without a framework, they’re vital in ensuring agents are reliable, scalable, and safe.</p>



<p>Agentic frameworks help turn experimental agent builds into maintainable software by facilitating:</p>



<ul class="wp-block-list">
<li><strong>Multi-agent coordination:</strong> When multiple agents communicate to plan, work together, and specialize in different areas of a task.</li>



<li><strong>Human-in-the-loop (HITL) checkpoints:</strong> Intentional pause points where a human can review what an agent is about to do.</li>



<li><strong>Observability, control, and reproducibility:</strong> The ability to see what an agent is doing, guide agent behavior, or re-run an agent and receive the same results.</li>
</ul>



<h2 class="wp-block-heading">Core orchestration paradigms</h2>



<p>Before comparing individual frameworks, it’s important to understand how they operate. Let’s look at the three most commonly used orchestration models in 2026.</p>



<h3 class="wp-block-heading">Graph-based orchestration</h3>



<p>Graph-based orchestration provides maximum control by organizing agents and tools as nodes in a directed graph. Instead of letting an agent freely decide what to do next, the flow that agents are allowed to follow is clearly defined.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li><strong>More deterministic control: </strong>Predictable behavior is critical for production systems that require reliable results.</li>



<li><strong>Easier debugging: </strong>Pinpoint exactly which node failed thanks to clear checkpoints and boundaries.</li>



<li><strong>Production-grade reliability: </strong>This approach is ideal for customer-facing applications, enterprise systems, or regulated environments.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li><strong>More upfront design: </strong>The workflow must be defined in advance, which slows initial development.</li>



<li><strong>Less “emergent” behavior: </strong>Agents are constrained by the graph, leaving less room for experimentation and creativity.</li>
</ul>



<h3 class="wp-block-heading">Role-based orchestration</h3>



<p>Role-based orchestration is most effective when simplicity is a priority. Agents are assigned specific roles, such as “Planner”, “Researcher”, or “Builder”, and collaborate by sending messages to one another.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li><strong>Intuitive mental model: </strong>This type of operation is easy to understand because it effectively mirrors how human teams work.</li>



<li><strong>Rapid prototyping: </strong>Minimal setup is required, allowing more time to explore outcomes.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li><strong>Harder-to-constrain behavior: </strong>Because agents have the freedom to decide what to do next, it’s difficult to enforce strict execution paths.</li>



<li><strong>Limited determinism:</strong> The same input can yield different outcomes, making it tricky to reproduce results and achieve consistency.</li>
</ul>



<h3 class="wp-block-heading">Chain-based orchestration</h3>



<p>Chain-based orchestration, also known as adaptive orchestration, arguably offers the greatest flexibility. Agents in this model operate in dynamic chains or loops, deciding the next step autonomously.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li><strong>Flexible workflows:</strong> Agents are not constrained to a pre-defined path and can freely explore different strategies.</li>



<li><strong>Suitability for creative tasks:</strong> This approach is ideal for research, discovery, and experimentation, as agents can iteratively explore ideas, pivot strategies, and adapt their approach.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li><strong>Less predictability: </strong>Testing and debugging are more challenging because execution paths are harder to reproduce and trace.</li>



<li><strong>More difficult governance at scale: </strong>This unpredictability grows as tasks become more complex.</li>
</ul>



<h2 class="wp-block-heading">Best agentic frameworks for your projects</h2>



<p>Now that we&#8217;re familiar with the key orchestration paradigms of agentic frameworks, it’s time to compare some of the most popular frameworks on the market in 2026. Below, we evaluate each framework’s performance against our key comparison criteria:</p>



<ul class="wp-block-list">
<li>Primary orchestration model.</li>



<li>Multi-agent support.</li>



<li>Memory capabilities.</li>



<li>Human-in-the-loop (HITL) support.</li>



<li>Best-fit applications.</li>
</ul>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Framework</strong></td><td><strong>Orchestration model</strong></td><td><strong>Multi-agent support</strong></td><td><strong>Memory capabilities</strong></td><td><strong>HITL support</strong></td><td><strong>Best used for</strong></td></tr><tr><td><strong>LangChain</strong></td><td>Chain-based</td><td>Partial</td><td>Moderate</td><td>Limited to moderate</td><td>Rapid LLM app development</td></tr><tr><td><strong>LangGraph</strong></td><td>Graph-based</td><td>Yes</td><td>Strong</td><td>Strong</td><td>Production-grade agent workflows</td></tr><tr><td><strong>LlamaIndex</strong></td><td>Retrieval-centric</td><td>Limited</td><td>Strong</td><td>Moderate</td><td>Knowledge-heavy agents</td></tr><tr><td><strong>Haystack</strong></td><td>Pipeline-based/modular</td><td>Moderate</td><td>Strong</td><td>Moderate</td><td>Production RAG and context-heavy AI systems</td></tr><tr><td><strong>AutoGen</strong></td><td>Role-based</td><td>Strong</td><td>Moderate</td><td>Limited</td><td>Conversational multi-agent systems</td></tr><tr><td><strong>CrewAI</strong></td><td>Role-based</td><td>Strong</td><td>Light</td><td>Limited</td><td>Task-oriented agent teams</td></tr><tr><td><strong>Semantic Kernel</strong></td><td>Planner-based</td><td>Moderate</td><td>Moderate</td><td>Strong</td><td>Enterprise AI</td></tr><tr><td><strong>smolagents</strong></td><td>Minimalist</td><td>Limited</td><td>Light</td><td>Minimal</td><td>Lightweight experiments</td></tr><tr><td><strong>OpenAI Agents SDK</strong></td><td>Graph-based</td><td>Yes</td><td>Managed</td><td>Strong</td><td>Hosted agent applications</td></tr><tr><td><strong>Phidata</strong></td><td>Agent-centric</td><td>Limited to moderate</td><td>Strong</td><td>Moderate</td><td>Data and tool-heavy agents</td></tr></tbody></table></figure>



<p>Let’s take a closer look at the strengths and weaknesses of each framework, along with the applications they’re most suited to.</p>



<h3 class="wp-block-heading">LangChain</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Chain-based orchestration.</li>



<li><strong>Philosophy:</strong> Developer velocity and flexibility.</li>
</ul>



<p>Launched in 2022, <a href="https://www.langchain.com/" target="_blank" rel="noopener">LangChain</a> is one of the most widely adopted frameworks due to its broad ecosystem of integrations. It serves as an accessible interface for nearly any LLM and is an ideal starting point for enthusiasts or startups looking to explore agentic AI. While not strictly “agent-first”, it provides the building blocks for agentic behavior.</p>



<p>LangChain provides less control than other frameworks, but it’s still a fantastic entry point into agentic systems, especially for projects where speed and creativity take precedence over enforcing strict workflows.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Huge ecosystem.</li>



<li>Easy tool integration.</li>



<li>Rapid prototyping.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Less control than graph-based systems.</li>



<li>Agent logic that can be difficult to understand as it grows in complexity.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Prototyping of agentic features.</li>



<li>Tool-augmented chatbots.</li>



<li>LLM-powered backend services.</li>
</ul>



<p>If you want to go beyond the basics, read our <a href="https://blog.jetbrains.com/pycharm/2026/02/langchain-tutorial-2026/"><em>LangChain Python Tutorial: A Complete Guide for 2026</em></a>. It takes a deeper look at what LangChain offers and walks through real-world use cases for building AI agents in Python.</p>



<h3 class="wp-block-heading">LangGraph</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Graph-based orchestration.</li>



<li><strong>Philosophy:</strong> Explicit control over agent behavior.</li>
</ul>



<p><a href="https://www.langchain.com/langgraph" target="_blank" rel="noopener">LangGraph</a> has emerged as the leading standard for production-grade agent systems. Built on top of LangChain, it replaces implicit chains with explicit graphs, providing strict control over workflows and excellent HITL support via interrupts.</p>



<p>While the graph structure itself can actually make debugging easier by clearly mapping how agents and tools interact, LangGraph does come with a learning curve. Much of this complexity comes from designing the graph and managing explicit state between nodes. Once you understand these concepts, the framework becomes a powerful option for building predictable and controllable agent systems.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Deterministic workflows.</li>



<li>Native state management.</li>



<li>Excellent HITL support via interrupts.</li>



<li>Suitability for regulated or mission-critical systems.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Higher upfront design effort.</li>



<li>Steeper learning curve due to explicit graph and state management.</li>



<li>Reduced flexibility for open-ended tasks.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Autonomous customer support systems.</li>



<li>AI-driven DevOps workflows.</li>



<li>Multi-step decision engines.</li>
</ul>



<h3 class="wp-block-heading">LlamaIndex</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Retrieval-centric orchestration.</li>



<li><strong>Philosophy:</strong> Data-first agents.</li>
</ul>



<p><a href="https://www.llamaindex.ai/" target="_blank" rel="noopener">LlamaIndex</a> is a Python framework designed to help AI systems understand, store, and retrieve information from large amounts of documents and data.</p>



<p>Rather than starting with agents and adding data later, LlamaIndex takes the opposite approach – it starts with data and then builds agent behavior around it. This is why it is often described as data-first or retrieval-centric.</p>



<p>Because it operates in this way, LlamaIndex excels at indexing, memory, and retrieval, making it ideal for building agents whose intelligence depends on accessing the right information rather than executing complex actions.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Advanced document indexing.</li>



<li>Strong long-term memory patterns.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Limited suitability for complex, action-heavy orchestration.</li>



<li>Limited support for multi-agent orchestration.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Research assistants.</li>



<li>Knowledge base agents.</li>



<li>Enterprise document intelligence.</li>
</ul>



<h3 class="wp-block-heading">Haystack</h3>



<ul class="wp-block-list">
<li>Core design: Modular pipeline orchestration.</li>



<li>Philosophy: Context engineering and production-ready AI systems.</li>
</ul>



<p><a href="https://haystack.deepset.ai/" target="_blank" rel="noopener">Haystack</a> is an open-source AI orchestration framework created by deepset for building production-ready AI agents, retrieval-augmented generation (RAG) systems, and multimodal applications.</p>



<p>Instead of focusing purely on agent behavior, Haystack structures applications as explicit pipelines composed of retrievers, routers, memory layers, tools, evaluators, and generators. This modular architecture gives you control over how information flows through a system, allowing each component to be tested and improved independently.</p>



<p>Haystack is particularly strong in applications where the quality of retrieved information determines the quality of the model’s output. Its design also makes it well-suited for enterprise environments that require transparency and reliability in production systems.</p>



<h4 class="wp-block-heading">Strengths&nbsp;</h4>



<ul class="wp-block-list">
<li>Highly modular pipeline architecture.</li>



<li>Excellent support for RAG and document processing.</li>
</ul>



<ul class="wp-block-list">
<li>Strong ecosystem, particularly in search and RAG-focused enterprise use cases.</li>



<li>Flexible integrations with models and vector databases.</li>
</ul>



<h4 class="wp-block-heading">Limitations&nbsp;</h4>



<ul class="wp-block-list">
<li>More infrastructure and setup than lightweight frameworks.</li>



<li>Less focus on emergent multi-agent collaboration.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Retrieval-augmented generation (RAG) systems.</li>



<li>Enterprise document intelligence.</li>



<li>Data-heavy AI applications.</li>



<li>Production AI pipelines that require strong context control.</li>
</ul>



<h3 class="wp-block-heading">AutoGen</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Role-based multi-agent collaboration.</li>



<li><strong>Philosophy:</strong> Conversation-driven autonomy.</li>
</ul>



<p><a href="https://www.microsoft.com/en-us/research/project/autogen/" target="_blank" rel="noopener">AutoGen</a>, an open-source Microsoft framework, popularized the idea of agents collaborating through structured conversation, organizing systems as teams of agents, each with its own specific role. Unlike in other frameworks, there’s no central controller enforcing a strict execution path – the collaboration itself drives progress.</p>



<p>This approach makes AutoGen ideal for exploratory, creative, and research-driven multi-agent systems, at the cost of predictability, HITL, and strict execution control.</p>



<h4 class="wp-block-heading">Strengths&nbsp;</h4>



<ul class="wp-block-list">
<li>Natural multi-agent interaction.&nbsp;</li>



<li>Minimal orchestration overhead.&nbsp;</li>



<li>Suitability for emergent problem-solving.&nbsp;</li>
</ul>



<h4 class="wp-block-heading">Limitations&nbsp;</h4>



<ul class="wp-block-list">
<li>Limited execution control.</li>



<li>Weak HITL support.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Coding agents.</li>



<li>Brainstorming systems.</li>



<li>AI research experiments.</li>
</ul>



<h3 class="wp-block-heading">CrewAI</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Role-based task delegation.</li>



<li><strong>Philosophy:</strong> Teams of specialized agents.</li>
</ul>



<p><a href="https://www.crewai.com/" target="_blank" rel="noopener">CrewAI</a> is centered around building simple, structured multi-agent systems. It is similar to AutoGen, modeling AI agents as members of a “crew” where each agent has a clearly defined role. The goal is to make multi-agent systems approachable, even if you are new to agentic AI.</p>



<p>CrewAI prioritizes simplicity and speed over deep memory and production controls, making it easy to learn and a strong option for prototypes and small teams. However, its limited toolset for observability, HITL, and error handling at scale makes it less suited for larger systems.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Very approachable API.</li>



<li>Clear role separation.</li>



<li>Fast setup.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Lightweight memory.</li>



<li>Limited production controls.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Content pipelines.</li>



<li>Market research automation.</li>



<li>Simple workflow agents.</li>
</ul>



<h3 class="wp-block-heading">Semantic Kernel</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Planner-based orchestration.</li>



<li><strong>Philosophy:</strong> Enterprise-grade AI integration.</li>
</ul>



<p><a href="https://learn.microsoft.com/en-us/semantic-kernel/overview/" target="_blank" rel="noopener">Semantic Kernel</a> is another open-source Microsoft framework, designed for building AI-powered applications that integrate with existing enterprise systems.</p>



<p>It was created with production concerns in mind from the start, emphasizing governance, safety, observability, and human oversight. Rather than maximizing agent autonomy, it focuses on making AI predictable, controllable, and auditable.</p>



<p>By combining structured workflows with LLM reasoning, it trades flexibility and emergent behavior for trust, safety, and operational reliability.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Strong HITL support.</li>



<li>Enterprise-friendly architecture.</li>



<li>Good observability.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Heavier upfront structure.</li>



<li>Less flexibility for open-ended autonomy.</li>



<li>Steeper learning curve.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Internal enterprise tools.</li>



<li>AI copilots.</li>



<li>Business process automation.</li>
</ul>



<h3 class="wp-block-heading">smolagents</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Minimalist chain-based.</li>



<li><strong>Philosophy:</strong> Simplicity over scale.</li>
</ul>



<p><a href="https://huggingface.co/docs/smolagents/en/index" target="_blank" rel="noopener">smolagents</a> is a bare-bones framework designed to make agentic AI as straightforward and transparent as possible. It prioritizes simple, readable code that makes it easy to understand how an agent works without needing to learn a large framework.</p>



<p>smolagents aims to make agent behavior accessible and easy to experiment with by keeping abstractions minimal and logic transparent. It offers first-class support for code-based and tool-calling agents, broad model and tool compatibility, and lightweight CLI utilities, while intentionally trading large-scale orchestration and production features for simplicity and clarity.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Extremely lightweight design.</li>



<li>High degree of transparency.</li>



<li>Fast experimentation.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Limited suitability for scaling</li>



<li>Minimal production features.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Educational projects.</li>



<li>Proofs of concept.</li>



<li>Lightweight local agents.</li>
</ul>



<h3 class="wp-block-heading">OpenAI Agents SDK</h3>



<ul class="wp-block-list">
<li><strong>Core design: </strong>Managed workflow-driven orchestration (often graph-based).</li>



<li><strong>Philosophy:</strong> Hosted, production-ready agents.</li>
</ul>



<p>Thanks to ChatGPT’s explosion in popularity, we’ve all heard of OpenAI. The <a href="https://developers.openai.com/api/docs/guides/agents-sdk/" target="_blank" rel="noopener">Agents SDK</a> is the company’s effort to provide a managed platform for building and running agents without having to maintain your own orchestration infrastructure.</p>



<p>Rather than assembling agents from scratch, you define agent behavior and workflows, while OpenAI provides orchestration, memory management, monitoring, and safety controls. This makes the Agents SDK particularly attractive for teams that want production-ready agents quickly.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Minimal infrastructure burden.</li>



<li>Built-in safety and observability.</li>



<li>Strong multi-agent support.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Reduced customization and control.</li>



<li>Limited suitability for experimental research.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>SaaS agent features.</li>



<li>Customer-facing autonomous systems.</li>



<li>Teams prioritizing speed over customization.</li>
</ul>



<h3 class="wp-block-heading">Phidata</h3>



<ul class="wp-block-list">
<li><strong>Core design:</strong> Agent-centric, tool-heavy.</li>



<li><strong>Philosophy:</strong> Practical agents for real-world data tasks.</li>
</ul>



<p><a href="https://docs.phidata.com/introduction" target="_blank" rel="noopener">Phidata</a> is designed for building practical, tool-driven AI agents that operate on real-world data.</p>



<p>Rather than focusing on abstract orchestration patterns, Phidata centers the agent around direct interaction with systems such as APIs, databases, and internal services.</p>



<p>Its design reflects the fact that many agents spend most of their time fetching, transforming, and acting on data.</p>



<h4 class="wp-block-heading">Strengths</h4>



<ul class="wp-block-list">
<li>Strong tool integration.</li>



<li>Suitability for data-centric workflows.</li>
</ul>



<h4 class="wp-block-heading">Limitations</h4>



<ul class="wp-block-list">
<li>Less emphasis on orchestration.</li>



<li>Limited multi-agent capabilities.</li>
</ul>



<h4 class="wp-block-heading">Best applications</h4>



<ul class="wp-block-list">
<li>Data analysis agents.</li>



<li>Finance and ops automation.</li>



<li>Tool-driven decision systems.</li>
</ul>



<h2 class="wp-block-heading">Choosing the right framework</h2>



<p>Now that you’re familiar with many of the most popular frameworks in 2026, it’s time to choose the right one for your project. Let’s take a look at some of the key use cases, along with the frameworks that fit them best.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Orchestration model</strong></td><td><strong>Where to use</strong></td><td><strong>Recommended frameworks</strong></td></tr><tr><td>Graph-based</td><td>Projects involving complex branching logic and requiring high levels of reliability, auditability, and control.</td><td>LangGraph, OpenAI Agents SDK</td></tr><tr><td>Role-based</td><td>Projects involving rapid development and intuitive design that benefit from emergent collaboration between agents.</td><td>AutoGen, CrewAI</td></tr><tr><td>Chain-based</td><td>Projects requiring maximum flexibility, where agents need to adapt dynamically and determine next steps autonomously.</td><td>LangChain</td></tr><tr><td>Retrieval-based</td><td>Projects where deep, reliable access to knowledge matters more than high levels of autonomy.</td><td>LlamaIndex, Haystack</td></tr><tr><td>Enterprise-oriented</td><td>Projects where strong governance and human-in-the-loop processes are non-negotiable requirements.</td><td>Semantic Kernel</td></tr><tr><td>Lightweight</td><td>Rapid prototyping, educational use, and simple local agents where transparency and control matter more than orchestration complexity.</td><td>smolagents</td></tr><tr><td>Tool-centric</td><td>Building production agents that primarily interact with APIs, databases, and external systems rather than complex multi-step orchestration.</td><td>Phidata</td></tr></tbody></table></figure>



<p>In 2026, agentic frameworks have evolved from experimental tools into foundational infrastructure for many applications. The key decision is no longer whether to use agents, but how much control, autonomy, and governance your systems require.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Build a Live Object Detection App for the Reachy Mini With TensorFlow and PyCharm</title>
		<link>https://blog.jetbrains.com/pycharm/2026/05/build-a-live-object-detection-app-for-reachy-mini-with-tensorflow-and-pycharm/</link>
		
		<dc:creator><![CDATA[Evgenia Verbina]]></dc:creator>
		<pubDate>Wed, 27 May 2026 14:06:31 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/PC-social-BlogFeatured-1280x720-1-5.png</featuredImage>		<category><![CDATA[data-science]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[computer-vision]]></category>
		<category><![CDATA[object-detection]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tensorflow]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=709771</guid>

					<description><![CDATA[This is a guest post from Iulia Feroli, founder of the Back To Engineering YouTube community. In this tutorial, we build a live object detection app using TensorFlow and PyCharm, then deploy it onto the Reachy Mini open-source robot for real-time object tracking. Reachy Mini is a compact open-source robot built in collaboration by Pollen [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>This is a guest post from <a href="https://blog.jetbrains.com/pycharm/2026/05/build-a-live-object-detection-app-for-reachy-mini-with-tensorflow-and-pycharm/#author" data-type="link" data-id="https://blog.jetbrains.com/pycharm/2026/05/build-a-live-object-detection-app-for-reachy-mini-with-tensorflow-and-pycharm/#author">Iulia Feroli</a>, founder of the Back To Engineering YouTube community.</em></p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/PC-social-BlogFeatured-1280x720-1-5.png" alt="Build a Live Object Detection App" class="wp-image-709808"/></figure>



<p>In this tutorial, we build a live object detection app using TensorFlow and <a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noopener">PyCharm</a>, then deploy it onto the Reachy Mini open-source robot for real-time object tracking.</p>



<p><a href="https://github.com/pollen-robotics/reachy_mini" target="_blank" rel="noopener">Reachy Mini</a> is a compact open-source robot built in collaboration by Pollen Robotics, Hugging Face, and Seeed Studio. It has been going viral lately, getting mentioned in NVIDIA videos and even in the keynotes at some of their conferences. What makes it particularly interesting is that not only is all the code open-source, the body is too, which means you can print your own parts and develop your own apps to run on it.</p>



<p>There is an app store of community-built projects you can explore and try, and easily contribute to. Anything conversational or camera-based is especially fun to build because of the hardware it ships with: a speaker, a microphone, and a camera, plus expressive antennas for emotions.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-26.png" alt="Reachy Mini tutorial" class="wp-image-709782"/></figure>



<p>This really highlights the unique new type of robot that the Reachy Mini embodies: It almost feels like it is a physical representation of an LLM or an AI agent, rather than a robot that has AI added to it. It does not have a body that moves around or hands to grab things, so its main selling point is really its brain. That design choice shapes what is most interesting to build with it.</p>



<p>Let’s learn how to build a TensorFlow object detection app and deploy it on the Reachy Mini, which will then allow us to do live object tracking. You can head over to the PyCharm channel for the full code breakdown and try it at home. All the code is in the <a href="https://github.com/iuliaferoli/Reachy-mini-object-detection" target="_blank" rel="noopener">Reachy-mini-object-detection GitHub repository</a>.</p>



<p>For an introduction to the robot, you can first watch Iulia’s video here:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="I build this Open-Source AI Robot a custom body and app!" src="https://www.youtube.com/embed/2D_EAcDgPEI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading"><strong>What you’ll learn</strong></h2>



<ul class="wp-block-list">
<li>How to build a real-time TensorFlow object detection pipeline.&nbsp;</li>



<li>How to use SSD MobileNet V2 from TensorFlow Hub.&nbsp;</li>



<li>How to create a TensorFlow object detection example with OpenCV.&nbsp;</li>



<li>How to run live webcam inference in PyCharm notebooks.&nbsp;</li>



<li>How to deploy object detection on the Reachy Mini robot.&nbsp;</li>



<li>How to track detected objects using head movement logic.&nbsp;</li>



<li>How to stream annotated detections to a live dashboard.</li>
</ul>



<h2 class="wp-block-heading"><strong>What we are building</strong></h2>



<p>The project is split into two stages.</p>



<p><strong>Stage 1</strong> is a standalone notebook that runs entirely on your laptop using your webcam. No robot needed. This is where we make sure the detection pipeline works correctly before touching any hardware.</p>



<p><strong>Stage 2</strong> is a Reachy Mini app that integrates the same model with the robot: Her head moves to follow detected objects, her antennas wiggle when she spots something new, and a live web dashboard at http://0.0.0.0:8042 shows the annotated camera feed and detections.</p>



<p>You can follow along with the step-by-step video tutorial:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Build a TensorFlow Object Detection App | Run It on Reachy Mini" src="https://www.youtube.com/embed/F8uUIerl-XY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading"><strong>How TensorFlow object detection works: Step by step</strong></h2>



<p>1. Capture an image frame from the webcam.&nbsp;</p>



<p>2. Convert the frame into a TensorFlow tensor.</p>



<p>3. Run inference through the pretrained model.</p>



<p>4. Receive bounding boxes, labels, and confidence scores.</p>



<p>5. Filter low-confidence detections.</p>



<p>6. Draw annotated results onto the frame.</p>



<p>7. Display the processed image in real time.</p>



<p><strong>Prerequisites</strong></p>



<ul class="wp-block-list">
<li>Python 3.12+.</li>



<li>PyCharm with its <a href="https://www.jetbrains.com/help/pycharm/jupyter-notebook-support.html" target="_blank" rel="noopener">Jupyter Notebook integration</a>.</li>



<li>A Reachy Mini for Stage 2 (Stage 1 runs entirely on your laptop).</li>



<li>Some familiarity with TensorFlow basics – if you are brand new to it, the <a href="https://blog.jetbrains.com/pycharm/2026/04/how-to-train-your-first-tensorflow-model/">previous post in this series</a> is a good starting point.</li>
</ul>



<h2 class="wp-block-heading"><strong>Stage 1: Building a Tensorflow object detection pipeline in PyCharm</strong></h2>



<p>Before connecting the robot, we want to make sure the TensorFlow part works independently. We are going to make a notebook that only executes through our object detection model and makes it run smoothly. PyCharm’s native notebook integration is a great fit here: You can inspect each step of the pipeline and visualize results inline.</p>



<h3 class="wp-block-heading"><strong>The object detection model</strong></h3>



<p>We are using <a href="https://tfhub.dev/google/openimages_v4/ssd/mobilenet_v2/1" target="_blank" rel="noopener">SSD MobileNet V2</a> from TensorFlow Hub, trained on Open Images V4. This popular model from Google provides SSD-based object detection and has been trained on a lot of open images. With a little bit of fine-tuning you can deploy it with your own use case, though for this tutorial, the general model works well without any fine-tuning at all.</p>



<p>It runs at around 10 FPS on CPU, which is fast enough for responsive real-time behavior on the robot.</p>



<h3 class="wp-block-heading"><strong>Install dependencies</strong></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">!pip install tensorflow tensorflow-hub opencv-python numpy Pillow</pre>



<h3 class="wp-block-heading"><strong>Load the model</strong></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
import cv2
import time
from IPython.display import display, clear_output
from PIL import Image

MODEL_HANDLE = "https://tfhub.dev/google/openimages_v4/ssd/mobilenet_v2/1"

print(f"TensorFlow version: {tf.__version__}")
print("Loading model (first time downloads ~30MB)...")

detector = hub.load(MODEL_HANDLE)
print("Model loaded!")</pre>



<p>The model is about 30 megabytes and gets cached locally after the first download. Because it is very generalized, it can work across a lot of different scenarios without needing additional training data, which makes it a lot easier to get started.</p>



<h3 class="wp-block-heading"><strong>Detection and drawing helpers</strong></h3>



<p>We need two helper functions: one to run inference and return a list of detections, and one to draw the bounding boxes on the frame. These are the same functions we use later in the Reachy app.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def detect_objects(frame_bgr, min_score=0.5, max_detections=10):
    rgb = frame_bgr[:, :, ::-1]
    img_tensor = tf.image.convert_image_dtype(rgb, tf.float32)[tf.newaxis, ...]

    results = detector.signatures['default'](img_tensor)

    boxes = np.array(results["detection_boxes"])
    scores = np.array(results["detection_scores"])
    class_labels = np.array(results["detection_class_entities"])

    if boxes.ndim > 2:
        boxes = boxes[0]
    if scores.ndim > 1:
        scores = scores[0]
    if class_labels.ndim > 1:
        class_labels = class_labels[0]

    scores = np.atleast_1d(scores)
    indices = [i for i, score in enumerate(scores) if score >= min_score][:max_detections]

    detections = []
    for idx in indices:
        ymin, xmin, ymax, xmax = boxes[idx]
        label = class_labels[idx].decode('utf-8') if isinstance(class_labels[idx], bytes) else str(class_labels[idx])
        detections.append({
            "box": [ymin, xmin, ymax, xmax],
            "score": float(scores[idx]),
            "label": label
        })

    return detections


def draw_detections(frame_bgr, detections):
    h, w = frame_bgr.shape[:2]
    annotated = frame_bgr.copy()

    for det in detections:
        ymin, xmin, ymax, xmax = det["box"]
        x1, y1 = int(xmin * w), int(ymin * h)
        x2, y2 = int(xmax * w), int(ymax * h)

        color = (0, 255, 0)
        cv2.rectangle(annotated, (x1, y1), (x2, y2), color, 2)

        label = f"{det['label']} {det['score']:.0%}"
        font_scale, thickness = 0.6, 2
        (tw, th), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, font_scale, thickness)
        cv2.rectangle(annotated, (x1, y1 - th - 8), (x1 + tw + 4, y1), color, -1)
        cv2.putText(annotated, label, (x1 + 2, y1 - 4),
                    cv2.FONT_HERSHEY_SIMPLEX, font_scale, (0, 0, 0), thickness)

    return annotated</pre>



<p>The <code>detect_objects</code> function runs inference using the model’s <code>detect_objects</code> entry point and handles flattening the batch dimension from the output tensors. Labels come back as bytes from the model, so we decode them to strings before returning.</p>



<h3 class="wp-block-heading"><strong>Test on a single frame</strong></h3>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/obj.png" alt="" class="wp-image-709856"/></figure>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cap.release()

if not ret:
    print("ERROR: Could not access webcam. Make sure no other app is using it.")
else:
    print(f"Frame captured: {frame.shape}")

    t0 = time.time()
    detections = detect_objects(frame)
    elapsed = time.time() - t0

    print(f"Inference time: {elapsed:.2f}s ({1/elapsed:.1f} FPS)")
    print(f"Found {len(detections)} objects:")
    for d in detections:
        print(f"  - {d['label']}: {d['score']:.0%}")

    annotated = draw_detections(frame, detections)
    display(Image.fromarray(annotated[:, :, ::-1]))</pre>



<p>This is the stage where you check that the model is detecting correctly and the bounding boxes are drawn in the right places. The inline image display in PyCharm’s notebook view makes it easy to see the result right there in the cell.</p>



<p><strong>Running real-time TensorFlow object detection with OpenCV</strong></p>



<p>Once the single-frame test looks good, you can run it continuously:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("ERROR: Could not open webcam.")
else:
    print("Running live detection... (interrupt kernel to stop)")
    try:
        while True:
            ret, frame = cap.read()
            if not ret:
                break

            t0 = time.time()
            detections = detect_objects(frame)
            fps = 1.0 / max(time.time() - t0, 0.001)

            annotated = draw_detections(frame, detections)
            cv2.putText(annotated, f"{fps:.1f} FPS", (10, 30),
                        cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)

            clear_output(wait=True)
            display(Image.fromarray(annotated[:, :, ::-1]))

            labels = ", ".join(f"{d['label']} ({d['score']:.0%})" for d in detections)
            print(f"{fps:.1f} FPS | {len(detections)} objects: {labels or 'none'}")

    except KeyboardInterrupt:
        print("Stopped.")
    finally:
        cap.release()
        print("Camera released.")</pre>



<p>At this point we have built a notebook that works with just having object detection and we can use this with a simple camera of whatever type you have around. Now, we can wrap it up and make it into an app that we can deploy on the Reachy.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Stage 2: Deploying the TensorFlow object detection app on the Reachy Mini</strong></h2>



<p>The Reachy Mini app lives in the <code>reachy_mini_object_detector/</code> folder and extends the detection logic with head tracking, antenna reactions, and a web dashboard. We’ve followed the guidelines for building Reachy Apps laid out in <a href="https://huggingface.co/blog/pollen-robotics/make-and-publish-your-reachy-mini-apps" target="_blank" rel="noopener">this blog post.</a> Particularly, we can leverage a helper LLM system like Claude by giving it the <a href="https://github.com/pollen-robotics/reachy_mini/blob/main/AGENTS.md" target="_blank" rel="noopener">predefined Agent Helper documentation.</a></p>



<h3 class="wp-block-heading"><strong>Project structure</strong></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">reachy_mini_object_detector/
├── pyproject.toml
└── reachy_mini_object_detector/
    ├── detector.py       # TF Hub model wrapper
    ├── main.py           # App: head tracking + web dashboard
    └── static/           # Web UI assets (served at :8042)</pre>



<p>The <code>detector.py</code> file wraps the model and the <code>detect_objects</code> logic. <code>main.py</code> imports from it and adds everything specific to the robot.</p>



<h3 class="wp-block-heading"><strong>Installing the app</strong></h3>



<p>From the Reachy Mini dashboard, under <em>Apps</em>, or by manually adding:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pip install git+https://huggingface.co/spaces/backtoengineering/reachy_mini_object_detector</pre>



<h3 class="wp-block-heading"><strong>How head tracking works</strong></h3>



<p>The app runs two loops in parallel: an inference thread that grabs frames from the robot’s camera and runs detection, and a main control loop at around 50Hz that handles head movement and antenna control.</p>



<p>The head tracking feature maps the detected object’s position in the frame to a yaw and pitch offset for the head. The camera has a horizontal field of view of 60 degrees and a vertical field of view of 45 degrees. When an object is at the center of the frame its <code>center_x</code> is 0.5, so subtracting 0.5 and multiplying by the field of view gives the angle offset to track it:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">target_yaw = -(largest.center_x - 0.5) * CAMERA_FOV_H_DEG
target_pitch = (largest.center_y - 0.5) * CAMERA_FOV_V_DEG</pre>



<p>Rather than snapping the head instantly to that target, the app uses a smoothing factor (<code>TRACKING_ALPHA = 0.15</code>) so the movement looks natural:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">self._current_yaw += TRACKING_ALPHA * (target_yaw - self._current_yaw)
self._current_pitch += TRACKING_ALPHA * (target_pitch - self._current_pitch)</pre>



<p>When nothing is detected, the head slowly drifts back toward center rather than freezing in place.</p>



<h3 class="wp-block-heading"><strong>Antenna wiggle</strong></h3>



<p>The antennas wiggle when a new object class is first detected, not on every frame. The app keeps track of which classes have already been seen in <code>_seen_classes</code>, and when something new appears it sets a wiggle timer for 1.5 seconds. During that window, the control loop drives a sinusoidal antenna movement as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">phase = (t - t0) * 8.0  # fast wiggle
antenna_val = np.deg2rad(20.0 * np.sin(phase))
antennas = np.array([antenna_val, -antenna_val]</pre>



<p>This makes the interaction feel intentional: Reachy reacts when she sees something new, rather than wiggling constantly while tracking.</p>



<h3 class="wp-block-heading"><strong>The web dashboard</strong></h3>



<p>The app serves a live dashboard (available at http://0.0.0.0:8042) with the annotated camera feed (as an MJPEG stream), the current detection list, an FPS counter, and a toggle to enable or disable head tracking. This is useful during development because you can see exactly what the model is detecting from the robot’s perspective in real time.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Where to go next</strong></h2>



<p>This is a great starting point and there are a lot of directions you can take it:</p>



<ul class="wp-block-list">
<li><strong>Run the app with a specific use case in mind.</strong> The model is general, but if you want Reachy to recognize specific objects you can fine-tune on your own dataset using TensorFlow’s Object Detection API.</li>



<li><strong>Add more apps.</strong> There are many apps that users have already created in the Reachy Mini store, and building one that uses both the camera and the conversational capabilities together opens up a lot of possibilities.</li>



<li><strong>Connect to physical arms.</strong> Something I would really like to explore next is connecting Reachy to the SO-101 arms, so she can actually reach out and do things in the physical world as well as see them.</li>
</ul>



<p>You can find all the code in the <a href="https://github.com/iuliaferoli/Reachy-mini-object-detection" target="_blank" rel="noopener">Reachy-mini-object-detection repository</a>. Everything is open-source, so feel free to build on it, adapt it, or deploy your own version.</p>



<h2 class="wp-block-heading"><strong>FAQs</strong></h2>



<h3 class="wp-block-heading"><strong>What is TensorFlow object detection?</strong></h3>



<p>TensorFlow object detection is a computer vision technique that uses machine learning models to identify and locate objects within images or video streams.</p>



<h3 class="wp-block-heading"><strong>What is the best TensorFlow object detection model for real-time applications?</strong></h3>



<p>SSD MobileNet V2 is commonly used for real-time TensorFlow object detection because it balances inference speed and accuracy efficiently.</p>



<h3 class="wp-block-heading"><strong>Can TensorFlow object detection run on CPU?</strong></h3>



<p>Yes. Models like SSD MobileNet V2 can run entirely on CPU, making them suitable for laptops, edge devices, and robotics projects.</p>



<h3 class="wp-block-heading"><strong>What is the difference between the TensorFlow Object Detection API and TensorFlow Hub?</strong></h3>



<p>TensorFlow Hub provides pretrained reusable models, while the TensorFlow Object Detection API offers a larger framework for training, evaluation, and deployment workflows.</p>



<h3 class="wp-block-heading"><strong>Can I train TensorFlow object detection on custom data?</strong></h3>



<p>Yes. You can fine-tune pretrained models using your own labelled datasets to detect custom objects.</p>



<h2 class="wp-block-heading" id="author"><strong>About the author</strong></h2>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/Iulia-Feroli-e1775558363746.png" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Iulia Feroli</h4>
                                                <p><b>Iulia Feroli</b><span style="font-weight: 400;"> is the founder of the </span><a href="https://youtube.com/@BackToEngineering" target="_blank" rel="noopener"><span style="font-weight: 400;">Back To Engineering community on YouTube</span></a><span style="font-weight: 400;">, where she builds robots, explores physical AI, and makes complex engineering topics accessible and fun. She has a background in data science, AI, cloud architecture, and open source.</span></p>
                    </div>
                            </div>
        </div>
    </div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Improving Accessibility in JetBrains IDEs: What’s New and What’s Next in 2026</title>
		<link>https://blog.jetbrains.com/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</link>
		
		<dc:creator><![CDATA[Ekaterina Valeeva]]></dc:creator>
		<pubDate>Thu, 21 May 2026 06:45:13 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/Blog-Featured-1280x720-1-1.png</featuredImage>		<product ><![CDATA[clion]]></product>
		<product ><![CDATA[go]]></product>
		<product ><![CDATA[idea]]></product>
		<product ><![CDATA[phpstorm]]></product>
		<product ><![CDATA[pycharm]]></product>
		<product ><![CDATA[ruby]]></product>
		<product ><![CDATA[rust]]></product>
		<product ><![CDATA[webstorm]]></product>
		<category><![CDATA[news]]></category>
		<category><![CDATA[accessibility]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=platform&#038;p=707397</guid>

					<description><![CDATA[Making software accessible often comes down to removing small but repeated points of friction in everyday workflows. Today, on Global Accessibility Awareness Day, we’re sharing recent improvements in JetBrains IDEs across several areas: compatibility with assistive technologies on various platforms, keyboard navigation, and non-visual feedback. Some of these improvements are already available, and some are [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Making software accessible often comes down to removing small but repeated points of friction in everyday workflows. Today, on <a href="https://accessibility.day/" target="_blank" rel="noopener">Global Accessibility Awareness Day</a>, we’re sharing recent improvements in JetBrains IDEs across several areas: compatibility with assistive technologies on various platforms, keyboard navigation, and non-visual feedback. Some of these improvements are already available, and some are coming later this year.</p>



<p><em>You can use the audio player below to listen to this blog post.</em></p>


                                    <audio class="article-audio" preload="metadata" style="width: 100%;" controls>
                <source type="audio/mp4" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Accessibility-Blog-Post-Audio.mp4">
                <a href="https://blog.jetbrains.com/wp-content/uploads/2026/05/Accessibility-Blog-Post-Audio.mp4">
                    Accessibility Blog Post Audio                </a>
            </audio>
            


<h2 class="wp-block-heading">Better compatibility with assistive technologies</h2>



<p>One of the key areas we’ve been working on is improving how JetBrains IDEs interact with OS-level accessibility tools.</p>



<h3 class="wp-block-heading">Improved Magnifier support on Windows</h3>



<p>Screen magnifiers are among the most commonly used assistive technologies in JetBrains IDEs. Until recently, the built-in Windows Magnifier didn’t reliably follow the text cursor in the editor, making navigation and editing more difficult for low-vision users. We’ve implemented support for cursor tracking so Magnifier follows text as you type, just as it does in other applications.</p>



<figure class="wp-block-video" alt="Video demonstrating how Windows Magnifier follows the text caret while typing in a code editor"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/MAgnifier_output.mp4"></video></figure>



<p>This builds on earlier work on macOS, where we addressed text cursor tracking with macOS Zoom. Now, the same support is being extended to Windows.</p>



<h3 class="wp-block-heading">Orca and GNOME Magnifier support on Linux</h3>



<p>With version 2026.2, coming this summer, JetBrains IDEs will allow you to use the Orca screen reader and GNOME Magnifier in <a href="https://www.jetbrains.com/help/idea/2026.1/installation-guide.html#operating-systems" target="_blank" rel="noopener">supported Linux environments</a>.&nbsp;</p>



<p>This is an active area of work, with multiple related tasks already underway. Accessibility shouldn’t depend on your operating system, and we’re continuing to improve support across platforms.</p>



<h2 class="wp-block-heading">More predictable keyboard navigation</h2>



<p>We’ve also been making it easier to move through the IDE without relying on a mouse.</p>



<h3 class="wp-block-heading">Main menu access with <em>Alt </em>on Windows</h3>



<p>In native Windows applications, pressing <em>Alt</em> moves the focus to the main menu, allowing you to navigate it with the keyboard. This behavior was previously missing from JetBrains IDEs, and screen readers, such as NVDA, would sometimes announce the system menu instead.</p>



<p>Now, the main menu behaves in a way that feels familiar and predictable for keyboard-only and screen-reader users, and the bright focus indicator helps low-vision users identify the selected item.&nbsp;&nbsp;</p>



<figure class="wp-block-video" alt="Video demonstrating how the IDE main menu receives focus and is highlighted with a blue frame when pressing the Alt key"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/AltF_output.mp4"></video></figure>



<h3 class="wp-block-heading">Navigating between major parts of the IDE</h3>



<p>Another focus area is the experience of moving between different parts of the IDE interface, such as toolbars, panels, and the editor. We’re working on a more structured model for navigating through the big component groups:</p>



<ul class="wp-block-list">
<li><em>Tab</em> and <em>Shift+Tab</em> move the focus within the current area.</li>



<li>A dedicated shortcut lets you jump between larger sections of the IDE.</li>
</ul>



<p>This reduces the effort required to reach essential controls and makes the overall layout easier to navigate. For the current iteration, we made it possible to bring the main toolbar and status bar into focus, and we fixed the <em>Project</em><strong> </strong>and <em>Git</em> toolbar widgets, which were not selectable by screen readers, even though other elements already were.&nbsp;</p>



<figure class="wp-block-video" alt="Video demonstrating how the IDE main toolbar receives focus and is highlighted with a blue frame when the Alt+PgUp shortcut is pressed"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/AltPgUp_output.mp4"></video></figure>



<p>As the next step, we’ll polish specific controls and include tool window bars on both sides of the IDE frame in the navigation flow.</p>



<h2 class="wp-block-heading">Exploring richer non-visual feedback with audio cues</h2>



<p>Accessibility is not only about reaching controls, but also about understanding what’s happening while you work. We’re exploring ways to provide richer audio feedback in the IDE. Two directions we’re currently investigating:</p>



<ul class="wp-block-list">
<li>Contextual signals when the caret lands on lines with errors, warnings, breakpoints, or version control changes. We want the IDE to provide immediate, non-visual feedback in context.</li>



<li>More general audio notifications for IDE actions and state changes.</li>
</ul>



<p>The goal is to reduce the need to rely on visual indicators or switch contexts just to understand what changed. Instead, we want the IDE to provide that information more directly.</p>



<h2 class="wp-block-heading">Accessibility as an ongoing effort</h2>



<p>We’re improving accessibility in JetBrains IDEs across multiple areas at once, including by providing compatibility with assistive technologies like screen readers and magnifiers, as well as by offering more consistent keyboard navigation and clearer feedback for events that are otherwise mostly visual.</p>



<p>These improvements build on earlier updates, such as support for VoiceOver and NVDA, a high-contrast UI theme, and color schemes for red-green vision deficiency. There’s still more to do, and we’ll continue working in this direction.</p>



<h2 class="wp-block-heading">We’d love to hear from you</h2>



<p>We’re eager to hear from developers who rely on accessibility features, as well as from anyone interested in improving the experience of using them.</p>



<p>If you have ideas or feedback about accessibility in JetBrains IDEs, you can reach us directly at <strong>accessibility@jetbrains.com</strong>. You can also report issues through <a href="https://youtrack.jetbrains.com/newIssue?project=IJPL" target="_blank" rel="noopener">YouTrack</a> or the <a href="https://www.jetbrains.com/support/" target="_blank" rel="noopener">support request form</a>.</p>



<p>If you’d like to stay informed about accessibility improvements, you can subscribe to updates <a href="https://lp.jetbrains.com/ij-accessibility/" target="_blank" rel="noopener">here</a>.</p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[zh-hans]]></code>
                        <url>https://blog.jetbrains.com/zh-hans/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[pt-br]]></code>
                        <url>https://blog.jetbrains.com/pt-br/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[ko]]></code>
                        <url>https://blog.jetbrains.com/ko/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[ja]]></code>
                        <url>https://blog.jetbrains.com/ja/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[fr]]></code>
                        <url>https://blog.jetbrains.com/fr/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[es]]></code>
                        <url>https://blog.jetbrains.com/es/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[de]]></code>
                        <url>https://blog.jetbrains.com/de/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                	</item>
		<item>
		<title>LLM Evaluation and AI Observability for Agent Monitoring</title>
		<link>https://blog.jetbrains.com/pycharm/2026/05/llm-evaluation-and-ai-observability-for-agent-monitoring/</link>
		
		<dc:creator><![CDATA[Evgenia Verbina]]></dc:creator>
		<pubDate>Tue, 19 May 2026 09:46:54 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/PC-social-BlogFeatured-1280x720-1-4.png</featuredImage>		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[ai-agents]]></category>
		<category><![CDATA[llm]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=707771</guid>

					<description><![CDATA[This is a guest post from Naa Ashiorkor, a data scientist and tech community builder. Artificial intelligence keeps evolving at a rapid pace. The latest major application of AI, specifically of LLMs, is AI agents. These are systems that use their perception of their environment, processes, and input to take action to achieve specific goals, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>This is a guest post from </em><strong><em><a href="https://blog.jetbrains.com/pycharm/2026/05/llm-evaluation-and-ai-observability-for-agent-monitoring/#author" data-type="link" data-id="https://blog.jetbrains.com/pycharm/2026/05/llm-evaluation-and-ai-observability-for-agent-monitoring/#author">Naa Ashiorkor</a></em></strong><em>, a data scientist and tech community builder.</em></p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/PC-social-BlogFeatured-1280x720-1-4.png" alt="" class="wp-image-708070"/></figure>



<p>Artificial intelligence keeps evolving at a rapid pace. The latest major application of AI, specifically of LLMs, is AI agents. These are systems that use their perception of their environment, processes, and input to take action to achieve specific goals, and they are built on LLMs.&nbsp;</p>



<p>Increasingly, complex AI agents are being used in real-world applications. While simpler agentic applications that use only one agent to achieve a goal still exist, organizations are now shifting towards multi-agent systems that use multiple subagents coordinated by a main agent. These are more adaptable and can mimic human teams when it comes to performing specialized tasks such as data analysis, compliance, customer support, and more. The reasoning and autonomy of AI agents have improved; consequently, they can gather data, conduct cross-references, and generate analysis.</p>



<p>As we move towards these complex, real-world applications of agents, an ever-stronger spotlight is being shone both on how we observe AI agents and how we evaluate the LLMs they’re built upon. The complexity, interactions, and autonomous processes under the surface of AI agents make rigorous monitoring and assessment an essential part of building and maintaining these applications. LLM evaluation determines if the AI agent <em>can</em> <em>work</em>, while AI agent observability determines if it <em>is working</em>. LLM evaluation tests an agent’s basic capabilities before and during deployment, while agent observability provides deep, real-time visibility into an agent’s internal reasoning and operational health once it is live. It is pretty obvious that having just one of these is a loss and a formula for failure.&nbsp;</p>



<p>In this blog post, we’ll explore how to evaluate agents using advanced metrics and observability tools. It’s designed as a practical, end-to-end reference for teams that want to move beyond demos and actually run AI agents in live, real-world environments, avoiding the common pitfalls that cause failure in production.</p>



<h2 class="wp-block-heading">Core LLM evaluation metrics for modern AI systems</h2>



<p>As LLMs are now applied to a wide range of use cases, it is important that their evaluation covers both the tasks they may perform and their potential risks. Evaluation metrics give a better understanding of the strengths and weaknesses of LLMs, influence the guidance of human-LLM interactions, and highlight the importance of ensuring LLM safety and reliability. Hence, LLM evaluation metrics for assessing the performance of an LLM are indispensable in modern AI systems. Without well-defined evaluation metrics, assessing model quality becomes subjective.&nbsp;</p>



<p>There are several key evaluation metrics, each with a different purpose, and the table below provides a summary of some of them.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Evaluation Metric</strong></td><td><strong>What the metric evaluates</strong></td></tr><tr><td>Hallucination rate</td><td>Factual accuracy and truthfulness of generated content</td></tr><tr><td>Toxicity scores</td><td>Harmful, offensive, or inappropriate content</td></tr><tr><td>RAGAS (Retrieval Augmented Generation Assessment)</td><td>Measures whether the RAG system retrieves the right documents and generates answers that are faithful to those sources</td></tr><tr><td>DeepEval</td><td>Tests everything from basic accuracy and safety to complex agent behaviors and security vulnerabilities across the entire LLM application</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Hallucination rate</h3>



<p>Hallucinations in LLMs produce outputs that seem convincing yet are factually unsupported and can be categorized as either intrinsic, where the output contradicts the source content, or extrinsic, where it simply cannot be verified. They can stem from a range of factors across data, training, and inference, from quality issues in the large datasets used for initial training and the data used to fine-tune model behavior to post-training techniques that make models overly eager to provide responses to imperfect decoding strategies at inference. Because hallucination is an unsolved challenge cutting across every stage of model development, measuring and assessing it remains a vital part of LLM evaluation.</p>



<p>There is a wide variety of techniques for detecting hallucinations. These include:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Fact-checking: </strong>Extracting independent factual statements from the model&#8217;s outputs (fact extraction) and then verifying these against trusted knowledge sources (fact verification).</li>



<li><strong>Uncertainty estimation:</strong> Using the certainty provided in the model&#8217;s internal state to estimate how likely a piece of factual content is to be a hallucination.</li>



<li><strong>Faithfulness hallucination detection:</strong> Ensures the faithfulness of LLMs to provide context or user instructions.&nbsp;</li>
</ul>



<p>There are several metrics for hallucination detection. Some of the most commonly used metrics include:</p>



<ul class="wp-block-list">
<li><strong>Fact-based metrics:</strong> Assessing faithfulness by measuring the overlap of facts between the generated content and the source content.&nbsp;</li>



<li><strong>Classifier-based metrics:</strong> Utilizing trained classifiers to distinguish between the level of entailment between the generated content and the source content.&nbsp;</li>



<li><strong>QA-based metrics:</strong> Using question-answering systems to validate the consistency of information between the source content and the generated content.&nbsp;</li>



<li><strong>Uncertainty-based metrics:</strong> Assessing faithfulness by measuring the model’s confidence in its generated outputs.&nbsp;</li>



<li><strong>LLM-based metrics:</strong> Using LLMs as evaluators to assess the faithfulness of generated content through specific prompting strategies.&nbsp;</li>
</ul>



<p>PyCharm&#8217;s <a href="http://jetbrains.com/help/pycharm/hugging-face.html" target="_blank" rel="noopener">Hugging Face integration</a> lets you discover evaluation models and datasets without leaving the IDE. Use the <em>Insert HF Model</em> feature to search for hallucination or toxicity classifiers, and hover over any model or dataset name in your code to instantly preview its model card, including training data, intended use, and limitations. This means you can import a dataset, evaluate your LLM, and verify the tools you&#8217;re using, all from one place.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image1-2.png" alt="PyCharm's Hugging Face integration" class="wp-image-707885"/><figcaption class="wp-element-caption"><em>Opening the Hugging Face model browser in PyCharm from the </em><strong><em>Code</em></strong><em> menu, then selecting </em><strong><em>Insert HF Model</em></strong><em>.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image3.png" alt="PyCharm's &quot;Insert HF Model&quot; feature" class="wp-image-707898"/><figcaption class="wp-element-caption"><em>Searching for a specific hallucination model and selecting one. </em><strong><em>Use Model</em></strong><em> inserts a ready-to-use code snippet into the editor.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image2.png" alt="PyCharm's &quot;Use Model&quot; feature" class="wp-image-707911"/><figcaption class="wp-element-caption"><em>A ready-to-use code snippet of the </em><strong><em>Vectara hallucination evaluation model </em></strong><em>is inserted into the editor.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-19.png" alt="Vectara hallucination evaluation model" class="wp-image-707808"/><figcaption class="wp-element-caption"><em>Hovering over the </em><strong><em>Vectara hallucination evaluation model</em></strong><em> in the code to preview its model card within PyCharm.</em></figcaption></figure>



<p>Trust is imperative in the acceptance and adoption of technology. Trust in AI is especially important in areas such as healthcare, finance, personal assistance, autonomous vehicles, and others. Hallucinations have a huge impact on users&#8217; trust in LLMs.</p>



<p>In 2023, <a href="https://hai.stanford.edu/news/hallucinating-law-legal-mistakes-large-language-models-are-pervasive" target="_blank" rel="noopener">a story went viral</a> about a Manhattan lawyer who submitted a legal brief largely generated by ChatGPT. The judge quickly noticed how different it was from a human-written submission, revealing clear signs of hallucination. Incidents like this highlight the real-world risks of LLM errors and their impact on user trust. As people encounter more examples of hallucination, skepticism around LLM reliability continues to grow.</p>



<h3 class="wp-block-heading">Toxicity scores</h3>



<p>LLMs that have been pretrained on large datasets from the web have the tendency to generate harmful, offensive, and disrespectful content as well as toxic language, such as hate speech, harassment, threats, and biased language, which have a negative impact on their safe deployment. Toxicity detection is the process of identifying and flagging toxic content by integrating open-source tools or APIs into the LLM workflow to analyze both the user input and the LLM output. Some of the available toxicity tools include the <a href="https://developers.openai.com/api/docs/guides/moderation" target="_blank" rel="noopener">OpenAI Moderation API</a>, which is free, works with any text, and has a quick implementation. <a href="https://perspectiveapi.com/" target="_blank" rel="noopener">Perspective API</a> by Google is also widely used with a transparent methodology, but will no longer be in service after 2026. <a href="https://github.com/unitaryai/detoxify" target="_blank" rel="noopener">Detoxify</a>, which is open source, has no API costs, and is Python-friendly, and <a href="https://azure.microsoft.com/en-us/products/ai-services/ai-content-safety" target="_blank" rel="noopener">Azure AI Content Safety</a> by Microsoft, which is customizable and best for enterprise deployments and existing Azure users. <a href="https://huggingface.co/models?other=toxicity" target="_blank" rel="noopener">Hugging Face Toxicity Models</a> have many model options and easy integration with Transformers.</p>



<p>Toxicity detection has become a guardrail; hence, it is important in public-facing applications. They prevent toxic content from reaching users, which protects both individuals and organizations. In public-facing applications, toxicity detection operates by input filtering, output monitoring, and real-time scoring. This prevents attacks where users intentionally train AI to produce toxic content through coordinated toxic inputs; toxic content will never reach the user, even if produced by the underlying AI, so systems can adjust their behavior dynamically based on conversation content and escalating risks. Unguarded AI can be exploited, which leads to reputational damage.&nbsp;</p>



<p>For toxicity evaluation, PyCharm&#8217;s <a href="http://jetbrains.com/help/pycharm/hugging-face.html" target="_blank" rel="noopener">Hugging Face</a> <em>Insert HF Model feature </em>helps you discover classifiers like s-nlp/roberta_toxicity_classifier directly in the IDE. Hovering over the model name reveals its model card, where you can see it was trained on the Jigsaw toxic comment datasets, helping you understand what the model can and can&#8217;t detect before you write a single line of evaluation code.&nbsp;</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image4.png" alt="PyCharm's Hugging Face Insert HF Model feature" class="wp-image-707947"/><figcaption class="wp-element-caption"><em>Opening the Hugging Face model browser in PyCharm from the </em><strong><em>Code</em></strong><em> menu, then selecting the </em><strong><em>Insert HF Model</em></strong><em>.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image7-1.png" alt="PyCharm's &quot;Use Hugging Face Model&quot;" class="wp-image-707970"/><figcaption class="wp-element-caption"><em>Searching for a specific toxicity model and selecting one. </em><strong><em>Use Model</em></strong><em> inserts a ready-to-use code snippet into the editor.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image6-2.png" alt="" class="wp-image-707983"/><figcaption class="wp-element-caption"><em>A ready-to-use code snippet of the </em><strong><em>roberta_toxicity_classifier </em></strong><em>is inserted into the editor.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image9-2.png" alt="" class="wp-image-707996"/><figcaption class="wp-element-caption"><em>Hovering over the </em><strong><em>roberta_toxicity_classifier</em></strong><em> in the code to preview its model card within PyCharm.</em></figcaption></figure>



<h3 class="wp-block-heading">Frameworks for LLM evaluation</h3>



<p>Frameworks for LLM evaluation have changed the game; teams don’t have to rely on manual reviews, gut instinct, and subjective judgment to assess model quality. These frameworks automate the measurement of model quality using standardized, quantifiable metrics. They assign numerical scores to outputs that measure faithfulness, relevancy, toxicity, and other important dimensions. This automation results in reproducibility, speed, and objectivity.&nbsp;</p>



<p>Consequently, the same input always produces the same score; evaluation runs 10–100 times faster, so in minutes instead of days; and there are no more debates on the quality of the output. Some of these frameworks include <a href="https://deepeval.com/" target="_blank" rel="noopener">DeepEva</a>l and <a href="https://docs.ragas.io/en/stable/" target="_blank" rel="noopener">Retrieval Augmented Generation Assessment (Ragas)</a>. DeepEval is an open-source evaluation framework built with seven principles in mind, such as the ability to easily &#8220;unit test&#8221; LLM outputs in a similar way to Pytest and plug in and use over 50 LLM-evaluated metrics, most of which are backed by research and all of which are multimodal.&nbsp;</p>



<p>It is extremely easy to build and iterate on LLM applications with two modes of evaluation, namely, end-to-end LLM evals and component-level LLM evals. It is used for comprehensive testing across RAG, agents, and chatbots. Ragas is a framework for reference-free evaluation of RAG pipelines. There are several dimensions to consider, such as the ability of the retrieval system to identify relevant and focused context passages, as well as the capability of the LLM to exploit such passages in a faithful way; hence, it is challenging to evaluate RAG systems. Ragas provides a suite of metrics for evaluating these dimensions without relying on ground-truth human annotations.&nbsp;</p>



<h3 class="wp-block-heading">The limits of static prompt evaluation</h3>



<p>Traditional LLM evaluation methods are useful for single prompt-response pairs, measuring output quality, RAG systems with straightforward retrieval, and static evaluation with fixed inputs. But they are limited for multi-step agents because LLM evaluation focuses on the final output quality, not the decision-making process that produced it. Multi-step agents exhibit a different kind of complexity, as they chain multiple decisions.</p>



<h2 class="wp-block-heading">Why traditional LLM evaluation isn’t enough for agents&nbsp;</h2>



<p>Agents operate independently within complex workflows, and this independence can introduce challenges such as deviation from expected behavior, errors in production, and more failure points than in traditional software applications. Hence, an agent can perform well in testing but fail in production. Traditional LLM evaluations don’t have the capacity to test such use cases. Testing is usually done in a controlled environment with limited scenarios, but production involves real users, edge cases, unpredictable inputs, and scale. This means that agents can make decisions that are not seen in testing, and in production, tasks could be completed, though incorrectly, without generating an error signal. This is where advanced evaluation and monitoring practices come to the rescue! They provide the visibility and systematic measurement needed to deploy agents confidently, rather than relying on trial and error.</p>



<h3 class="wp-block-heading">The complexity of agent behavior</h3>



<p>Traditional LLM evaluation measures single prompt-response pairs: provide an input prompt, receive an output response, and measure quality through metrics such as accuracy, relevance, and faithfulness. Due to the complexity and non-deterministic, multi-step reasoning of AI agents, they cannot be reliably evaluated using traditional evaluation metrics.</p>



<p>Agent behavior is complex, and this complexity introduces challenges. Agents operate in dynamic environments where APIs might be down, databases change between queries, and the “right” answer depends on current conditions. They can use external tools and APIs to complete tasks, and may either use the wrong tool or use the right tool with the wrong parameters or input type. Their internal reasoning traces remain hidden unless they are logged explicitly, so it might be challenging to determine whether an agent was successful through logic or chance. An agent&#8217;s output could be perfectly correct despite poor internal decisions, or the entire task could fail despite correct step execution.</p>



<p>This is where observability tooling becomes essential. PyCharm&#8217;s <a href="http://blog.jetbrains.com/pycharm/2025/08/pycharm-2025-2/#ai-agents-debugger">AI Agents Debugger</a> breaks open the black box of agentic systems, letting you trace LangGraph workflows and inspect each agent node&#8217;s inputs, outputs, and reasoning directly in the IDE, with zero extra code. Just install the plugin, run your agent, and the debugger automatically captures execution traces. Click the <em>Graph</em> button to visualize the full workflow, making it easy to spot where an agent chose the wrong tool, passed bad parameters, or succeeded by luck rather than logic.</p>



<p>To see this in action, I built a simple travel-planning agent using LangGraph in two steps: a research node that suggests summer destinations based on my preferences, and a plan node that picks the best option and builds a three-day itinerary. With the AI Agents Debugger, you can trace exactly what information flowed between these two steps – what the research node suggested and how the planner used those suggestions to build the final itinerary.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image8-1.png" alt="" class="wp-image-708007"/><figcaption class="wp-element-caption"><em>The </em><strong><em>AI Agents Debugger</em></strong><em> shows how the agent moves from initialization to the research stage, displaying the data passed in and out, and the LLM call used to generate the research results.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image12.png" alt="" class="wp-image-708018"/><figcaption class="wp-element-caption"><em>The </em><strong><em>AI Agents Debugger</em></strong><em> shows how the planning step processes inputs and produces outputs, using an LLM call to construct the final travel itinerary.</em></figcaption></figure>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image10-1.png" alt="" class="wp-image-708029"/><figcaption class="wp-element-caption"><em>The </em><strong><em>Graph </em></strong><em>viewprovides a high-level overview of the agent’s workflow, mapping how it progresses from the initial step through research and planning to the final result.</em></figcaption></figure>



<h2 class="wp-block-heading">Advanced agent evaluation metrics</h2>



<p>The complexity of AI agents demands evaluation that goes beyond considering the final output quality, that is, measuring whether it is accurate, relevant, and grounded. Specialized agent evaluation assesses the complete decision-making process, including the planning logic, tool selection, parameter construction, reasoning coherence, and resource efficiency that led to the final output. Hence, the advanced agent evaluation metrics are designed to make such a process visible and measurable. Some of them are task completion rate, tool usage, reasoning quality, efficiency, and error handling.</p>



<h3 class="wp-block-heading">Task completion rate</h3>



<p>Task completion rate measures the percentage of tasks where an agent successfully achieves the end goal. This is calculated as the number of completed tasks divided by the total number of tasks attempted. The context of “completed” differs by use case. There are real-world use cases for task completion rate. Let’s start with a basic use case. Consider a customer service agent handling a specific food delivery order: &#8220;Where is my order #0001? It has not been delivered to me.” Completion rate means successfully looking up the order ID, retrieving the tracking information, and providing an accurate delivery estimate, so all three steps must succeed. If the agent retrieves the wrong order or fails to assess the tracking system, that is a failed task, even if it produces the same output.&nbsp;</p>



<p>Next, let us look at a medium-complexity use case, sequential API calls. Consider an agent tasked with creating a Jira support ticket and notifying the relevant team in Slack. The agent calls the Jira API to create a ticket, parses the response to get the ticket ID, calls the Slack API with the ticket link, and finally verifies the success of both. If the agent successfully creates the Jira ticket, but the Slack notification fails, that is considered a failed task even if the ticket exists in Jira, since the team wasn’t notified.&nbsp;</p>



<p>Finally, let’s examine a high-complexity use case: An agent is given the task of completing an online purchase, which means it must handle everything from checkout to order confirmation. Six steps are involved: Verify the item is still in stock, process the payment with a credit or debit card, reserve or decrement inventory, create an order record, generate an order confirmation number, and send a confirmation email to the customer. If the agent successfully charges the customer’s card but the confirmation email fails to send, that’s a failed task, even if the payment was processed and the order was created. In such a situation, the customer has no proof of purchase, so they will likely contact support or attempt to purchase again.</p>



<h3 class="wp-block-heading">Tool usage correctness</h3>



<p>Tool usage correctness assesses whether an agent correctly identifies and invokes the relevant tools and APIs. It is a deterministic measure that is assessed using techniques such as LLM as a judge, like most LLM evaluation metrics. It has three dimensions:&nbsp;</p>



<ul class="wp-block-list">
<li>Did the agent choose the right tool for the task (tool selection)?&nbsp;</li>



<li>Were the parameters constructed correctly (input parameters)?&nbsp;</li>



<li>Did the agent properly use the tool results (output handling)?&nbsp;</li>
</ul>



<p>Hence, it is important for reliability and functional correctness.&nbsp;</p>



<h3 class="wp-block-heading">Step-by-step reasoning accuracy</h3>



<p>In real-world use cases, an LLM agent’s reasoning is shaped by much more than just the model itself. Modern frameworks such as <a href="https://docs.langchain.com/oss/python/langchain/overview" target="_blank" rel="noopener">LangChain</a> expose the agent’s internal &#8220;thoughts&#8221; through structured logging of intermediate reasoning steps. This is done using the ReAct (Reasoning and Acting) pattern, which involves the agent thinking about what to do, using a tool, observing the tool result, and then repeating until the task is complete. Each “thought” is logged as text, which creates a complete trace of the reasoning process from initial query to final answer. These traces can be extracted programmatically and evaluated to assess whether the agent’s logic is sound even when the final output appears correct. Evaluating planning steps involves assessing aspects such as the overall approach&#8217;s logic, the ordering of steps, and whether any steps are unnecessary or redundant. Evaluating execution assesses whether the implementation worked, such as whether tools were called with correct parameters, whether each step was completed successfully, whether errors were handled appropriately, and whether the output was interpreted correctly. This can be done seamlessly in PyCharm using the <a href="https://plugins.jetbrains.com/plugin/26921-ai-agents-debugger/edit" target="_blank" rel="noopener">AI Agents Debugger</a>.</p>



<h3 class="wp-block-heading">Groundedness (faithfulness)</h3>



<p>Groundedness, also known as faithfulness, is the most critical metric for retrieval-augmented generation (RAG), which is a common component of agentic applications. It assesses whether the agent’s response is actually supported by the retrieved source documents or whether, instead, the model hallucinated information. Different evaluation techniques include:</p>



<ul class="wp-block-list">
<li><strong>Atomic claim verification:</strong> Breaks up the response into atomic claims and checks each claim against the retrieved context. It is slow but best for production RAG and thorough evaluation.&nbsp;</li>



<li><strong>Semantic similarity:</strong> Compares the embeddings of the response and source documents. It is fast, so it is best for quick checks and first-pass filtering.&nbsp;</li>



<li><strong>LLM-as-Judge:</strong> works by prompting the LLM to score groundedness by extracting factual statements from the response and then checking each statement against the retrieved context. It offers medium speed and is best for flexible, custom criteria.&nbsp;</li>
</ul>



<h2 class="wp-block-heading">AI observability and why it matters</h2>



<p>AI observability is about visibility into what the agent is doing. This covers recording everything that happens when a task is executed, including the agent’s reasoning at each step, which tools were called with what parameters, what data was retrieved, and how decisions were made from start to finish. With such a transparent system where every decision can be logged and traced, teams are able to understand why an agent fails, behaves unexpectedly, or becomes expensive to run because issues can be debugged and behavior can be audited. Consequently, system design improves, and guesswork is eliminated.</p>



<h3 class="wp-block-heading">Definition of AI observability</h3>



<p>AI observability is the real-time monitoring of agent actions, thoughts, and environmental interactions: what went in, what came out, how the agent thought through the problem, and which tools, APIs, and data were used. AI observability builds on the three pillars of DevOps observability – that is, metrics, logs, and traces – but extends each one for AI’s unique needs. DevOps metrics track CPU and latency, while AI metrics track token usage and cost per interaction. DevOps logs capture system errors, while AI logs capture reasoning traces and decision points. DevOps traces follow requests through services, while AI traces follow reasoning through agent steps, tool calls, and observations.</p>



<h3 class="wp-block-heading">Benefits for agent monitoring</h3>



<p>Agent monitoring has immense benefits – here are some of the most important:</p>



<ul class="wp-block-list">
<li><strong>It debugs reasoning errors:</strong> When an agent fails or gives an unexpected output, monitoring provides a complete trace of its decision-making process, which shows exactly where the logic broke down. Hence, there is no need to spend hours guessing the causes.</li>



<li><strong>It measures performance and latency over time:</strong> Since metrics such as average latency, token usage, cost per interaction, and completion rates across all queries are tracked, degradation patterns can be identified before they affect users. As a result, performance issues can be identified and resolved before users file any complaints.&nbsp;</li>



<li><strong>It identifies regressions after model or prompt updates:</strong> Baseline metrics such as completion rate, faithfulness scores, latency, and cost are established and then monitored for deviations after deployments. If a new prompt drops the compilation rate or a model update increases the hallucination rate, automated alerts catch it immediately. Hence, issues are caught before users are affected.</li>
</ul>



<h3 class="wp-block-heading">Popular tools for agent monitoring</h3>



<p>Several frameworks and platforms have emerged to provide built-in observability for AI agents, with each having different strengths and integration approaches and matching different features and requirements. The choice of the right tool depends on the framework, deployment preferences, and primary needs. The table below shows some popular tools and whether they match different features and requirements.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Tool</strong></td><td><strong>Traces agent steps?</strong></td><td><strong>Tracks costs?</strong></td><td><strong>Detects regressions?&nbsp;</strong></td><td><strong>Self-</strong><strong>hostable?</strong></td><td><strong>Open source?</strong></td><td><strong>Easy integration?</strong></td></tr><tr><td><a href="https://www.helicone.ai/" target="_blank" rel="noopener">Helicone</a></td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr><tr><td><a href="https://www.langchain.com/langsmith/observability" target="_blank" rel="noopener">LangSmith</a></td><td>Yes</td><td>Yes</td><td>Yes</td><td>Limited</td><td>No</td><td>Yes</td></tr><tr><td><a href="https://langfuse.com/" target="_blank" rel="noopener">LangFuse</a></td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Moderate</td></tr><tr><td><a href="https://github.com/traceloop/openllmetry" target="_blank" rel="noopener">OpenLLMetry</a></td><td>Yes</td><td>Limited</td><td>Limited</td><td>Yes</td><td>Yes</td><td>Moderate</td></tr><tr><td><a href="https://arize.com/docs/phoenix" target="_blank" rel="noopener">Phoenix</a></td><td>Yes</td><td>Limited</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Moderate</td></tr><tr><td><a href="https://www.trulens.org/" target="_blank" rel="noopener">TruLens</a></td><td>Yes</td><td>Limited</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Moderate</td></tr><tr><td><a href="https://www.datadoghq.com/" target="_blank" rel="noopener">DataDog</a></td><td>Limited</td><td>Yes</td><td>Yes</td><td>No</td><td>No</td><td>Moderate</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Best practices for evaluating agents in production</h2>



<p>Evaluation does not end after deployment; rather, it is intensified. This continuous evaluation tracks how much the system costs to run, how quickly it responds under various loads, and how it handles errors or unusual inputs. Without such evaluation, problems can only be identified after the users are affected. An agent can pass all the quality checks with excellent faithfulness scores, high completion rates, and strong reasoning but fail in production if costs spiral, latency increases, or edge cases cause instability. Hence, there is a critical need for ongoing evaluation and monitoring, which will lead to systems that are reliable, scalable, and financially sustainable.</p>



<h3 class="wp-block-heading">Monitor cost and latency</h3>



<p>Monitoring cost and latency is critical for production sustainability. Token usage and response time must be tracked continuously because small inefficiencies compound dramatically over time, and the cost per token of the powerful reasoning models used for agents can be high. Production workloads require cost and latency monitoring to identify problems before user experience and budget are impacted. Cost monitoring tracks token usage at different levels, such as per request, per query type, and over time. Without visibility into patterns generated by these, teams end up discovering cost problems through surprise bills. With monitoring, they can proactively cache common queries and optimize prompts to reduce token use. Latency monitoring reveals track response time and component breakdowns to identify bottlenecks.</p>



<p>Cost control in production workloads is important because production costs can spiral quickly, unmonitored systems can exceed budgets, and latency impacts user experience and retention.</p>



<h3 class="wp-block-heading">Combine offline and online evaluation</h3>



<p>Effective agent evaluation requires combining offline and online evaluation, where each addresses gaps the other leaves. Offline evaluation uses fixed test databases for reproducible benchmarking, which enables fast iteration on prompts and models in controlled environments without production risk. Online evaluation monitors real user interactions in production, which reveals edge cases in testing that were never expected, so it is useful for real-time feedback, user data, and observability tools. A combination of both results in an optimal strategy where offline evaluation validates changes before deployment, then online evaluation monitors production reality.&nbsp;</p>



<h3 class="wp-block-heading">Use human-in-the-loop when necessary</h3>



<p>LLM agents are appreciated for how they have played a positive role in the different ecosystems, but not every agent should run autonomously since they can misinterpret prompts, cross boundaries, or make dreadful errors that can’t be caught by automation alone. Hence, the need for human-in-the-loop failsafes. Human-in-the-loop is also essential during initial setup: Unless teams already have domain-specific evaluation datasets for monitoring the agent, these will need to be created manually by assessing the agent&#8217;s performance. A hybrid approach is required when critical decisions require human validation, such as approving transactions, modifying sensitive data, or triggering irreversible workflows. In this approach, it is important that decisions are routed through a human checkpoint before proceeding. The intention is not to slow automation but rather to ensure that the right decisions involve the right oversight. A well-designed human-in-the-loop system delivers compound returns over time. Every human correction becomes feedback, which improves the agent&#8217;s accuracy and gradually reduces the need for manual review. Human oversight isn’t treated as a failure but rather as a safety net that makes the system better with use.</p>



<h2 class="wp-block-heading">Final thoughts</h2>



<p>Fundamentally, AI agents are different from single-prompt LLMs. They navigate multi-step workflows, make autonomous decisions, and use external tools, which introduces complexities that demand continuous evaluation, not just static testing. Evaluation must evolve from pre-deployment checkpoints to ongoing monitoring. Production-ready agents aren&#8217;t just well-tested; they&#8217;re continuously observed and improved based on real behavior. LLM evaluation and AI observability enable faster, safer iteration by catching issues early and feeding production insights back into development.</p>



<p><a href="https://www.jetbrains.com/pycharm/whatsnew/" target="_blank" rel="noopener">PyCharm</a> streamlines agent development with integrated debugging, profiling, and testing. Step through reasoning with breakpoints, find cost bottlenecks, and iterate on evaluation tests rapidly. These workflows transform hours of debugging into minutes of systematic investigation. Explore PyCharm for AI development to see how integrated tools can help you build, evaluate, and deploy reliable AI agents.</p>



<h2 class="wp-block-heading" id="author">About the author</h2>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-1.jpeg" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Naa Ashiorkor</h4>
                                                <p><span style="font-weight: 400;">Naa Ashiorkor is a data scientist and tech community builder. She is deeply involved in the Python community and serves as an organizer for various conferences, including EuroPython. She is currently building PyLadies Tampere.</span></p>
                    </div>
                            </div>
        </div>
    </div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pyrefly LSP Integration with Type Engine in PyCharm 2026.1.2</title>
		<link>https://blog.jetbrains.com/pycharm/2026/05/pyrefly-lsp-integration-in-pycharm-2026-1-2/</link>
		
		<dc:creator><![CDATA[Cheuk Ting Ho]]></dc:creator>
		<pubDate>Fri, 15 May 2026 15:31:27 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/PC-social-BlogFeatured-1280x720-1-3.png</featuredImage>		<category><![CDATA[releases]]></category>
		<category><![CDATA[lsp]]></category>
		<category><![CDATA[type-inference]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=706872</guid>

					<description><![CDATA[In PyCharm 2026.1.2, you can enable Pyrefly as an external type provider, dramatically increasing the speed of the IDE’s code insight features. What is the Pyrefly LSP? “LSP” stands for the Language Server Protocol – a standardized protocol that allows code editors and IDEs to communicate with language servers. The LSP enables language servers to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In PyCharm 2026.1.2, you can enable <a href="https://pyrefly.org/" target="_blank" rel="noopener">Pyrefly</a> as an external type provider, dramatically increasing the speed of the IDE’s code insight features.</p>



<h2 class="wp-block-heading">What is the Pyrefly LSP?</h2>



<p>“LSP” stands for the <strong>Language Server Protocol</strong> – a standardized protocol that allows code editors and IDEs to communicate with <strong>language servers</strong>. The LSP enables language servers to provide code intelligence features, such as:</p>



<ul class="wp-block-list">
<li>Code completion</li>



<li>Information on hover (for example, quick documentation)</li>



<li><em>Go to definition </em>and other actions</li>



<li>Error checking and type-related diagnostics</li>
</ul>



<p></p>



<p>The key benefit of the LSP is that it allows a single language server to be used across multiple tools. This means that language-specific intelligence does not have to be implemented separately in every editor, IDE, or CI pipeline.</p>



<p>Pyrefly is Meta’s next-generation Python type checker, engineered from the ground up in Rust to replace its predecessor, Pyre (written in OCaml). With the move to Rust, Pyrefly achieves significantly faster performance and improved cross-platform portability. More than just a rewrite, it is designed to be more capable and robust, offering an efficient toolset for maintaining large-scale Python codebases with high precision and minimal overhead.</p>



<p>Pyrefly provides the following benefits:</p>



<ul class="wp-block-list">
<li><strong>Higher performance and efficiency</strong> – Thanks to its Rust-based architecture, Pyrefly achieves significantly faster speeds and improves cross-platform portability.&nbsp;</li>



<li><strong>Enhanced code intelligence</strong> – As an external type provider, Pyrefly powers essential code insight features in the IDE, including type inference, type-related diagnostics, quick documentation, and inlay hints.</li>



<li><strong>Scalability</strong> – Pyrefly is designed to handle <strong>large-scale Python codebases</strong> with high precision and minimal overhead.</li>
</ul>



<p>Pyrefly is highly beneficial for projects and developers dealing with <strong>large, complex Python codebases</strong> that prioritize performance and robust typing. Integrating Pyrefly via the LSP is part of our ongoing work to enhance code insight performance in PyCharm.</p>



<h2 class="wp-block-heading">Using Pyrefly in PyCharm</h2>



<p>Once enabled, Pyrefly powers all code insight functionality in PyCharm, including type inference and type-related diagnostics, quick documentation, and inlay hints. Delegating analysis to this faster engine delivers significantly improved performance.</p>



<p>To start using Pyrefly in your PyCharm project, go to the <em>Type</em> widget at the bottom of the window. By default, the IDE uses the built-in type engine. Click on the widget and select the option to use Pyrefly. If you do not have Pyrefly installed yet, PyCharm will install it automatically.&nbsp;</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/install-pyrefly.gif" alt="" class="wp-image-706921"/></figure>



<p>Once you’ve switched to the Pyrefly type engine, you will see a Pyrefly icon at the bottom, which you can hover over to check the version being used.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-15.png" alt="" class="wp-image-706874"/></figure>



<p>Please note that the integration currently works for local interpreter configurations. Support for Docker, Docker Compose, WSL, SSH, and multi-module projects is planned for future releases.</p>



<h2 class="wp-block-heading">Pyrefly vs. the built-in type engine</h2>



<p>Now let’s look at how Pyrefly and the built-in type engine behave in a complex Python project. In this FastAPI example, multiple files are typed, but in this file, the variable <em>ref </em>is incorrectly typed, causing four errors. When using the built-in type engine, the IDE identifies that something is wrong, but it suggests running further analysis to fix the problem, which requires an extra step.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image.jpeg" alt="" class="wp-image-706886"/></figure>



<p>Using Pyrefly as the type engine, the IDE reports errors immediately and highlights where they originate. However, it is worth noting that, in our example, there are four errors, but Pyrefly picks up only three of them. It misses the one in <code>self._storage[ref]</code>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/pyrefly-checking.gif" alt="" class="wp-image-706934"/></figure>



<h2 class="wp-block-heading">Download the latest version of PyCharm and try it out</h2>



<p>Ready to experience a dramatic leap in Python development performance? The Pyrefly type engine in PyCharm 2026.1.2 delivers the next generation of type checking. Engineered in Rust for unparalleled speed, it resolves files in as little as 0.5–1 seconds, significantly faster than the built-in engine. If you maintain large, complex Python codebases and prioritize robust typing, this feature is essential, as it allows you to delegate analysis to a faster engine and receive immediate type-related diagnostics. Download the latest version of PyCharm (2026.1.2) to unlock superior efficiency, scalability, and code insight.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Support for uv, Poetry, and Hatch Workspaces (Beta)</title>
		<link>https://blog.jetbrains.com/pycharm/2026/05/support-for-uv-poetry-and-hatch-workspaces-beta/</link>
		
		<dc:creator><![CDATA[Antonina Belianskaya]]></dc:creator>
		<pubDate>Wed, 13 May 2026 12:28:25 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/PC-social-BlogFeatured-1280x720-1-1.png</featuredImage>		<category><![CDATA[uv]]></category>
		<category><![CDATA[workspaces]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=706614</guid>

					<description><![CDATA[Workspaces are increasingly the go-to choice for companies and open-source teams aiming to manage shared code, enforce consistency, and simplify dependency management across multiple services. Working within massive codebases often means juggling many interdependent Python projects simultaneously. To streamline this experience, PyCharm 2026.1.1 introduced&#160;built-in support for uv workspaces, as well as those managed by Poetry [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Workspaces are increasingly the go-to choice for companies and open-source teams aiming to manage shared code, enforce consistency, and simplify dependency management across multiple services. Working within massive codebases often means juggling many interdependent Python projects simultaneously.</p>



<p>To streamline this experience, PyCharm 2026.1.1 introduced&nbsp;built-in support for uv workspaces, as well as those managed by Poetry and Hatch. This new functionality – currently in Beta – allows the IDE to automatically manage dependencies and environments across your entire workspace.</p>



<h2 class="wp-block-heading">Intelligent workspace detection</h2>



<p>When you open a workspace, PyCharm can now derive its entire structure and all its dependencies directly from your pyproject.toml files. This allows the IDE to understand relationships between projects deeply, significantly reducing the amount of configuration you have to do manually.</p>



<p>Because this is a fundamental change to how PyCharm handles your workspace, we’ve implemented it as an opt-in feature. Here is what you need to know about the transition:</p>



<ul class="wp-block-list">
<li><strong>Opt-in dialog:</strong> When you open a project, PyCharm may suggest enabling automatic detection for uv workspaces and Poetry/Hatch setups.&nbsp;</li>
</ul>



<figure class="wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" data-id="706672" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/opt-in-dialog.png" alt="" class="wp-image-706672"/></figure>



<figure class="wp-block-image size-large"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" data-id="706676" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/opt-in-dialog-example.png" alt="" class="wp-image-706676"/></figure>
</figure>



<ul class="wp-block-list">
<li><strong>Manual configuration:</strong> You can toggle workspace detection in <em>Settings | Project Structure</em>.</li>
</ul>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/manual-configuration.png" alt="" class="wp-image-706697"/></figure>



<ul class="wp-block-list">
<li><strong>Configuration note:</strong> If you previously manually edited settings in .idea files, those settings may be reset when you agree to the new model.</li>
</ul>



<h2 class="wp-block-heading">Managing workspaces and their projects</h2>



<p>PyCharm now provides an integrated experience that handles the complexities of multi-package setups in uv workspaces automatically. When you open a uv workspace, the IDE identifies the individual projects and their interdependencies, ensuring the project structure is ready for you to work with.</p>



<h3 class="wp-block-heading">Visualizing workspace dependencies</h3>



<p>Once the workspace is loaded, you can verify how your projects relate to one another. PyCharm presents these dependencies in <em>Settings | Project Dependencies</em>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/visualizing-workspace-dependencies.png" alt="" class="wp-image-706708"/></figure>



<p>These relationships are derived directly from your configuration and are shown as read-only in the UI. To make changes to the dependency graph, you can edit the pyproject.toml file manually – PyCharm will then update its internal model.</p>



<h3 class="wp-block-heading">Automatic environment configuration</h3>



<p>PyCharm prioritizes a zero-config approach to your Python SDK. When you open a .py or pyproject.toml file within a project, the IDE performs an immediate check.</p>



<p>If a compatible environment already exists on your system, PyCharm automatically configures it as the SDK for that project. If no environment is detected, a file-level notification will appear suggesting that you create a new uv environment and install the necessary dependencies for that project.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/automatic-environment-configuration.png" alt="" class="wp-image-706719"/></figure>



<h3 class="wp-block-heading">Maintaining environment consistency</h3>



<p>Beyond the initial setup, PyCharm continuously monitors the health of your environment to ensure it stays in sync with your defined requirements.&nbsp;</p>



<p>If a dependency is not defined in your pyproject.toml file but is imported in your code, PyCharm will trigger a warning with a <em>Sync project</em> quick-fix to resolve these discrepancies.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/maintaining-environment-consistency.png" alt="" class="wp-image-706730"/></figure>



<h3 class="wp-block-heading">Import management</h3>



<p>PyCharm also assists when you are actively writing code by identifying gaps in your project configuration.</p>



<p>If you import a package that isn’t present in the environment and is not yet listed in the project’s pyproject.toml, the IDE will detect the omission. A quick-fix will suggest adding the package to the environment and updating the corresponding .toml file simultaneously.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/import-management.png" alt="" class="wp-image-706741"/></figure>



<h3 class="wp-block-heading">Transparency via the <em>Python Process Output</em> tool window</h3>



<p>While PyCharm automates the backend execution of commands – such as uv sync &#8211;all-packages – it still remains fully transparent.</p>



<p>You can track all executed commands and their live output in the <em>Python Process Output</em> tool window. If synchronization fails for an environment, you can analyze the specific error logs to quickly identify the root cause.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-14.png" alt="" class="wp-image-706630"/></figure>



<h3 class="wp-block-heading">Poetry and Hatch workspaces</h3>



<p>The logic for Poetry and Hatch workspaces follows this exact same workflow. PyCharm detects projects via their pyproject.toml files and manages the environments with the same automated precision.</p>



<p>The only minor difference is in tool selection – the suggested environment tool is determined by what you have specified in your pyproject.toml. If no tool is specified, PyCharm will prioritize uv (if installed) or a standard virtual environment to get you up and running quickly.</p>



<h2 class="wp-block-heading">Looking ahead</h2>



<p>This Beta version of the functionality is just the beginning of our focus on supporting complex workspace structures. We are already working on expanding the UI to allow creating new projects, linking dependencies, and activating the terminal for specific projects.</p>



<p>As we refine these features, your feedback is our best guide – please share your thoughts or report any issues on our <a href="https://youtrack.jetbrains.com/issues/PY?u=1" target="_blank" rel="noopener">YouTrack issue tracker</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Python Unplugged on PyTV: Key Takeaways From Our Community Conference</title>
		<link>https://blog.jetbrains.com/pycharm/2026/05/python-unplugged-on-pytv-key-takeaways-from-our-community-conference/</link>
		
		<dc:creator><![CDATA[Evgenia Verbina]]></dc:creator>
		<pubDate>Thu, 07 May 2026 11:27:22 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/PyTV-Recap-YouTube-Thumbnail-Stream-1920x1080-1.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=pycharm&#038;p=704908</guid>

					<description><![CDATA[AI is changing how Python developers learn, build, and contribute to open source. At the same time, long-standing questions around community, sustainability, data workflows, and web development are becoming even more important. Python Unplugged on PyTV, a free online conference hosted by JetBrains PyCharm, brought these conversations together in over seven hours of talks and [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/PyTV-Recap-YouTube-Thumbnail-Stream-1920x1080-1.png" alt="Python Unplugged on PyTV: Key Takeaways From Our Community Conference" class="wp-image-704918"/></figure>



<p>AI is changing how Python developers learn, build, and contribute to open source. At the same time, long-standing questions around community, sustainability, data workflows, and web development are becoming even more important.</p>



<p><a href="https://lp.jetbrains.com/python-unplugged/" target="_blank" rel="noopener"><em>Python Unplugged on PyTV</em></a>, a free online conference hosted by JetBrains <a href="https://www.jetbrains.com/pycharm/" data-type="link" data-id="https://www.jetbrains.com/pycharm/" target="_blank" rel="noopener">PyCharm</a>, brought these conversations together in over seven hours of talks and discussions with developers, maintainers, educators, and tool builders from across the Python ecosystem.</p>



<p>Don’t have time to watch the full event? This blog post gives you a quick overview of what’s happening in Python today, based on talks from 13 Python experts – from AI-assisted development and open-source sustainability to modern data processing, Django, and community building.</p>



<h2 class="wp-block-heading">Watch the recap video</h2>



<p>Want to see the highlights from <em>Python Unplugged on PyTV</em>? Watch the full recap video below.</p>



<p>JetBrains’ Dr. Jodie Burchell, Data Scientist and Python Advocacy Team Lead; Cheuk Ting Ho, Data Scientist and Developer Advocate; and Will Vincent, Python Developer Advocate, discuss the key talking points from the day.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Python Unplugged on PyTV Recap | Key Takeaways From Our Community Conference" src="https://www.youtube.com/embed/eBc1dA9NB7A?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Need a quick overview? Here are the highlights</h2>



<p>If you’d rather get the key takeaways in a written format, we’ve broken down the biggest insights from the day below. From the evolving role of AI to the importance of the Python community, these are the moments that stood out most from <em>Python Unplugged on PyTV</em>.</p>



<h2 class="wp-block-heading">Highlight 1: Python goes beyond scripts and prototypes</h2>



<p>Many developers first come to Python through a specific use case: automating tasks, building prototypes, learning data science, or experimenting with AI and machine learning. That accessibility is one of Python’s strengths, but it’s only the entry point.</p>



<p>In her session, <a href="https://www.youtube.com/watch?v=DkN7P4Cmto8&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=1" data-type="link" data-id="https://www.youtube.com/watch?v=DkN7P4Cmto8&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=1" target="_blank" rel="noopener"><em>AI Practitioners Are Only Getting Half the Goodness of Python</em></a>, Deb Nicholson, Executive Director at the PSF, discussed how many AI and ML practitioners use Python mainly as a scripting or prototyping language. But Python is also used to build and maintain real-world software, supported by frameworks, data tools, testing workflows, packaging standards, and an active open-source community.</p>



<p>This broader context matters for learning, too. In his <a href="https://www.youtube.com/watch?v=i6SdsSj96ys" target="_blank" rel="noopener"><em>How to Learn Python</em></a> session, Mark Smith, Head of Python Ecosystem at JetBrains, focused on what comes after the fundamentals: building real projects, reading other people’s code, and developing the habits needed to move past &#8220;tutorial hell.&#8221;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="How to Learn Python the Right Way" src="https://www.youtube.com/embed/i6SdsSj96ys?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>AI can help, but it shouldn’t replace hands-on practice. As Cheuk noted in the recap video, one useful tip from Mark’s talk was to turn off AI features while learning, so beginners still build the judgment needed to understand and improve the code they work with.</p>



<h2 class="wp-block-heading">Highlight 2: The continuing role of community in Python</h2>



<p>Python’s success has always been rooted in its community, and that remains as true as ever. Georgi Ker, Director and Fellow at the PSF; Una Galyeva, Head of AI at Geobear Global; and Jessica Greene, Senior ML Engineer at Ecosia, showcased this in their <a href="https://youtu.be/qKkyBhXIJJU?t=8630" target="_blank" rel="noopener"><em>How PyLadies Is Shaping the Future of Python</em></a> discussion.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="How PyLadies Is Shaping the Future of Python" src="https://www.youtube.com/embed/gkdAcuRIs-o?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p><a href="https://pyladies.com/" target="_blank" rel="noopener">PyLadies</a> is an international mentorship group focused on helping more women become active participants and leaders in the Python community. The success of initiatives like PyLadies highlights how inclusive spaces can broaden participation and shape the future of the language.</p>



<p>As Will noted in our recap video, “Being part of the community is not just the code. It’s the conferences, it’s the people, it’s the live events – that’s what makes Python special.”</p>



<p>Python depends on a culture of shared responsibility, and contributors play a vital role. As AI brings more people into the ecosystem, preserving these values becomes even more important. Travis Oliphant, creator of <a href="https://numpy.org/" target="_blank" rel="noopener">NumPy</a>, touched on this in his insightful session, <a href="https://www.youtube.com/watch?v=opzIYSWWZ3E&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=9" data-type="link" data-id="https://www.youtube.com/watch?v=opzIYSWWZ3E&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=9" target="_blank" rel="noopener"><em>Community is More Than Code: People Are What Make Python Thrive, and Why That Will Continue in an AI-Enabled Era</em></a>.</p>



<p>There’s also a strong link between community and innovation, as Carol Willing, Core Developer at JupyterLab, explained in her session, <a href="https://www.youtube.com/watch?v=Wg99AGQcohY&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=13" data-type="link" data-id="https://www.youtube.com/watch?v=Wg99AGQcohY&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=13" target="_blank" rel="noopener"><em>Conversation, Computation, and Community: Key Principles for Solving Scientific Problems With Jupyter Notebooks and AI Tools</em></a>. Tools like <a href="https://www.jetbrains.com/help/pycharm/jupyter-notebook-support.html" target="_blank" rel="noopener">Jupyter</a> have thrived in part because they enable conversation, collaboration, and knowledge sharing among people.</p>



<h2 class="wp-block-heading">Highlight 3: AI poses both a threat and an opportunity for Python open source</h2>



<p>AI is fundamentally changing how developers interact with open source.</p>



<p>On the positive side, AI coding tools lower the barrier to entry and allow more people to contribute. However, this increased accessibility comes with trade-offs. Maintainers are now dealing with a higher volume of contributions, many of which require significant review or refinement. Deb Nicholson, Executive Director at the PSF, discussed this trade-off in more detail in her session, <a href="https://www.youtube.com/watch?v=DkN7P4Cmto8&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=1" data-type="link" data-id="https://www.youtube.com/watch?v=DkN7P4Cmto8&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=1" target="_blank" rel="noopener"><em>AI Practitioners Are Only Getting Half the Goodness of Python</em></a>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="What AI Developers Miss About Python" src="https://www.youtube.com/embed/DkN7P4Cmto8?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>This shift places additional pressure on those responsible for maintaining open-source projects. While AI can accelerate development, it also risks introducing poorly structured or low-quality code at scale.</p>



<p>Paul Everitt, Developer Advocate at JetBrains; Georgi Ker, Director and Fellow at the PSF; and Carol Willing, Core Developer at JupyterLab, pondered this in their <a href="https://www.youtube.com/watch?v=-P15to8sj60&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=3" target="_blank" rel="noopener"><em>Open Source in the Age of Coding Agents</em></a> discussion. Ultimately, AI can’t replace the human systems that sustain open source. Trust, collaboration, and shared ownership remain essential, and arguably become even more important as contribution volumes increase. The real challenge lies in ensuring communities remain healthy and resilient as they scale.</p>



<h2 class="wp-block-heading">Highlight 4: AI has also revolutionized how Python practitioners work</h2>



<p>Beyond its impact on open source, AI is transforming day-to-day development workflows.</p>



<p>As Marlene Mhangami, Senior Developer Advocate at Microsoft Agentic, explained in her <a href="https://www.youtube.com/watch?v=QrfsX-sW6QI&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=10" data-type="link" data-id="https://www.youtube.com/watch?v=QrfsX-sW6QI&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=10" target="_blank" rel="noopener"><em>A Practical Guide to Agentic Coding</em></a> session, coding is emerging as a new paradigm in which developers delegate tasks to AI systems capable of planning, executing, and refining code. This means the developer’s role is moving toward orchestration and validation, requiring new skills in guiding and evaluating AI outputs.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="A Practical Guide to Agentic Coding" src="https://www.youtube.com/embed/QrfsX-sW6QI?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>At the same time, development is becoming more conversational and exploratory. In environments like Jupyter, AI tools help users iterate faster, test ideas more easily, and move more fluidly between thinking and coding.</p>



<p>AI is also having a tangible impact on frameworks like Django, as discussed by Sheena O’Connell, Board Member at the PSF, in her talk, <a href="https://www.youtube.com/watch?v=MJMex1FNjXI&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=8" target="_blank" rel="noopener"><em>Powering Up Django Development With Claude Code</em></a>. AI tools can speed up development in <a href="https://www.jetbrains.com/pycharm/web-development/django/" target="_blank" rel="noopener">Django</a> by handling repetitive tasks such as boilerplate generation and debugging. However, this comes with a caveat – developers must remain critical and treat AI as a collaborator, not a source of truth.</p>



<p>For beginners, AI can be a powerful learning aid, but over-reliance can limit deeper understanding. Building projects, reading code, and actively solving problems remain essential for developing real expertise.</p>



<h2 class="wp-block-heading">Highlight 5: The importance of open-source AI</h2>



<p>The open-source AI ecosystem is expanding rapidly, bringing with it a growing landscape of models, datasets, and tools.</p>



<p>This openness drives collaboration, transparency, and innovation, making it easier for developers to experiment and build on existing work. At the same time, it introduces challenges around fragmentation and long-term sustainability.</p>



<p>As Merve Noyan, ML Engineer at Hugging Face, explained in her <a href="https://www.youtube.com/watch?v=Rz9uNpcfXFM&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=11" target="_blank" rel="noopener"><em>Open-Source AI Ecosystem</em></a> session, platforms like <a href="https://www.jetbrains.com/help/pycharm/hugging-face.html" target="_blank" rel="noopener">Hugging Face</a> play a key role in organizing this ecosystem and making it more accessible, while Python continues to connect tools, communities, and technologies.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Open-Source AI Ecosystem" src="https://www.youtube.com/embed/Rz9uNpcfXFM?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Highlight 6: Context is key for effective AI agents</h2>



<p>As AI systems become more advanced, the way they interact with their input data is becoming increasingly important. Tuana Çelik, Developer Relations Engineer at LlamaIndex, covered this in detail in her insightful <a href="https://www.youtube.com/watch?v=4QYA2X6Zlqg&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=12" target="_blank" rel="noopener"><em>Orchestrating Document-Centric Agents With LlamaIndex</em></a> talk.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Orchestrating Document-Centric Agents With LlamaIndex" src="https://www.youtube.com/embed/4QYA2X6Zlqg?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p><a href="https://www.llamaindex.ai/" target="_blank" rel="noopener">LlamaIndex</a> enables developers to build document-centric AI agents that retrieve, index, and reason over large collections of information. By structuring how documents are ingested and queried, it provides the LLM with much more context for the text it is processing, helping produce more accurate, context-aware responses.</p>



<p>This is particularly valuable in knowledge bases and enterprise assistants, where understanding relationships between pieces of information is as important as accessing the data itself.</p>



<h2 class="wp-block-heading">Highlight 7: How Polars is refining high-performance data processing</h2>



<p><a href="https://pola.rs/" target="_blank" rel="noopener">Polars</a> is pushing Python data processing toward a more scalable, production-ready future, as Polars creator Ritchie Vink explained in his <a href="https://www.youtube.com/watch?v=jGUQtWgUiVc&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=4" target="_blank" rel="noopener"><em>Towards Query Profiling in Polars</em></a> session.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Query Profiling in Polars" src="https://www.youtube.com/embed/jGUQtWgUiVc?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Its high-performance, lazy execution model allows queries to be optimized automatically behind the scenes. However, this level of abstraction can make it harder for developers to fully understand performance.</p>



<p>To address this, there’s a growing need for better tooling, particularly around query profiling. By exposing execution plans, memory usage, and bottlenecks, developers can make informed decisions and build more efficient data workflows.</p>



<p>With features like streaming execution, Polars is helping bridge the gap between local data processing and large-scale systems.</p>



<p>As Jodie highlighted in the recap discussion, this shift is bringing more advanced data concepts into everyday Python workflows. She commented, “It’s really interesting to see more big data ideas coming to local Python data processing.”</p>



<h2 class="wp-block-heading">Highlight 8: The power of typing in modern Python</h2>



<p>Typing in Python continues to evolve, with a growing focus on flexibility rather than rigid enforcement. Open-source Django projects creator Carlton Gibson shed more light on this during his talk, <a href="https://www.youtube.com/watch?v=j0cLwyChYOQ&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=6" target="_blank" rel="noopener"><em>Static Islands, Dynamic Sea: Some Thoughts on Incremental Typing</em></a>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Incremental Typing in Django" src="https://www.youtube.com/embed/j0cLwyChYOQ?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>The talk highlighted how developers are increasingly adopting an incremental approach. By creating “static islands” within a dynamic codebase, they can improve reliability, maintainability, and tooling without sacrificing Python’s core strengths.</p>



<p>In our recap video, Will agreed with this sentiment, adding, “It doesn’t have to be all-or-nothing. We don’t have to turn Python into something that it’s not.”</p>



<p>This approach is particularly useful in large frameworks like Django, where typing can help define clearer boundaries while still preserving developer ergonomics.</p>



<h2 class="wp-block-heading">Highlight 9: The Django renaissance: Debunking aging myths</h2>



<p>Django remains a modern, actively developed framework, as Django Fellow Sarah Boyce revealed in her session, <a href="https://www.youtube.com/watch?v=yyX0QoUzoE4&amp;list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb&amp;index=7" target="_blank" rel="noopener"><em>Django Has a Marketing Problem: Debunking the Myths That Won&#8217;t Die</em></a>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Debunking Django Myths" src="https://www.youtube.com/embed/yyX0QoUzoE4?list=PLCTHcU1KoD99wZ0UjDhMtxweI1JL82kcb" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Many of the criticisms that it’s outdated or unscalable don’t reflect the current reality. In practice, Django continues to evolve and power a wide range of applications.</p>



<p>The challenge is less about Django’s capabilities and more about perception, as the Django community was called to champion its strengths, ongoing evolution, and real-world impact.</p>



<p>Shifting this narrative will be key to ensuring its continued relevance and adoption in the years ahead.</p>



<h2 class="wp-block-heading">What’s next for <em>Python Unplugged on PyTV</em>?</h2>



<p><em>Python Unplugged on PyTV</em> was our first step in reimagining what a fully online community conference can look like, and the response was incredible.</p>



<p>Looking at the numbers, more than 5,500 people joined us during the livestream. Since then, we’ve had a further 110,000 watch the event recording, showing just how global and engaged the Python community really is.</p>



<p>We’d love to bring <em>Python Unplugged on PyTV</em> back next year. What would you like to see more of? Who should we invite as speakers? Are there topics we didn’t cover that you’d love to explore?</p>



<p>Drop your suggestions in the comments and help shape the future of <em>Python Unplugged on PyTV</em>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
