diff --git a/lib/docs/filters/pytorch/entries.rb b/lib/docs/filters/pytorch/entries.rb
index 85d2f06418..7b31d037d4 100644
--- a/lib/docs/filters/pytorch/entries.rb
+++ b/lib/docs/filters/pytorch/entries.rb
@@ -2,6 +2,9 @@ module Docs
class Pytorch
class EntriesFilter < Docs::EntriesFilter
def get_breadcrumbs
+ breadcrumbs = schema_breadcrumbs
+ return breadcrumbs unless breadcrumbs.empty?
+
breadcrumbs = if at_css('.pytorch-breadcrumbs')
css('.pytorch-breadcrumbs > li').map { |node|
node.content.delete_suffix(' >').strip
@@ -26,15 +29,19 @@ def get_name
end
def get_type
- if at_css('.pytorch-breadcrumbs')
- get_breadcrumbs[1]
+ breadcrumbs = get_breadcrumbs
+
+ if schema_breadcrumbs.any?
+ breadcrumbs.size > 2 ? breadcrumbs[-2] : breadcrumbs[-1]
+ elsif at_css('.pytorch-breadcrumbs')
+ breadcrumbs[1]
else
- get_breadcrumbs.size > 2 ? get_breadcrumbs[2] : get_breadcrumbs[1]
+ breadcrumbs.size > 2 ? breadcrumbs[2] : breadcrumbs[1]
end
end
def include_default_entry?
- !get_breadcrumbs.nil? && get_breadcrumbs.size >= 2
+ schema_breadcrumbs.any? || get_breadcrumbs.size >= 2
end
def additional_entries
@@ -61,6 +68,22 @@ def additional_entries
entries
end
+
+ private
+
+ def schema_breadcrumbs
+ @schema_breadcrumbs ||= css(
+ '[itemtype="https://schema.org/BreadcrumbList"] [itemprop="itemListElement"]'
+ ).filter_map do |node|
+ name = node.at_css('[itemprop="name"]')
+ next unless name
+
+ text = Nokogiri::HTML.fragment(name['content'] || name.content).text.strip
+ dangling_text = node.text.strip.delete_suffix('">') if name['content']
+ text = "#{text} #{dangling_text}" if dangling_text.present?
+ text
+ end.reject(&:empty?)
+ end
end
end
end
diff --git a/lib/docs/scrapers/pytorch.rb b/lib/docs/scrapers/pytorch.rb
index e45ac3b096..f1d797ab93 100644
--- a/lib/docs/scrapers/pytorch.rb
+++ b/lib/docs/scrapers/pytorch.rb
@@ -15,10 +15,30 @@ class Pytorch < UrlScraper
options[:max_image_size] = 1_000_000
options[:attribution] = <<-HTML
- © 2025, PyTorch Contributors
+ © 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
HTML
+ version '2.13' do
+ self.release = '2.13'
+ self.base_url = "https://docs.pytorch.org/docs/#{release}/"
+ end
+
+ version '2.12' do
+ self.release = '2.12'
+ self.base_url = "https://docs.pytorch.org/docs/#{release}/"
+ end
+
+ version '2.11' do
+ self.release = '2.11'
+ self.base_url = "https://docs.pytorch.org/docs/#{release}/"
+ end
+
+ version '2.10' do
+ self.release = '2.10'
+ self.base_url = "https://docs.pytorch.org/docs/#{release}/"
+ end
+
version '2.9' do
self.release = '2.9'
self.base_url = "https://docs.pytorch.org/docs/#{release}/"