Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
113 lines
3.6 KiB
Python
113 lines
3.6 KiB
Python
from pathlib import Path
|
||
from xml.etree import ElementTree
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
|
||
CHAPTER_1_LOCALE_ANCHORS = {
|
||
"es": {
|
||
2: ("Posentrenamiento", "externalizado"),
|
||
3: ("Prompt del sistema", "Sin historial"),
|
||
},
|
||
"ja": {
|
||
2: ("ポストトレーニング", "外部化学習"),
|
||
3: ("システム", "操作の繰り返し"),
|
||
},
|
||
"tr": {
|
||
2: ("Eğitim sonrası", "Dışsallaştırılmış öğrenme"),
|
||
3: ("Sistem istemi", "Tekrarlanan işlemler"),
|
||
},
|
||
}
|
||
|
||
CHAPTER_3_LOCALE_ANCHORS = {
|
||
"ar": {
|
||
10: ("ملخص عالمي", "الوثيقة الأصلية"),
|
||
12: ("غير وكيلي", "ReAct"),
|
||
},
|
||
"es": {
|
||
10: ("Resumen general", "Documento original"),
|
||
12: ("no agéntico", "ReAct"),
|
||
},
|
||
"hu": {
|
||
10: ("globális összegzés", "Eredeti dokumentum"),
|
||
12: ("Nem ágenses RAG", "ReAct"),
|
||
},
|
||
"id": {
|
||
10: ("Ringkasan global", "Dokumen asli"),
|
||
12: ("RAG non-agentik", "ReAct"),
|
||
},
|
||
"ja": {
|
||
10: ("全体要約", "元の文書"),
|
||
12: ("非エージェント", "ReAct"),
|
||
},
|
||
"ru": {
|
||
10: ("Глобальное резюме", "Исходный документ"),
|
||
12: ("Неагентный RAG", "ReAct"),
|
||
},
|
||
"ta": {
|
||
10: ("Global summary", "Original document"),
|
||
12: ("ஏஜெண்டிக் RAG", "ReAct"),
|
||
},
|
||
"tr": {
|
||
10: ("Genel özet", "Orijinal belge"),
|
||
12: ("Agentic olmayan RAG", "ReAct"),
|
||
},
|
||
}
|
||
|
||
|
||
def svg_text(locale: str, chapter: int, figure: int) -> str:
|
||
path = ROOT / f"book-{locale}" / "images" / f"fig{chapter}-{figure}.svg"
|
||
root = ElementTree.parse(path).getroot()
|
||
return "\n".join(text.strip() for text in root.itertext() if text.strip())
|
||
|
||
|
||
def assert_anchors(locale: str, chapter: int, figure: int, anchors: tuple[str, ...]) -> None:
|
||
text = " ".join(svg_text(locale, chapter, figure).split()).casefold()
|
||
for anchor in anchors:
|
||
assert (
|
||
anchor.casefold() in text
|
||
), f"{locale} Figure {chapter}-{figure} is missing {anchor!r}"
|
||
|
||
|
||
def test_chapter_1_localized_figures_match_their_captions():
|
||
for locale, localized_anchors in CHAPTER_1_LOCALE_ANCHORS.items():
|
||
for figure, anchors in localized_anchors.items():
|
||
assert_anchors(locale, 1, figure, anchors)
|
||
assert_anchors(locale, 1, 4, ("convert_currency", "assistant.reasoning"))
|
||
assert_anchors(locale, 1, 5, ("$web_search", "code_interpreter"))
|
||
|
||
assert_anchors("es", 1, 6, ("while not done:", "SWE-bench"))
|
||
|
||
|
||
def test_chapter_3_localized_figures_match_their_captions():
|
||
common_anchors = {
|
||
5: ("BM25", "④"),
|
||
6: ("Word2Vec", "2013"),
|
||
7: ("O(",),
|
||
9: ("0.87", "8.4"),
|
||
13: ("knowledge_base_search", "code_interpreter"),
|
||
14: ("ACME", "Anthropic"),
|
||
}
|
||
|
||
for locale, localized_anchors in CHAPTER_3_LOCALE_ANCHORS.items():
|
||
for figure, anchors in common_anchors.items():
|
||
assert_anchors(locale, 3, figure, anchors)
|
||
for figure, anchors in localized_anchors.items():
|
||
assert_anchors(locale, 3, figure, anchors)
|
||
|
||
for locale in CHAPTER_3_LOCALE_ANCHORS:
|
||
assert_anchors(locale, 3, 11, ("-A", "-B"))
|
||
|
||
assert_anchors("es", 3, 8, ("Score(Q,D)", "IDF"))
|
||
|
||
|
||
def test_chapter_4_localized_figures_match_their_captions():
|
||
expected_anchors = {
|
||
1: ("server/discover", "tools/list"),
|
||
2: ("discover_tools", "list_contributors"),
|
||
3: ("NVDA", "50K"),
|
||
}
|
||
|
||
for locale in ("es", "tr"):
|
||
for figure, anchors in expected_anchors.items():
|
||
assert_anchors(locale, 4, figure, anchors)
|