{"schemaVersion":1,"id":"https://lucioduran.com/projects/llm-semantic-cache","url":"https://lucioduran.com/projects/llm-semantic-cache","title":"LLM Semantic Cache","description":"SQLite exact and semantic answer caching with user, permission and version isolation, transactional invalidation and local evaluation of correct and incorrect reuse.","language":"en","datePublished":"2026-10-22","dateModified":"2026-10-22","contentFormat":"text/markdown","content":"[Projects](<https://lucioduran.com/projects>) / LLM Semantic Cache\n\n# LLM Semantic Cache\n\nSQLite exact and semantic answer caching with user, permission and version isolation, transactional invalidation and local evaluation of correct and incorrect reuse.\n\nAuthor: [Lucio Durán](<https://lucioduran.com/>) · Python 3.11.13 · License: [MIT](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE>)\n\nPage published: 2026-10-22 · Page updated: 2026-10-22\n\n[Repository](<https://github.com/lucioduran/llm-semantic-cache>) · [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/report.json>) · [Release v0.1.0](<https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0>)\n\n## Problem and relevance to agents\n\nSimilar questions can require different answers when users, permissions, entities, dates or sources change. Similarity does not authorize answer reuse, and embedding computation has a cost.\n\nThe project makes reuse boundaries explicit and measures whether net savings survive semantic-cache overhead. An unsafe diagnostic demonstrates what happens when those boundaries are ignored.\n\n## Architecture\n\n1. **Scope before similarity.** Filter by user, permissions, version, entity, date and embedding-model namespace before comparison. Attempt exact lookup before computing a query vector.\n2. **Transactional invalidation.** SQLite coordinates writes. A generation ticket captured before source access fences writes that predate an invalidation. Expiration, replacement and logical deletion are explicit.\n3. **Local model evaluation.** MiniLM embeddings and FLAN-T5-small generation process 48 fictional requests per policy. Saved answers, decisions, vectors and timings support replay without inference.\n\n- [Design and methodology](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/design.md>)\n\n## What this demonstrates\n\n- Reuse boundaries and rejection of stale in-flight writes after invalidation.\n- Separate measurement of correct hits, incorrect reuse and answer accuracy.\n- Net savings accounting including embedding, lookup, generation, writes and invalidation.\n\n## Published results\n\nOne fixed-order local run with 48 requests per policy on Intel Xeon W-3223 using four threads. MiniLM and FLAN-T5-small are revision-pinned; the similarity threshold is 0.90.\n\nHit rates use all requests as their denominator. Correct reuse requires identical scope, intended fact and reference value. Net savings include request-time work but exclude downloads, model loading and warmup.\n\n### Reuse and net time\n\n| Policy | Correct hits | Incorrect hits | Total time (s) | Time saved |\n| --- | --- | --- | --- | --- |\n| No cache | 0/48 | 0/48 | 3.893 | 0% |\n| Scoped exact | 12/48 | 0/48 | 2.915 | 25.1% |\n| Scoped semantic | 16/48 | 0/48 | 3.310 | 15.0% |\n| Scope-blind diagnostic | 8/48 | 32/48 | 0.717 | Invalid benefit |\n\nSemantic caching reused four more answers than exact caching but saved less time: 15.0% versus 25.1%. Query embeddings consumed 0.308 s. Generation variation also contributes; one run does not establish a stable performance ranking.\n\nThe scope-blind diagnostic produced 32 incorrect reuses, 80% of its hits. No cache, scoped exact and scoped semantic reached 100% answer exact match on simple numeric questions; this does not establish general safety. [Results summary](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/summary.json>).\n\n## Reproduce\n\nLibrary and replay use Python 3.11 or later and SQLite without model dependencies. Neural reproduction downloads two public models and uses the measured environment lock.\n\nUse a fresh output directory and one measurement at a time. Commands use POSIX and the lock targets Intel macOS. Callers must derive permissions and scope from trusted sources on every request.\n\n### Replay saved evidence\n\n```\ngit clone https://github.com/lucioduran/llm-semantic-cache.git\ncd llm-semantic-cache\ngit checkout 78efb52757165a2f1dc5cc2f76197317b853643a\npython -m scripts.verify results/reference/report.json\n```\n\n### Repeat the local measurement\n\n```\npython3.11 -m venv .venv\n. .venv/bin/activate\npython -m pip install -r requirements-models.lock\npython -m scripts.evaluate download\nOMP_NUM_THREADS=4 OPENBLAS_NUM_THREADS=4 MKL_NUM_THREADS=4 python -m scripts.evaluate run --output results/my-run\npython -m scripts.verify results/my-run/report.json\n```\n\n## Scope and limitations\n\n- The library does not authenticate users or infer permissions. A version omitting prompt, model, content or policy dependencies can allow stale reuse.\n- Overlapping reads may already hold an answer when invalidation occurs; there is no distributed revocation barrier. Global ticket invalidation may reject unrelated in-flight writes.\n- Linear semantic search per scope, without a vector index, single-flight generation, size limit or automatic pruning. Deletion is logical.\n- Small author-written corpus, one run and no timing intervals. This is not a security audit, scale test or general answer-quality evaluation.\n\n- [AI orchestration, memory and answer reuse](<https://lucioduran.com/blog/semantic-kernel-langchain-ai-orchestration>)\n\n## Sources and revision\n\nResults come from the report and traces included in v0.1.0. The report identifies the implementation commit but contains no execution timestamp. The release date is shown separately.\n\n- Reviewed revision: [` 78efb52757165a2f1dc5cc2f76197317b853643a `](<https://github.com/lucioduran/llm-semantic-cache/commit/78efb52757165a2f1dc5cc2f76197317b853643a>)\n- Revision recorded by the experiment: [` c9c450254b5e7875c04611b5e3e4d22addca6db6 `](<https://github.com/lucioduran/llm-semantic-cache/commit/c9c450254b5e7875c04611b5e3e4d22addca6db6>)\n- Release published: [v0.1.0](<https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0>) · 2026-10-21T23:13:38Z\n\n- [README and usage](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/README.md>)\n- [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/report.json>)\n- [Results summary](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/summary.json>)\n- [Original responses and traces](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/trace.jsonl>)\n- [Design and methodology](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/design.md>)\n- [Data and provenance](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/requests.json>)\n- [Frozen configuration](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/config.json>)\n- [Error analysis](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/methodology.md>)\n- [Models, revisions and licenses](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/model-notices.md>)\n- [Measured environment dependencies](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/requirements-models.lock>)\n- [MIT license](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE>)","headings":[{"level":1,"text":"LLM Semantic Cache","url":"https://lucioduran.com/projects/llm-semantic-cache#title"},{"level":2,"text":"Problem and relevance to agents","url":"https://lucioduran.com/projects/llm-semantic-cache#problem"},{"level":2,"text":"Architecture","url":"https://lucioduran.com/projects/llm-semantic-cache#architecture"},{"level":2,"text":"What this demonstrates","url":"https://lucioduran.com/projects/llm-semantic-cache#demonstrates"},{"level":2,"text":"Published results","url":"https://lucioduran.com/projects/llm-semantic-cache#results"},{"level":3,"text":"Reuse and net time","url":"https://lucioduran.com/projects/llm-semantic-cache#results-cache"},{"level":2,"text":"Reproduce","url":"https://lucioduran.com/projects/llm-semantic-cache#reproduce"},{"level":3,"text":"Replay saved evidence","url":"https://lucioduran.com/projects/llm-semantic-cache#reproduce-replay"},{"level":3,"text":"Repeat the local measurement","url":"https://lucioduran.com/projects/llm-semantic-cache#reproduce-inference"},{"level":2,"text":"Scope and limitations","url":"https://lucioduran.com/projects/llm-semantic-cache#scope"},{"level":2,"text":"Sources and revision","url":"https://lucioduran.com/projects/llm-semantic-cache#sources"}],"sections":[{"heading":"LLM Semantic Cache","level":1,"url":"https://lucioduran.com/projects/llm-semantic-cache","content":"[Projects](<https://lucioduran.com/projects>) / LLM Semantic Cache"},{"heading":"LLM Semantic Cache","level":1,"url":"https://lucioduran.com/projects/llm-semantic-cache#title","content":"SQLite exact and semantic answer caching with user, permission and version isolation, transactional invalidation and local evaluation of correct and incorrect reuse.\n\nAuthor: [Lucio Durán](<https://lucioduran.com/>) · Python 3.11.13 · License: [MIT](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE>)\n\nPage published: 2026-10-22 · Page updated: 2026-10-22\n\n[Repository](<https://github.com/lucioduran/llm-semantic-cache>) · [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/report.json>) · [Release v0.1.0](<https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0>)"},{"heading":"Problem and relevance to agents","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#problem","content":"Similar questions can require different answers when users, permissions, entities, dates or sources change. Similarity does not authorize answer reuse, and embedding computation has a cost.\n\nThe project makes reuse boundaries explicit and measures whether net savings survive semantic-cache overhead. An unsafe diagnostic demonstrates what happens when those boundaries are ignored."},{"heading":"Architecture","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#architecture","content":"1. **Scope before similarity.** Filter by user, permissions, version, entity, date and embedding-model namespace before comparison. Attempt exact lookup before computing a query vector.\n2. **Transactional invalidation.** SQLite coordinates writes. A generation ticket captured before source access fences writes that predate an invalidation. Expiration, replacement and logical deletion are explicit.\n3. **Local model evaluation.** MiniLM embeddings and FLAN-T5-small generation process 48 fictional requests per policy. Saved answers, decisions, vectors and timings support replay without inference.\n\n- [Design and methodology](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/design.md>)"},{"heading":"What this demonstrates","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#demonstrates","content":"- Reuse boundaries and rejection of stale in-flight writes after invalidation.\n- Separate measurement of correct hits, incorrect reuse and answer accuracy.\n- Net savings accounting including embedding, lookup, generation, writes and invalidation."},{"heading":"Published results","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#results","content":"One fixed-order local run with 48 requests per policy on Intel Xeon W-3223 using four threads. MiniLM and FLAN-T5-small are revision-pinned; the similarity threshold is 0.90.\n\nHit rates use all requests as their denominator. Correct reuse requires identical scope, intended fact and reference value. Net savings include request-time work but exclude downloads, model loading and warmup."},{"heading":"Reuse and net time","level":3,"url":"https://lucioduran.com/projects/llm-semantic-cache#results-cache","content":"| Policy | Correct hits | Incorrect hits | Total time (s) | Time saved |\n| --- | --- | --- | --- | --- |\n| No cache | 0/48 | 0/48 | 3.893 | 0% |\n| Scoped exact | 12/48 | 0/48 | 2.915 | 25.1% |\n| Scoped semantic | 16/48 | 0/48 | 3.310 | 15.0% |\n| Scope-blind diagnostic | 8/48 | 32/48 | 0.717 | Invalid benefit |\n\nSemantic caching reused four more answers than exact caching but saved less time: 15.0% versus 25.1%. Query embeddings consumed 0.308 s. Generation variation also contributes; one run does not establish a stable performance ranking.\n\nThe scope-blind diagnostic produced 32 incorrect reuses, 80% of its hits. No cache, scoped exact and scoped semantic reached 100% answer exact match on simple numeric questions; this does not establish general safety. [Results summary](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/summary.json>)."},{"heading":"Reproduce","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#reproduce","content":"Library and replay use Python 3.11 or later and SQLite without model dependencies. Neural reproduction downloads two public models and uses the measured environment lock.\n\nUse a fresh output directory and one measurement at a time. Commands use POSIX and the lock targets Intel macOS. Callers must derive permissions and scope from trusted sources on every request."},{"heading":"Replay saved evidence","level":3,"url":"https://lucioduran.com/projects/llm-semantic-cache#reproduce-replay","content":"```\ngit clone https://github.com/lucioduran/llm-semantic-cache.git\ncd llm-semantic-cache\ngit checkout 78efb52757165a2f1dc5cc2f76197317b853643a\npython -m scripts.verify results/reference/report.json\n```"},{"heading":"Repeat the local measurement","level":3,"url":"https://lucioduran.com/projects/llm-semantic-cache#reproduce-inference","content":"```\npython3.11 -m venv .venv\n. .venv/bin/activate\npython -m pip install -r requirements-models.lock\npython -m scripts.evaluate download\nOMP_NUM_THREADS=4 OPENBLAS_NUM_THREADS=4 MKL_NUM_THREADS=4 python -m scripts.evaluate run --output results/my-run\npython -m scripts.verify results/my-run/report.json\n```"},{"heading":"Scope and limitations","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#scope","content":"- The library does not authenticate users or infer permissions. A version omitting prompt, model, content or policy dependencies can allow stale reuse.\n- Overlapping reads may already hold an answer when invalidation occurs; there is no distributed revocation barrier. Global ticket invalidation may reject unrelated in-flight writes.\n- Linear semantic search per scope, without a vector index, single-flight generation, size limit or automatic pruning. Deletion is logical.\n- Small author-written corpus, one run and no timing intervals. This is not a security audit, scale test or general answer-quality evaluation.\n\n- [AI orchestration, memory and answer reuse](<https://lucioduran.com/blog/semantic-kernel-langchain-ai-orchestration>)"},{"heading":"Sources and revision","level":2,"url":"https://lucioduran.com/projects/llm-semantic-cache#sources","content":"Results come from the report and traces included in v0.1.0. The report identifies the implementation commit but contains no execution timestamp. The release date is shown separately.\n\n- Reviewed revision: [` 78efb52757165a2f1dc5cc2f76197317b853643a `](<https://github.com/lucioduran/llm-semantic-cache/commit/78efb52757165a2f1dc5cc2f76197317b853643a>)\n- Revision recorded by the experiment: [` c9c450254b5e7875c04611b5e3e4d22addca6db6 `](<https://github.com/lucioduran/llm-semantic-cache/commit/c9c450254b5e7875c04611b5e3e4d22addca6db6>)\n- Release published: [v0.1.0](<https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0>) · 2026-10-21T23:13:38Z\n\n- [README and usage](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/README.md>)\n- [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/report.json>)\n- [Results summary](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/summary.json>)\n- [Original responses and traces](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/trace.jsonl>)\n- [Design and methodology](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/design.md>)\n- [Data and provenance](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/requests.json>)\n- [Frozen configuration](<https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/config.json>)\n- [Error analysis](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/methodology.md>)\n- [Models, revisions and licenses](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/model-notices.md>)\n- [Measured environment dependencies](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/requirements-models.lock>)\n- [MIT license](<https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE>)"}],"links":[{"text":"Projects","url":"https://lucioduran.com/projects"},{"text":"Lucio Durán","url":"https://lucioduran.com/"},{"text":"MIT","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE"},{"text":"Repository","url":"https://github.com/lucioduran/llm-semantic-cache"},{"text":"Original evidence","url":"https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/report.json"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0"},{"text":"Design and methodology","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/design.md"},{"text":"Results summary","url":"https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/summary.json"},{"text":"AI orchestration, memory and answer reuse","url":"https://lucioduran.com/blog/semantic-kernel-langchain-ai-orchestration"},{"text":"78efb52757165a2f1dc5cc2f76197317b853643a","url":"https://github.com/lucioduran/llm-semantic-cache/commit/78efb52757165a2f1dc5cc2f76197317b853643a"},{"text":"c9c450254b5e7875c04611b5e3e4d22addca6db6","url":"https://github.com/lucioduran/llm-semantic-cache/commit/c9c450254b5e7875c04611b5e3e4d22addca6db6"},{"text":"v0.1.0","url":"https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0"},{"text":"README and usage","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/README.md"},{"text":"Original responses and traces","url":"https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/trace.jsonl"},{"text":"Data and provenance","url":"https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/requests.json"},{"text":"Frozen configuration","url":"https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/config.json"},{"text":"Error analysis","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/methodology.md"},{"text":"Models, revisions and licenses","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/model-notices.md"},{"text":"Measured environment dependencies","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/requirements-models.lock"},{"text":"MIT license","url":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com/"},{"@type":"WebSite","@id":"https://lucioduran.com/#website","url":"https://lucioduran.com/","name":"Lucio Durán","inLanguage":["en","es"],"publisher":{"@id":"https://lucioduran.com/#person"}},{"@type":"WebPage","@id":"https://lucioduran.com/projects/llm-semantic-cache#page","url":"https://lucioduran.com/projects/llm-semantic-cache","name":"LLM Semantic Cache","description":"SQLite exact and semantic answer caching with user, permission and version isolation, transactional invalidation and local evaluation of correct and incorrect reuse.","inLanguage":"en","author":{"@id":"https://lucioduran.com/#person"},"publisher":{"@id":"https://lucioduran.com/#person"},"isPartOf":{"@id":"https://lucioduran.com/#website"},"isAccessibleForFree":true,"mainEntity":{"@id":"https://lucioduran.com/projects/llm-semantic-cache#software"},"datePublished":"2026-10-22","dateModified":"2026-10-22","breadcrumb":{"@id":"https://lucioduran.com/projects/llm-semantic-cache#breadcrumb"}},{"@type":"SoftwareSourceCode","@id":"https://lucioduran.com/projects/llm-semantic-cache#software","name":"LLM Semantic Cache","description":"SQLite exact and semantic answer caching with user, permission and version isolation, transactional invalidation and local evaluation of correct and incorrect reuse.","url":"https://lucioduran.com/projects/llm-semantic-cache","codeRepository":"https://github.com/lucioduran/llm-semantic-cache","programmingLanguage":"Python","runtimePlatform":"Python 3.11.13","license":"https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/LICENSE","version":"v0.1.0","identifier":{"@type":"PropertyValue","propertyID":"git-commit","value":"78efb52757165a2f1dc5cc2f76197317b853643a"},"author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"isAccessibleForFree":true,"citation":["https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/README.md","https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/report.json","https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/summary.json","https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/results/reference/trace.jsonl","https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/design.md","https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/requests.json","https://raw.githubusercontent.com/lucioduran/llm-semantic-cache/78efb52757165a2f1dc5cc2f76197317b853643a/data/config.json","https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/methodology.md","https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/docs/model-notices.md","https://github.com/lucioduran/llm-semantic-cache/blob/78efb52757165a2f1dc5cc2f76197317b853643a/requirements-models.lock","https://github.com/lucioduran/llm-semantic-cache/releases/tag/v0.1.0"],"publisher":{"@id":"https://lucioduran.com/#person"},"mainEntityOfPage":{"@id":"https://lucioduran.com/projects/llm-semantic-cache#page"}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Projects","item":"https://lucioduran.com/projects"},{"@type":"ListItem","position":2,"name":"LLM Semantic Cache","item":"https://lucioduran.com/projects/llm-semantic-cache"}],"@id":"https://lucioduran.com/projects/llm-semantic-cache#breadcrumb"}]}],"contentHash":"0e614edca40d4c051f2dbf61cd7bf51f70382d733b8c547545b64ca3c63026ee","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/projects/llm-semantic-cache","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":46193,"contentBytes":7681}}
