fix: qualify patched Python model and cache dependencies
MariaDB persistence qualification / mariadb (push) Has been cancelled
MariaDB persistence qualification / mariadb (push) Has been cancelled
This commit is contained in:
@@ -9,3 +9,7 @@
|
||||
JobTrackerApi/DocumentFonts/*.ttf -text
|
||||
# Upstream notices retain their exact bytes, including original trailing spaces.
|
||||
JobTrackerApi/DocumentFonts/*.txt text eol=lf -whitespace
|
||||
|
||||
# Keep sidecar dependency identities stable across Windows and Linux checkouts.
|
||||
tools/summarizer/requirements*.lock text eol=lf
|
||||
docs/redesign/phase-9/p9-sec-02/model/data/*.pdf binary
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# SEC-M03 — bounded dependency remediation and actual runtime qualification
|
||||
|
||||
Application lock:49→55 packages; six existing versions change, two obsolete transitive dependencies disappear and eight required transitive dependencies enter through the reviewed major-library transitions. This is not an unrestricted upgrade. Exact changes and new graph identities are in [dependency-checkpoint.json](dependency-checkpoint.json).
|
||||
|
||||
| Owner | Before | After | Reason |
|
||||
| --- | --- | --- | --- |
|
||||
| filelock |3.32.4 |4.2.1 |Published fixes; explicit cache security constraint, native/soft/Hub contention qualified |
|
||||
| Torch CPU |2.6.0+cpu |2.13.0+cpu |Latest first-patched bound among reviewed fixable records; actual official CPU wheel, no CUDA download |
|
||||
| Transformers |4.48.3 |5.10.0 |Reviewed fixed bounds; real BART/tokenizer/generation/API qualification |
|
||||
| Hub |0.36.2 |1.33.0 |Required compatible1.x dependency, exact locked/tested choice |
|
||||
| tokenizers |0.21.4 |0.22.2 |Required compatible ABI range, actual pinned BART tokenizer/Unicode roundtrip |
|
||||
| sympy |1.13.1 |1.14.0 |Torch dependency requirement |
|
||||
|
||||
New required graph members: httpcore,httpx,markdown-it-py,mdurl,pygments,rich,shellingham,typer. Requests and charset-normalizer leave this resolved graph; existing reviewed TLS/build constraints remain. Forty-one old pins are unchanged. All55 downloaded Linux wheels were hash-checked and match the committed lock; the real Dockerfile also installs with `--require-hashes`.
|
||||
|
||||
The new `requirements-dev-linux.lock` preserves every one of the55 runtime pins and adds exactly six existing-test dependency requirements. Broader installed-environment scanning found **one additional alias group**, pytest CVE-2025-71176/GHSA-6w46-j5rx-g56g (four overlapping provider records), beyond the original109 application groups. [Vendor9.0.3](https://github.com/pytest-dev/pytest/releases/tag/9.0.3) and [the fix](https://github.com/pytest-dev/pytest/commit/95d8423bd24992deea5b9df32555fa1741679e2c) identify the temporary-directory repair. The dev pin changes8.3.5→9.0.3, the test lock is regenerated and the complete59-case Linux suite passes without warnings. No test assertion is weakened. The other test-only packages are httpcore2,httpx2,iniconfig,pluggy,truststore; bootstrap pip/wheel are separately inventoried. Neither pytest nor these test extras are added to the application lock.
|
||||
|
||||
## Real supported runtime
|
||||
|
||||
The actual source Dockerfile was rebuilt locally with Python3.12.10/Debian12, the exact55-package CPU lock and native Tesseract5.3.0. A derived, network-free qualification layer adds only the six hashed test extras. [RUNTIME.json](model/RUNTIME.json) records the two actual local image IDs; these are not pullable registry manifest references and no image was uploaded or deployed.
|
||||
|
||||
The initial real build revealed stale `.venv-lock-check`/`.venv.stale-*` directories entering the context. Only that owned build client/plugin was cancelled; its log/outcome remain. Changing `.dockerignore` from `.venv` to `.venv*` reduces the clean context to602.86kB. Actual image inventory verifies no `/app/.venv*` exists. Existing local directories and Docker services are untouched.
|
||||
|
||||
[qualification.json](qualification.json) contains actual process outcomes, input hashes and results. All lanes run without an application-source mount: the code is the built source image, checked by SHA256 against the working source. Nonroot65534, read-only root/fixture/helper mounts, network none, private tmpfs, twoCPU,2GiB,128PIDs and a180-second parent deadline are enforced. Containers are verified absent afterward.
|
||||
|
||||
- Complete sidecar:59/59, zero failed/skipped, using pytest9.0.3 and the actual61-package application/test lock.
|
||||
- Safetensors and restricted PyTorch-state profiles: real BART class/tokenizer/native CPU generation, exact Norwegian tokenizer roundtrip,1024-token truncation, finite logits, short/long generation, actual summary/auth/repeat-cache contract. Each profile stays below one second after imports in this bounded fixture; this is not a full-model latency claim.
|
||||
- Cache: five real artifact-integrity failures rejected before loading; native/soft/Hub cross-process contention expires, then acquires after release; missing offline model returns503 with no partially loaded state. Separate same-version Windows native/soft contention passes. No shared-cache upgrade or Windows ACL/symlink attack is claimed.
|
||||
- Parsers: actual resource-bounded TXT/DOCX/PDF children preserve Norwegian content; native OCR on synthetic PNG and image-only PDF preserves the expected phrase. Actual uvicorn readiness/authenticated summary/cache and upload extraction pass over container loopback; the owned server stops afterward. English traineddata SHA256 is retained.
|
||||
- Inventory: Python/native package versions, all55 installed pins,61 test pins plus bootstrap pip/wheel (63 distributions total), pip check, CPU build details, code hashes and OCR artifact hash are recorded.
|
||||
|
||||
The first52PASS/7FAIL Linux suite is retained: an empty harness Ollama URL failed URL construction before seven existing mocks. Its corrected loopback-only successor passed59/59. Early httpx fallback deprecations are retained; the final exact test layer uses the existing supported httpx2 requirement and has no warning. Earlier model/profile runs and focused checks are not added to final suite totals.
|
||||
|
||||
## Security accounting and limits
|
||||
|
||||
Exact installed queries cover63 distributions/126 requests, zero advisory records. OSV accepts the exact CPU local version; PyPI returns404 for `torch==2.13.0+cpu`. That known second-provider coverage gap is retained as INCOMPLETE rather than reported as a clean request. The official CPU wheel identity/hash and current vendor/security source assessment provide separate evidence. Application55 queries likewise have zero records and the same vendor-release limitation. No suppression or owner risk acceptance is asserted.
|
||||
|
||||
Original109 groups remain traceable as65 previous repairs plus44 individual follow-ups. The [current source assessment](advisory-current-scope.md) supports ten explicitly scoped non-applicability dispositions (unshipped/unused conversion, alternate architectures, export archive loader and the disputed numeric chain); it does not claim those upstream flaws globally fixed. Full final dispositions and Phase9 gates are reconciled after broad regression.
|
||||
|
||||
Full trained DistilBART, semantic quality, GPU, production cache ownership/migration, real device/provider/manual acceptance and live filesystem/recovery state remain unqualified. The source Dockerfile still has mutable base/apt/bootstrap inputs: this measured immutable local image is retained, while a future rebuild must record its actual identities and requalify. Production digest/supply-chain pinning and release approval remain separate gates. The bounded worker deadline/parser cancellation controls do not establish application-level cancellation of in-flight full-model inference.
|
||||
@@ -13,3 +13,9 @@ CI-M01: read-only assessment complete; hosted BLOCKED/current isolation UNVERIFI
|
||||
SEC-M03 in progress: candidate55-package CPU lock resolves;110 exact advisory requests report0 records with the known exact-vendor PyPI404 retained. Both real offline BART serialization profiles PASS, including summary/auth/repeat-cache contract. Complete Linux suite initially52PASS/7FAIL because harness supplied an empty Ollama URL; retained predecessor. Corrected isolated loopback fixture passes59/59 with one documented Starlette/httpx deprecation. Current production requirements are not yet replaced by this candidate.
|
||||
|
||||
Shared loader pin repair: new unit test failed missing immutable revision, then complete native Windows suite59/59 PASS. Tokenizer/model now share immutable revision, deny remote code and request weights_only. Same model identity, no deployment or output-quality acceptance.
|
||||
|
||||
SEC-M03 checkpoint: six bounded application/transitive version updates applied;49→55 exact runtime pins,41 old pins unchanged,55 wheel hashes verified. Added61-pin Linux test lock preserving all55 runtime versions. New test-only pytest advisory discovered outside original109; pin9.0.3 repairs its published range. Actual63-distribution rescan has0records,1retained exact CPU vendor PyPI404. Both actual model formats (including1024-token/finite-logit tests),59 sidecar cases,9 cache failures/lock cases,5 parser/OCR children plus actual HTTP startup and full inventory PASS on the rebuilt source runtime plus exact test extras. No inference mocked; no full trained/GPU/semantic claim.
|
||||
|
||||
Build preservation repair: the real source build initially included stale virtualenv directories. Cancelled only its owned Docker/buildx client tree; retained failed/cancelled evidence. `.venv*` context exclusion yields602.86kB and actual image contains no virtualenv directory. No filesystem repair, cache deletion, Docker service restart or production change. Dependency files receive narrow LF attributes for stable Windows/Linux lock identities.
|
||||
|
||||
REG-M01 broad regression remains pending; previous1130/935/362/35/PDF24 counts remain historical until successor execution. Final acceptance and109-group final disposition table are not inferred from a zero-match scan.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
# P9-SEC-02 current image advisory scope
|
||||
|
||||
**Nine upstream no-fix groups and CVE-2025-55554 have defensible “Not affected with evidence” dispositions for this exact CPU BART service path. The upstream no-fix states and55554 global patch discrepancy remain visible.** These are scoped applicability conclusions, not a claim that all44 groups are globally fixed.
|
||||
|
||||
Inspected clean runtime image `sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331` using two successful network-none, read-only, non-root, bounded static captures. The generation capture needed one recorded repair retry because5.10 lacks optional generation/beam_search.py; initial failure and actual file membership remain in raw evidence. Runtime: torch2.13.0+cpu, Transformers5.10.0, filelock4.2.1, Hub1.33.0, tokenizers0.22.2. App hash matches the qualification checkpoint; lock hash `3a3afc529f0076a1b5d67082c9269c22c12f52c47ecf95ce0c76c37b39d8297a`. Original research files remain unchanged.
|
||||
|
||||
The app now pins `sshleifer/distilbart-cnn-12-6` at `a4f8f3ea906ed274767e9906dbaede7531d660ff`, explicitly rejects remote code and requests weights_only=True. Verified reference config identifies BART/BartForConditionalGeneration; actual5.10 AutoModelForSeq2SeqLM mapping selects that class. The full1,222,317,369-byte model checkpoint is absent: its expected hash is recorded, but its bytes/hash, full inference, resource use and output quality are not verified.
|
||||
|
||||
## What changed in the installed source
|
||||
|
||||
Only one converter remains in the actual5.10 model tree: unrelated Gemma4. The five named vulnerable converter CLIs are absent. Transformer-XL files are removed. GLM4 is now present and Perceiver remains present, but both are absent from the seq2seq AutoModel mapping. BART tokenizer now aliases the RoBERTa backend; no Transformer-XL pickle vocabulary route exists in this flow.
|
||||
|
||||
PyTorch2.13 still exposes unsafe PT2 loading: export.load calls load_pt2, whose package helpers contain weights_only=False and pickle.loads. The app reaches a different boundary: Transformers load_state_dict uses safetensors or torch.load with explicit weights_only=True. There is no export.load call/model-upload API. This is actual indirect-path evidence, not merely an absent direct torch.load application search.
|
||||
|
||||
## Ten retained alias groups
|
||||
|
||||
| Group / all aliases | Current scoped disposition | Actual current-source/application evidence | Limit |
|
||||
| --- | --- | --- | --- |
|
||||
| [CVE-2025-55554](https://gist.github.com/shaoyuyoung/0e7d2a586297ae9c8ed14d8706749efc)<br>BIT-pytorch-2025-55554, PYSEC-2025-206 | Not affected with evidence | Current BART forward, generation utils, logits processors and generation config sources contain ZERO nan_to_num calls. Beam search3278 invokes the model,3295 uses float log_softmax,3020 chooses topk indices,3023/3026 derive beam/token IDs by integer division/modulo; it does not cast sanitized float scores to long. Existing .long calls convert attention masks/beam masks, not nan_to_num results. CPU auto-compile criteria2052 exclude CPU unless explicit _compile_all_devices is configured; app passes no compile configuration. remove_invalid_values defaultsFalse and even its optional processor1674-1678 uses torch.where returning float scores, with no long cast. | Upstream issue151510 remains open and no global fix is verified. Named operation chain is excluded from this exact CPU BART entry-point; this does not prove all native numerical code correct or full trained-model inference qualified. |
|
||||
| [CVE-2026-4538](https://github.com/pytorch/pytorch/)<br>BIT-pytorch-2026-4538, PYSEC-2026-139 | Not affected with evidence | Current2.13 export.load283 still calls load_pt2; pt2_archive/_package.py891-892 and949-950 explicitly load weights_only=False and978 calls pickle.loads. This is real retained unsafe functionality. App.from_pretrained uses Transformers load_state_dict337, whose .bin fallback384 calls torch.load(weights_only=weights_only); app explicitly supplies True. Neither app nor parser accepts .pt2 model uploads or calls export.load. | Do not equate ordinary torch.load(.bin,weights_only=True) with torch.export.load(.pt2). No full checkpoint is needed to prove these distinct entry points; adding export/compile/package APIs invalidates the scoped exemption. |
|
||||
| [CVE-2025-14929](https://osv.dev/vulnerability/PYSEC-2025-217)<br>PYSEC-2025-217 | Not affected with evidence | Five named conversion CLIs are absent from the actual5.10 wheel, including X-CLIP. The sole installed conversion script is unrelated Gemma4. AutoModelForSeq2SeqLM.from_pretrained selects an existing BART class, not a conversion script. HTTP text/uploads cannot choose an X-CLIP checkpoint conversion command. | Named script absent; no new global vendor fix claim. |
|
||||
| [CVE-2025-14926](https://osv.dev/vulnerability/PYSEC-2025-214)<br>PYSEC-2025-214 | Not affected with evidence | SEW conversion script is absent. BART model initialization does not run SEW convert_config, and the service accepts no converter/model-path arguments. | Named script absent; arbitrary operator-installed conversion tooling is outside this image scope. |
|
||||
| [CVE-2025-14930](https://osv.dev/vulnerability/PYSEC-2025-218)<br>PYSEC-2025-218 | Not affected with evidence | Unlike4.48.3, GLM4 modules are present in5.10. Its Glm4ForCausalLM maps to a different AutoModel family; GLM4 is absent from the seq2seq mapping. Verified pinned config declares model_type=bart and BartForConditionalGeneration. Request text cannot change config/model family. | Do not claim GLM4 code is absent or globally fixed. ZDI does not identify a precise loader function; conclusion is family/entry-point separation only. |
|
||||
| [CVE-2025-14920](https://osv.dev/vulnerability/PYSEC-2025-211)<br>PYSEC-2025-211 | Not affected with evidence | Perceiver modules remain installed. Perceiver appears in generic/masked-LM/classification mappings, but not AutoModelForSeq2SeqLM mapping. Verified pinned BART config selects BART. BART tokenizer/generate do not dispatch Perceiver model parsing. | ZDI mechanism is broad; the scoped finding excludes its named architecture, not all deserialization. Shared torch.load boundary is separately patched/qualified, never assumed harmless. |
|
||||
| [CVE-2025-14921](https://osv.dev/vulnerability/PYSEC-2025-212)<br>PYSEC-2025-212 | Not affected with evidence | Actual5.10 installed model inventory contains no transfo_xl package/files. The old4.48.3 unsafe TransfoXL tokenizer path no longer exists. Selected tokenizer implementation is BART/RoBERTa backend, not a pickle vocabulary tokenizer. | Code removal from this wheel is direct current-source evidence; it does not establish an upstream CVE patch release for every distribution. |
|
||||
| [CVE-2025-14924](https://osv.dev/vulnerability/PYSEC-2025-213)<br>PYSEC-2025-213 | Not affected with evidence | Megatron conversion script is absent from5.10 wheel. Fixed BART loader consumes standard weights, not converter CLI inputs or Megatron checkpoint arguments. | General BART .bin loading still uses torch.load; this is a distinct patched weights_only boundary and not a Megatron conversion exemption for all code. |
|
||||
| [CVE-2025-14927](https://osv.dev/vulnerability/PYSEC-2025-215)<br>PYSEC-2025-215 | Not affected with evidence | SEW-D conversion script absent. Auto seq2seq BART loader and request text do not invoke SEW-D convert_config or execute user conversion strings. | Reassess if conversion tooling or audio-model support added. |
|
||||
| [CVE-2025-14928](https://osv.dev/vulnerability/PYSEC-2025-216)<br>PYSEC-2025-216 | Not affected with evidence | HuBERT conversion script absent. App exposes fixed BART text generation and separate PIL/Tesseract/pypdf extraction; no HuBERT audio conversion route. | No global vendor fix claim; boundary is named converter absence plus fixed BART dispatch. |
|
||||
|
||||
## Acceptance criterion and remaining risk
|
||||
|
||||
A scoped Not affected conclusion is legitimate when the exact installed script is absent or the named API/family is excluded by fixed app calls, current loader mapping and verified pinned config, and untrusted HTTP input cannot select a different entry point. Full numerical model weights are not needed to distinguish a conversion CLI or torch.export.load from ordinary BART loading. Preserve upstream no-fix state, aliases and published severity; reopen the finding if accepted model formats, architecture, loader arguments, cache trust or packages change.
|
||||
|
||||
CVE-2025-55554 was reassessed after the additional generation source trace. BART forward, generation utils, logits processors and generation config contain no nan_to_num call. Beam search uses float log_softmax and topk indices with integer division/modulo, not sanitized float-to-long conversion. Existing .long calls convert masks. CPU auto-compile is excluded unless an explicit compile-all-devices config is provided; app supplies none. Even optional InfNanRemoveLogitsProcessor uses torch.where with float output, not nan_to_num().long(). These concrete entry-point facts justify scoped Not affected; synthetic finite logits alone would not. The vendor issue remains open, so no global patch claim follows.
|
||||
|
||||
Falsifiers: introduce a nan_to_num-to-long chain through model/generation/custom logits processing; allow user tensors/models/graphs; enable CPU compilation or change backend/device; or show that the exact named bug reaches these retained operations despite the absent chain. Any such evidence requires reopening this scoped assessment.
|
||||
|
||||
Existing qualification checkpoint passes are local compatibility evidence:59 sidecar tests, synthetic BART weights in safetensors and weights_only formats with the real pinned tokenizer,9 cache cases,5 parser/OCR cases and HTTP startup. This source lane ran no inference or tests. None establishes full selected-model or production acceptance. No owner risk acceptance is asserted.
|
||||
|
||||
Machine-readable detail, source line matches/hashes, scope criteria and all aliases: [advisory-current-scope.json](advisory-current-scope.json). Raw capture/process identity: `.artifacts/p9-sec-02/current-source/`. These10 groups remain part of44;109=65+44 accounting is unchanged.
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"observedUtc": "2026-10-25T06:44:48.752890+00:00",
|
||||
"method": "GET metadata only; existing Git credential used only in memory; redirects refused",
|
||||
"requests": {
|
||||
"runs-branch-query": {
|
||||
"httpStatus": 200,
|
||||
"path": ".artifacts/p9-sec-02/ci-postpush/runs-branch-query.json",
|
||||
"bytes": 4128,
|
||||
"sha256": "c9ee5dc4aa1da12276f0607b9886980279188bdecc813eb0ea1329c08f300c7a"
|
||||
},
|
||||
"jobs-856": {
|
||||
"httpStatus": 200,
|
||||
"path": ".artifacts/p9-sec-02/ci-postpush/jobs-856.json",
|
||||
"bytes": 653,
|
||||
"sha256": "199e3c4bbf0b3bb9d97881ee0754b8842144044c6b5a5365ad718a3e05a7d1af"
|
||||
}
|
||||
},
|
||||
"returnedRunCount": 1,
|
||||
"branchRuns": [
|
||||
{
|
||||
"id": 856,
|
||||
"head_sha": "22ef8d003c8afcab7b901060a224e1434a7a761c",
|
||||
"head_branch": "fix/p9-model-cache-and-ci-qualification",
|
||||
"status": "queued",
|
||||
"conclusion": null,
|
||||
"html_url": "https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/856",
|
||||
"created_at": null,
|
||||
"updated_at": null
|
||||
}
|
||||
],
|
||||
"jobs": [
|
||||
{
|
||||
"runId": 856,
|
||||
"head_sha": "22ef8d003c8afcab7b901060a224e1434a7a761c",
|
||||
"jobs": [
|
||||
{
|
||||
"id": 1746,
|
||||
"name": "mariadb",
|
||||
"status": "queued",
|
||||
"conclusion": null,
|
||||
"runner_id": 0,
|
||||
"runner_name": null,
|
||||
"started_at": "1970-01-01T00:00:00Z",
|
||||
"completed_at": "1970-01-01T00:00:00Z",
|
||||
"labels": [
|
||||
"jobtracker-mariadb-isolated"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"newHostConfigInspected": false,
|
||||
"newLogsDownloaded": false,
|
||||
"baselinePushCommit": "22ef8d003c8afcab7b901060a224e1434a7a761c",
|
||||
"hostedVerdict": "BLOCKED",
|
||||
"isolationProof": false,
|
||||
"limits": "One bounded branch metadata query; no logs, dispatch, cancel, host or production access. Queue/assignment is not isolation proof.",
|
||||
"workflow": {
|
||||
"path": ".gitea/workflows/mariadb-integration.yml",
|
||||
"sha256": "5fb3d4294a7b375b8883f618bbb87ae4028ff87ce623b38910c5898c44902287"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"E:\\Storage\\Projects\\Active\\Job tracker\\tools\\summarizer\\.venv\\Scripts\\python.exe",
|
||||
"-m",
|
||||
"uv",
|
||||
"pip",
|
||||
"compile",
|
||||
"requirements.txt",
|
||||
"--generate-hashes",
|
||||
"--python-version",
|
||||
"3.12",
|
||||
"--python-platform",
|
||||
"x86_64-unknown-linux-gnu",
|
||||
"--torch-backend",
|
||||
"cpu",
|
||||
"--output-file",
|
||||
"requirements-linux.lock"
|
||||
],
|
||||
"beforeCount": 49,
|
||||
"afterCount": 55,
|
||||
"sameQualifiedCandidatePins": true,
|
||||
"newLockSha256": "3a3afc529f0076a1b5d67082c9269c22c12f52c47ecf95ce0c76c37b39d8297a",
|
||||
"changes": {
|
||||
"charset-normalizer": {
|
||||
"before": "3.5.1",
|
||||
"after": null
|
||||
},
|
||||
"filelock": {
|
||||
"before": "3.32.4",
|
||||
"after": "4.2.1"
|
||||
},
|
||||
"httpcore": {
|
||||
"before": null,
|
||||
"after": "1.0.9"
|
||||
},
|
||||
"httpx": {
|
||||
"before": null,
|
||||
"after": "0.28.1"
|
||||
},
|
||||
"huggingface-hub": {
|
||||
"before": "0.36.2",
|
||||
"after": "1.33.0"
|
||||
},
|
||||
"markdown-it-py": {
|
||||
"before": null,
|
||||
"after": "4.2.0"
|
||||
},
|
||||
"mdurl": {
|
||||
"before": null,
|
||||
"after": "0.1.2"
|
||||
},
|
||||
"pygments": {
|
||||
"before": null,
|
||||
"after": "2.21.0"
|
||||
},
|
||||
"requests": {
|
||||
"before": "2.34.2",
|
||||
"after": null
|
||||
},
|
||||
"rich": {
|
||||
"before": null,
|
||||
"after": "15.0.0"
|
||||
},
|
||||
"shellingham": {
|
||||
"before": null,
|
||||
"after": "1.5.4"
|
||||
},
|
||||
"sympy": {
|
||||
"before": "1.13.1",
|
||||
"after": "1.14.0"
|
||||
},
|
||||
"tokenizers": {
|
||||
"before": "0.21.4",
|
||||
"after": "0.22.2"
|
||||
},
|
||||
"torch": {
|
||||
"before": "2.6.0+cpu",
|
||||
"after": "2.13.0+cpu"
|
||||
},
|
||||
"transformers": {
|
||||
"before": "4.48.3",
|
||||
"after": "5.10.0"
|
||||
},
|
||||
"typer": {
|
||||
"before": null,
|
||||
"after": "0.27.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
# Local qualification only; verify the base image identity in RUNTIME.json before building.
|
||||
FROM jobtracker-p9-sec02-python:runtime
|
||||
USER root
|
||||
COPY wheels /qualification-wheels
|
||||
COPY extras.lock /qualification-extras.lock
|
||||
RUN python -m pip install --no-index --find-links /qualification-wheels --require-hashes --no-cache-dir -r /qualification-extras.lock \
|
||||
&& python -m pip check
|
||||
USER app
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"qualificationImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"applicationLockSha256": "3a3afc529f0076a1b5d67082c9269c22c12f52c47ecf95ce0c76c37b39d8297a",
|
||||
"testLockSha256": "a234316d8612193551a2c91fb19ae0924f5643b9e52edb907ab99dd55b14cdb9",
|
||||
"scope": "Locally built actual source Dockerfile plus six exact hashed test-only extras. Local image IDs, not asserted pullable registry references; no deployment."
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
"""Actual isolated lock/cache failures; never opens a developer or production cache."""
|
||||
from pathlib import Path
|
||||
import importlib.metadata
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from filelock import FileLock, SoftFileLock
|
||||
from huggingface_hub.utils._fixes import WeakFileLock
|
||||
from verify import verify_fixture
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
manifest = json.loads((HERE / 'ARTIFACTS.json').read_text())['safetensors']
|
||||
source = verify_fixture(Path(sys.argv[1]), manifest)
|
||||
results = []
|
||||
with tempfile.TemporaryDirectory(prefix='jt-model-cache-') as temporary:
|
||||
root = Path(temporary)
|
||||
assert root.stat().st_mode & 0o077 == 0
|
||||
for kind in ['missing', 'corrupt-weights', 'corrupt-config', 'linked', 'extra-code']:
|
||||
directory = root / kind
|
||||
shutil.copytree(source, directory)
|
||||
weights = directory / 'model.safetensors'
|
||||
if kind == 'missing': weights.unlink()
|
||||
elif kind == 'linked':
|
||||
weights.unlink(); weights.symlink_to(source / 'model.safetensors')
|
||||
elif kind == 'extra-code': (directory / 'modeling_unreviewed.py').write_text('raise RuntimeError()')
|
||||
else:
|
||||
file = weights if kind == 'corrupt-weights' else directory / 'config.json'
|
||||
content = bytearray(file.read_bytes()); content[-1] ^= 1; file.write_bytes(content)
|
||||
try: verify_fixture(directory, manifest)
|
||||
except ValueError: results.append({'case': kind, 'rejectedBeforeLoad': True})
|
||||
else: raise AssertionError(kind + ' was accepted')
|
||||
|
||||
child = '''import sys
|
||||
from filelock import FileLock,SoftFileLock,Timeout
|
||||
cls=FileLock if sys.argv[1]=='native' else SoftFileLock
|
||||
try:
|
||||
with cls(sys.argv[2],timeout=0.2): print('acquired')
|
||||
except Timeout: print('timed-out')
|
||||
'''
|
||||
for kind, context in [('native', lambda p: FileLock(p, timeout=1)), ('soft', lambda p: SoftFileLock(p, timeout=1)), ('hub', lambda p: WeakFileLock(p, timeout=1))]:
|
||||
file = root / (kind + '.lock')
|
||||
command = [sys.executable, '-c', child, 'soft' if kind == 'soft' else 'native', str(file)]
|
||||
with context(file):
|
||||
result = subprocess.run(command, capture_output=True, text=True, timeout=5, check=True)
|
||||
assert result.stdout.strip() == 'timed-out', result.stdout
|
||||
result = subprocess.run(command, capture_output=True, text=True, timeout=5, check=True)
|
||||
assert result.stdout.strip() == 'acquired', result.stdout
|
||||
results.append({'case': kind + '-cross-process', 'finiteContentionTimeout': True, 'acquiredAfterRelease': True})
|
||||
|
||||
os.environ['AI_SERVICE_SKIP_MODEL_LOAD'] = '0'
|
||||
sys.path.insert(0, '/app')
|
||||
import app
|
||||
from fastapi.testclient import TestClient
|
||||
app.MODEL_NAME = str(root / 'missing-model')
|
||||
assert app._ensure_runtime_loaded() is False
|
||||
assert app.model is app.tokenizer is None and not app.MODEL_LOADED
|
||||
response = TestClient(app.app).post('/summarize', json={'text': 'Synthetic unavailable model input.'})
|
||||
assert response.status_code == 503 and response.json()['detail']
|
||||
results.append({'case': 'missing-offline-model', 'availability503': True, 'noPartialLoadedState': True})
|
||||
verify_fixture(source, manifest)
|
||||
print(json.dumps({'status': 'PASS', 'filelock': importlib.metadata.version('filelock'), 'hub': importlib.metadata.version('huggingface-hub'), 'cases': results, 'freshPrivateCache': True, 'sourceUnchanged': True, 'limits': 'Linux native/soft/Hub locking in one library generation. No shared-cache migration, Windows fallback, full-model cancellation, GPU or live cache claim.'}), flush=True)
|
||||
Binary file not shown.
@@ -0,0 +1,45 @@
|
||||
%PDF-1.7
|
||||
%µ¶
|
||||
|
||||
1 0 obj
|
||||
<</Type/Catalog/Pages 2 0 R>>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<</Type/Pages/Count 1/Kids[4 0 R]>>
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
<</Font<</helv 5 0 R>>>>
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<</Type/Page/MediaBox[0 0 595 842]/Rotate 0/Resources 3 0 R/Parent 2 0 R/Contents[6 0 R]>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding/WinAnsiEncoding>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<</Length 195/Filter/FlateDecode>>
|
||||
stream
|
||||
xÚE�ÁN!E÷|`[Êí�&nÜ™°3nÞºpã÷{aL^¥”r8¤ŸôÜ“fáÐ\%GXîßéás|ýæ-÷3¿?ºÂ¡&¾ã b‡¢ šØa²×Xù±E ‡E3cWã"¨Ìel˜ƒ$[„YνVñ…ÝzUØ]A1IäO‡X!hœ×ù Ÿ÷"Xsl&Ube81î</VÊmÝÝü‹á˜~Óê"-×ËònâóÆû§�þš^zzK$ŽGz
|
||||
endstream
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000016 00000 n
|
||||
0000000062 00000 n
|
||||
0000000114 00000 n
|
||||
0000000155 00000 n
|
||||
0000000262 00000 n
|
||||
0000000351 00000 n
|
||||
|
||||
trailer
|
||||
<</Size 7/Root 1 0 R/ID[<C2A562C38EC38E002CC3A5446205C3BB><9B826CB261538573C22FEEA2E273D644>]>>
|
||||
startxref
|
||||
615
|
||||
%%EOF
|
||||
@@ -0,0 +1 @@
|
||||
Ada Lovelace - Åse Østby ærlig erfaring. Backend APIs and reliable data pipelines with Python and C#; platform engineering and testing.
|
||||
@@ -0,0 +1,76 @@
|
||||
"""Resource-bounded actual document/OCR children and real local HTTP startup."""
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
from urllib import request, error
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
from verify import verify_fixture
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
manifest = json.loads((HERE / 'ARTIFACTS.json').read_text())['safetensors']
|
||||
verify_fixture('/fixture', manifest)
|
||||
results = []
|
||||
with tempfile.TemporaryDirectory(prefix='jt-parsers-') as temporary:
|
||||
directory = Path(temporary)
|
||||
image = Image.new('RGB', (1000, 180), 'white')
|
||||
ImageDraw.Draw(image).text((40, 50), 'PYTHON CAREER 2026', fill='black', font=ImageFont.load_default(size=48))
|
||||
image.save(directory / 'ocr.png'); image.save(directory / 'ocr.pdf', resolution=150)
|
||||
for file in [*(HERE / 'data').glob('benign.*'), directory / 'ocr.png', directory / 'ocr.pdf']:
|
||||
output = directory / (file.name + '.json')
|
||||
args = [sys.executable, '/app/parser_child.py', '--input', str(file), '--output', str(output), '--extension', file.suffix, '--cpu-seconds', '10', '--memory-bytes', str(512 * 1024 * 1024)]
|
||||
result = subprocess.run(args, capture_output=True, text=True, timeout=20)
|
||||
assert result.returncode == 0, (file.name, result.stdout, result.stderr, output.read_text() if output.exists() else '')
|
||||
parsed = json.loads(output.read_text())
|
||||
assert parsed['ok'] and parsed['text']
|
||||
if file.name.startswith('ocr'):
|
||||
assert all(token in parsed['text'] for token in ['PYTHON','CAREER','2026'])
|
||||
assert parsed['ocr_used'] is True
|
||||
else:
|
||||
assert all(token in parsed['text'] for token in ['Åse','Østby','Python','C#'])
|
||||
results.append({'file':file.name,'sha256':hashlib.sha256(file.read_bytes()).hexdigest(),'text':parsed['text'],'ocrUsed':parsed['ocr_used'],'childExitCode':result.returncode})
|
||||
|
||||
env = os.environ.copy()
|
||||
env.update(AI_SERVICE_SKIP_MODEL_LOAD='0', AI_SERVICE_EAGER_MODEL_LOAD='0', AI_SERVICE_TOKEN='p9-local-qualification-only')
|
||||
code = "import sys;sys.path.insert(0,'/app');import app,uvicorn;app.MODEL_NAME='/fixture';uvicorn.run(app.app,host='127.0.0.1',port=18081,log_level='warning')"
|
||||
with Path('/evidence/server.log').open('w') as log:
|
||||
server = subprocess.Popen([sys.executable,'-c',code],env=env,stdout=log,stderr=subprocess.STDOUT)
|
||||
try:
|
||||
deadline=time.monotonic()+30
|
||||
while True:
|
||||
try:
|
||||
with request.urlopen('http://127.0.0.1:18081/health',timeout=1) as response:health=json.load(response)
|
||||
break
|
||||
except (OSError,error.URLError):
|
||||
assert server.poll() is None,'Server exited before readiness'
|
||||
assert time.monotonic()<deadline,'Server readiness deadline exceeded'
|
||||
time.sleep(.1)
|
||||
assert health['model_loaded'] is False
|
||||
body=json.dumps({'text':'Python engineers build reliable accessible career software.','max_length':24,'min_length':8}).encode()
|
||||
try:request.urlopen(request.Request('http://127.0.0.1:18081/summarize',data=body,headers={'Content-Type':'application/json'}),timeout=10)
|
||||
except error.HTTPError as failure:assert failure.code==401
|
||||
else:raise AssertionError('Missing service token accepted')
|
||||
headers={'Content-Type':'application/json','X-Ai-Service-Token':'p9-local-qualification-only'}
|
||||
replies=[]
|
||||
for _ in range(2):
|
||||
with request.urlopen(request.Request('http://127.0.0.1:18081/summarize',data=body,headers=headers),timeout=20) as response:replies.append(json.load(response))
|
||||
assert replies[0]['cached'] is False and replies[1]['cached'] is True
|
||||
assert replies[0]['summary']==replies[1]['summary']
|
||||
boundary='JtSyntheticQualification'
|
||||
upload=(f'--{boundary}\r\nContent-Disposition: form-data; name="file"; filename="synthetic.txt"\r\nContent-Type: text/plain\r\n\r\n'.encode()+(HERE/'data/benign.txt').read_bytes()+f'\r\n--{boundary}--\r\n'.encode())
|
||||
with request.urlopen(request.Request('http://127.0.0.1:18081/extract-text',data=upload,headers={'Content-Type':'multipart/form-data; boundary='+boundary,'X-Ai-Service-Token':'p9-local-qualification-only'}),timeout=20) as response:extracted=json.load(response)
|
||||
assert 'Åse' in extracted['text'] and 'C#' in extracted['text']
|
||||
results.append({'case':'real-http-startup','health200':True,'unauthenticated401':True,'realSummary200':True,'repeatCache':True,'actualUploadExtraction200':True})
|
||||
finally:
|
||||
server.terminate()
|
||||
try:server.wait(timeout=5)
|
||||
except subprocess.TimeoutExpired:server.kill();server.wait(timeout=5)
|
||||
assert server.poll() is not None
|
||||
|
||||
data=Path('/usr/share/tesseract-ocr/5/tessdata/eng.traineddata')
|
||||
record={'status':'PASS','cases':results,'tesseractVersion':subprocess.check_output(['tesseract','--version'],text=True).splitlines()[0],'englishDataSha256':hashlib.sha256(data.read_bytes()).hexdigest(),'englishDataBytes':data.stat().st_size,'offline':True,'serverStopped':True,'limits':'Synthetic TXT/DOCX/PDF/image/OCR and small BART CPU HTTP contracts; no production documents, full-size model, GPU, external provider or semantic quality.'}
|
||||
print(json.dumps(record),flush=True)
|
||||
@@ -27,12 +27,20 @@ started = time.monotonic()
|
||||
app.MODEL_NAME = str(fixture)
|
||||
assert app._ensure_runtime_loaded(), app.MODEL_LOAD_ERROR
|
||||
assert app.model.__class__.__name__ == 'BartForConditionalGeneration'
|
||||
assert app.model.training is False
|
||||
assert str(app.device) == 'cpu' and not app.GPU_AVAILABLE
|
||||
text = 'Åse Østby builds accessible Python and C# applications for reliable Norwegian career workflows.'
|
||||
encoded = app.tokenizer(text, return_tensors='pt')
|
||||
assert app.tokenizer.decode(encoded.input_ids[0], skip_special_tokens=True) == text
|
||||
summary = app._model_summarize(text, 24, 8)
|
||||
assert isinstance(summary, str) and summary
|
||||
long_input = app.tokenizer(text * 400, return_tensors='pt', truncation=True, max_length=1024)
|
||||
assert long_input.input_ids.shape == (1, 1024)
|
||||
assert long_input.input_ids.dtype == torch.int64
|
||||
with torch.no_grad():
|
||||
logits = app.model(**long_input, decoder_input_ids=torch.tensor([[2, 0, 10]])).logits
|
||||
assert torch.isfinite(logits).all()
|
||||
assert app._model_summarize(text * 400, 24, 8)
|
||||
client = TestClient(app.app)
|
||||
assert client.get('/health').json()['model_loaded'] is True
|
||||
assert client.post('/summarize', json={'text': text}).status_code == 401
|
||||
@@ -46,4 +54,4 @@ assert first.json()['summary'] == second.json()['summary']
|
||||
verify_fixture(fixture, manifests[kind])
|
||||
elapsed = time.monotonic() - started
|
||||
assert elapsed < 60
|
||||
print(json.dumps({'status': 'PASS', 'kind': kind, 'scope': 'Real synthetic BART/tokenizer/native CPU generation plus sidecar summary/auth/cache contract; no full DistilBART or semantic-quality claim.', 'modelClass': app.model.__class__.__name__, 'device': str(app.device), 'cudaAvailable': torch.cuda.is_available(), 'seconds': elapsed, 'maxRssKiB': resource.getrusage(resource.RUSAGE_SELF).ru_maxrss, 'versions': {name: importlib.metadata.version(name) for name in ['torch','transformers','filelock','huggingface-hub','tokenizers','safetensors']}, 'summary': summary, 'cacheRepeatedRead': True, 'fixtureUnchanged': True}), flush=True)
|
||||
print(json.dumps({'status': 'PASS', 'kind': kind, 'scope': 'Real synthetic BART/tokenizer/native CPU generation plus sidecar summary/auth/cache contract; no full DistilBART or semantic-quality claim.', 'modelClass': app.model.__class__.__name__, 'device': str(app.device), 'cudaAvailable': torch.cuda.is_available(), 'seconds': elapsed, 'maxRssKiB': resource.getrusage(resource.RUSAGE_SELF).ru_maxrss, 'versions': {name: importlib.metadata.version(name) for name in ['torch','transformers','filelock','huggingface-hub','tokenizers','safetensors']}, 'summary': summary, 'bounded1024Tokens': True, 'finiteLogits': True, 'cacheRepeatedRead': True, 'fixtureUnchanged': True}), flush=True)
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
"""Run one immutable local qualification lane; retain each attempt and teardown outcome."""
|
||||
from pathlib import Path
|
||||
import datetime
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import uuid
|
||||
|
||||
ROOT=Path(__file__).resolve().parents[5]
|
||||
HERE=Path(__file__).resolve().parent
|
||||
lane=sys.argv[1];attempt=sys.argv[2] if len(sys.argv)>2 else lane
|
||||
assert Path(attempt).name==attempt and attempt not in ['.','..']
|
||||
assert lane in ['safetensors','weights-only','cache','parsers','inventory','sidecar']
|
||||
out=ROOT/'.artifacts/p9-sec-02/qualified'/attempt
|
||||
assert not out.exists(),'Preserve earlier lane evidence.'
|
||||
out.mkdir(parents=True)
|
||||
runtime=json.loads((HERE/'RUNTIME.json').read_text())
|
||||
image=runtime['qualificationImageId']
|
||||
name='jt-sec02-'+lane+'-'+uuid.uuid4().hex[:8]
|
||||
args=['docker','run','--rm','--name',name,'--label','jobtracker.qualification=p9-sec02','--entrypoint','python','--user','65534:65534','--network','none','--read-only','--cap-drop','ALL','--security-opt','no-new-privileges','--pids-limit','128','--cpus','2','--memory','2g','--memory-swap','2g','--tmpfs','/tmp:rw,nosuid,nodev,size=384m,mode=1777']
|
||||
for value in ['HF_HUB_OFFLINE=1','TRANSFORMERS_OFFLINE=1','HF_HUB_DISABLE_TELEMETRY=1','HF_HOME=/tmp/hf-home','OMP_NUM_THREADS=1','MKL_NUM_THREADS=1','OLLAMA_BASE_URL=http://127.0.0.1:11434','OLLAMA_MODEL=','EXTERNAL_AI_ENABLED=0']:
|
||||
args+=['-e',value]
|
||||
args+=['--mount',f'type=bind,src={HERE},dst=/qualification,readonly','--mount',f'type=bind,src={out},dst=/evidence']
|
||||
if lane in ['safetensors','weights-only','cache','parsers']:
|
||||
fixture='artifact-bin' if lane=='weights-only' else 'artifact'
|
||||
args+=['--mount',f'type=bind,src={ROOT/".artifacts/p9-sec-02"/fixture},dst=/fixture,readonly']
|
||||
if lane=='sidecar':args+=['-e','AI_SERVICE_SKIP_MODEL_LOAD=1']
|
||||
args+=[image]
|
||||
if lane in ['safetensors','weights-only']:args+=['/qualification/probe.py',lane,'/fixture']
|
||||
elif lane=='cache':args+=['/qualification/cache_probe.py','/fixture']
|
||||
elif lane=='parsers':args+=['/qualification/parser_probe.py']
|
||||
elif lane=='inventory':args+=['/qualification/runtime_inventory.py']
|
||||
else:args+=['-m','pytest','-q','-o','cache_dir=/tmp/pytest-cache','/app/tests','--junitxml=/evidence/sidecar.xml']
|
||||
started=datetime.datetime.now(datetime.timezone.utc).isoformat()
|
||||
with (out/'process.log').open('w',encoding='utf-8') as log:
|
||||
try:code=subprocess.run(['rtk','proxy',*args],cwd=ROOT,stdout=log,stderr=subprocess.STDOUT,timeout=180).returncode
|
||||
except subprocess.TimeoutExpired:
|
||||
code=124
|
||||
check=subprocess.run(['rtk','proxy','docker','inspect','--format','{{index .Config.Labels "jobtracker.qualification"}}',name],capture_output=True,text=True)
|
||||
if check.returncode==0 and check.stdout.strip()=='p9-sec02':subprocess.run(['rtk','proxy','docker','kill',name],capture_output=True)
|
||||
deadline=time.monotonic()+5
|
||||
while True:
|
||||
absent=subprocess.run(['rtk','proxy','docker','inspect',name],capture_output=True).returncode!=0
|
||||
if absent or time.monotonic()>=deadline:break
|
||||
time.sleep(.1)
|
||||
record={'lane':lane,'attempt':attempt,'startedUtc':started,'finishedUtc':datetime.datetime.now(datetime.timezone.utc).isoformat(),'exitCode':code,'command':args,'localImageId':image,'runtimeImageId':runtime['runtimeImageId'],'containerAbsent':absent,'network':'none','readOnly':True,'user':'65534:65534','memoryLimitBytes':2147483648,'cpuLimit':2,'pidsLimit':128,'wallClockDeadlineSeconds':180,'scope':'Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment.'}
|
||||
(out/'process.json').write_text(json.dumps(record,indent=2)+'\n')
|
||||
print(json.dumps(record))
|
||||
print((out/'process.log').read_text(encoding='utf-8',errors='replace')[-2500:].encode('ascii','replace').decode())
|
||||
raise SystemExit(code if absent else 1)
|
||||
@@ -0,0 +1,24 @@
|
||||
"""Fingerprint actual supported runtime and verify every application lock pin."""
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
import importlib.metadata
|
||||
import json
|
||||
import platform
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
lock=Path('/app/requirements-linux.lock')
|
||||
pins=dict(re.findall(r'^([a-zA-Z0-9_.-]+)==([^\s;]+)',lock.read_text(),re.M))
|
||||
installed={re.sub(r'[-_.]+','-',item.metadata['Name']).lower():item.version for item in importlib.metadata.distributions()}
|
||||
assert len(pins)==55
|
||||
assert all(installed[name]==version for name,version in pins.items())
|
||||
assert not list(Path('/app').glob('.venv*')), 'Development environments leaked into built application image'
|
||||
check=subprocess.run([sys.executable,'-m','pip','check'],capture_output=True,text=True)
|
||||
assert check.returncode==0,check.stdout+check.stderr
|
||||
import torch
|
||||
import transformers
|
||||
data=Path('/usr/share/tesseract-ocr/5/tessdata/eng.traineddata')
|
||||
record={'status':'PASS','python':sys.version,'platform':platform.platform(),'libc':platform.libc_ver(),'applicationLockSha256':hashlib.sha256(lock.read_bytes()).hexdigest(),'applicationPins':pins,'installedDistributions':installed,'extrasOutsideApplicationLock':{name:version for name,version in installed.items() if name not in pins},'pipCheck':check.stdout.strip(),'noDevelopmentEnvironmentsInImage':True,'torchVersion':torch.__version__,'torchBuildCuda':torch.version.cuda,'cudaAvailable':torch.cuda.is_available(),'torchBuild':torch.__config__.show(),'tesseractVersion':subprocess.check_output(['tesseract','--version'],text=True).splitlines()[0],'englishOcrData':{'path':str(data),'bytes':data.stat().st_size,'sha256':hashlib.sha256(data.read_bytes()).hexdigest()},'nativePackages':subprocess.check_output(['dpkg-query','-W'],text=True),'scope':'Actual locally built source Dockerfile and exact55 locked application pins; test-only packages, if any, and bootstrap tools remain explicitly listed separately.'}
|
||||
record['applicationSources']={name:hashlib.sha256((Path('/app')/name).read_bytes()).hexdigest() for name in ['app.py','parser_child.py','requirements.txt','requirements-linux.lock','tests/test_app.py']}
|
||||
print(json.dumps(record),flush=True)
|
||||
@@ -0,0 +1,31 @@
|
||||
"""Supplemental Windows lock compatibility in a new local test directory."""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
target = str(Path(sys.argv[1]).resolve())
|
||||
sys.path.insert(0, target)
|
||||
import filelock
|
||||
assert filelock.__version__ == '4.2.1'
|
||||
assert Path(filelock.__file__).resolve().is_relative_to(Path(target))
|
||||
child = '''import sys
|
||||
sys.path.insert(0,sys.argv[1])
|
||||
from filelock import FileLock,SoftFileLock,Timeout
|
||||
cls=FileLock if sys.argv[2]=='native' else SoftFileLock
|
||||
try:
|
||||
with cls(sys.argv[3],timeout=0.2): print('acquired')
|
||||
except Timeout: print('timed-out')
|
||||
'''
|
||||
cases = []
|
||||
with tempfile.TemporaryDirectory(prefix='jt-sec02-windows-lock-') as temporary:
|
||||
for kind, cls in [('native', filelock.FileLock), ('soft', filelock.SoftFileLock)]:
|
||||
command=[sys.executable,'-c',child,target,kind,str(Path(temporary)/(kind+'.lock'))]
|
||||
with cls(command[-1],timeout=1):
|
||||
result=subprocess.run(command,capture_output=True,text=True,timeout=5,check=True)
|
||||
assert result.stdout.strip()=='timed-out',result.stdout
|
||||
result=subprocess.run(command,capture_output=True,text=True,timeout=5,check=True)
|
||||
assert result.stdout.strip()=='acquired',result.stdout
|
||||
cases.append({'case':kind,'finiteContentionTimeout':True,'acquiredAfterRelease':True})
|
||||
print(json.dumps({'status':'PASS','platform':sys.platform,'filelock':filelock.__version__,'cases':cases,'limits':'Two fresh same-version Windows lock participants. No Windows shared-cache ACL/symlink security or cross-version migration claim.'}))
|
||||
@@ -0,0 +1,812 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"observedUtc": "2026-10-25T07:09:16.503468+00:00",
|
||||
"status": "PASS",
|
||||
"inputs": {
|
||||
"docs/redesign/phase-9/p9-sec-02/model/cache_probe.py": "7376c4cffa12b411d5ee20df640bd2ad9c8891ae28b8fd48bfdbf23702f61bb6",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/parser_probe.py": "3c3b6818316d4f4284765550648fbade16644ae2276454d205c26c3fe12c01d8",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/probe.py": "318241dd5b11269a43c71ca221f0209dbe6828239bb8c6549b22323086bda05d",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/run.py": "b85c543e4020fbbe118ab52746f1290babaee2a640ead3277b16fd4bed6b9f29",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/runtime_inventory.py": "254feb648f568dbbc0faec091cc6a0e49ad8d09ac4840e888603ef26c42a3d6c",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/test_verify.py": "ffac7d2306e9947eed0313e070b1fceccd7b2c1041581e5db1bb97671777c288",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/verify.py": "168a7e349d3e8a02427d80179561a21e278288e18e38ed804ecc816c6197d09f",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/windows_lock_probe.py": "0db37df4bf58daa8953b1e4d8c5f28e605a56a11c4f3930c58a3177d58abe9fa",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/ARTIFACTS.json": "5c606eb95218946242a4867d442450cd1014549220b78120ac37e7aa3477c023",
|
||||
"docs/redesign/phase-9/p9-sec-02/model/RUNTIME.json": "e4321bb4f0bc1bb898b4c427540780f9904464357788d19bfc4433d233190224",
|
||||
"tools/summarizer/app.py": "aab24c7f64868fcb93a6133aa7b2087b23f98469e89e4c84fa040a022b0a8dfc",
|
||||
"tools/summarizer/parser_child.py": "0074a05e9a0d511e26a329a057f98568cdc1723b2cc37168e0b59975b5424451",
|
||||
"tools/summarizer/requirements-linux.lock": "3a3afc529f0076a1b5d67082c9269c22c12f52c47ecf95ce0c76c37b39d8297a",
|
||||
"tools/summarizer/requirements-dev-linux.lock": "a234316d8612193551a2c91fb19ae0924f5643b9e52edb907ab99dd55b14cdb9",
|
||||
"tools/summarizer/Dockerfile": "d0b8777e81a74ed7099fe1d93f608b6601da39efc43b50ec0b3b058613207443",
|
||||
"tools/summarizer/.dockerignore": "b1074aebf95e5d5cb6d7c26617ef49945dca31bc756bbc78ee0e3b15c96e3152"
|
||||
},
|
||||
"results": {
|
||||
"sidecar": {
|
||||
"status": "PASS",
|
||||
"passed": 59,
|
||||
"process": {
|
||||
"lane": "sidecar",
|
||||
"attempt": "qualification-patched-sidecar",
|
||||
"startedUtc": "2026-10-25T07:08:32.877557+00:00",
|
||||
"finishedUtc": "2026-10-25T07:08:45.365675+00:00",
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"--name",
|
||||
"jt-sec02-sidecar-b98c7d59",
|
||||
"--label",
|
||||
"jobtracker.qualification=p9-sec02",
|
||||
"--entrypoint",
|
||||
"python",
|
||||
"--user",
|
||||
"65534:65534",
|
||||
"--network",
|
||||
"none",
|
||||
"--read-only",
|
||||
"--cap-drop",
|
||||
"ALL",
|
||||
"--security-opt",
|
||||
"no-new-privileges",
|
||||
"--pids-limit",
|
||||
"128",
|
||||
"--cpus",
|
||||
"2",
|
||||
"--memory",
|
||||
"2g",
|
||||
"--memory-swap",
|
||||
"2g",
|
||||
"--tmpfs",
|
||||
"/tmp:rw,nosuid,nodev,size=384m,mode=1777",
|
||||
"-e",
|
||||
"HF_HUB_OFFLINE=1",
|
||||
"-e",
|
||||
"TRANSFORMERS_OFFLINE=1",
|
||||
"-e",
|
||||
"HF_HUB_DISABLE_TELEMETRY=1",
|
||||
"-e",
|
||||
"HF_HOME=/tmp/hf-home",
|
||||
"-e",
|
||||
"OMP_NUM_THREADS=1",
|
||||
"-e",
|
||||
"MKL_NUM_THREADS=1",
|
||||
"-e",
|
||||
"OLLAMA_BASE_URL=http://127.0.0.1:11434",
|
||||
"-e",
|
||||
"OLLAMA_MODEL=",
|
||||
"-e",
|
||||
"EXTERNAL_AI_ENABLED=0",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\docs\\redesign\\phase-9\\p9-sec-02\\model,dst=/qualification,readonly",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\qualified\\qualification-patched-sidecar,dst=/evidence",
|
||||
"-e",
|
||||
"AI_SERVICE_SKIP_MODEL_LOAD=1",
|
||||
"sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"-m",
|
||||
"pytest",
|
||||
"-q",
|
||||
"-o",
|
||||
"cache_dir=/tmp/pytest-cache",
|
||||
"/app/tests",
|
||||
"--junitxml=/evidence/sidecar.xml"
|
||||
],
|
||||
"localImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"containerAbsent": true,
|
||||
"network": "none",
|
||||
"readOnly": true,
|
||||
"user": "65534:65534",
|
||||
"memoryLimitBytes": 2147483648,
|
||||
"cpuLimit": 2,
|
||||
"pidsLimit": 128,
|
||||
"wallClockDeadlineSeconds": 180,
|
||||
"scope": "Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment."
|
||||
},
|
||||
"reportSha256": "da3b247b2189fa5549cee48c335ffb51b4662da1cf038f5aad0a60e4fa9b582f"
|
||||
},
|
||||
"safetensors": {
|
||||
"status": "PASS",
|
||||
"record": {
|
||||
"status": "PASS",
|
||||
"kind": "safetensors",
|
||||
"scope": "Real synthetic BART/tokenizer/native CPU generation plus sidecar summary/auth/cache contract; no full DistilBART or semantic-quality claim.",
|
||||
"modelClass": "BartForConditionalGeneration",
|
||||
"device": "cpu",
|
||||
"cudaAvailable": false,
|
||||
"seconds": 0.9420173299999988,
|
||||
"maxRssKiB": 410096,
|
||||
"versions": {
|
||||
"torch": "2.13.0+cpu",
|
||||
"transformers": "5.10.0",
|
||||
"filelock": "4.2.1",
|
||||
"huggingface-hub": "1.33.0",
|
||||
"tokenizers": "0.22.2",
|
||||
"safetensors": "0.8.0"
|
||||
},
|
||||
"summary": "Boulevard ski ski ski Joined Joined Joined titles titlesataata told told told beam beam beam told told uncontroll uncontroll equity",
|
||||
"bounded1024Tokens": true,
|
||||
"finiteLogits": true,
|
||||
"cacheRepeatedRead": true,
|
||||
"fixtureUnchanged": true
|
||||
},
|
||||
"process": {
|
||||
"lane": "safetensors",
|
||||
"attempt": "qualification-patched-safetensors",
|
||||
"startedUtc": "2026-10-25T07:08:45.529394+00:00",
|
||||
"finishedUtc": "2026-10-25T07:08:51.395049+00:00",
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"--name",
|
||||
"jt-sec02-safetensors-1bfd4b71",
|
||||
"--label",
|
||||
"jobtracker.qualification=p9-sec02",
|
||||
"--entrypoint",
|
||||
"python",
|
||||
"--user",
|
||||
"65534:65534",
|
||||
"--network",
|
||||
"none",
|
||||
"--read-only",
|
||||
"--cap-drop",
|
||||
"ALL",
|
||||
"--security-opt",
|
||||
"no-new-privileges",
|
||||
"--pids-limit",
|
||||
"128",
|
||||
"--cpus",
|
||||
"2",
|
||||
"--memory",
|
||||
"2g",
|
||||
"--memory-swap",
|
||||
"2g",
|
||||
"--tmpfs",
|
||||
"/tmp:rw,nosuid,nodev,size=384m,mode=1777",
|
||||
"-e",
|
||||
"HF_HUB_OFFLINE=1",
|
||||
"-e",
|
||||
"TRANSFORMERS_OFFLINE=1",
|
||||
"-e",
|
||||
"HF_HUB_DISABLE_TELEMETRY=1",
|
||||
"-e",
|
||||
"HF_HOME=/tmp/hf-home",
|
||||
"-e",
|
||||
"OMP_NUM_THREADS=1",
|
||||
"-e",
|
||||
"MKL_NUM_THREADS=1",
|
||||
"-e",
|
||||
"OLLAMA_BASE_URL=http://127.0.0.1:11434",
|
||||
"-e",
|
||||
"OLLAMA_MODEL=",
|
||||
"-e",
|
||||
"EXTERNAL_AI_ENABLED=0",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\docs\\redesign\\phase-9\\p9-sec-02\\model,dst=/qualification,readonly",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\qualified\\qualification-patched-safetensors,dst=/evidence",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\artifact,dst=/fixture,readonly",
|
||||
"sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"/qualification/probe.py",
|
||||
"safetensors",
|
||||
"/fixture"
|
||||
],
|
||||
"localImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"containerAbsent": true,
|
||||
"network": "none",
|
||||
"readOnly": true,
|
||||
"user": "65534:65534",
|
||||
"memoryLimitBytes": 2147483648,
|
||||
"cpuLimit": 2,
|
||||
"pidsLimit": 128,
|
||||
"wallClockDeadlineSeconds": 180,
|
||||
"scope": "Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment."
|
||||
}
|
||||
},
|
||||
"weights-only": {
|
||||
"status": "PASS",
|
||||
"record": {
|
||||
"status": "PASS",
|
||||
"kind": "weights-only",
|
||||
"scope": "Real synthetic BART/tokenizer/native CPU generation plus sidecar summary/auth/cache contract; no full DistilBART or semantic-quality claim.",
|
||||
"modelClass": "BartForConditionalGeneration",
|
||||
"device": "cpu",
|
||||
"cudaAvailable": false,
|
||||
"seconds": 0.8173885160000509,
|
||||
"maxRssKiB": 411812,
|
||||
"versions": {
|
||||
"torch": "2.13.0+cpu",
|
||||
"transformers": "5.10.0",
|
||||
"filelock": "4.2.1",
|
||||
"huggingface-hub": "1.33.0",
|
||||
"tokenizers": "0.22.2",
|
||||
"safetensors": "0.8.0"
|
||||
},
|
||||
"summary": "Boulevard ski ski ski Joined Joined Joined titles titlesataata told told told beam beam beam told told uncontroll uncontroll equity",
|
||||
"bounded1024Tokens": true,
|
||||
"finiteLogits": true,
|
||||
"cacheRepeatedRead": true,
|
||||
"fixtureUnchanged": true
|
||||
},
|
||||
"process": {
|
||||
"lane": "weights-only",
|
||||
"attempt": "qualification-patched-weights-only",
|
||||
"startedUtc": "2026-10-25T07:08:51.559719+00:00",
|
||||
"finishedUtc": "2026-10-25T07:08:57.438362+00:00",
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"--name",
|
||||
"jt-sec02-weights-only-5aec5f06",
|
||||
"--label",
|
||||
"jobtracker.qualification=p9-sec02",
|
||||
"--entrypoint",
|
||||
"python",
|
||||
"--user",
|
||||
"65534:65534",
|
||||
"--network",
|
||||
"none",
|
||||
"--read-only",
|
||||
"--cap-drop",
|
||||
"ALL",
|
||||
"--security-opt",
|
||||
"no-new-privileges",
|
||||
"--pids-limit",
|
||||
"128",
|
||||
"--cpus",
|
||||
"2",
|
||||
"--memory",
|
||||
"2g",
|
||||
"--memory-swap",
|
||||
"2g",
|
||||
"--tmpfs",
|
||||
"/tmp:rw,nosuid,nodev,size=384m,mode=1777",
|
||||
"-e",
|
||||
"HF_HUB_OFFLINE=1",
|
||||
"-e",
|
||||
"TRANSFORMERS_OFFLINE=1",
|
||||
"-e",
|
||||
"HF_HUB_DISABLE_TELEMETRY=1",
|
||||
"-e",
|
||||
"HF_HOME=/tmp/hf-home",
|
||||
"-e",
|
||||
"OMP_NUM_THREADS=1",
|
||||
"-e",
|
||||
"MKL_NUM_THREADS=1",
|
||||
"-e",
|
||||
"OLLAMA_BASE_URL=http://127.0.0.1:11434",
|
||||
"-e",
|
||||
"OLLAMA_MODEL=",
|
||||
"-e",
|
||||
"EXTERNAL_AI_ENABLED=0",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\docs\\redesign\\phase-9\\p9-sec-02\\model,dst=/qualification,readonly",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\qualified\\qualification-patched-weights-only,dst=/evidence",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\artifact-bin,dst=/fixture,readonly",
|
||||
"sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"/qualification/probe.py",
|
||||
"weights-only",
|
||||
"/fixture"
|
||||
],
|
||||
"localImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"containerAbsent": true,
|
||||
"network": "none",
|
||||
"readOnly": true,
|
||||
"user": "65534:65534",
|
||||
"memoryLimitBytes": 2147483648,
|
||||
"cpuLimit": 2,
|
||||
"pidsLimit": 128,
|
||||
"wallClockDeadlineSeconds": 180,
|
||||
"scope": "Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment."
|
||||
}
|
||||
},
|
||||
"cache": {
|
||||
"status": "PASS",
|
||||
"record": {
|
||||
"status": "PASS",
|
||||
"filelock": "4.2.1",
|
||||
"hub": "1.33.0",
|
||||
"cases": [
|
||||
{
|
||||
"case": "missing",
|
||||
"rejectedBeforeLoad": true
|
||||
},
|
||||
{
|
||||
"case": "corrupt-weights",
|
||||
"rejectedBeforeLoad": true
|
||||
},
|
||||
{
|
||||
"case": "corrupt-config",
|
||||
"rejectedBeforeLoad": true
|
||||
},
|
||||
{
|
||||
"case": "linked",
|
||||
"rejectedBeforeLoad": true
|
||||
},
|
||||
{
|
||||
"case": "extra-code",
|
||||
"rejectedBeforeLoad": true
|
||||
},
|
||||
{
|
||||
"case": "native-cross-process",
|
||||
"finiteContentionTimeout": true,
|
||||
"acquiredAfterRelease": true
|
||||
},
|
||||
{
|
||||
"case": "soft-cross-process",
|
||||
"finiteContentionTimeout": true,
|
||||
"acquiredAfterRelease": true
|
||||
},
|
||||
{
|
||||
"case": "hub-cross-process",
|
||||
"finiteContentionTimeout": true,
|
||||
"acquiredAfterRelease": true
|
||||
},
|
||||
{
|
||||
"case": "missing-offline-model",
|
||||
"availability503": true,
|
||||
"noPartialLoadedState": true
|
||||
}
|
||||
],
|
||||
"freshPrivateCache": true,
|
||||
"sourceUnchanged": true,
|
||||
"limits": "Linux native/soft/Hub locking in one library generation. No shared-cache migration, Windows fallback, full-model cancellation, GPU or live cache claim."
|
||||
},
|
||||
"process": {
|
||||
"lane": "cache",
|
||||
"attempt": "qualification-patched-cache",
|
||||
"startedUtc": "2026-10-25T07:08:57.600935+00:00",
|
||||
"finishedUtc": "2026-10-25T07:09:04.779815+00:00",
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"--name",
|
||||
"jt-sec02-cache-7658ca0a",
|
||||
"--label",
|
||||
"jobtracker.qualification=p9-sec02",
|
||||
"--entrypoint",
|
||||
"python",
|
||||
"--user",
|
||||
"65534:65534",
|
||||
"--network",
|
||||
"none",
|
||||
"--read-only",
|
||||
"--cap-drop",
|
||||
"ALL",
|
||||
"--security-opt",
|
||||
"no-new-privileges",
|
||||
"--pids-limit",
|
||||
"128",
|
||||
"--cpus",
|
||||
"2",
|
||||
"--memory",
|
||||
"2g",
|
||||
"--memory-swap",
|
||||
"2g",
|
||||
"--tmpfs",
|
||||
"/tmp:rw,nosuid,nodev,size=384m,mode=1777",
|
||||
"-e",
|
||||
"HF_HUB_OFFLINE=1",
|
||||
"-e",
|
||||
"TRANSFORMERS_OFFLINE=1",
|
||||
"-e",
|
||||
"HF_HUB_DISABLE_TELEMETRY=1",
|
||||
"-e",
|
||||
"HF_HOME=/tmp/hf-home",
|
||||
"-e",
|
||||
"OMP_NUM_THREADS=1",
|
||||
"-e",
|
||||
"MKL_NUM_THREADS=1",
|
||||
"-e",
|
||||
"OLLAMA_BASE_URL=http://127.0.0.1:11434",
|
||||
"-e",
|
||||
"OLLAMA_MODEL=",
|
||||
"-e",
|
||||
"EXTERNAL_AI_ENABLED=0",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\docs\\redesign\\phase-9\\p9-sec-02\\model,dst=/qualification,readonly",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\qualified\\qualification-patched-cache,dst=/evidence",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\artifact,dst=/fixture,readonly",
|
||||
"sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"/qualification/cache_probe.py",
|
||||
"/fixture"
|
||||
],
|
||||
"localImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"containerAbsent": true,
|
||||
"network": "none",
|
||||
"readOnly": true,
|
||||
"user": "65534:65534",
|
||||
"memoryLimitBytes": 2147483648,
|
||||
"cpuLimit": 2,
|
||||
"pidsLimit": 128,
|
||||
"wallClockDeadlineSeconds": 180,
|
||||
"scope": "Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment."
|
||||
}
|
||||
},
|
||||
"parsers": {
|
||||
"status": "PASS",
|
||||
"record": {
|
||||
"status": "PASS",
|
||||
"cases": [
|
||||
{
|
||||
"file": "benign.docx",
|
||||
"sha256": "d5fd1b4cecb725a6e1aea8f1f5ed938cdd62f1c582be87bf82e2351c6962102c",
|
||||
"text": "Ada Lovelace - \u00c5se \u00d8stby \u00e6rlig erfaring. Backend APIs and reliable data pipelines with Python and C#; platform engineering and testing.",
|
||||
"ocrUsed": false,
|
||||
"childExitCode": 0
|
||||
},
|
||||
{
|
||||
"file": "benign.pdf",
|
||||
"sha256": "227b6b2777eae802b357104771e142539ecec9bde0214386e12dd5f3b1c27f03",
|
||||
"text": "Ada Lovelace - \u00c5se \u00d8stby \u00e6rlig erfaring. Backend APIs and reliable data pipelines with Python and C#; platform engineering and testing.",
|
||||
"ocrUsed": false,
|
||||
"childExitCode": 0
|
||||
},
|
||||
{
|
||||
"file": "benign.txt",
|
||||
"sha256": "0b36e56510902f2c87b8ff96a013216bede136f0d7961829d00738f5e4f78b03",
|
||||
"text": "Ada Lovelace - \u00c5se \u00d8stby \u00e6rlig erfaring. Backend APIs and reliable data pipelines with Python and C#; platform engineering and testing.",
|
||||
"ocrUsed": false,
|
||||
"childExitCode": 0
|
||||
},
|
||||
{
|
||||
"file": "ocr.png",
|
||||
"sha256": "646cceabe868e86f125386e331c3acc86283d765fc376a820cc7d3229012d195",
|
||||
"text": "PYTHON CAREER 2026",
|
||||
"ocrUsed": true,
|
||||
"childExitCode": 0
|
||||
},
|
||||
{
|
||||
"file": "ocr.pdf",
|
||||
"sha256": "42daa4579a8f5879255fb46468c58179d797f18045404db6c6a712d1ca60bd93",
|
||||
"text": "PYTHON CAREER 2026",
|
||||
"ocrUsed": true,
|
||||
"childExitCode": 0
|
||||
},
|
||||
{
|
||||
"case": "real-http-startup",
|
||||
"health200": true,
|
||||
"unauthenticated401": true,
|
||||
"realSummary200": true,
|
||||
"repeatCache": true,
|
||||
"actualUploadExtraction200": true
|
||||
}
|
||||
],
|
||||
"tesseractVersion": "tesseract 5.3.0",
|
||||
"englishDataSha256": "7d4322bd2a7749724879683fc3912cb542f19906c83bcc1a52132556427170b2",
|
||||
"englishDataBytes": 4113088,
|
||||
"offline": true,
|
||||
"serverStopped": true,
|
||||
"limits": "Synthetic TXT/DOCX/PDF/image/OCR and small BART CPU HTTP contracts; no production documents, full-size model, GPU, external provider or semantic quality."
|
||||
},
|
||||
"process": {
|
||||
"lane": "parsers",
|
||||
"attempt": "qualification-patched-parsers",
|
||||
"startedUtc": "2026-10-25T07:09:04.949270+00:00",
|
||||
"finishedUtc": "2026-10-25T07:09:12.511914+00:00",
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"--name",
|
||||
"jt-sec02-parsers-09e2d468",
|
||||
"--label",
|
||||
"jobtracker.qualification=p9-sec02",
|
||||
"--entrypoint",
|
||||
"python",
|
||||
"--user",
|
||||
"65534:65534",
|
||||
"--network",
|
||||
"none",
|
||||
"--read-only",
|
||||
"--cap-drop",
|
||||
"ALL",
|
||||
"--security-opt",
|
||||
"no-new-privileges",
|
||||
"--pids-limit",
|
||||
"128",
|
||||
"--cpus",
|
||||
"2",
|
||||
"--memory",
|
||||
"2g",
|
||||
"--memory-swap",
|
||||
"2g",
|
||||
"--tmpfs",
|
||||
"/tmp:rw,nosuid,nodev,size=384m,mode=1777",
|
||||
"-e",
|
||||
"HF_HUB_OFFLINE=1",
|
||||
"-e",
|
||||
"TRANSFORMERS_OFFLINE=1",
|
||||
"-e",
|
||||
"HF_HUB_DISABLE_TELEMETRY=1",
|
||||
"-e",
|
||||
"HF_HOME=/tmp/hf-home",
|
||||
"-e",
|
||||
"OMP_NUM_THREADS=1",
|
||||
"-e",
|
||||
"MKL_NUM_THREADS=1",
|
||||
"-e",
|
||||
"OLLAMA_BASE_URL=http://127.0.0.1:11434",
|
||||
"-e",
|
||||
"OLLAMA_MODEL=",
|
||||
"-e",
|
||||
"EXTERNAL_AI_ENABLED=0",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\docs\\redesign\\phase-9\\p9-sec-02\\model,dst=/qualification,readonly",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\qualified\\qualification-patched-parsers,dst=/evidence",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\artifact,dst=/fixture,readonly",
|
||||
"sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"/qualification/parser_probe.py"
|
||||
],
|
||||
"localImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"containerAbsent": true,
|
||||
"network": "none",
|
||||
"readOnly": true,
|
||||
"user": "65534:65534",
|
||||
"memoryLimitBytes": 2147483648,
|
||||
"cpuLimit": 2,
|
||||
"pidsLimit": 128,
|
||||
"wallClockDeadlineSeconds": 180,
|
||||
"scope": "Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment."
|
||||
}
|
||||
},
|
||||
"inventory": {
|
||||
"status": "PASS",
|
||||
"record": {
|
||||
"status": "PASS",
|
||||
"python": "3.12.10 (main, May 21 2025, 23:34:56) [GCC 12.2.0]",
|
||||
"platform": "Linux-6.18.33.2-microsoft-standard-WSL2-x86_64-with-glibc2.36",
|
||||
"libc": [
|
||||
"glibc",
|
||||
"2.36"
|
||||
],
|
||||
"applicationLockSha256": "3a3afc529f0076a1b5d67082c9269c22c12f52c47ecf95ce0c76c37b39d8297a",
|
||||
"applicationPins": {
|
||||
"annotated-doc": "0.0.5",
|
||||
"annotated-types": "0.8.0",
|
||||
"anyio": "4.14.2",
|
||||
"cachetools": "5.5.2",
|
||||
"certifi": "2026.10.19",
|
||||
"click": "8.5.0",
|
||||
"fastapi": "0.141.1",
|
||||
"filelock": "4.2.1",
|
||||
"fsspec": "2026.7.0",
|
||||
"h11": "0.16.0",
|
||||
"hf-xet": "1.6.0",
|
||||
"httpcore": "1.0.9",
|
||||
"httptools": "0.8.0",
|
||||
"httpx": "0.28.1",
|
||||
"huggingface-hub": "1.33.0",
|
||||
"idna": "3.19",
|
||||
"jinja2": "3.1.6",
|
||||
"lxml": "6.1.2",
|
||||
"markdown-it-py": "4.2.0",
|
||||
"markupsafe": "3.0.3",
|
||||
"mdurl": "0.1.2",
|
||||
"mpmath": "1.3.0",
|
||||
"networkx": "3.6.1",
|
||||
"numpy": "2.4.6",
|
||||
"packaging": "26.3",
|
||||
"pillow": "13.0.0",
|
||||
"pydantic": "2.10.6",
|
||||
"pydantic-core": "2.27.2",
|
||||
"pygments": "2.21.0",
|
||||
"pymupdf": "1.25.5",
|
||||
"pypdf": "6.21.2",
|
||||
"pytesseract": "0.3.13",
|
||||
"python-docx": "1.1.2",
|
||||
"python-dotenv": "1.2.3",
|
||||
"python-multipart": "0.0.32",
|
||||
"pyyaml": "6.0.3",
|
||||
"regex": "2026.7.19",
|
||||
"rich": "15.0.0",
|
||||
"safetensors": "0.8.0",
|
||||
"setuptools": "84.1.0",
|
||||
"shellingham": "1.5.4",
|
||||
"starlette": "1.6.0",
|
||||
"sympy": "1.14.0",
|
||||
"tokenizers": "0.22.2",
|
||||
"torch": "2.13.0+cpu",
|
||||
"tqdm": "4.70.0",
|
||||
"transformers": "5.10.0",
|
||||
"typer": "0.27.3",
|
||||
"typing-extensions": "4.16.0",
|
||||
"typing-inspection": "0.4.4",
|
||||
"urllib3": "2.8.0",
|
||||
"uvicorn": "0.34.0",
|
||||
"uvloop": "0.22.1",
|
||||
"watchfiles": "1.2.0",
|
||||
"websockets": "17.1"
|
||||
},
|
||||
"installedDistributions": {
|
||||
"httpx2": "2.12.0",
|
||||
"pytest": "9.0.3",
|
||||
"iniconfig": "2.3.1",
|
||||
"pluggy": "1.7.0",
|
||||
"httpcore2": "2.12.0",
|
||||
"truststore": "0.10.5",
|
||||
"setuptools": "84.1.0",
|
||||
"pymupdf": "1.25.5",
|
||||
"numpy": "2.4.6",
|
||||
"mdurl": "0.1.2",
|
||||
"huggingface-hub": "1.33.0",
|
||||
"python-dotenv": "1.2.3",
|
||||
"h11": "0.16.0",
|
||||
"uvicorn": "0.34.0",
|
||||
"transformers": "5.10.0",
|
||||
"anyio": "4.14.2",
|
||||
"pytesseract": "0.3.13",
|
||||
"urllib3": "2.8.0",
|
||||
"pydantic-core": "2.27.2",
|
||||
"annotated-types": "0.8.0",
|
||||
"typing-extensions": "4.16.0",
|
||||
"jinja2": "3.1.6",
|
||||
"regex": "2026.7.19",
|
||||
"fsspec": "2026.7.0",
|
||||
"pyyaml": "6.0.3",
|
||||
"hf-xet": "1.6.0",
|
||||
"pillow": "13.0.0",
|
||||
"watchfiles": "1.2.0",
|
||||
"httpcore": "1.0.9",
|
||||
"shellingham": "1.5.4",
|
||||
"safetensors": "0.8.0",
|
||||
"filelock": "4.2.1",
|
||||
"websockets": "17.1",
|
||||
"mpmath": "1.3.0",
|
||||
"typing-inspection": "0.4.4",
|
||||
"starlette": "1.6.0",
|
||||
"packaging": "26.3",
|
||||
"click": "8.5.0",
|
||||
"lxml": "6.1.2",
|
||||
"fastapi": "0.141.1",
|
||||
"torch": "2.13.0+cpu",
|
||||
"certifi": "2026.10.19",
|
||||
"httptools": "0.8.0",
|
||||
"annotated-doc": "0.0.5",
|
||||
"rich": "15.0.0",
|
||||
"markupsafe": "3.0.3",
|
||||
"networkx": "3.6.1",
|
||||
"uvloop": "0.22.1",
|
||||
"idna": "3.19",
|
||||
"typer": "0.27.3",
|
||||
"markdown-it-py": "4.2.0",
|
||||
"httpx": "0.28.1",
|
||||
"python-multipart": "0.0.32",
|
||||
"pip": "26.2.2",
|
||||
"pygments": "2.21.0",
|
||||
"pypdf": "6.21.2",
|
||||
"tqdm": "4.70.0",
|
||||
"tokenizers": "0.22.2",
|
||||
"pydantic": "2.10.6",
|
||||
"python-docx": "1.1.2",
|
||||
"sympy": "1.14.0",
|
||||
"wheel": "0.48.0",
|
||||
"cachetools": "5.5.2"
|
||||
},
|
||||
"extrasOutsideApplicationLock": {
|
||||
"httpx2": "2.12.0",
|
||||
"pytest": "9.0.3",
|
||||
"iniconfig": "2.3.1",
|
||||
"pluggy": "1.7.0",
|
||||
"httpcore2": "2.12.0",
|
||||
"truststore": "0.10.5",
|
||||
"pip": "26.2.2",
|
||||
"wheel": "0.48.0"
|
||||
},
|
||||
"pipCheck": "No broken requirements found.",
|
||||
"noDevelopmentEnvironmentsInImage": true,
|
||||
"torchVersion": "2.13.0+cpu",
|
||||
"torchBuildCuda": null,
|
||||
"cudaAvailable": false,
|
||||
"torchBuild": "PyTorch built with:\n - GCC 13.3\n - C++ Version: 202002\n - Intel(R) oneAPI Math Kernel Library Version 2024.2-Product Build 20240605 for Intel(R) 64 architecture applications\n - Intel(R) MKL-DNN v3.12.0 (Git Hash 80afa71049cd69a3df32adcccb623b12cd7baa22)\n - OpenMP 201511 (a.k.a. OpenMP 4.5)\n - LAPACK is enabled (usually provided by MKL)\n - NNPACK is enabled\n - CPU capability usage: AVX512\n - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, COMMIT_SHA=cf30153c4c131c8164ee7798e5022d810682e2cb, CUDA_FLAGS= -DLIBCUDACXX_ENABLE_SIMPLIFIED_COMPLEX_OPERATIONS -Xfatbin -compress-all -Wno-deprecated-gpu-targets --expt-extended-lambda -DCUB_WRAPPED_NAMESPACE=at_cuda_detail -DDISABLE_CUSPARSE_DEPRECATED -DCUDA_HAS_FP16=1 -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -DC10_NODEPRECATED, CXX_COMPILER=/opt/rh/gcc-toolset-13/root/usr/bin/c++, CXX_FLAGS= -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_PYTORCH_QNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -DC10_NODEPRECATED -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=range-loop-construct -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-unknown-pragmas -Wno-unused-parameter -Wno-strict-overflow -Wno-strict-aliasing -Wno-stringop-overflow -Wsuggest-override -Wno-psabi -Wno-error=old-style-cast -faligned-new -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Wno-dangling-reference -Wno-error=dangling-reference -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, TORCH_VERSION=2.13.0, USE_CUDA=0, USE_CUDNN=OFF, USE_CUSPARSELT=OFF, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_GLOO=ON, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=OFF, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, USE_ROCM_KERNEL_ASSERT=OFF, USE_XCCL=OFF, USE_XPU=OFF, \n",
|
||||
"tesseractVersion": "tesseract 5.3.0",
|
||||
"englishOcrData": {
|
||||
"path": "/usr/share/tesseract-ocr/5/tessdata/eng.traineddata",
|
||||
"bytes": 4113088,
|
||||
"sha256": "7d4322bd2a7749724879683fc3912cb542f19906c83bcc1a52132556427170b2"
|
||||
},
|
||||
"nativePackages": "adduser\t3.134\napt\t2.6.1\nbase-files\t12.4+deb12u11\nbase-passwd\t3.6.1\nbash\t5.2.15-2+b8\nbsdutils\t1:2.38.1-5+deb12u3\nca-certificates\t20230311\ncoreutils\t9.1-1\ndash\t0.5.12-2\ndebconf\t1.5.82\ndebian-archive-keyring\t2023.3+deb12u2\ndebianutils\t5.7-0.5~deb12u1\ndiffutils\t1:3.8-4\ndpkg\t1.21.22\ne2fsprogs\t1.47.0-2\nfindutils\t4.9.0-4\nfontconfig\t2.14.1-4\nfontconfig-config\t2.14.1-4\nfonts-dejavu-core\t2.37-6\ngcc-12-base:amd64\t12.2.0-14+deb12u1\ngpgv\t2.2.40-1.1\ngrep\t3.8-5\ngzip\t1.12-1\nhostname\t3.23+nmu1\ninit-system-helpers\t1.65.2\nlibacl1:amd64\t2.3.1-3\nlibapt-pkg6.0:amd64\t2.6.1\nlibarchive13:amd64\t3.6.2-1+deb12u5\nlibattr1:amd64\t1:2.5.1-4\nlibaudit-common\t1:3.0.9-1\nlibaudit1:amd64\t1:3.0.9-1\nlibblkid1:amd64\t2.38.1-5+deb12u3\nlibbrotli1:amd64\t1.0.9-2+deb12u1\nlibbsd0:amd64\t0.11.7-2\nlibbz2-1.0:amd64\t1.0.8-5+b1\nlibc-bin\t2.36-9+deb12u10\nlibc6:amd64\t2.36-9+deb12u10\nlibcairo2:amd64\t1.16.0-7\nlibcap-ng0:amd64\t0.8.3-1+b3\nlibcap2:amd64\t1:2.66-4+deb12u1\nlibcom-err2:amd64\t1.47.0-2\nlibcrypt1:amd64\t1:4.4.33-2\nlibcurl4:amd64\t7.88.1-10+deb12u15\nlibdatrie1:amd64\t0.2.13-2+b1\nlibdb5.3:amd64\t5.3.28+dfsg2-1\nlibdebconfclient0:amd64\t0.270\nlibdeflate0:amd64\t1.14-1\nlibexpat1:amd64\t2.5.0-1+deb12u5\nlibext2fs2:amd64\t1.47.0-2\nlibffi8:amd64\t3.4.4-1\nlibfontconfig1:amd64\t2.14.1-4\nlibfreetype6:amd64\t2.12.1+dfsg-5+deb12u4\nlibfribidi0:amd64\t1.0.8-2.1\nlibgcc-s1:amd64\t12.2.0-14+deb12u1\nlibgcrypt20:amd64\t1.10.1-3\nlibgdbm6:amd64\t1.23-3\nlibgif7:amd64\t5.2.1-2.5+deb12u1\nlibglib2.0-0:amd64\t2.74.6-2+deb12u9\nlibgmp10:amd64\t2:6.2.1+dfsg1-1.1\nlibgnutls30:amd64\t3.7.9-2+deb12u4\nlibgomp1:amd64\t12.2.0-14+deb12u1\nlibgpg-error0:amd64\t1.46-1\nlibgraphite2-3:amd64\t1.3.14-1+deb12u1\nlibgssapi-krb5-2:amd64\t1.20.1-2+deb12u3\nlibharfbuzz0b:amd64\t6.0.0+dfsg-3\nlibhogweed6:amd64\t3.8.1-2\nlibicu72:amd64\t72.1-3+deb12u1\nlibidn2-0:amd64\t2.3.3-1+b1\nlibjbig0:amd64\t2.1-6.1\nlibjpeg62-turbo:amd64\t1:2.1.5-2\nlibk5crypto3:amd64\t1.20.1-2+deb12u3\nlibkeyutils1:amd64\t1.6.3-2\nlibkrb5-3:amd64\t1.20.1-2+deb12u3\nlibkrb5support0:amd64\t1.20.1-2+deb12u3\nlibldap-2.5-0:amd64\t2.5.13+dfsg-5\nliblept5:amd64\t1.82.0-3+b3\nliblerc4:amd64\t4.0.0+ds-2\nliblz4-1:amd64\t1.9.4-1\nliblzma5:amd64\t5.4.1-1\nlibmd0:amd64\t1.0.4-2\nlibmount1:amd64\t2.38.1-5+deb12u3\nlibncursesw6:amd64\t6.4-4\nlibnettle8:amd64\t3.8.1-2\nlibnghttp2-14:amd64\t1.52.0-1+deb12u3\nlibnsl2:amd64\t1.3.0-2\nlibopenjp2-7:amd64\t2.5.0-2+deb12u3\nlibp11-kit0:amd64\t0.24.1-2\nlibpam-modules:amd64\t1.5.2-6+deb12u1\nlibpam-modules-bin\t1.5.2-6+deb12u1\nlibpam-runtime\t1.5.2-6+deb12u1\nlibpam0g:amd64\t1.5.2-6+deb12u1\nlibpango-1.0-0:amd64\t1.50.12+ds-1\nlibpangocairo-1.0-0:amd64\t1.50.12+ds-1\nlibpangoft2-1.0-0:amd64\t1.50.12+ds-1\nlibpcre2-8-0:amd64\t10.42-1\nlibpixman-1-0:amd64\t0.42.2-1\nlibpng16-16:amd64\t1.6.39-2+deb12u6\nlibpsl5:amd64\t0.21.2-1\nlibreadline8:amd64\t8.2-1.3\nlibrtmp1:amd64\t2.4+20151223.gitfa8646d.1-2+b2\nlibsasl2-2:amd64\t2.1.28+dfsg-10\nlibsasl2-modules-db:amd64\t2.1.28+dfsg-10\nlibseccomp2:amd64\t2.5.4-1+deb12u1\nlibselinux1:amd64\t3.4-1+b6\nlibsemanage-common\t3.4-1\nlibsemanage2:amd64\t3.4-1+b5\nlibsepol2:amd64\t3.4-2.1\nlibsmartcols1:amd64\t2.38.1-5+deb12u3\nlibsqlite3-0:amd64\t3.40.1-2+deb12u1\nlibss2:amd64\t1.47.0-2\nlibssh2-1:amd64\t1.10.0-3+deb12u1\nlibssl3:amd64\t3.0.16-1~deb12u1\nlibstdc++6:amd64\t12.2.0-14+deb12u1\nlibsystemd0:amd64\t252.36-1~deb12u1\nlibtasn1-6:amd64\t4.19.0-2+deb12u1\nlibtesseract5:amd64\t5.3.0-2\nlibthai-data\t0.1.29-1\nlibthai0:amd64\t0.1.29-1\nlibtiff6:amd64\t4.5.0-6+deb12u4\nlibtinfo6:amd64\t6.4-4\nlibtirpc-common\t1.3.3+ds-1\nlibtirpc3:amd64\t1.3.3+ds-1\nlibudev1:amd64\t252.36-1~deb12u1\nlibunistring2:amd64\t1.0-2\nlibuuid1:amd64\t2.38.1-5+deb12u3\nlibwebp7:amd64\t1.2.4-0.2+deb12u1\nlibwebpmux3:amd64\t1.2.4-0.2+deb12u1\nlibx11-6:amd64\t2:1.8.4-2+deb12u2\nlibx11-data\t2:1.8.4-2+deb12u2\nlibxau6:amd64\t1:1.0.9-1\nlibxcb-render0:amd64\t1.15-1\nlibxcb-shm0:amd64\t1.15-1\nlibxcb1:amd64\t1.15-1\nlibxdmcp6:amd64\t1:1.1.2-3\nlibxext6:amd64\t2:1.3.4-1+b1\nlibxml2:amd64\t2.9.14+dfsg-1.3~deb12u6\nlibxrender1:amd64\t1:0.9.10-1.1\nlibxxhash0:amd64\t0.8.1-1\nlibzstd1:amd64\t1.5.4+dfsg2-5\nlogin\t1:4.13+dfsg1-1+deb12u1\nlogsave\t1.47.0-2\nmawk\t1.3.4.20200120-3.1\nmount\t2.38.1-5+deb12u3\nncurses-base\t6.4-4\nncurses-bin\t6.4-4\nnetbase\t6.4\nopenssl\t3.0.16-1~deb12u1\npasswd\t1:4.13+dfsg1-1+deb12u1\nperl-base\t5.36.0-7+deb12u2\nreadline-common\t8.2-1.3\nsed\t4.9-1\nsysvinit-utils\t3.06-4\ntar\t1.34+dfsg-1.2+deb12u1\ntesseract-ocr\t5.3.0-2\ntesseract-ocr-eng\t1:4.1.0-2\ntesseract-ocr-osd\t1:4.1.0-2\ntzdata\t2025b-0+deb12u1\nusr-is-merged\t37~deb12u1\nutil-linux\t2.38.1-5+deb12u3\nutil-linux-extra\t2.38.1-5+deb12u3\nzlib1g:amd64\t1:1.2.13.dfsg-1\n",
|
||||
"scope": "Actual locally built source Dockerfile and exact55 locked application pins; test-only packages, if any, and bootstrap tools remain explicitly listed separately.",
|
||||
"applicationSources": {
|
||||
"app.py": "aab24c7f64868fcb93a6133aa7b2087b23f98469e89e4c84fa040a022b0a8dfc",
|
||||
"parser_child.py": "0074a05e9a0d511e26a329a057f98568cdc1723b2cc37168e0b59975b5424451",
|
||||
"requirements.txt": "b74510c7c2033611cc4661bcc26ebec30a0a9a790838be8ec7c69c6dd834f877",
|
||||
"requirements-linux.lock": "3a3afc529f0076a1b5d67082c9269c22c12f52c47ecf95ce0c76c37b39d8297a",
|
||||
"tests/test_app.py": "143c9704c658a91b5ed998504c2aefa4c6326adfebc60ee797d810c3bbd810a2"
|
||||
}
|
||||
},
|
||||
"process": {
|
||||
"lane": "inventory",
|
||||
"attempt": "qualification-patched-inventory",
|
||||
"startedUtc": "2026-10-25T07:09:12.676076+00:00",
|
||||
"finishedUtc": "2026-10-25T07:09:16.479968+00:00",
|
||||
"exitCode": 0,
|
||||
"command": [
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"--name",
|
||||
"jt-sec02-inventory-95ab2359",
|
||||
"--label",
|
||||
"jobtracker.qualification=p9-sec02",
|
||||
"--entrypoint",
|
||||
"python",
|
||||
"--user",
|
||||
"65534:65534",
|
||||
"--network",
|
||||
"none",
|
||||
"--read-only",
|
||||
"--cap-drop",
|
||||
"ALL",
|
||||
"--security-opt",
|
||||
"no-new-privileges",
|
||||
"--pids-limit",
|
||||
"128",
|
||||
"--cpus",
|
||||
"2",
|
||||
"--memory",
|
||||
"2g",
|
||||
"--memory-swap",
|
||||
"2g",
|
||||
"--tmpfs",
|
||||
"/tmp:rw,nosuid,nodev,size=384m,mode=1777",
|
||||
"-e",
|
||||
"HF_HUB_OFFLINE=1",
|
||||
"-e",
|
||||
"TRANSFORMERS_OFFLINE=1",
|
||||
"-e",
|
||||
"HF_HUB_DISABLE_TELEMETRY=1",
|
||||
"-e",
|
||||
"HF_HOME=/tmp/hf-home",
|
||||
"-e",
|
||||
"OMP_NUM_THREADS=1",
|
||||
"-e",
|
||||
"MKL_NUM_THREADS=1",
|
||||
"-e",
|
||||
"OLLAMA_BASE_URL=http://127.0.0.1:11434",
|
||||
"-e",
|
||||
"OLLAMA_MODEL=",
|
||||
"-e",
|
||||
"EXTERNAL_AI_ENABLED=0",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\docs\\redesign\\phase-9\\p9-sec-02\\model,dst=/qualification,readonly",
|
||||
"--mount",
|
||||
"type=bind,src=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\p9-sec-02\\qualified\\qualification-patched-inventory,dst=/evidence",
|
||||
"sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"/qualification/runtime_inventory.py"
|
||||
],
|
||||
"localImageId": "sha256:2fe77e47a6c5ecea66764dbd6264049724f24849141e16af5491c2de34af53c1",
|
||||
"runtimeImageId": "sha256:4a04ca68fa40b3ec61cb61187b339a4d2895b375b962999e974d75556b5b1331",
|
||||
"containerAbsent": true,
|
||||
"network": "none",
|
||||
"readOnly": true,
|
||||
"user": "65534:65534",
|
||||
"memoryLimitBytes": 2147483648,
|
||||
"cpuLimit": 2,
|
||||
"pidsLimit": 128,
|
||||
"wallClockDeadlineSeconds": 180,
|
||||
"scope": "Actual locally built source image plus exact test-only extras; no app source mount, production cache, external network, registry push or deployment."
|
||||
}
|
||||
}
|
||||
},
|
||||
"scope": "Actual source Dockerfile runtime plus exact six test extras. Synthetic BART weights and real pinned tokenizer/native generation; no full checkpoint, semantic quality, live cache, GPU or production claim."
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"startedUtc": "2026-10-25T07:11:08.705905+00:00",
|
||||
"finishedUtc": "2026-10-25T07:11:16.481575+00:00",
|
||||
"lockSha256": "902dee7aaf758577fed7fbd53b0161f691d598e89ffe75c6ebf375f13f6c456b",
|
||||
"packageCount": 63,
|
||||
"sourceQueryCount": 126,
|
||||
"errors": [
|
||||
{
|
||||
"package": "torch",
|
||||
"version": "2.13.0+cpu",
|
||||
"provider": "pypi",
|
||||
"httpStatus": 404,
|
||||
"error": "HTTPError"
|
||||
}
|
||||
],
|
||||
"findingPackageCount": 0,
|
||||
"advisoryRecords": 0,
|
||||
"status": "INCOMPLETE",
|
||||
"limits": "Exact lock pin queries only; public advisory metadata, no installation/resolution, exploit or reachability assessment. OSV performs upstream version matching. Missing releases are errors, not clean findings. Cross-provider aliases can overlap.",
|
||||
"rawSummarySha256": "804a01d79bb3ba295eab59284018a2060b680307720548ffcf804536a5d66fd0",
|
||||
"scope": "Actual63-distribution qualification image:55 application +6 exact test extras +pip/wheel. Full raw requests retained; exact vendor PyPI404 is not a clean finding."
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
.venv
|
||||
.venv*
|
||||
__pycache__
|
||||
.pytest_cache
|
||||
tmp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,3 @@
|
||||
-r requirements.txt
|
||||
pytest==8.3.5
|
||||
pytest==9.0.3
|
||||
httpx2==2.12.0
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
annotated-doc==0.0.5 \
|
||||
--hash=sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101 \
|
||||
--hash=sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb
|
||||
# via fastapi
|
||||
# via
|
||||
# fastapi
|
||||
# typer
|
||||
annotated-types==0.8.0 \
|
||||
--hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \
|
||||
--hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0
|
||||
@@ -12,6 +14,7 @@ anyio==4.14.2 \
|
||||
--hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \
|
||||
--hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f
|
||||
# via
|
||||
# httpx
|
||||
# starlette
|
||||
# watchfiles
|
||||
cachetools==5.5.2 \
|
||||
@@ -23,196 +26,25 @@ certifi==2026.10.19 \
|
||||
--hash=sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b
|
||||
# via
|
||||
# -r requirements.txt
|
||||
# requests
|
||||
charset-normalizer==3.5.1 \
|
||||
--hash=sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45 \
|
||||
--hash=sha256:012a22b88a77ca2e59b98ac5889b0deb604147666032f45e6d6e217634d2550d \
|
||||
--hash=sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5 \
|
||||
--hash=sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b \
|
||||
--hash=sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f \
|
||||
--hash=sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f \
|
||||
--hash=sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5 \
|
||||
--hash=sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22 \
|
||||
--hash=sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5 \
|
||||
--hash=sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac \
|
||||
--hash=sha256:13e3afe97712e8887cd516e960c63f0b93122971e5b5e4b2622fe7701771e838 \
|
||||
--hash=sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 \
|
||||
--hash=sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626 \
|
||||
--hash=sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4 \
|
||||
--hash=sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369 \
|
||||
--hash=sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b \
|
||||
--hash=sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e \
|
||||
--hash=sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee \
|
||||
--hash=sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1 \
|
||||
--hash=sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102 \
|
||||
--hash=sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8 \
|
||||
--hash=sha256:29880d17a8eb0b5cfdfd8944b468322928059aa35f1f5fa8ff22b149ec0b42f8 \
|
||||
--hash=sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9 \
|
||||
--hash=sha256:2e9cf9253119d8e5d111f05d71626786fd3d6193817316eab1ca088cdb8593cf \
|
||||
--hash=sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0 \
|
||||
--hash=sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031 \
|
||||
--hash=sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e \
|
||||
--hash=sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235 \
|
||||
--hash=sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072 \
|
||||
--hash=sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb \
|
||||
--hash=sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c \
|
||||
--hash=sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950 \
|
||||
--hash=sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2 \
|
||||
--hash=sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb \
|
||||
--hash=sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e \
|
||||
--hash=sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6 \
|
||||
--hash=sha256:3e5e1224c0a6a90e05843e07adfec669edebec17801c67072f51e59561d63c0b \
|
||||
--hash=sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2 \
|
||||
--hash=sha256:433c5a81eade63b47e522303bad236f59dba55ea6951746f5558355eeed8c75d \
|
||||
--hash=sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa \
|
||||
--hash=sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2 \
|
||||
--hash=sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818 \
|
||||
--hash=sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032 \
|
||||
--hash=sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71 \
|
||||
--hash=sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96 \
|
||||
--hash=sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687 \
|
||||
--hash=sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8 \
|
||||
--hash=sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3 \
|
||||
--hash=sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61 \
|
||||
--hash=sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9 \
|
||||
--hash=sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1 \
|
||||
--hash=sha256:55261ac0d2941c42f196dd576f543d87a8ee03cd6f5e30dfb4d807b2e3b9121a \
|
||||
--hash=sha256:56490c595a28b1bb27dfc583e816152a9767721ef58b2c03b13f954d2f707420 \
|
||||
--hash=sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4 \
|
||||
--hash=sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65 \
|
||||
--hash=sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663 \
|
||||
--hash=sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f \
|
||||
--hash=sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591 \
|
||||
--hash=sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a \
|
||||
--hash=sha256:5ca0555312ae2fe82715cada7fac375530c2f3349e1eaa1bcb33d0283ac79a18 \
|
||||
--hash=sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e \
|
||||
--hash=sha256:5e2d0e146dcb57034f8b97dc58d2d512cb90aba253960ce449f695fec6a82c6f \
|
||||
--hash=sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7 \
|
||||
--hash=sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3 \
|
||||
--hash=sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c \
|
||||
--hash=sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3 \
|
||||
--hash=sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7 \
|
||||
--hash=sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96 \
|
||||
--hash=sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486 \
|
||||
--hash=sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3 \
|
||||
--hash=sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6 \
|
||||
--hash=sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b \
|
||||
--hash=sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731 \
|
||||
--hash=sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959 \
|
||||
--hash=sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9 \
|
||||
--hash=sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf \
|
||||
--hash=sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8 \
|
||||
--hash=sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e \
|
||||
--hash=sha256:789b8982559ae28dad2356519f841655756cdcd96616410590ae0b17454ee64f \
|
||||
--hash=sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885 \
|
||||
--hash=sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0 \
|
||||
--hash=sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506 \
|
||||
--hash=sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2 \
|
||||
--hash=sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0 \
|
||||
--hash=sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e \
|
||||
--hash=sha256:85de3134b5379856e323ba37c19c9256d39425f7b76a63af52b09fb4664c2e8f \
|
||||
--hash=sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e \
|
||||
--hash=sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491 \
|
||||
--hash=sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a \
|
||||
--hash=sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20 \
|
||||
--hash=sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449 \
|
||||
--hash=sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af \
|
||||
--hash=sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c \
|
||||
--hash=sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712 \
|
||||
--hash=sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7 \
|
||||
--hash=sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a \
|
||||
--hash=sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20 \
|
||||
--hash=sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f \
|
||||
--hash=sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 \
|
||||
--hash=sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9 \
|
||||
--hash=sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e \
|
||||
--hash=sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5 \
|
||||
--hash=sha256:994e883d17c559cdfd38c84003c8b27d25424a1077272a17e7cd27bfe0bf57b2 \
|
||||
--hash=sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36 \
|
||||
--hash=sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263 \
|
||||
--hash=sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4 \
|
||||
--hash=sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11 \
|
||||
--hash=sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a \
|
||||
--hash=sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3 \
|
||||
--hash=sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375 \
|
||||
--hash=sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa \
|
||||
--hash=sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d \
|
||||
--hash=sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5 \
|
||||
--hash=sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99 \
|
||||
--hash=sha256:a951ad59cad9145664a730d3036b40b844e74d2d3683da40111463cd3a83845d \
|
||||
--hash=sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c \
|
||||
--hash=sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488 \
|
||||
--hash=sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6 \
|
||||
--hash=sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc \
|
||||
--hash=sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b \
|
||||
--hash=sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f \
|
||||
--hash=sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00 \
|
||||
--hash=sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10 \
|
||||
--hash=sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598 \
|
||||
--hash=sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6 \
|
||||
--hash=sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962 \
|
||||
--hash=sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c \
|
||||
--hash=sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08 \
|
||||
--hash=sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab \
|
||||
--hash=sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573 \
|
||||
--hash=sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90 \
|
||||
--hash=sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5 \
|
||||
--hash=sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18 \
|
||||
--hash=sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d \
|
||||
--hash=sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af \
|
||||
--hash=sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea \
|
||||
--hash=sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c \
|
||||
--hash=sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b \
|
||||
--hash=sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6 \
|
||||
--hash=sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8 \
|
||||
--hash=sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774 \
|
||||
--hash=sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004 \
|
||||
--hash=sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a \
|
||||
--hash=sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a \
|
||||
--hash=sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2 \
|
||||
--hash=sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2 \
|
||||
--hash=sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa \
|
||||
--hash=sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe \
|
||||
--hash=sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3 \
|
||||
--hash=sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc \
|
||||
--hash=sha256:e06efa066f7dbadbc84ebc126a97c452a6451dfcf589d89d788484949e1cf795 \
|
||||
--hash=sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d \
|
||||
--hash=sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc \
|
||||
--hash=sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893 \
|
||||
--hash=sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef \
|
||||
--hash=sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d \
|
||||
--hash=sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda \
|
||||
--hash=sha256:eb12fb2ba69ffa05f8695f61c69e591dc4b4a12ac3757ac8af8adb259bf56d17 \
|
||||
--hash=sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30 \
|
||||
--hash=sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7 \
|
||||
--hash=sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5 \
|
||||
--hash=sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182 \
|
||||
--hash=sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f \
|
||||
--hash=sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9 \
|
||||
--hash=sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada \
|
||||
--hash=sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876 \
|
||||
--hash=sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a \
|
||||
--hash=sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348 \
|
||||
--hash=sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3 \
|
||||
--hash=sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f \
|
||||
--hash=sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0 \
|
||||
--hash=sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f
|
||||
# via requests
|
||||
# httpcore
|
||||
# httpx
|
||||
click==8.5.0 \
|
||||
--hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \
|
||||
--hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34
|
||||
# via uvicorn
|
||||
# via
|
||||
# huggingface-hub
|
||||
# uvicorn
|
||||
fastapi==0.141.1 \
|
||||
--hash=sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3 \
|
||||
--hash=sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1
|
||||
# via -r requirements.txt
|
||||
filelock==3.32.4 \
|
||||
--hash=sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd \
|
||||
--hash=sha256:2bde2e4cf732e0153406d8a7bc80620ecf5e621fe0d25e41143c4e3b4733ff30
|
||||
filelock==4.2.1 \
|
||||
--hash=sha256:7be2662e9e826b9bba28afc0f843a123280d799a2ea44bb5d35ccec67905ae44 \
|
||||
--hash=sha256:c4c937ccac2a813cee448e662a56366cfb374c0f8702e75f295c412cc1c5d5a3
|
||||
# via
|
||||
# -r requirements.txt
|
||||
# huggingface-hub
|
||||
# torch
|
||||
# transformers
|
||||
fsspec==2026.7.0 \
|
||||
--hash=sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279 \
|
||||
--hash=sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88
|
||||
@@ -222,7 +54,9 @@ fsspec==2026.7.0 \
|
||||
h11==0.16.0 \
|
||||
--hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \
|
||||
--hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
|
||||
# via uvicorn
|
||||
# via
|
||||
# httpcore
|
||||
# uvicorn
|
||||
hf-xet==1.6.0 \
|
||||
--hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \
|
||||
--hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \
|
||||
@@ -242,6 +76,10 @@ hf-xet==1.6.0 \
|
||||
--hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \
|
||||
--hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b
|
||||
# via huggingface-hub
|
||||
httpcore==1.0.9 \
|
||||
--hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \
|
||||
--hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8
|
||||
# via httpx
|
||||
httptools==0.8.0 \
|
||||
--hash=sha256:0770728beb05094c809b98e814edff5fef69d26ad7d21185f2f6d5884a0ba683 \
|
||||
--hash=sha256:0ea897f0c729581ebf72131a438a7932d9b14efef72d75ada966700cac3caaeb \
|
||||
@@ -294,9 +132,13 @@ httptools==0.8.0 \
|
||||
--hash=sha256:f256d6ce930c52ca1cb2a960b7da03548c454e7d28b06059ad41bfe789036ce0 \
|
||||
--hash=sha256:fe2a4c95aeba2209434e7b31172da572846cae8ca0bf1e7013e61b99fbbf5e72
|
||||
# via uvicorn
|
||||
huggingface-hub==0.36.2 \
|
||||
--hash=sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a \
|
||||
--hash=sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270
|
||||
httpx==0.28.1 \
|
||||
--hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \
|
||||
--hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad
|
||||
# via huggingface-hub
|
||||
huggingface-hub==1.33.0 \
|
||||
--hash=sha256:04e434b06e100eddbce9a6e817d72693a7884b10a79bd67ab48080d5c07eb899 \
|
||||
--hash=sha256:367be21a201db9523eddf8aeac7048f2602c1b308691c97640d5e72ed188007e
|
||||
# via
|
||||
# tokenizers
|
||||
# transformers
|
||||
@@ -305,7 +147,7 @@ idna==3.19 \
|
||||
--hash=sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4
|
||||
# via
|
||||
# anyio
|
||||
# requests
|
||||
# httpx
|
||||
jinja2==3.1.6 \
|
||||
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
|
||||
--hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
|
||||
@@ -488,6 +330,10 @@ lxml==6.1.2 \
|
||||
--hash=sha256:fa813b0247d0543a563b993ac3dba6168eef59e3a61448432cf5453300c2412b \
|
||||
--hash=sha256:feda2ef68c339987dfb370af3a4b785dbc40f925723fe2365e68e43c2640f85a
|
||||
# via python-docx
|
||||
markdown-it-py==4.2.0 \
|
||||
--hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \
|
||||
--hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a
|
||||
# via rich
|
||||
markupsafe==3.0.3 \
|
||||
--hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \
|
||||
--hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \
|
||||
@@ -579,6 +425,10 @@ markupsafe==3.0.3 \
|
||||
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
|
||||
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
|
||||
# via jinja2
|
||||
mdurl==0.1.2 \
|
||||
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||
# via markdown-it-py
|
||||
mpmath==1.3.0 \
|
||||
--hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \
|
||||
--hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c
|
||||
@@ -863,6 +713,10 @@ pydantic-core==2.27.2 \
|
||||
--hash=sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9 \
|
||||
--hash=sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad
|
||||
# via pydantic
|
||||
pygments==2.21.0 \
|
||||
--hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \
|
||||
--hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c
|
||||
# via rich
|
||||
pymupdf==1.25.5 \
|
||||
--hash=sha256:5a35e2725fae0ab57f058dff77615c15eb5961eac50ba04f41ebc792cd8facad \
|
||||
--hash=sha256:5f96311cacd13254c905f6654a004a0a2025b71cabc04fda667f5472f72c15a0 \
|
||||
@@ -1087,12 +941,10 @@ regex==2026.7.19 \
|
||||
--hash=sha256:fe31f28c94402043161876a258a9c6f757cb485905c7614ce8d6cd40e6b7bdc1 \
|
||||
--hash=sha256:ffd8893ccc1c2fce6e0d6ca402d716fe1b29db70c7132609a05955e31b2aa8f2
|
||||
# via transformers
|
||||
requests==2.34.2 \
|
||||
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
|
||||
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
|
||||
# via
|
||||
# huggingface-hub
|
||||
# transformers
|
||||
rich==15.0.0 \
|
||||
--hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \
|
||||
--hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36
|
||||
# via typer
|
||||
safetensors==0.8.0 \
|
||||
--hash=sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358 \
|
||||
--hash=sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f \
|
||||
@@ -1118,51 +970,78 @@ setuptools==84.1.0 \
|
||||
# via
|
||||
# -r requirements.txt
|
||||
# torch
|
||||
shellingham==1.5.4 \
|
||||
--hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \
|
||||
--hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de
|
||||
# via typer
|
||||
starlette==1.6.0 \
|
||||
--hash=sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c \
|
||||
--hash=sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b
|
||||
# via
|
||||
# -r requirements.txt
|
||||
# fastapi
|
||||
sympy==1.13.1 \
|
||||
--hash=sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f \
|
||||
--hash=sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8
|
||||
sympy==1.14.0 \
|
||||
--hash=sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 \
|
||||
--hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5
|
||||
# via torch
|
||||
tokenizers==0.21.4 \
|
||||
--hash=sha256:1340ff877ceedfa937544b7d79f5b7becf33a4cfb58f89b3b49927004ef66f78 \
|
||||
--hash=sha256:2107ad649e2cda4488d41dfd031469e9da3fcbfd6183e74e4958fa729ffbf9c6 \
|
||||
--hash=sha256:2ccc10a7c3bcefe0f242867dc914fc1226ee44321eb618cfe3019b5df3400133 \
|
||||
--hash=sha256:39b376f5a1aee67b4d29032ee85511bbd1b99007ec735f7f35c8a2eb104eade5 \
|
||||
--hash=sha256:3c1f4317576e465ac9ef0d165b247825a2a4078bcd01cba6b54b867bdf9fdd8b \
|
||||
--hash=sha256:3c73012da95afafdf235ba80047699df4384fdc481527448a078ffd00e45a7d9 \
|
||||
--hash=sha256:475d807a5c3eb72c59ad9b5fcdb254f6e17f53dfcbb9903233b0dfa9c943b597 \
|
||||
--hash=sha256:51b7eabb104f46c1c50b486520555715457ae833d5aee9ff6ae853d1130506ff \
|
||||
--hash=sha256:5e2f601a8e0cd5be5cc7506b20a79112370b9b3e9cb5f13f68ab11acd6ca7d60 \
|
||||
--hash=sha256:6c42a930bc5f4c47f4ea775c91de47d27910881902b0f20e4990ebe045a415d0 \
|
||||
--hash=sha256:714b05b2e1af1288bd1bc56ce496c4cebb64a20d158ee802887757791191e6e2 \
|
||||
--hash=sha256:c212aa4e45ec0bb5274b16b6f31dd3f1c41944025c2358faaa5782c754e84c24 \
|
||||
--hash=sha256:cc88bb34e23a54cc42713d6d98af5f1bf79c07653d24fe984d2d695ba2c922a2 \
|
||||
--hash=sha256:f23186c40395fc390d27f519679a58023f368a0aad234af145e0f39ad1212732 \
|
||||
--hash=sha256:fa23f85fbc9a02ec5c6978da172cdcbac23498c3ca9f3645c5c68740ac007880
|
||||
tokenizers==0.22.2 \
|
||||
--hash=sha256:143b999bdc46d10febb15cbffb4207ddd1f410e2c755857b5a0797961bbdc113 \
|
||||
--hash=sha256:1a62ba2c5faa2dd175aaeed7b15abf18d20266189fb3406c5d0550dd34dd5f37 \
|
||||
--hash=sha256:1c774b1276f71e1ef716e5486f21e76333464f47bece56bbd554485982a9e03e \
|
||||
--hash=sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001 \
|
||||
--hash=sha256:1e50f8554d504f617d9e9d6e4c2c2884a12b388a97c5c77f0bc6cf4cd032feee \
|
||||
--hash=sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7 \
|
||||
--hash=sha256:25b85325d0815e86e0bac263506dd114578953b7b53d7de09a6485e4a160a7dd \
|
||||
--hash=sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4 \
|
||||
--hash=sha256:319f659ee992222f04e58f84cbf407cfa66a65fe3a8de44e8ad2bc53e7d99012 \
|
||||
--hash=sha256:369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67 \
|
||||
--hash=sha256:37ae80a28c1d3265bb1f22464c856bd23c02a05bb211e56d0c5301a435be6c1a \
|
||||
--hash=sha256:38337540fbbddff8e999d59970f3c6f35a82de10053206a7562f1ea02d046fa5 \
|
||||
--hash=sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917 \
|
||||
--hash=sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c \
|
||||
--hash=sha256:64d94e84f6660764e64e7e0b22baa72f6cd942279fdbb21d46abd70d179f0195 \
|
||||
--hash=sha256:753d47ebd4542742ef9261d9da92cd545b2cacbb48349a1225466745bb866ec4 \
|
||||
--hash=sha256:791135ee325f2336f498590eb2f11dc5c295232f288e75c99a36c5dbce63088a \
|
||||
--hash=sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc \
|
||||
--hash=sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92 \
|
||||
--hash=sha256:bfb88f22a209ff7b40a576d5324bf8286b519d7358663db21d6246fb17eea2d5 \
|
||||
--hash=sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48 \
|
||||
--hash=sha256:df6c4265b289083bf710dff49bc51ef252f9d5be33a45ee2bed151114a56207b \
|
||||
--hash=sha256:e10bf9113d209be7cd046d40fbabbaf3278ff6d18eb4da4c500443185dc1896c \
|
||||
--hash=sha256:f01a9c019878532f98927d2bacb79bbb404b43d3437455522a00a30718cdedb5
|
||||
# via transformers
|
||||
torch==2.6.0+cpu \
|
||||
--hash=sha256:24c9d3d13b9ea769dd7bd5c11cfa1fc463fd7391397156565484565ca685d908 \
|
||||
--hash=sha256:2ab9c6b3d6eea506bda9b82a0155e974d8ef8e38b417589d144568b4fa59afe1 \
|
||||
--hash=sha256:318290e8924353c61b125cdc8768d15208704e279e7757c113b9620740deca98 \
|
||||
--hash=sha256:35a9e78b7e4096968b54c1a198687b981569c50ae93e661aa430f9fd208da102 \
|
||||
--hash=sha256:4027d982eb2781c93825ab9527f17fbbb12dbabf422298e4b954be60016f87d8 \
|
||||
--hash=sha256:59e78aa0c690f70734e42670036d6b541930b8eabbaa18d94e090abf14cc4d91 \
|
||||
--hash=sha256:5b6ae523bfb67088a17ca7734d131548a2e60346c622621e4248ed09dd0790cc \
|
||||
--hash=sha256:6e22f0b13db8d53e55bcb3b46c9dd4b6676d1c44051b56753e745cec3075b333 \
|
||||
--hash=sha256:7cac05af909ee1c5c2915e8f3efaa1ea015e7e414be0ff53071402b9e4f3c7df \
|
||||
--hash=sha256:90832f4d118c566b8652a2196ac695fc1f14cf420db27b5a1b41c7eaaf2141e9 \
|
||||
--hash=sha256:b436a6c62d086dc5b32f5721b59f0ca8ad3bf9de09ee9b5b83dbf1e7a7e22c60 \
|
||||
--hash=sha256:b5e7e8d561b263b5ad8049736281cd12c78e51e7bc1a913fd4098fd0e0b96347 \
|
||||
--hash=sha256:b68274aeb4047ba8c73e903f0621e2a4adb54ad5282b0845689c3e1dcd2e2546 \
|
||||
--hash=sha256:d3dab9fb0294f268aec28e8aaba834e9d006b90a50db5bc2fe2191a9d48c6084 \
|
||||
--hash=sha256:e4a85b58ed455915ee66809ca45e0190a76d652d7e6210b72f53a0219459613b \
|
||||
--hash=sha256:e70ee2e37ad27a90201d101a41c2e10df7cf15a9ebd17c084f54cf2518c57bdf \
|
||||
--hash=sha256:fb34d6cc4e6e20e66d74852c3d84e0301dc5e1a7c822076ef288886f978390f0
|
||||
torch==2.13.0+cpu \
|
||||
--hash=sha256:0555fde6108ca90247ae33d4e1237cbae475c86a223bb2f0f91d9addf1f611bd \
|
||||
--hash=sha256:0b8f7d0423027ae8b90c7977c627f3379f325363a08224dffad9b4b2d684a83d \
|
||||
--hash=sha256:10717d8b3b67c45a4788bf7ffc0bab1ea1e5ebbedd24466be6100102d141fac1 \
|
||||
--hash=sha256:1a3a35229fdc13446b4eab50e7fcf9399ff941e89a3b761497786297a5d8dde5 \
|
||||
--hash=sha256:222a6681467cc7f6f05cd3068dfbc603def3a1e46d1d4620c1c8cdf6178bd563 \
|
||||
--hash=sha256:2b3d093abd919ad934c43d47e73ba63ceba7cbd7269fc2e9c1e4fc29e8fe45fa \
|
||||
--hash=sha256:3bbb357161e8db43ba7cdcc7e03561eba0c449392f2f27d3566887198fcb4ead \
|
||||
--hash=sha256:3fbf9c9d1f3c10c2d59d04aca426dee9ccc6ceb32d255c61e93acc3b4f75fae6 \
|
||||
--hash=sha256:4ca4a9394b0c771238a4f73590fdbbc4debad85ed0fa63d026ae1b085da7d6e2 \
|
||||
--hash=sha256:6746dbcbeb526eb61330b76b41ff1b4eb848951103a892eeb080dfa2b264667b \
|
||||
--hash=sha256:6e9817dbdf5ea76789babd46e457eac5bf14ff566cf85f8addbfdff2d56601ce \
|
||||
--hash=sha256:6f307c2c32d764ffc6ff6893b801fad6d4752f3e67966cb8abf1843427c02604 \
|
||||
--hash=sha256:7b8d26e29bceafbdaa8d63bfe7612f23875b5af2cc07e13f809c3ed890bbe1d8 \
|
||||
--hash=sha256:84453b69508ec79902f899c5ed9495acb9e2bbe9fda5f1d5d6f19e3c3842e1a7 \
|
||||
--hash=sha256:8e109528e6bab044815daebaf71770fbaace3a66ef1c816cb55c875350f78a60 \
|
||||
--hash=sha256:8eb5002ca81af00ae69b57540f615b58b8ae922b6d4848176b366a52bd2196e6 \
|
||||
--hash=sha256:966d020354f465672dc7dd10d3a5c6cd17d7eb48620aa1d265b48a1f78f06898 \
|
||||
--hash=sha256:991cc14b39e751122c01f017be6448533989868731cb5eecd1006893d26787c2 \
|
||||
--hash=sha256:a17ff48608634db245e17e8bb00a9558554a49aeb1e4f5fe6cd039af2a10515b \
|
||||
--hash=sha256:a43376bd094124ef626bfdd3d4c2c62eacb0b5ddc99776f4a32d4fd16f1f3420 \
|
||||
--hash=sha256:a8b450c1e58e5800e5b4691dac412f8d2d65a1dc3298166f91596603a3531e6f \
|
||||
--hash=sha256:ac7aaf322be4777765a53bed7264a214dd81b3a1d276b93150515a3c5f75e4b0 \
|
||||
--hash=sha256:b222c15a0fc2ce207d1c1a59700b46c8fa6748df1f447ad11e5c870dde0933d9 \
|
||||
--hash=sha256:ca021f9eb2f8345c83fa03e3a04587308afb8df71bd472670b3ece00df58621c \
|
||||
--hash=sha256:d20fa53ee744502fa4c69818a720b05ca0d37abd055d4f6e66cae155114bc691 \
|
||||
--hash=sha256:dec241fef3984c0d1edadd1f58708e218d4eae881ceef7bc10cf9964d41b68b9 \
|
||||
--hash=sha256:e2e5134decf00e218da62318f3dc5df156231d367871918e91eba95ab0ad43ab \
|
||||
--hash=sha256:f028e428bddee95cdb86e2470254e95c9af629362488550c200ed4793125a817 \
|
||||
--hash=sha256:f5cbb61180a9793d9e12fe115a2310d2600bd449dfb9a01ec5640e21359fa5ea \
|
||||
--hash=sha256:fa0762705b933624d59f6823db9ce7ec2e35b3e1e9c319c9db51fbeecfc3e319 \
|
||||
--hash=sha256:ffadde149901c8afa138daa38d898264003cfcf1a3336ca5cd964b5af227d867
|
||||
# via -r requirements.txt
|
||||
tqdm==4.70.0 \
|
||||
--hash=sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220 \
|
||||
@@ -1170,10 +1049,14 @@ tqdm==4.70.0 \
|
||||
# via
|
||||
# huggingface-hub
|
||||
# transformers
|
||||
transformers==4.48.3 \
|
||||
--hash=sha256:78697f990f5ef350c23b46bf86d5081ce96b49479ab180b2de7687267de8fd36 \
|
||||
--hash=sha256:a5e8f1e9a6430aa78215836be70cecd3f872d99eeda300f41ad6cc841724afdb
|
||||
transformers==5.10.0 \
|
||||
--hash=sha256:206c54d6d992bc35fef90f1252ac3f2746cdf549928b76e7c8c4f182684cee60 \
|
||||
--hash=sha256:eae143e46d8e521da604bc4fdc45af7dd90e96eacbbc27f68d2754150aa5175a
|
||||
# via -r requirements.txt
|
||||
typer==0.27.3 \
|
||||
--hash=sha256:d0396f770a560ab1b0a8504e13b5f254b728cedb05c61cf0359e944e50ce8901 \
|
||||
--hash=sha256:e50022f28b82a86313e54501317a1db64bf8f8d036ff8cfe5ca7e47675454aff
|
||||
# via transformers
|
||||
typing-extensions==4.16.0 \
|
||||
--hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \
|
||||
--hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5
|
||||
@@ -1194,9 +1077,7 @@ typing-inspection==0.4.4 \
|
||||
urllib3==2.8.0 \
|
||||
--hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \
|
||||
--hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63
|
||||
# via
|
||||
# -r requirements.txt
|
||||
# requests
|
||||
# via -r requirements.txt
|
||||
uvicorn==0.34.0 \
|
||||
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
|
||||
--hash=sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
fastapi==0.141.1
|
||||
starlette==1.6.0
|
||||
uvicorn[standard]==0.34.0
|
||||
transformers==4.48.3
|
||||
transformers==5.10.0
|
||||
cachetools==5.5.2
|
||||
pydantic==2.10.6
|
||||
torch==2.6.0
|
||||
torch==2.13.0
|
||||
pillow==13.0.0
|
||||
pytesseract==0.3.13
|
||||
pypdf==6.21.2
|
||||
@@ -15,3 +15,6 @@ python-multipart==0.0.32
|
||||
certifi==2026.10.19
|
||||
urllib3==2.8.0
|
||||
setuptools==84.1.0
|
||||
|
||||
# Shared model-cache lock security constraint.
|
||||
filelock==4.2.1
|
||||
|
||||
Reference in New Issue
Block a user