# projects

name: perfume_subscription
domain: perfume
created_at: 2026-05-08 07:59:54.152798
updated_at: 2026-05-08 08:38:27.317584
config:
{"project_name": "perfume_subscription", "domain": "perfume", "target_entities": ["Perfume", "Brand", "Note", "Accord", "Mood", "Season", "Occasion"], "fields": ["name", "brand", "top_notes", "middle_notes", "base_notes", "accords", "mood_tags", "season_tags", "occasion_tags", "price", "review_keywords"], "sources": [{"name": "official_brand_site", "type": "official", "trust_level": 0.95, "base_url": null, "allowed_paths": [], "parser": "generic", "fetcher": "requests", "rate_limit_per_minute": 20, "respect_robots_txt": true}, {"name": "marketplace", "type": "marketplace", "trust_level": 0.8, "base_url": null, "allowed_paths": [], "parser": "generic", "fetcher": "requests", "rate_limit_per_minute": 15, "respect_robots_txt": true}, {"name": "review_site", "type": "review", "trust_level": 0.7, "base_url": null, "allowed_paths": [], "parser": "generic", "fetcher": "requests", "rate_limit_per_minute": 10, "respect_robots_txt": true}], "ontology": {"entity_types": ["Perfume", "Brand", "Note", "Accord", "Mood", "Season", "Occasion", "Review", "Price", "ProductPage"], "predicates": ["hasBrand", "hasTopNote", "hasMiddleNote", "hasBaseNote", "hasAccord", "evokesMood", "suitableForSeason", "suitableForOccasion", "similarTo", "soldBy", "hasPrice", "hasReviewKeyword"], "aliases": {"top_notes": "hasTopNote", "middle_notes": "hasMiddleNote", "heart_notes": "hasMiddleNote", "base_notes": "hasBaseNote", "accords": "hasAccord", "mood_tags": "evokesMood", "season_tags": "suitableForSeason", "occasion_tags": "suitableForOccasion", "review_keywords": "hasReviewKeyword"}}, "recommendation": {"target_entity_type": "Perfume", "weights": {"preferred_note": 2.0, "avoided_note": -3.0, "preferred_mood": 1.5, "season_context": 1.2, "occasion_context": 1.0}}, "update_policy": {"official": {"interval_days": 30}, "marketplace": {"interval_days": 7}, "review": {"interval_days": 14}}}


# entities

entity_type: Perfume
name: Neroli Summer Eau de Parfum
canonical_name: neroli summer eau de parfum
external_ids: {}
created_at: 2026-05-08 07:59:59.857812
updated_at: 2026-05-08 08:42:30.640157
metadata_json:
{"ai_fallback_reason": "LLM request failed 400: {\"error\":\"Failed to parse input at pos 0: <think>\\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\\n\\nPage text: \\\"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \\\"fresh\\\", \\\"green\\\" ]\\n\\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\\nThe price for this product is $87.95.\\n\\nExtract entities and cla"}


# pages

url: tests/fixtures/sample_perfume.html
title: Neroli Summer Eau de Parfum
content_hash: f633aa507c4dc58d53f3f76436e01ab99f8650b9422cca9aefb3fa390c7c93cd
fetched_at: 2026-05-08 08:38:27.324063
cleaned_text_summary:
Neroli Summer Eau de Parfum
Brand: Example Maison
Top notes: Bergamot, Neroli
Middle notes: Jasmine
Base notes: Musk
A fresh daily perfume for summer office wear.
Price $89

metadata_json:
{"parser": "generic", "url": "tests/fixtures/sample_perfume.html", "final_url": "tests/fixtures/sample_perfume.html"}


# claims

predicate: hasBrand
object_value: null
value_type: entity
claim_hash: c056c9dd45769920cedb585cea82b2363b4a7f29cb7220ee6325a65be24aac4a
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.863921
last_seen_at: 2026-05-08 08:42:30.646374
confidence_reason:
brand pattern matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: hasTopNote
object_value: null
value_type: entity
claim_hash: bb775af8070b14444edf96d379aab4710106cddf56e4531376fc63e800f4d0ec
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.866928
last_seen_at: 2026-05-08 08:42:30.649379
confidence_reason:
top_notes rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: hasMiddleNote
object_value: null
value_type: entity
claim_hash: 20154f4df16aac9e86fe47a4ac9dabe3cde24646553c138e3a77a2256a33f655
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.867929
last_seen_at: 2026-05-08 08:42:30.651382
confidence_reason:
middle_notes rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: hasBaseNote
object_value: null
value_type: entity
claim_hash: 6c06caa15e148b7de1abd88bf8ed1e607868f23f120c188d0ce4c38a343de2f9
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.868931
last_seen_at: 2026-05-08 08:42:30.652383
confidence_reason:
base_notes rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: hasAccord
object_value: null
value_type: entity
claim_hash: df60b2ea996cdfc9f8a2da3ed55e1301ed1b7a0d03526894f278797f79d11e72
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.869932
last_seen_at: 2026-05-08 08:42:30.652383
confidence_reason:
accords rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: evokesMood
object_value: null
value_type: entity
claim_hash: 0234454fbc113e7baaeab872d33f3b4d0481a2b2ddf8f5d1a22f316004b54048
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.870934
last_seen_at: 2026-05-08 08:42:30.653385
confidence_reason:
mood_tags rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: suitableForSeason
object_value: null
value_type: entity
claim_hash: 2ac6e387b0df503be1417eff459168774306813d3d634fef2f8c7dc75aa4aab9
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.870934
last_seen_at: 2026-05-08 08:42:30.654387
confidence_reason:
season_tags rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: suitableForOccasion
object_value: null
value_type: entity
claim_hash: c904d2e83b41b47d42fbe09eff606502bc8c0ccaaa8a1d4241da0d27cb5f9199
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.871935
last_seen_at: 2026-05-08 08:42:30.655388
confidence_reason:
occasion_tags rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: hasReviewKeyword
object_value: null
value_type: entity
claim_hash: e2d6407bf277512f0dbdee7e0876d9113e6123837bfe7def9147a3c32b6f51a6
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.873940
last_seen_at: 2026-05-08 08:42:30.656389
confidence_reason:
review_keywords rule matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


predicate: hasPrice
object_value: {"amount": 89.0, "currency": "$"}
value_type: literal
claim_hash: f9d3770795eaa0786f39adc2a3f2118f2cc0344db9c879de374a6f265bd399ed
extraction_method: perfume_rule_based
status: active
first_seen_at: 2026-05-08 07:59:59.874942
last_seen_at: 2026-05-08 08:42:30.657391
confidence_reason:
price pattern matched; AI fallback: LLM request failed 400: {"error":"Failed to parse input at pos 0: <think>\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\n\nPage text: \"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \"fresh\", \"green\" ]\n\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\nThe price for this product is $87.95.\n\nExtract entities and cla


# extraction_logs

extractor_name: llm_json_extractor_with_rule_fallback
provider: lm_studio_fallback
input_hash: f633aa507c4dc58d53f3f76436e01ab99f8650b9422cca9aefb3fa390c7c93cd
created_at: 2026-05-08 08:42:30.657391
raw_output:
{"entity_count": 12, "claim_count": 12, "ai_provider": "lm_studio", "ai_model": "deepseek-r1-0528-qwen3-8b", "ai_error": "LLM request failed 400: {\"error\":\"Failed to parse input at pos 0: <think>\\nFirst task is to extract ontology knowledge from the given page text based on the specified domain and entity types. The target entity types are Perfume, Brand, Note, Accord, Mood, Season, etc., but I need to return strict JSON only with the given shape.\\n\\nPage text: \\\"Nina Ricci Si by Nina Ricci is a fragrance that opens with top notes of Bergamot, Petitgrain and Coriander. Middle notes are neroli, ylang-ylang, iris, ambroxan, sandalwood, ginger. Base notes include vanilla, patchouli, cedar wood, musk, and vetiver. The mood tags for this fragrance is relaxing, fresh, suitableForSeason: spring, summer, autumn, evokesMood: romantic, day_to_night', 'suitable_for_season': ['Spring'], 'hasPrice': 120, 'review_keywords': [ \\\"fresh\\\", \\\"green\\\" ]\\n\\nBrand: The brand of the perfume is Guerlain. Bergamot has a top note with middle_notes and base notes including vanilla accord.\\nThe price for this product is $87.95.\\n\\nExtract entities and cla", "fallback": "rule_based"}


# evidence

evidence_summary: accords includes Fresh
created_at: 2026-05-08 07:59:59.869932
evidence_text:
ple Maison Top notes: Bergamot, Neroli Middle notes: Jasmine Base notes: Musk A fresh daily perfume for summer office wear. Price $89


evidence_summary: occasion_tags includes Daily
created_at: 2026-05-08 07:59:59.871935
evidence_text:
ison Top notes: Bergamot, Neroli Middle notes: Jasmine Base notes: Musk A fresh daily perfume for summer office wear. Price $89


evidence_summary: occasion_tags includes Office
created_at: 2026-05-08 07:59:59.872938
evidence_text:
 Neroli Middle notes: Jasmine Base notes: Musk A fresh daily perfume for summer office wear. Price $89


