diff --git a/.gitignore b/.gitignore index 2483ea8..35f130d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,6 @@ __pycache__/ /apps/desktop/src-tauri/gen/ /apps/desktop/src-tauri/resources/searchi-gemma-worker* /apps/desktop/src-tauri/resources/embeddinggemma2/ +/apps/desktop/src-tauri/resources/media-runtime/bin/ /apps/desktop/src-tauri/icons/android/ /apps/desktop/src-tauri/icons/ios/ diff --git a/AGENTS.md b/AGENTS.md index 2f2118c..662a7d3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,6 +10,9 @@ readiness without completed release gates and recorded evidence. - Production uses available GPU/hardware acceleration with reliable CPU fallback; the CPU-only rule is a VM testing constraint, not a product restriction. - Keep the Rust engine independent of the desktop shell; CLI and UI share its API. +- Prefer established Rust crates and proven retrieval algorithms over custom + implementations. Keep platform adapters small, bound allocations and queues, + and measure performance before adding caches or changing ranking policies. - Use bounded work, explicit errors, versioned storage, and offline defaults. - Never substitute simulated embeddings for working semantic search. - Production semantic search must use Google EmbeddingGemma 2 as in DigUp. diff --git a/Cargo.lock b/Cargo.lock index 21f4b7f..e8219e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -207,6 +207,18 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.12.1" @@ -705,6 +717,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + [[package]] name = "find-msvc-tools" version = "0.1.14" @@ -718,7 +739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.9.1", "zlib-rs", ] @@ -1098,6 +1119,32 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "image-webp", + "moxcms", + "num-traits", + "png", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +dependencies = [ + "byteorder-lite", + "quick-error", +] + [[package]] name = "indexmap" version = "2.14.2" @@ -1145,6 +1192,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "jpeg-decoder" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" + [[package]] name = "js-sys" version = "0.3.106" @@ -1300,6 +1353,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "miniz_oxide" version = "0.9.1" @@ -1343,6 +1406,16 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "multiversion_no_op" version = "1.0.0" @@ -1486,6 +1559,19 @@ version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + [[package]] name = "portable-atomic" version = "1.15.0" @@ -1528,6 +1614,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.42.0" @@ -1946,11 +2044,26 @@ dependencies = [ "zip", ] +[[package]] +name = "searchi-media" +version = "0.1.0" +dependencies = [ + "anyhow", + "image", + "serde", + "serde_json", + "sha2 0.10.9", + "tempfile", +] + [[package]] name = "searchi-semantic" version = "0.1.0" dependencies = [ "anyhow", + "base64 0.22.1", + "image", + "jpeg-decoder", "ort", "serde", "serde_json", @@ -1966,6 +2079,7 @@ dependencies = [ "fs2", "rusqlite", "searchi-core", + "searchi-media", "searchi-semantic", "serde", "serde_json", @@ -2880,3 +2994,18 @@ dependencies = [ "log", "simd-adler32", ] + +[[package]] +name = "zune-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml index 664184f..f4d8a11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["crates/searchi-core", "crates/searchi-cli", "crates/searchi-semantic", "crates/searchi-service", "crates/searchi-assets"] +members = ["crates/searchi-core", "crates/searchi-cli", "crates/searchi-semantic", "crates/searchi-service", "crates/searchi-assets", "crates/searchi-media"] resolver = "2" [workspace.package] diff --git a/README.md b/README.md index 6d78833..132478e 100644 --- a/README.md +++ b/README.md @@ -2,89 +2,144 @@ **Find what matters. Locally.** -Local desktop search for Windows, macOS and Linux. Under active development; -production readiness is tracked in [the roadmap](docs/ROADMAP.md). +Local desktop search for Windows, macOS and Linux, under active development. +Production readiness is tracked in [the roadmap](docs/ROADMAP.md). -## Architecture +## What works -`crates/searchi-core` owns persistent indexing and retrieval. `crates/searchi-cli` -provides a headless interface. `apps/desktop` hosts the Tauri desktop app. -Search combines indexed filenames, SQLite FTS5 keyword retrieval, and real -Google EmbeddingGemma 2 semantic search with a persistent HNSW index. PDF pages -and DOCX paragraphs retain source locations. Image, audio, and video search remain -planned; the provisioned media projector is not yet used. Granola is not required. -The desktop UI is primary; the CLI builds separately without GUI dependencies. +Search combines instant indexed filenames, SQLite FTS5 content retrieval, and +**real Google EmbeddingGemma 2** vectors in a persisted HNSW index. PDF pages, +DOCX paragraphs and text passages retain their source locations. The same +shared Rust service now indexes **images, video frames, movie soundtracks, +audio and music**: actual pixels and sound enter Google's media projector in +the same 768-dimensional space as text queries. No generated captions, +simulated embeddings, replacement model, or Granola service is required. +Existing artist/title tags contribute keyword matches. -Production uses supported hardware acceleration with CPU fallback. All testing -in the Windows development VM uses CPU only. Indexed content stays -local. Treat the index as sensitive: it contains extracted document text. +The desktop is the primary interface. It automatically prepares verified local +models, indexes selected folders, and prewarms its query worker. Image previews +and audio/video controls use narrowly scoped local assets; timestamp results +seek inside the preview without autoplay. Open file launches the default +application, whose exact opening position is not controlled by Searchi. +The CLI provides the same retrieval engine without a GUI. -The desktop automatically downloads and verifies missing Google artifacts -(approximately 865 MB), reuses its local cache, and warms the query session in -the background. Development builds must build and stage the native worker first; -production installers and signing remain release gates. First-query performance -is measured separately from repeated-query performance. +**Media search is experimental.** File retrieval works on the independent seed +corpus, but precise spoken-topic timestamps, music hard negatives, and no-answer +handling still need improvement. Nearest-neighbor results are not calibrated +confidence. Video frames are sampled across the movie; every fleeting scene is +not guaranteed. Audio windows cover the primary stream within explicit resource +limits. See [actual media quality and failures](docs/MEDIA-QUALITY.md). + +Production supports compiled hardware acceleration with CPU fallback. All +Windows VM tests use CPU only. Files, extracted text, metadata and embeddings +stay local; treat the index as sensitive. Initial verified model provisioning +requires approximately 865 MB of downloads. Search performs no remote inference. ## Copy-and-paste setup prompt -Paste this into your coding agent: - ```text Set up Searchi from https://tea.karlcom.de/karl/searchi.git in a new searchi -directory, or reuse the existing checkout without overwriting local changes. -Read AGENTS.md, SKILLS.md, docs/ROADMAP.md, and apps/desktop/README.md first. -Inspect the OS and installed tools. Install missing supported prerequisites: -Git, stable Rust, Node.js 24+, Python 3, CMake, native C/C++ tools and Tauri's -platform dependencies. Preserve existing credentials and never print secrets. -From the repository root, build and stage the pinned Google runtime: +folder, or reuse the checkout without overwriting local changes. Read AGENTS.md, +SKILLS.md, docs/ROADMAP.md, docs/BUILDING.md and apps/desktop/README.md first. +Inspect the OS/tools. Install supported missing prerequisites: Git, stable Rust, +Node.js 24 LTS, Python 3.11+, CMake, native C/C++ tools and Tauri dependencies. +Preserve credentials and never print secrets. Prefer established Rust crates +and portable native tools; keep engine APIs shared by CLI and desktop. +For Karl's Windows VM set SEARCHI_FORCE_CPU=1 and +WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS='--disable-gpu --disable-accelerated-video-decode' +before tests or launch. Never enable a GPU provider in that VM. +From the repository root: python tools/embeddinggemma2/build_runtime.py --backend cpu --jobs 2 python tools/embeddinggemma2/stage_runtime.py --backend cpu -Run cargo test --workspace --locked, cargo fmt --all -- --check, and +python tools/media-runtime/provision.py --stage +The decoder manifest supports Windows/Linux x86-64 and ARM64; macOS decoder +packaging is still a gate. On unsupported hosts report the real blocker and +use explicitly verified native tools only when their provenance is known. +Run cargo test --workspace --locked, cargo fmt --all --check and cargo clippy --workspace --all-targets --locked -- -D warnings. Run cargo test --manifest-path apps/desktop/src-tauri/Cargo.toml --locked. -In apps/desktop run npm ci, npm test, npm run format:check, and npm run build. -For Karl's Windows VM set SEARCHI_FORCE_CPU=1 and -WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--disable-gpu before tests or launch. -Launch the real app using npm run tauri dev from apps/desktop. Allow automatic -verified Google model setup; never substitute another model or mock results. -Ask which folders I want indexed; do not index my whole home automatically. -Verify filename and remembered-content searches on my selected files, including -persistence after restart. Report actual checks and blockers. Do not publish a -release or claim production readiness, GPU validation, or untested OS coverage. +In apps/desktop run npm ci, npm test, npm run format:check and npm run build. +Launch the real app with npm run tauri -- dev. Allow automatic verified Google +model setup and retained-worker warmup. Never substitute another model or mocks. +Ask which folders I want indexed; don't index my whole home automatically. +Verify filename/content/image/music/video searches and persistence on selected +files. Inspect media failure reports and actual preview seeking. Read +MEDIA-QUALITY.md before claiming precise speech timestamps or reliable absence. +Report actual checks and blockers. Do not publish a release or claim production +readiness, GPU validation, native visual QA, or untested OS coverage. ``` -This is developer setup, not an installer. See the [desktop guide](apps/desktop/README.md) -and [official Tauri prerequisites](https://v2.tauri.app/start/prerequisites/). -The worker builder also supports `auto`, `metal`, `vulkan`, and `cuda`; those -require platform SDKs and separate hardware validation. +This is developer setup, not an installer. The worker builder also accepts +`auto`, `metal`, `vulkan` and `cuda`; each requires its platform SDK and separate +hardware validation. Standalone FFmpeg/FFprobe and notices are staged for the +desktop; end users should not install tools or configure decoder paths. -## Development +## Headless setup -Install stable Rust and the platform's C/C++ build prerequisites. Run: +Build with `cargo build --release --locked -p searchi-cli`. No Node, Tauri, +WebView or display server is needed. Build the native Google worker separately, +and provision verified assets and FFmpeg tools: ```sh -cargo test --workspace -cargo fmt --all -- --check -cargo clippy --workspace --all-targets -- -D warnings +python tools/embeddinggemma2/build_runtime.py --backend cpu --jobs 2 +python tools/media-runtime/provision.py +cargo run -p searchi-cli -- setup --model-dir .searchi/models/embeddinggemma2 +cargo run -p searchi-cli -- index --db searchi.sqlite --root /path/to/files +``` + +On native Linux, unified document/media indexing and hybrid search use: + +```sh +./target/release/searchi embed --db searchi.sqlite --model-dir .searchi/models/embeddinggemma2 --embedding-worker .searchi/runtime/cpu/searchi-gemma-worker --ffmpeg .searchi/media-runtime/bin/ffmpeg --ffprobe .searchi/media-runtime/bin/ffprobe --cpu-threads 1 +./target/release/searchi search --db searchi.sqlite 'the recording about orange soil' --model-dir .searchi/models/embeddinggemma2 --embedding-worker .searchi/runtime/cpu/searchi-gemma-worker --cpu-threads 1 +``` + +These are current interfaces, not executed Linux release evidence. Windows uses +`Release/searchi-gemma-worker.exe` and `ffmpeg.exe`/`ffprobe.exe` instead. +`embed` includes media by default and reports failures. Use `--text-only` +explicitly for document-only vectors. `setup` provisions Google assets, not +worker/decoder executables. Installed release CLIs discover decoders under +`media-runtime/bin` beside the CLI; explicit paired paths or +`SEARCHI_FFMPEG_PATH`/`SEARCHI_FFPROBE_PATH` override discovery. Search never +silently downloads missing helpers. CLI invocations load their own worker; +the desktop retains a prewarmed worker for interactive queries. + +## Search performance + +Normal searches show result counts, measured search time and time until results +are displayed. Enable **Performance details** in desktop settings to +inspect UI scheduling, native queue/lock time, keyword retrieval, actual Google +query inference, ANN/cache/filter work and ranking. Export the current trace as +local JSON for comparison; tracing sends no telemetry and excludes search text +and file paths. Nested stages and parallel retrieval lanes overlap. + +For headless diagnostics, append `--performance --json` for basic metrics or +`--debug-performance --json` for the detailed response. Plain `--json` retains +the existing results-array format. See [timing boundaries, trace schema and +reproducible measurements](docs/PERFORMANCE.md). + +## Development and release + +The Rust engine, service, media adapter and CLI live under `crates/`; the Tauri +shell is `apps/desktop`. SQLite, image/jpeg-decoder, USearch/NumKong, and Tauri +provide established storage, decoding, ANN/SIMD and desktop facilities. +Extraction and inference use bounded isolated work with explicit errors. + +```sh +cargo test --workspace --locked +cargo fmt --all --check +cargo clippy --workspace --all-targets --locked -- -D warnings cargo run -p searchi-cli -- --help ``` -Desktop development instructions live in `apps/desktop/README.md`. -Agent constraints and workflows live in [AGENTS.md](AGENTS.md) and -[SKILLS.md](SKILLS.md). Use Node.js 24+ for frontend state tests. -The approved visual identity and desktop direction live in [the brand guide](docs/BRAND.md). +See [desktop setup](apps/desktop/README.md), [build/platform constraints](docs/BUILDING.md), +[semantic bounds](docs/SEMANTIC.md), [executed validation](docs/VALIDATION.md), +and [brand direction](docs/BRAND.md). Native visual QA, operating-system builds, +macOS decoder packaging, installers, licensing distribution, signatures, +upgrades and representative production quality remain release gates. +Cross-platform source support does not mean signed macOS installers can be +built on Windows. CI declarations are not evidence of executed platform jobs. -For a headless build, run `cargo build --release --locked -p searchi-cli`. -No Node, Tauri, or WebView is needed. Semantic commands additionally need the -native worker and Google assets; `searchi setup` provisions the model cache. -Platform and CI details live in [the build guide](docs/BUILDING.md). -Native CI builds must pass on all supported systems before release. Cross-platform -source support does not imply signed macOS installers can be built on Windows. - -## Release policy - -Do not publish until the roadmap's release gates have evidence. Record benchmark -hardware, corpus size, cold/warm state and p95 latency. Signing credentials are -supplied through CI secrets, never source control. - -Licensed under [MIT](LICENSE). Repository author: Karl. +Record benchmark hardware, corpus, cold/warm state and p95 latency. Never ship +signing credentials in source control. Licensed under [MIT](LICENSE). +Repository author: Karl. diff --git a/SKILLS.md b/SKILLS.md index e056e64..2ffa3ed 100644 --- a/SKILLS.md +++ b/SKILLS.md @@ -42,7 +42,7 @@ Use stable Rust and Node.js 24+. Before Windows VM tests or launch: ```powershell $env:SEARCHI_FORCE_CPU = '1' -$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu' +$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu --disable-accelerated-video-decode' ``` From the repository root: @@ -74,6 +74,9 @@ cargo test -p searchi-semantic --test gemma_cpu -- --ignored --nocapture Record actual outputs, hardware, corpus size, background preparation, first-input latency and warm latency in the relevant validation report. Unexecuted platform checks stay open. Compilation alone is not UI interaction verification. +Use the opt-in measured search APIs and docs/PERFORMANCE.md for granular traces. +Keep basic and debug overhead separate; do not sum nested stages or parallel +lanes, or label DOM updates as actual paint. Retain raw measurement samples. ## Commit and hand off diff --git a/apps/desktop/README.md b/apps/desktop/README.md index 774c6b5..971e08e 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -1,11 +1,24 @@ # Searchi desktop -This Tauri 2 shell calls the same Rust core as the CLI and the real Google EmbeddingGemma 2 service. It provides folder indexing, native folder selection, progressive filename/content/semantic search, folder/extension/size/date filters, keyboard navigation, escaped text previews, native open/reveal actions, persisted selected folders/resource settings, and a global shortcut. There are no mocked results or embeddings. Watchers and release installers remain roadmap work. +This Tauri 2 shell calls the same Rust core as the CLI and the real Google EmbeddingGemma 2 service. It provides folder indexing, native folder selection, progressive filename/content/semantic search, folder/extension/size/date/media-duration filters, keyboard navigation, escaped text and scoped image/audio/video previews, native open/reveal actions, persisted selected folders/resource settings, and a global shortcut. There are no mocked results or embeddings. Watchers and release installers remain roadmap work. ## Develop -Install Node.js LTS, Rust stable, and the platform prerequisites documented at https://v2.tauri.app/start/prerequisites/. Windows requires MSVC build tools and WebView2; Linux requires WebKitGTK and system development packages; macOS requires Xcode command line tools. +Install Node.js 24 LTS, Rust stable, and the platform prerequisites documented at https://v2.tauri.app/start/prerequisites/. Windows requires MSVC build tools and WebView2; Linux requires WebKitGTK and system development packages; macOS requires Xcode command line tools. +Before launching from a checkout, build and stage both native helpers from the +repository root. These explicit setup commands access the network and verify +pinned artifacts; they do not install tools globally: + +```sh +python tools/embeddinggemma2/build_runtime.py --backend cpu --jobs 2 +python tools/embeddinggemma2/stage_runtime.py --backend cpu +python tools/media-runtime/provision.py --stage +``` + +The decoder manifest currently has Windows/Linux x86-64 and ARM64 artifacts; +a vetted macOS decoder package remains a release gate. Build `cpu` in the +Windows VM. Production acceleration requires separate platform/hardware QA. ```sh cd apps/desktop npm ci @@ -25,7 +38,7 @@ The desktop index is stored in the platform app-data directory under `dev.search On first launch, the native app downloads and verifies the pinned Google model artifacts (310 MB text model plus 555 MB media projector, approximately 865 MB total) into app-managed storage and prepares the packaged embedding worker. No model paths, runtime paths, or terminal setup are required. The UI shows native download bytes, verification/warming states, the actual worker device, and explicit errors with a retry control. The first download requires network access; file extraction, embeddings, and queries stay local. -After a folder is indexed, semantic indexing starts automatically when the model is ready. Existing keyword results stay searchable during setup/indexing. Progress is indeterminate during embedding because the native command does not expose a chunk completion count. Failed automatic builds retry only after a changed index/status revision or an explicit rebuild, avoiding repeated failure loops. Status polls run once per second while setup/indexing/warming is active and stop when idle. +After a folder is indexed, unified document/media semantic indexing starts automatically when the model and packaged media helpers are ready. Images use actual pixels; video frames and full primary-stream audio windows use the Google media projector. Audio/music files also retain artist/title metadata for keyword retrieval. The UI reports unavailable decoder/runtime support and per-file failures while keeping text search available. Existing keyword results stay searchable during setup/indexing. Progress is indeterminate during embedding because the native command does not expose a chunk completion count. Failed automatic builds retry only after a changed index/status revision or an explicit rebuild, avoiding repeated failure loops. Status polls run once per second while setup/indexing/warming is active and stop when idle. Each query captures one immutable filter snapshot. Keyword results appear first; real hybrid results follow after the query settles. `src/search-state.ts` bounds each lane to one active native request and one latest pending request, discards old revisions, and retries a busy request at most once. Escape clears both pending lanes and their timers; already-running native work finishes without changing cleared results. Hybrid updates preserve the selected file and keyboard focus where possible. @@ -38,7 +51,7 @@ node --test tests/search-state.test.mjs For Windows VM UI testing, disable WebView2 GPU rendering as well, before starting Tauri in PowerShell: ```powershell -$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu' +$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu --disable-accelerated-video-decode' $env:SEARCHI_FORCE_CPU = '1' npm.cmd run tauri dev ``` @@ -56,3 +69,38 @@ Visual fidelity remains subject to native screenshot QA. Compilation and state t ## Verification and packaging `npm run build` checks strict TypeScript and creates production frontend assets. `npm run tauri build -- --no-bundle` compiles the native shell when platform prerequisites are installed. Installer bundling is intentionally disabled until release icons, signing and native platform checks are complete. Native Windows, macOS, and Linux checks must be recorded separately; a frontend build does not prove the native shell works. + +## Media preview and quality + +The result pane renders images and audio/video controls through Tauri's scoped +asset protocol. Native preparation verifies the selected path belongs to a +current indexed file before exposing it. There is no general filesystem access +or local HTTP server. Players use metadata preload, never autoplay, and seek +matched millisecond timestamps after metadata loads. Selection changes and +Escape pause/unload playback; stale preparation responses cannot replace the +current preview. Unsupported WebView codecs show an Open file fallback. + +Opening the default application does not guarantee exact-location navigation. +Preview seeking uses the returned window/frame start, which may differ from the +actual utterance. The [independent media quality report](../../docs/MEDIA-QUALITY.md) +records real file recall, speech alignment failures, music hard negatives and +unmet no-answer handling. Genuine multimodal support is implemented; production +quality and native playback/visual interaction QA remain open gates. + +## Performance details + +Normal results show the actual native search duration and latest result-display +latency from input. The **Performance details** checkbox in Settings is opt-in +and captured per request. Its expandable panel separates input debounce, +intentional semantic delay, pending-lane queue, failed attempts and bounded retry +wait, invocation time, native stage hierarchy and synchronous result DOM updates. +First response and hybrid-final latency are distinct; keyword-only results do not +claim semantic completion. Native spans use a command-relative clock and nested +or parallel spans must not be summed. Invocation minus native total is explicitly +an estimated transport/serialization/scheduling residual, not an exact IPC cost. +DOM update timings do not claim actual screen paint or deferred media loading. + +The local clipboard report excludes queries, paths, filenames, snippets and error +strings. It captures available model/device/thread/runtime context without +guessing missing values. Histories are bounded and dropped counts remain visible. +Clipboard failure is explicit; no diagnostic telemetry is uploaded. diff --git a/apps/desktop/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock index 02d32a2..80fae53 100644 --- a/apps/desktop/src-tauri/Cargo.lock +++ b/apps/desktop/src-tauri/Cargo.lock @@ -412,6 +412,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.12.1" @@ -1845,6 +1851,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + [[package]] name = "httparse" version = "1.10.1" @@ -2063,6 +2075,32 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "image-webp", + "moxcms", + "num-traits", + "png 0.18.1", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +dependencies = [ + "byteorder-lite", + "quick-error", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -2257,6 +2295,12 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "jpeg-decoder" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" + [[package]] name = "js-sys" version = "0.3.106" @@ -2522,6 +2566,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "muda" version = "0.20.0" @@ -3157,6 +3211,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.42.0" @@ -3652,8 +3718,11 @@ dependencies = [ name = "searchi-desktop" version = "0.1.0" dependencies = [ + "anyhow", + "image", "searchi-assets", "searchi-core", + "searchi-media", "searchi-service", "serde", "serde_json", @@ -3665,11 +3734,26 @@ dependencies = [ "tempfile", ] +[[package]] +name = "searchi-media" +version = "0.1.0" +dependencies = [ + "anyhow", + "image", + "serde", + "serde_json", + "sha2 0.10.9", + "tempfile", +] + [[package]] name = "searchi-semantic" version = "0.1.0" dependencies = [ "anyhow", + "base64 0.22.1", + "image", + "jpeg-decoder", "serde", "serde_json", "sha2 0.10.9", @@ -3683,6 +3767,7 @@ dependencies = [ "fs2", "rusqlite", "searchi-core", + "searchi-media", "searchi-semantic", "serde", "sha2 0.10.9", @@ -4218,6 +4303,7 @@ dependencies = [ "gtk", "heck 0.5.0", "http", + "http-range", "jni", "libc", "log", @@ -5993,6 +6079,21 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "zune-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "5.15.0" diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index e929ed5..8d03ab4 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -14,7 +14,8 @@ custom-protocol = ["tauri/custom-protocol"] tauri-build = { version = "2", features = [] } [dependencies] -tauri = { version = "2", features = [] } +anyhow = "1" +tauri = { version = "2", features = ["protocol-asset"] } tauri-plugin-dialog = "2" tauri-plugin-opener = "2" tauri-plugin-global-shortcut = "2" @@ -24,3 +25,5 @@ tempfile = "3" searchi-core = { path = "../../../crates/searchi-core" } searchi-service = { path = "../../../crates/searchi-service" } searchi-assets = { path = "../../../crates/searchi-assets" } +searchi-media = { path = "../../../crates/searchi-media" } +image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp", "bmp"] } diff --git a/apps/desktop/src-tauri/resources/media-runtime/licenses/LICENSE.txt b/apps/desktop/src-tauri/resources/media-runtime/licenses/LICENSE.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/apps/desktop/src-tauri/resources/media-runtime/licenses/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/apps/desktop/src-tauri/resources/media-runtime/licenses/ffmpeg-n9.0.2-27-g7e93014c5b-win64-lgpl-9.0/LICENSE.txt b/apps/desktop/src-tauri/resources/media-runtime/licenses/ffmpeg-n9.0.2-27-g7e93014c5b-win64-lgpl-9.0/LICENSE.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/apps/desktop/src-tauri/resources/media-runtime/licenses/ffmpeg-n9.0.2-27-g7e93014c5b-win64-lgpl-9.0/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/apps/desktop/src-tauri/resources/media-runtime/manifest.json b/apps/desktop/src-tauri/resources/media-runtime/manifest.json new file mode 100644 index 0000000..74366a0 --- /dev/null +++ b/apps/desktop/src-tauri/resources/media-runtime/manifest.json @@ -0,0 +1,11 @@ +{ + "provider": "BtbN/FFmpeg-Builds", + "release": "autobuild-2026-10-12-13-12", + "version": "9.0.2-27-g7e93014c5b", + "platforms": { + "windows-x86_64": {"archive": "ffmpeg-n9.0.2-27-g7e93014c5b-win64-lgpl-9.0.zip", "bytes": 171476229, "sha256": "104a019fe34c0747b208bde4842a0bac8b70a307cc2bb33aa4648fc15ddb2e39"}, + "windows-aarch64": {"archive": "ffmpeg-n9.0.2-27-g7e93014c5b-winarm64-lgpl-9.0.zip", "bytes": 118006941, "sha256": "68d3bac585b80b6f17e459eb4a203ed1f01b7635d4c611f1685de1ae65ca0987"}, + "linux-x86_64": {"archive": "ffmpeg-n9.0.2-27-g7e93014c5b-linux64-lgpl-9.0.tar.xz", "bytes": 137901812, "sha256": "12445b38a4700ba1ae7c9c7e57062f602c927dc4187555bfadc9f3e2f75f05b0"}, + "linux-aarch64": {"archive": "ffmpeg-n9.0.2-27-g7e93014c5b-linuxarm64-lgpl-9.0.tar.xz", "bytes": 117008524, "sha256": "c9160ae8440c17c016fb2f6b3fcce4bb9d633a15845e908b2303948a7724f227"} + } +} diff --git a/apps/desktop/src-tauri/src/main.rs b/apps/desktop/src-tauri/src/main.rs index 60c674c..019619a 100644 --- a/apps/desktop/src-tauri/src/main.rs +++ b/apps/desktop/src-tauri/src/main.rs @@ -4,9 +4,11 @@ mod model_download; mod semantic_commands; mod settings; +use searchi_core::metrics::{MetricsMode, SearchMetrics, SearchResponse, TraceCollector}; use searchi_core::{IndexReport, IndexStats, SearchIndex, SearchOptions, SearchResult}; use semantic_commands::{ - hybrid_search, index_embeddings, semantic_status, setup_model, SemanticState, + hybrid_search, hybrid_search_measured, index_embeddings, semantic_status, setup_model, + SemanticState, }; use serde::{Deserialize, Serialize}; use settings::{Settings, SettingsStore}; @@ -31,6 +33,46 @@ struct AppState { semantic: Arc, } +#[derive(Serialize)] +struct MeasuredFailure { + message: String, + metrics: SearchMetrics, +} + +impl MeasuredFailure { + fn new(message: impl Into, trace: TraceCollector) -> Self { + Self { + message: message.into(), + metrics: trace.finish(0), + } + } + + fn task(message: impl Into, started: std::time::Instant) -> Self { + Self { + message: message.into(), + metrics: SearchMetrics { + total_ms: started.elapsed().as_secs_f64() * 1000.0, + result_count: 0, + trace: None, + dropped_spans: 1, + }, + } + } +} + +fn measured_outcome( + result: Result, String>, + trace: TraceCollector, +) -> Result, MeasuredFailure> { + match result { + Ok(results) => Ok(SearchResponse { + metrics: trace.finish(results.len()), + results, + }), + Err(message) => Err(MeasuredFailure::new(message, trace)), + } +} + #[derive(Serialize)] struct DesktopStatus { settings: Settings, @@ -78,6 +120,8 @@ struct Filters { extension: Option, min_size: Option, max_size: Option, + min_duration_ms: Option, + max_duration_ms: Option, modified_after_unix_ms: Option, modified_before_unix_ms: Option, } @@ -89,6 +133,8 @@ impl From for SearchOptions { extension: value.extension, min_size: value.min_size, max_size: value.max_size, + min_duration_ms: value.min_duration_ms, + max_duration_ms: value.max_duration_ms, modified_after_unix_ms: value.modified_after_unix_ms, modified_before_unix_ms: value.modified_before_unix_ms, } @@ -114,6 +160,46 @@ async fn search( .map_err(|e| e.to_string())? } +/// Measured command preserves the legacy array-returning API for integrations. +#[tauri::command] +async fn search_measured( + query: String, + filters: Option, + debug_performance: bool, + state: State<'_, AppState>, +) -> Result, MeasuredFailure> { + let started = std::time::Instant::now(); + let mut trace = TraceCollector::new(if debug_performance { + MetricsMode::Debug + } else { + MetricsMode::Basic + }); + let queue = trace.begin("desktop.worker_queue", None); + let lexical = state.lexical.clone(); + tauri::async_runtime::spawn_blocking(move || { + trace.end(queue, Default::default()); + let result = (|| { + let index = trace.timed("desktop.lexical_lock", None, |_, _| { + lexical + .try_lock() + .map_err(|_| "Keyword worker is busy; try the latest query again.".to_owned()) + })?; + index + .search_with_options_traced( + &query, + 50, + &filters.unwrap_or_default().into(), + &mut trace, + None, + ) + .map_err(|error| error.to_string()) + })(); + measured_outcome(result, trace) + }) + .await + .map_err(|error| MeasuredFailure::task(error.to_string(), started))? +} + #[tauri::command] async fn pick_folder(app: tauri::AppHandle) -> Result, String> { tauri::async_runtime::spawn_blocking(move || { @@ -148,6 +234,68 @@ fn validated_result(index: &SearchIndex, path: &str) -> Result Ok(canonical) } +#[derive(Serialize)] +struct MediaPreview { + path: String, + kind: &'static str, +} + +// The asset protocol starts with an empty scope. Only a validated indexed +// media file is granted access; the webview receives no general filesystem API. +#[tauri::command] +async fn prepare_media_preview( + path: String, + app: tauri::AppHandle, + state: State<'_, AppState>, +) -> Result { + let database = state.database.clone(); + tauri::async_runtime::spawn_blocking(move || { + let index = SearchIndex::open(database).map_err(|error| error.to_string())?; + let canonical = validated_result(&index, &path)?; + let kind = match searchi_media::classify(&canonical) { + Some(searchi_media::MediaKind::Image) => "image", + Some(searchi_media::MediaKind::Audio) => "audio", + Some(searchi_media::MediaKind::Video) => "video", + None => return Err("This file is not a supported media preview.".into()), + }; + if kind == "image" { + let bytes = std::fs::metadata(&canonical) + .map_err(|error| error.to_string())? + .len(); + if bytes > 64 * 1024 * 1024 { + return Err("Image exceeds the 64 MiB preview limit.".into()); + } + let (width, height) = image::ImageReader::open(&canonical) + .map_err(|error| error.to_string())? + .with_guessed_format() + .map_err(|error| error.to_string())? + .into_dimensions() + .map_err(|error| format!("Image preview is unavailable: {error}"))?; + let jpeg = canonical + .extension() + .and_then(|value| value.to_str()) + .is_some_and(|value| matches!(value.to_ascii_lowercase().as_str(), "jpg" | "jpeg")); + let max_pixels = if jpeg { + 64 * 1024 * 1024 + } else { + 16 * 1024 * 1024 + }; + if width == 0 || height == 0 || u64::from(width) * u64::from(height) > max_pixels { + return Err("Image exceeds the supported preview dimensions.".into()); + } + } + app.asset_protocol_scope() + .allow_file(&canonical) + .map_err(|error| error.to_string())?; + Ok(MediaPreview { + path: canonical.to_string_lossy().into_owned(), + kind, + }) + }) + .await + .map_err(|error| error.to_string())? +} + #[tauri::command] async fn open_result( path: String, @@ -279,7 +427,24 @@ fn main() { app.path().resource_dir().unwrap_or_else(|_| directory.clone()).join(worker_name) } }); - let semantic = Arc::new(SemanticState::new(model_directory, worker)); + let media_tools = (|| -> Result { + if let Some(tools) = searchi_media::FfmpegTools::from_environment() + .map_err(|error| error.to_string())? { + return Ok(tools); + } + let development_media = development_root.join(".searchi/media-runtime/bin"); + let media_directory = if cfg!(debug_assertions) && development_media.is_dir() { + development_media + } else { + app.path().resource_dir().map_err(|error| error.to_string())?.join("media-runtime/bin") + }; + let ffmpeg = media_directory.join(if cfg!(windows) { "ffmpeg.exe" } else { "ffmpeg" }); + let ffprobe = media_directory.join(if cfg!(windows) { "ffprobe.exe" } else { "ffprobe" }); + searchi_media::FfmpegTools::new(ffmpeg, ffprobe).map_err(|_| { + "The media decoder is missing from this installation. Repair or reinstall searchi.".into() + }) + })(); + let semantic = Arc::new(SemanticState::new(model_directory, worker, media_tools)); semantic.begin_automatic_setup(database.clone(), settings.value.cpu_threads); #[cfg(target_os = "macos")] let shortcut = "Shift+Super+Space"; @@ -307,16 +472,19 @@ fn main() { }) .invoke_handler(tauri::generate_handler![ search, + search_measured, stats, index_folder, pick_folder, open_result, + prepare_media_preview, desktop_status, set_cpu_threads, semantic_status, setup_model, index_embeddings, - hybrid_search + hybrid_search, + hybrid_search_measured ]) .run(tauri::generate_context!()) .expect("Searchi desktop could not start"); @@ -326,6 +494,32 @@ fn main() { mod tests { use super::*; + #[test] + fn measured_failure_retains_closed_trace_without_inventing_results() { + let mut trace = TraceCollector::new(MetricsMode::Debug); + let parent = trace.begin("desktop.request", None); + trace.begin("desktop.lexical_lock", parent); + let failed = measured_outcome(Err("Keyword worker is busy".into()), trace) + .err() + .unwrap(); + assert_eq!(failed.message, "Keyword worker is busy"); + assert_eq!(failed.metrics.result_count, 0); + let spans = failed.metrics.trace.unwrap(); + assert_eq!(spans.len(), 2); + assert_eq!(spans[1].parent, Some(0)); + assert!(spans[1].start_ms + spans[1].duration_ms <= failed.metrics.total_ms + 0.001); + } + + #[test] + fn measured_empty_success_is_distinct_from_failure_and_basic_has_no_trace() { + let response = measured_outcome(Ok(Vec::new()), TraceCollector::new(MetricsMode::Basic)) + .ok() + .unwrap(); + assert!(response.results.is_empty()); + assert_eq!(response.metrics.result_count, 0); + assert!(response.metrics.trace.is_none()); + } + #[test] fn indexing_gate_is_released_when_worker_unwinds() { let indexing = Arc::new(AtomicBool::new(true)); diff --git a/apps/desktop/src-tauri/src/semantic_commands.rs b/apps/desktop/src-tauri/src/semantic_commands.rs index 28b1f2c..77cba1d 100644 --- a/apps/desktop/src-tauri/src/semantic_commands.rs +++ b/apps/desktop/src-tauri/src/semantic_commands.rs @@ -1,5 +1,6 @@ //! Desktop-owned orchestration: managed model setup and persistent hybrid queries. -use crate::{model_download, AppState, Filters}; +use crate::{measured_outcome, model_download, AppState, Filters, MeasuredFailure}; +use searchi_core::metrics::{MetricsMode, SearchResponse, TraceCollector}; use searchi_core::SearchResult; use searchi_service::{EmbeddingReport, HybridSearch}; use serde::Serialize; @@ -24,10 +25,20 @@ pub struct SemanticState { downloaded_bytes: AtomicU64, error: Mutex>, service: Mutex>, + media_tools: Option, + media_setup_error: Option, } impl SemanticState { - pub fn new(model_directory: PathBuf, worker: PathBuf) -> Self { + pub fn new( + model_directory: PathBuf, + worker: PathBuf, + media_tools: Result, + ) -> Self { + let (media_tools, media_setup_error) = match media_tools { + Ok(tools) => (Some(tools), None), + Err(error) => (None, Some(error)), + }; Self { model_directory, worker, @@ -40,6 +51,8 @@ impl SemanticState { downloaded_bytes: AtomicU64::new(0), error: Mutex::new(None), service: Mutex::new(None), + media_tools, + media_setup_error, } } @@ -118,6 +131,9 @@ pub struct SemanticStatus { pending: usize, warming: bool, worker_info: Option, + media_tools_ready: bool, + media_setup_error: Option, + media_failures: Vec, } struct WorkGuard<'a>(&'a AtomicBool); @@ -158,6 +174,9 @@ pub fn semantic_status(state: State<'_, AppState>) -> Result) -> Result, + debug_performance: bool, + state: State<'_, AppState>, +) -> Result, MeasuredFailure> { + let started = std::time::Instant::now(); + let mut trace = TraceCollector::new(if debug_performance { + MetricsMode::Debug + } else { + MetricsMode::Basic + }); + let semantic = state.semantic.clone(); + if !semantic.warmed.load(Ordering::Acquire) { + return Err(MeasuredFailure::new( + "Semantic search is preparing in the background; keyword results are available.", + trace, + )); + } + let threads = trace.timed("desktop.settings_lock", None, |_, _| { + state + .settings + .lock() + .map(|settings| settings.value.cpu_threads) + .map_err(|_| "Settings are unavailable.") + }); + let threads = match threads { + Ok(threads) => threads, + Err(error) => return Err(MeasuredFailure::new(error, trace)), + }; + if semantic + .querying + .compare_exchange(false, true, Ordering::AcqRel, Ordering::Acquire) + .is_err() + { + return Err(MeasuredFailure::new( + "Semantic worker is busy; keyword results remain available.", + trace, + )); + } + let database = state.database.clone(); + let queue = trace.begin("desktop.worker_queue", None); + tauri::async_runtime::spawn_blocking(move || { + let _guard = WorkGuard(&semantic.querying); + trace.end(queue, Default::default()); + let result = (|| { + let mut cached = trace.timed("desktop.semantic_lock", None, |_, _| { + semantic + .service + .lock() + .map_err(|_| "Semantic session is unavailable.") + })?; + if cached.is_none() { + *cached = Some(trace.timed("desktop.session_initialize", None, |_, _| { + HybridSearch::open( + database, + &semantic.model_directory, + &semantic.worker, + threads, + ) + .map_err(|error| error.to_string()) + })?); + } + cached + .as_mut() + .ok_or("Semantic session is unavailable.")? + .search_traced( + &query, + 50, + &filters.unwrap_or_default().into(), + &mut trace, + None, + ) + .map_err(|error| error.to_string()) + })(); + measured_outcome(result, trace) + }) + .await + .map_err(|error| MeasuredFailure::task(error.to_string(), started))? +} diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index 138c2ad..04c8e1d 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -20,7 +20,8 @@ } ], "security": { - "csp": "default-src 'self'; connect-src ipc: http://ipc.localhost; style-src 'self' 'unsafe-inline'; img-src 'self' data:" + "csp": "default-src 'self'; connect-src ipc: http://ipc.localhost; style-src 'self' 'unsafe-inline'; img-src 'self' data: asset: http://asset.localhost https://asset.localhost; media-src 'self' asset: http://asset.localhost https://asset.localhost", + "assetProtocol": { "enable": true, "scope": [] } } }, "bundle": { diff --git a/apps/desktop/src/icons.ts b/apps/desktop/src/icons.ts index c283caa..48c4ec0 100644 --- a/apps/desktop/src/icons.ts +++ b/apps/desktop/src/icons.ts @@ -14,6 +14,10 @@ import arrowDown from "@fluentui/svg-icons/icons/arrow_down_16_regular.svg?raw"; import open from "@fluentui/svg-icons/icons/open_20_regular.svg?raw"; import chevron from "@fluentui/svg-icons/icons/chevron_down_16_regular.svg?raw"; import sparkles from "@fluentui/svg-icons/icons/sparkle_20_regular.svg?raw"; +import image from "@fluentui/svg-icons/icons/image_24_regular.svg?raw"; +import video from "@fluentui/svg-icons/icons/video_24_regular.svg?raw"; +import audio from "@fluentui/svg-icons/icons/music_note_2_24_regular.svg?raw"; +import { mediaKind } from "./media-display"; const assets = { search, @@ -31,11 +35,16 @@ const assets = { open, chevron, sparkles, + image, + video, + audio, }; export function icon(name: keyof typeof assets) { return ``; } export function fileIcon(filename: string) { + const media = mediaKind(filename); + if (media) return { html: icon(media), type: media }; const extension = filename.split(".").pop()?.toLowerCase(); if (extension === "pdf") return { html: icon("pdf"), type: "pdf" }; if ( diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 54e3080..f19850a 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -1,4 +1,4 @@ -import { invoke, isTauri } from "@tauri-apps/api/core"; +import { invoke, isTauri, convertFileSrc } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; import { AutomaticIndexGate, @@ -7,8 +7,22 @@ import { } from "./search-state"; import type { SemanticPhase } from "./search-state"; import { fileIcon, icon } from "./icons"; +import { + SearchMeasurement, + measuredFailure, + spanDepth, + briefMs, +} from "./search-performance"; +import type { MeasuredResponse, SearchLane } from "./search-performance"; import "@fontsource-variable/inter/wght.css"; import "./style.css"; +import { + mediaKind, + matchLabel, + sourceLabel, + seekSeconds, + PreviewRevision, +} from "./media-display"; interface SearchResult { path: string; @@ -16,7 +30,7 @@ interface SearchResult { snippet: string; score: number; match_kind: string; - source?: { kind: string; number: number }; + source?: { kind: string; number: number; matched_query?: string }; extraction_error?: string; } interface IndexReport { @@ -55,11 +69,16 @@ interface SemanticStatus { stale: boolean; pending: number; warming: boolean; + media_tools_ready?: boolean; + media_setup_error?: string | null; + media_failures?: { path: string; message: string }[]; worker_info?: { model?: string; device?: string; runtime?: string; threads?: number; + dimensions?: number; + media_supported?: boolean; } | null; } interface SearchRequest { @@ -67,15 +86,16 @@ interface SearchRequest { query: string; filters: Record; started: number; + measurement: SearchMeasurement; } document.querySelector("#app")!.innerHTML = ` -
searchi
Loading your index…
${icon("filter")}All files${icon("chevron")}

Filter your search

${icon("settings")}

Folders & resources

Search automatically uses supported acceleration with CPU fallback.

    +
    searchi
    Loading your index…
    ${icon("filter")}All files${icon("chevron")}

    Filter your search

    ${icon("settings")}

    Folders & resources

    Search automatically uses supported acceleration with CPU fallback.

      Local timing diagnostics for new searches. Queries and file paths are excluded from copied reports.

      ${icon("sparkles")}Preparing local semantic search…Local model${icon("chevron")}
      Google EmbeddingGemma 2

      The verified local model downloads automatically on first launch (865 MB). Your files stay on this device.

      -

      READY WHEN YOU ARE

        ${icon("search")}

        Find what matters. Locally.

        Index a folder, then search a filename, phrase, or what you remember.

        +

        READY WHEN YOU ARE

          ${icon("search")}

          Find what matters. Locally.

          Index a folder, then search a filename, phrase, or what you remember.

          ${icon("lock")}Private search. Everything stays on your device.Local${icon("arrowUp")}${icon("arrowDown")}NavigateEnterOpenEscClear
          `; const element = (id: string) => @@ -83,6 +103,12 @@ const element = (id: string) => const query = element("query"); const list = element("results"); const notice = element("notice"); +try { + element("performance-toggle").checked = + localStorage.getItem("searchi-performance-details") === "true"; +} catch { + /* Diagnostics remain opt-in when storage is unavailable. */ +} let results: SearchResult[] = []; let selected = -1; let requestId = 0; @@ -99,6 +125,89 @@ let folderRevision = 0; let localSemanticError: string | null = null; let querySemanticFailed = false; let previewPath: string | null = null; +const previewRevision = new PreviewRevision(); +interface PreviewRequest { + revision: number; + result: SearchResult; +} +function unloadMedia() { + element("media-preview") + .querySelectorAll("audio,video") + .forEach((player) => { + player.pause(); + player.removeAttribute("src"); + player.load(); + }); + element("media-preview").replaceChildren(); + element("media-preview").hidden = true; + element("media-preview-status").hidden = true; +} +function clearMedia() { + previewRevision.clear(); + mediaLane.clear(); + unloadMedia(); +} +const mediaLane = new LatestLane( + async (request) => { + const prepared = await invoke<{ + path: string; + kind: "image" | "audio" | "video"; + }>("prepare_media_preview", { path: request.result.path }); + if (!previewRevision.accepts(request.revision)) return; + const host = element("media-preview"); + const status = element("media-preview-status"); + const failed = () => { + if (!previewRevision.accepts(request.revision)) return; + status.hidden = false; + status.textContent = + "This format cannot be previewed here. Use Open file to view it in your default application."; + }; + if (prepared.kind === "image") { + const image = document.createElement("img"); + image.alt = request.result.filename; + image.addEventListener("error", failed, { once: true }); + image.src = convertFileSrc(prepared.path); + host.append(image); + } else { + const player = document.createElement(prepared.kind); + player.controls = true; + player.preload = "metadata"; + player.addEventListener("error", failed, { once: true }); + player.addEventListener( + "loadedmetadata", + () => { + if (!previewRevision.accepts(request.revision)) return; + const target = seekSeconds(request.result.source); + if (target !== undefined) { + if (!Number.isFinite(player.duration) || target > player.duration) { + status.hidden = false; + status.textContent = + "The matched timestamp is unavailable in this preview. Use Open file to check the recording."; + } else { + try { + player.currentTime = target; + } catch { + failed(); + } + } + } + }, + { once: true }, + ); + player.src = convertFileSrc(prepared.path); + host.append(player); + } + host.hidden = false; + status.hidden = true; + }, + (request) => previewRevision.accepts(request.revision), + (request, error) => { + if (!previewRevision.accepts(request.revision)) return; + element("media-preview-status").hidden = false; + element("media-preview-status").textContent = + `Preview unavailable: ${String(error)}. Use Open file.`; + }, +); let displayedRequestId: number | null = null; let expandedError: string | null = null; const reducedMotion = matchMedia("(prefers-reduced-motion: reduce)"); @@ -168,7 +277,7 @@ async function buildSemanticIndex() { "index_embeddings", ); element("semantic-status").textContent = - `Semantic search indexed ${report.chunks.toLocaleString()} passages.`; + `Semantic search indexed ${report.chunks.toLocaleString()} content segments.`; } catch (error) { localSemanticError = String(error); } finally { @@ -229,7 +338,7 @@ async function refreshSemanticStatus() { message = "Building your semantic index… Keyword search remains available."; else if (status.ready && status.chunks > 0) - message = `Semantic search ready · ${status.chunks.toLocaleString()} passages${status.stale ? " · Updates pending" : ""}`; + message = `Semantic search ready · ${status.chunks.toLocaleString()} content segments${status.stale ? " · Updates pending" : ""}${status.media_failures?.length ? ` · ${status.media_failures.length} files could not be indexed` : ""}`; else if (status.ready) message = "Google model ready. Index a folder to search by meaning."; else @@ -240,6 +349,18 @@ async function refreshSemanticStatus() { element("semantic-detail").textContent = status.worker_info ? `${status.model} · ${status.worker_info.runtime || "Local inference"} · Your files stay on this device.` : "The verified Google model downloads automatically once (865 MB). After setup, inference runs locally."; + const mediaDetail = status.media_setup_error + ? `Media decoder setup needs attention: ${status.media_setup_error}. Text search remains available.` + : status.worker_info && !status.worker_info.media_supported + ? "The installed worker needs a media-capable runtime update. Text search remains available." + : status.media_tools_ready && status.worker_info?.media_supported + ? "Image, audio, and video encoders are available locally." + : "Preparing local image, audio, and video support."; + element("semantic-detail").textContent += ` ${mediaDetail}`; + if (status.media_failures?.length) { + element("semantic-detail").textContent += + ` ${status.media_failures.length} files could not be indexed. The first issue: ${status.media_failures[0].path}: ${status.media_failures[0].message}. Filename search remains available; rebuild after fixing the file.`; + } const retry = element("retry-model"); retry.hidden = !error || status.ready; retry.disabled = working; @@ -266,7 +387,7 @@ async function refreshSemanticStatus() { canSearchSemantically() && latestSearch?.id === requestId ) - hybridLane.submit(latestSearch); + submitSearch(latestSearch, "hybrid"); if (working || (!status.ready && !error)) queueSemanticRefresh(); } catch (error) { element("semantic-status").textContent = @@ -349,15 +470,33 @@ function select(index: number, focus = false) { element("preview-title").textContent = result.filename; element("preview-path").textContent = result.path; element("preview-kind").textContent = - `${result.match_kind} match${result.source ? ` · ${result.source.kind} ${result.source.number}` : ""}`; + `${matchLabel(result.match_kind)}${result.source ? ` · ${sourceLabel(result.source)}` : ""}`; + const media = mediaKind(result.filename); + element("passage-label").textContent = media + ? "MATCHED CONTENT" + : "EXTRACTED PASSAGE"; element("preview-text").textContent = result.snippet || (result.extraction_error ? `Content could not be extracted: ${result.extraction_error}` - : "No extracted text is available for this file."); + : media + ? result.source?.matched_query || "Preview the matched media below." + : "No extracted text is available for this file."); element("open-result").title = result.source - ? `Opens this file in your default application. ${result.source.kind} ${result.source.number} is shown here; exact-location opening is not supported by the default application interface.` + ? `Open in your default application. The matched location ${sourceLabel(result.source)} is shown in Searchi; default application opening starts at its own location.` : "Open in your default application"; + const selection = previewRevision.select( + JSON.stringify([result.path, result.source?.kind, result.source?.number]), + ); + if (selection.changed) { + mediaLane.clear(); + unloadMedia(); + if (media && isTauri()) { + element("media-preview-status").hidden = false; + element("media-preview-status").textContent = "Preparing media preview…"; + mediaLane.submit({ revision: selection.revision, result }); + } + } if (previewPath !== result.path) { const passage = document.querySelector(".passage")!; passage.scrollTop = 0; @@ -388,6 +527,7 @@ function render() { if (!results.length) { element("preview").hidden = true; previewPath = null; + clearMedia(); } results.forEach((result, i) => { let entry = resultRows.get(result.path); @@ -419,9 +559,7 @@ function render() { entry.title.textContent = result.filename; entry.path.textContent = result.path; entry.snippet.textContent = result.snippet; - entry.kind.textContent = result.source - ? `${result.source.kind} ${result.source.number}` - : result.match_kind; + entry.kind.textContent = `${matchLabel(result.match_kind)}${result.source ? ` · ${sourceLabel(result.source)}` : ""}`; const asset = fileIcon(result.filename); if (entry.file.dataset.type !== asset.type) { entry.file.innerHTML = asset.html; @@ -443,6 +581,14 @@ function captureFilters() { throw new Error("File size must be a nonnegative whole number of bytes."); return value; }; + const duration = (id: string) => { + const text = input(id); + if (!text) return null; + const ms = Math.round(Number(text) * 1000); + if (!Number.isFinite(ms) || ms < 0 || ms > 4_294_967_295) + throw new Error("Enter a valid nonnegative media duration in seconds."); + return ms; + }; // Date controls represent the user's local calendar day, including its end. const date = (id: string, end: boolean) => { const text = input(id); @@ -457,6 +603,8 @@ function captureFilters() { return { folder: input("filter-folder") || null, extension: input("filter-extension") || null, + min_duration_ms: duration("filter-duration-min"), + max_duration_ms: duration("filter-duration-max"), min_size: size("filter-min"), max_size: size("filter-max"), modified_after_unix_ms: date("filter-after", false), @@ -474,6 +622,7 @@ function applyResults( (lane === "lexical" && shownLane === "hybrid") ) return; + const renderStarted = performance.now(); const selectedPath = results[selected]?.path; const resultsHadFocus = list.contains(document.activeElement); shownLane = lane; @@ -484,18 +633,131 @@ function applyResults( const preserved = results.findIndex((result) => result.path === selectedPath); if (preserved >= 0) select(preserved, resultsHadFocus); else if (results.length) select(0, resultsHadFocus); - element("result-summary").textContent = - `${found.length} RESULTS · ${lane === "hybrid" ? "KEYWORD + MEANING" : "KEYWORD"} · ${Math.round(performance.now() - request.started)} MS`; if (!found.length) refreshEmptySearchState(); + request.measurement.displayed( + lane, + renderStarted, + performance.now(), + found.length, + ); + const metric = request.measurement.latestNative(lane); + const trace = request.measurement.export(); + element("result-summary").textContent = + `${found.length} RESULTS · ${lane === "hybrid" ? "KEYWORD + MEANING" : "KEYWORD"} · NATIVE ${briefMs(metric?.total_ms ?? 0)} MS · ${lane === "hybrid" ? "FINAL" : "FIRST RESPONSE"} ${Math.round(lane === "hybrid" ? (trace.hybrid_final_results_ms ?? 0) : (trace.first_results_ms ?? 0))} MS`; + refreshPerformance(request); +} + +function refreshPerformance(request: SearchRequest) { + if (request.id !== requestId) return; + const panel = element("performance-panel"); + panel.hidden = !request.measurement.debug; + if (!request.measurement.debug) return; + const body = element("performance-detail"); + body.replaceChildren(); + const report = request.measurement.export(); + const append = (text: string, className = "") => { + const row = document.createElement("p"); + row.textContent = text; + row.className = className; + body.append(row); + return row; + }; + append( + "Times below use separate UI and native clocks. Nested spans and parallel lanes must not be added together. DOM update measures synchronous changes, not paint or deferred media preview loading.", + "hint", + ); + append( + `Input debounce ${report.debounce_ms.toFixed(1)} ms · First displayed response ${report.first_results_ms?.toFixed(1) ?? "pending"} ms · Latest displayed ${report.latest_displayed_ms?.toFixed(1) ?? "pending"} ms · Hybrid final ${report.hybrid_final_results_ms?.toFixed(1) ?? "pending / unavailable"} ms`, + ); + for (const [lane, delay] of Object.entries(report.lane_schedule_ms)) + append( + `${lane}: scheduled ${delay.toFixed(1)} ms after debounce${lane === "hybrid" ? " (includes intentional 350 ms semantic delay or waiting for readiness)" : ""}`, + ); + for (const attempt of report.attempts) { + append( + `${attempt.lane} attempt ${attempt.attempt}${attempt.failed ? " · FAILED" : ""}: pending queue ${attempt.queued_ms.toFixed(1)} ms · retry wait ${attempt.retry_wait_ms.toFixed(1)} ms · invoke ${attempt.invoke_ms.toFixed(1)} ms`, + "performance-attempt", + ); + if (!attempt.native) { + append("Native timing unavailable for this failure.", "hint"); + continue; + } + append( + `Native command ${attempt.native.total_ms.toFixed(1)} ms · ${attempt.native.result_count} results · estimated transport / serialization / scheduling ${attempt.transport_estimate_ms?.toFixed(1)} ms`, + "hint", + ); + if (attempt.native.trace === null) + append("Detailed native trace unavailable for this attempt.", "hint"); + const spans = attempt.native.trace ?? []; + spans.forEach((span, index) => { + const counts = Object.entries(span.counters) + .map(([name, value]) => + name.endsWith("_us") + ? `${name.slice(0, -3).replaceAll("_", " ")}: ${(value / 1000).toFixed(3)} ms` + : `${name.replaceAll("_", " ")}: ${value}`, + ) + .join(" · "); + const row = append( + `${span.name}: ${span.duration_ms.toFixed(2)} ms · starts +${span.start_ms.toFixed(2)} ms${counts ? ` · ${counts}` : ""}`, + "performance-span", + ); + row.style.paddingLeft = `${spanDepth(spans, index) * 14}px`; + }); + if (attempt.native.dropped_spans) + append(`${attempt.native.dropped_spans} native spans dropped.`, "hint"); + } + for (const display of report.displays) + append( + `${display.lane} synchronous DOM update ${display.dom_update_ms.toFixed(2)} ms · ${display.count} displayed results`, + "hint", + ); + if (report.dropped_attempts || report.dropped_displays) + append( + `History capped: ${report.dropped_attempts} attempts and ${report.dropped_displays} displays dropped.`, + "hint", + ); +} + +async function invokeMeasured(request: SearchRequest, lane: SearchLane) { + const attempt = request.measurement.begin(lane, performance.now()); + try { + const response = await invoke>( + lane === "lexical" ? "search_measured" : "hybrid_search_measured", + { + query: request.query, + filters: request.filters, + debugPerformance: request.measurement.debug, + }, + ); + request.measurement.completed( + attempt, + performance.now(), + response.metrics, + false, + ); + return response.results; + } catch (error) { + const failure = measuredFailure(error); + request.measurement.completed( + attempt, + performance.now(), + failure?.metrics ?? null, + true, + ); + refreshPerformance(request); + throw failure ? new Error(failure.message) : error; + } +} + +function submitSearch(request: SearchRequest, lane: SearchLane) { + request.measurement.submitted(lane, performance.now()); + (lane === "lexical" ? lexicalLane : hybridLane).submit(request); } const isCurrent = (request: SearchRequest) => request.id === requestId; const lexicalLane = new LatestLane( async (request) => { - const found = await invoke("search", { - query: request.query, - filters: request.filters, - }); + const found = await invokeMeasured(request, "lexical"); applyResults(found, request, "lexical"); }, isCurrent, @@ -509,10 +771,7 @@ const lexicalLane = new LatestLane( const hybridLane = new LatestLane( async (request) => { if (!canSearchSemantically()) return; - const found = await invoke("hybrid_search", { - query: request.query, - filters: request.filters, - }); + const found = await invokeMeasured(request, "hybrid"); applyResults(found, request, "hybrid"); }, isCurrent, @@ -534,12 +793,13 @@ function invalidateSearch() { latestSearch = null; } -async function search() { +async function search(inputAt = performance.now()) { invalidateSearch(); querySemanticFailed = false; shownLane = "lexical"; const value = query.value.trim(); if (!value) { + element("performance-panel").hidden = true; results = []; displayedRequestId = null; selected = -1; @@ -557,13 +817,28 @@ async function search() { query: value, filters: captureFilters(), started: performance.now(), + measurement: new SearchMeasurement( + inputAt, + performance.now(), + element("performance-toggle").checked, + { + model: semanticStatus?.worker_info?.model ?? null, + device: semanticStatus?.worker_info?.device ?? null, + runtime: semanticStatus?.worker_info?.runtime ?? null, + threads: semanticStatus?.worker_info?.threads ?? null, + dimensions: semanticStatus?.worker_info?.dimensions ?? null, + semantic_ready: canSearchSemantically(), + indexed_chunks: semanticStatus?.chunks ?? null, + }, + ), }; latestSearch = request; + refreshPerformance(request); element("result-summary").textContent = "SEARCHING…"; - lexicalLane.submit(request); + submitSearch(request, "lexical"); hybridTimer = setTimeout(() => { if (isCurrent(request) && canSearchSemantically()) - hybridLane.submit(request); + submitSearch(request, "hybrid"); }, 350); } catch (error) { showError(error); @@ -573,12 +848,41 @@ async function search() { async function refreshStats() { const stats = await invoke("stats"); element("index-status").textContent = - `${stats.files.toLocaleString()} files · ${stats.content_files.toLocaleString()} with searchable content`; + `${stats.files.toLocaleString()} files · ${stats.content_files.toLocaleString()} with extracted text`; } query.addEventListener("input", () => { + const inputAt = performance.now(); invalidateSearch(); - timer = setTimeout(search, 60); + timer = setTimeout(() => void search(inputAt), 60); +}); +element("performance-toggle").addEventListener("change", () => { + const enabled = element("performance-toggle").checked; + try { + localStorage.setItem("searchi-performance-details", String(enabled)); + } catch { + /* Session preference still works. */ + } + void search(); +}); +element("copy-performance").addEventListener("click", () => { + if (!latestSearch?.measurement.debug) return; + if (!navigator.clipboard) { + element("copy-performance-status").textContent = + "Clipboard unavailable. Timings remain visible here."; + return; + } + const report = JSON.stringify(latestSearch.measurement.export(), null, 2); + void navigator.clipboard.writeText(report).then( + () => { + element("copy-performance-status").textContent = + "Timing report copied. No query or file paths included."; + }, + () => { + element("copy-performance-status").textContent = + "Clipboard unavailable. Timings remain visible here."; + }, + ); }); element("search-form").addEventListener("submit", (event) => { event.preventDefault(); @@ -714,6 +1018,7 @@ document.addEventListener("keydown", (event) => { query.select(); } if (event.key === "Escape") { + clearMedia(); document .querySelectorAll(".popover[open]") .forEach((popover) => { diff --git a/apps/desktop/src/media-display.ts b/apps/desktop/src/media-display.ts new file mode 100644 index 0000000..4dae07f --- /dev/null +++ b/apps/desktop/src/media-display.ts @@ -0,0 +1,98 @@ +/** Media formatting and selection revisions shared by the preview and tests. */ +export interface MediaSource { + kind: string; + number: number; +} +export type MediaKind = "image" | "audio" | "video"; +export function timestampLabel(milliseconds: number): string { + if (!Number.isFinite(milliseconds) || milliseconds < 0) return "Unknown time"; + const seconds = Math.floor(milliseconds / 1000); + return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, "0")}`; +} +export function seekSeconds(source?: MediaSource): number | undefined { + return source?.kind === "timestamp_ms" && + Number.isFinite(source.number) && + source.number >= 0 + ? source.number / 1000 + : undefined; +} +export function sourceLabel(source?: MediaSource): string { + if (!source) return ""; + if (source.kind === "image") return "Image"; + if (source.kind === "timestamp_ms") return timestampLabel(source.number); + return `${source.kind} ${source.number}`; +} +export function matchLabel(kind: string): string { + const labels: Record = { + semantic_image: "Image meaning", + semantic_video: "Video frame meaning", + semantic_audio: "Audio meaning", + semantic: "Meaning", + hybrid: "Keyword + meaning", + exact_filename: "Exact filename", + exact_identifier: "Exact identifier", + filename: "Filename", + keyword: "Content", + }; + return labels[kind] ?? kind.replaceAll("_", " "); +} +export function mediaKind(filename: string): MediaKind | undefined { + const extension = filename.split(".").pop()?.toLowerCase() ?? ""; + if ( + [ + "png", + "jpg", + "jpeg", + "webp", + "bmp", + "gif", + "tiff", + "tif", + "heic", + "avif", + ].includes(extension) + ) + return "image"; + if ( + ["mp4", "mkv", "mov", "webm", "avi", "m4v", "mpeg", "mpg"].includes( + extension, + ) + ) + return "video"; + if ( + [ + "mp3", + "wav", + "flac", + "ogg", + "m4a", + "aac", + "opus", + "wma", + "aiff", + "aif", + ].includes(extension) + ) + return "audio"; + return undefined; +} +/** Even selecting the same file at a new timestamp invalidates old responses. */ +export class PreviewRevision { + private revision = 0; + private key = ""; + select(key: string): { revision: number; changed: boolean } { + const changed = this.key !== key; + if (changed) { + this.key = key; + this.revision++; + } + return { revision: this.revision, changed }; + } + accepts(revision: number) { + return revision === this.revision && this.key !== ""; + } + clear() { + this.key = ""; + this.revision++; + } +} diff --git a/apps/desktop/src/search-performance.ts b/apps/desktop/src/search-performance.ts new file mode 100644 index 0000000..d931fd0 --- /dev/null +++ b/apps/desktop/src/search-performance.ts @@ -0,0 +1,203 @@ +/** UI times use performance.now(); native spans use their own command clock. */ +export interface NativeSpan { + name: string; + start_ms: number; + duration_ms: number; + parent: number | null; + counters: Record; +} +export interface NativeMetrics { + total_ms: number; + result_count: number; + trace: NativeSpan[] | null; + dropped_spans: number; +} +export interface MeasuredResponse { + results: T[]; + metrics: NativeMetrics; +} +export type SearchLane = "lexical" | "hybrid"; +export interface AttemptStart { + lane: SearchLane; + startedAt: number; + submittedAt: number; + submission: number; +} +interface Attempt { + lane: SearchLane; + submission: number; + attempt: number; + queued_ms: number; + retry_wait_ms: number; + invoke_ms: number; + native: NativeMetrics | null; + transport_estimate_ms: number | null; + failed: boolean; + ended_at: number; +} + +export class SearchMeasurement { + debug: boolean; + inputAt: number; + scheduledAt: number; + context: Record; + submissions = new Map(); + latestSubmission = new Map(); + submissionSequence = new Map(); + laneAttempts = new Map(); + attempts: Attempt[] = []; + droppedAttempts = 0; + droppedDisplays = 0; + firstDisplayMs: number | null = null; + displays: { + lane: SearchLane; + elapsed_ms: number; + dom_update_ms: number; + count: number; + }[] = []; + + constructor( + inputAt: number, + scheduledAt: number, + debug: boolean, + context: Record = {}, + ) { + this.inputAt = inputAt; + this.scheduledAt = scheduledAt; + this.debug = debug; + this.context = { ...context }; + } + submitted(lane: SearchLane, at: number) { + if (!this.submissions.has(lane)) this.submissions.set(lane, at); + this.latestSubmission.set(lane, at); + this.submissionSequence.set( + lane, + (this.submissionSequence.get(lane) ?? 0) + 1, + ); + } + begin(lane: SearchLane, startedAt: number): AttemptStart { + return { + lane, + startedAt, + submittedAt: this.latestSubmission.get(lane) ?? startedAt, + submission: this.submissionSequence.get(lane) ?? 0, + }; + } + completed( + token: AttemptStart, + end: number, + native: NativeMetrics | null, + failed: boolean, + ) { + const { lane, startedAt: start, submittedAt, submission } = token; + const prior = this.attempts.filter((attempt) => attempt.lane === lane); + const previous = prior.at(-1); + const retry = previous?.failed && previous.submission === submission; + const attemptNumber = (this.laneAttempts.get(lane) ?? 0) + 1; + this.laneAttempts.set(lane, attemptNumber); + const elapsed = Math.max(0, end - start); + this.attempts.push({ + lane, + submission, + attempt: attemptNumber, + queued_ms: retry ? 0 : Math.max(0, start - submittedAt), + retry_wait_ms: retry ? Math.max(0, start - previous.ended_at) : 0, + invoke_ms: elapsed, + native, + transport_estimate_ms: native + ? Math.max(0, elapsed - native.total_ms) + : null, + failed, + ended_at: end, + }); + if (this.attempts.length > (this.debug ? 32 : 4)) { + this.attempts.shift(); + this.droppedAttempts++; + } + } + displayed(lane: SearchLane, start: number, end: number, count: number) { + if (this.firstDisplayMs === null) + this.firstDisplayMs = Math.max(0, end - this.inputAt); + this.displays.push({ + lane, + elapsed_ms: Math.max(0, end - this.inputAt), + dom_update_ms: Math.max(0, end - start), + count, + }); + if (this.displays.length > (this.debug ? 16 : 2)) { + this.displays.shift(); + this.droppedDisplays++; + } + } + latestNative(lane: SearchLane) { + return ( + this.attempts + .filter((attempt) => attempt.lane === lane && !attempt.failed) + .at(-1)?.native ?? null + ); + } + /** Deliberately exclude query text, filenames, paths, snippets and errors. */ + export() { + return { + version: 1, + context: this.context, + clock_note: + "UI monotonic elapsed times; native command-relative spans. Nested spans and parallel lanes must not be summed.", + debounce_ms: Math.max(0, this.scheduledAt - this.inputAt), + lane_schedule_ms: Object.fromEntries( + [...this.submissions].map(([lane, at]) => [ + lane, + Math.max(0, at - this.scheduledAt), + ]), + ), + attempts: this.attempts.map(({ ended_at: _end, ...attempt }) => attempt), + displays: this.displays, + first_results_ms: this.firstDisplayMs, + latest_displayed_ms: this.displays.at(-1)?.elapsed_ms ?? null, + hybrid_final_results_ms: + [...this.displays] + .reverse() + .find((display) => display.lane === "hybrid")?.elapsed_ms ?? null, + dropped_attempts: this.droppedAttempts, + dropped_displays: this.droppedDisplays, + }; + } +} + +export function measuredFailure( + error: unknown, +): { message: string; metrics: NativeMetrics } | null { + if (!error || typeof error !== "object") return null; + const value = error as { message?: unknown; metrics?: NativeMetrics }; + return typeof value.message === "string" && + value.metrics && + Number.isFinite(value.metrics.total_ms) + ? { message: value.message, metrics: value.metrics } + : null; +} + +/** Malformed/cyclic parent chains cannot trap the debug renderer. */ +export function spanDepth(spans: NativeSpan[], index: number) { + let depth = 0; + const visited = new Set([index]); + let parent = spans[index]?.parent; + while ( + parent != null && + spans[parent] && + !visited.has(parent) && + depth < 16 + ) { + visited.add(parent); + depth++; + parent = spans[parent].parent; + } + return depth; +} + +export function briefMs(value: number) { + return value < 1 + ? "<1" + : value < 10 + ? value.toFixed(1) + : String(Math.round(value)); +} diff --git a/apps/desktop/src/style.css b/apps/desktop/src/style.css index 06a4e2b..b3852b7 100644 --- a/apps/desktop/src/style.css +++ b/apps/desktop/src/style.css @@ -766,3 +766,73 @@ footer { outline-color: Highlight; } } +/* Keep one scoped media player within the existing result preview. */ +.media-preview { + margin: 0 20px 14px; + overflow: hidden; + border-radius: 10px; + background: #f3f4f7; +} +.media-preview img, +.media-preview video { + display: block; + width: 100%; + max-height: 340px; + object-fit: contain; +} +.media-preview audio { + display: block; + width: 100%; +} +#media-preview-status { + margin: 0 20px 14px; +} +.file-icon[data-type="image"] { + color: #6c62b5; +} +.file-icon[data-type="video"] { + color: #a16a48; +} +.file-icon[data-type="audio"] { + color: #608271; +} +.performance-toggle { + display: flex; + align-items: center; + gap: 8px; + margin-top: 14px; +} +.performance-toggle input { + width: auto; + accent-color: var(--brand); +} +#performance-panel { + margin: 0 20px 12px; + padding: 10px 14px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--surface); + font-size: 12px; +} +#performance-panel summary { + cursor: pointer; + font-weight: 600; +} +#performance-detail { + max-height: 280px; + overflow: auto; + font-variant-numeric: tabular-nums; +} +#performance-detail p { + margin: 8px 0; +} +.performance-attempt { + font-weight: 600; +} +.performance-span { + border-left: 2px solid var(--line); +} +#copy-performance-status { + margin-left: 8px; + color: var(--muted); +} diff --git a/apps/desktop/tests/media-display.test.mjs b/apps/desktop/tests/media-display.test.mjs new file mode 100644 index 0000000..2d559a5 --- /dev/null +++ b/apps/desktop/tests/media-display.test.mjs @@ -0,0 +1,83 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + timestampLabel, + seekSeconds, + sourceLabel, + matchLabel, + PreviewRevision, +} from "../src/media-display.ts"; +import { LatestLane } from "../src/search-state.ts"; +const settle = () => new Promise((resolve) => setImmediate(resolve)); + +test("millisecond seeks preserve fractions and readable minute labels", () => { + assert.equal(timestampLabel(125450), "2:05"); + assert.equal(timestampLabel(3600000), "60:00"); + assert.equal(seekSeconds({ kind: "timestamp_ms", number: 125450 }), 125.45); + assert.equal(seekSeconds({ kind: "page", number: 4 }), undefined); + assert.equal(seekSeconds({ kind: "timestamp_ms", number: -1 }), undefined); + assert.equal(timestampLabel(Infinity), "Unknown time"); + assert.equal(sourceLabel({ kind: "image", number: 0 }), "Image"); + assert.equal(matchLabel("semantic_audio"), "Audio meaning"); + assert.equal(matchLabel("semantic_video"), "Video frame meaning"); +}); + +test("another timestamp in the same movie invalidates older preparations", () => { + const gate = new PreviewRevision(); + const first = gate.select("movie:1000"); + assert.equal(gate.select("movie:1000").changed, false); + const second = gate.select("movie:3000"); + assert.equal(gate.accepts(first.revision), false); + assert.equal(gate.accepts(second.revision), true); + gate.clear(); + assert.equal(gate.accepts(second.revision), false); +}); + +test("one active preview and only latest pending reject stale output", async () => { + const gate = new PreviewRevision(); + const executed = []; + const accepted = []; + let release; + const lane = new LatestLane( + async (request) => { + executed.push(request.path); + if (request.path === "first") + await new Promise((resolve) => { + release = resolve; + }); + if (gate.accepts(request.revision)) accepted.push(request.path); + }, + (request) => gate.accepts(request.revision), + () => assert.fail("Unexpected preview failure"), + ); + lane.submit({ path: "first", revision: gate.select("first").revision }); + lane.submit({ path: "middle", revision: gate.select("middle").revision }); + lane.submit({ path: "latest", revision: gate.select("latest").revision }); + release(); + await settle(); + assert.deepEqual(executed, ["first", "latest"]); + assert.deepEqual(accepted, ["latest"]); +}); + +test("Escape clears queued preparation and rejects active output", async () => { + const gate = new PreviewRevision(); + let release; + const accepted = []; + const lane = new LatestLane( + async (request) => { + await new Promise((resolve) => { + release = resolve; + }); + if (gate.accepts(request.revision)) accepted.push(request.path); + }, + (request) => gate.accepts(request.revision), + () => assert.fail("Unexpected preview failure"), + ); + lane.submit({ path: "one", revision: gate.select("one").revision }); + lane.submit({ path: "two", revision: gate.select("two").revision }); + gate.clear(); + lane.clear(); + release(); + await settle(); + assert.deepEqual(accepted, []); +}); diff --git a/apps/desktop/tests/search-performance.test.mjs b/apps/desktop/tests/search-performance.test.mjs new file mode 100644 index 0000000..bafa32c --- /dev/null +++ b/apps/desktop/tests/search-performance.test.mjs @@ -0,0 +1,102 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { SearchMeasurement, measuredFailure, spanDepth, briefMs } from '../src/search-performance.ts'; + +const finish = (trace, lane, start, end, metrics, failed) => trace.completed(trace.begin(lane, start), end, metrics, failed); + +const native = { total_ms: 12, result_count: 2, trace: [], dropped_spans: 0 }; + +test('separates debounce, intentional semantic delay, queue, invoke and DOM update', () => { + const trace = new SearchMeasurement(100, 165, true); + trace.submitted('lexical', 165); + finish(trace, 'lexical', 180, 200, native, false); + trace.displayed('lexical', 200, 203, 2); + trace.submitted('hybrid', 515); + finish(trace, 'hybrid', 520, 550, native, false); + trace.displayed('hybrid', 550, 554, 3); + const report = trace.export(); + assert.equal(report.debounce_ms, 65); + assert.equal(report.lane_schedule_ms.hybrid, 350); + assert.equal(report.attempts[0].queued_ms, 15); + assert.equal(report.attempts[0].invoke_ms, 20); + assert.equal(report.attempts[0].transport_estimate_ms, 8); + assert.equal(report.displays[0].dom_update_ms, 3); + assert.equal(report.first_results_ms, 103); + assert.equal(report.hybrid_final_results_ms, 454); +}); + +test('failed attempt timings survive retry and lexical response does not pretend hybrid completion', () => { + const trace = new SearchMeasurement(0, 0, true); + trace.submitted('lexical', 0); + finish(trace, 'lexical', 0, 2, native, true); + finish(trace, 'lexical', 402, 414, native, false); + trace.displayed('lexical', 414, 415, 2); + const report = trace.export(); + assert.equal(report.attempts[1].retry_wait_ms, 400); + assert.equal(report.attempts[0].failed, true); + assert.equal(report.attempts[0].transport_estimate_ms, 0); + assert.equal(report.hybrid_final_results_ms, null); + assert.equal(report.latest_displayed_ms, 415); + assert.equal(measuredFailure({message: 'worker busy', metrics: native}).message, 'worker busy'); + assert.equal(measuredFailure('legacy failure'), null); +}); + +test('debug history is bounded and first response survives dropped displays', () => { + const context = { device: 'cpu', threads: 1 }; + const trace = new SearchMeasurement(0, 0, true, context); + context.threads = 8; + for (let i = 0; i < 40; i++) { + finish(trace, 'hybrid', i, i + 1, native, false); + trace.displayed('hybrid', i, i + 1, 1); + } + const report = trace.export(); + assert.equal(report.attempts.length, 32); + assert.equal(report.displays.length, 16); + assert.equal(report.dropped_attempts, 8); + assert.equal(report.dropped_displays, 24); + assert.equal(report.first_results_ms, 1); + assert.equal(report.context.threads, 1); + assert.doesNotMatch(JSON.stringify(report), /query|filename|snippet|ended_at/); +}); + +test('cyclic or invalid native span parents cannot hang hierarchy rendering', () => { + const spans = [{parent: 1}, {parent: 0}, {parent: 99}]; + assert.equal(spanDepth(spans, 0), 1); + assert.equal(spanDepth(spans, 2), 0); +}); + +test('a later refresh has queue timing rather than being misreported as a busy retry', () => { + const trace = new SearchMeasurement(0, 0, true); + trace.submitted('hybrid', 350); + finish(trace, 'hybrid', 350, 360, native, false); + trace.submitted('hybrid', 1000); + finish(trace, 'hybrid', 1010, 1020, native, false); + assert.equal(trace.export().attempts[1].queued_ms, 10); + assert.equal(trace.export().attempts[1].retry_wait_ms, 0); + assert.equal(briefMs(.44), '<1'); + assert.equal(briefMs(3.14), '3.1'); +}); + +test('new submission after a failure measures pending queue rather than retry wait', () => { + const trace = new SearchMeasurement(0, 0, true); + trace.submitted('hybrid', 350); + finish(trace, 'hybrid', 350, 360, native, true); + trace.submitted('hybrid', 1000); + finish(trace, 'hybrid', 1010, 1020, native, false); + assert.equal(trace.export().attempts[1].queued_ms, 10); + assert.equal(trace.export().attempts[1].retry_wait_ms, 0); +}); + +test('an in-flight attempt keeps its captured submission when a refresh queues', () => { + const trace = new SearchMeasurement(0, 0, true); + trace.submitted('hybrid', 350); + const active = trace.begin('hybrid', 355); + trace.submitted('hybrid', 1000); + trace.completed(active, 1005, native, true); + finish(trace, 'hybrid', 1010, 1020, native, false); + const attempts = trace.export().attempts; + assert.equal(attempts[0].queued_ms, 5); + assert.equal(attempts[1].queued_ms, 10); + assert.equal(attempts[1].retry_wait_ms, 0); + assert.notEqual(attempts[0].submission, attempts[1].submission); +}); diff --git a/crates/searchi-cli/src/main.rs b/crates/searchi-cli/src/main.rs index 250a133..68a0e3f 100644 --- a/crates/searchi-cli/src/main.rs +++ b/crates/searchi-cli/src/main.rs @@ -1,9 +1,10 @@ -//! Thin command-line adapter around the shared, CPU-only search engine. +//! Thin headless adapter around the shared local search engine. use std::path::PathBuf; use anyhow::{bail, Context, Result}; use clap::{Parser, Subcommand}; +use searchi_core::metrics::{MetricsMode, SearchResponse, TraceCollector}; use searchi_core::{IndexOptions, SearchIndex, SearchOptions}; use searchi_service::HybridSearch; @@ -46,6 +47,12 @@ enum Command { /// Emit a JSON array for scripting. #[arg(long)] json: bool, + /// Include basic measured statistics in JSON output. + #[arg(long)] + performance: bool, + /// Include bounded granular stage timings and diagnostic counters. + #[arg(long)] + debug_performance: bool, /// Restrict results to this folder and descendants. #[arg(long)] folder: Option, @@ -56,6 +63,11 @@ enum Command { min_size: Option, #[arg(long)] max_size: Option, + /// Inclusive media duration limit in milliseconds. + #[arg(long)] + min_duration_ms: Option, + #[arg(long)] + max_duration_ms: Option, /// Inclusive modification time in Unix milliseconds. #[arg(long)] modified_after_ms: Option, @@ -80,6 +92,14 @@ enum Command { embedding_worker: PathBuf, #[arg(long, default_value_t = 1, value_parser = clap::value_parser!(u8).range(1..=8))] cpu_threads: u8, + /// Standalone decoder; normally discovered beside the installed CLI. + #[arg(long, requires = "ffprobe")] + ffmpeg: Option, + #[arg(long, requires = "ffmpeg")] + ffprobe: Option, + /// Explicitly build only document vectors, without media. + #[arg(long)] + text_only: bool, }, /// Show the indexed file and content counts. Stats { @@ -122,10 +142,14 @@ fn main() -> Result<()> { query, limit, json, + performance, + debug_performance, folder, extension, min_size, max_size, + min_duration_ms, + max_duration_ms, modified_after_ms, modified_before_ms, model_dir, @@ -141,30 +165,56 @@ fn main() -> Result<()> { extension, min_size, max_size, + min_duration_ms, + max_duration_ms, modified_after_unix_ms: modified_after_ms, modified_before_unix_ms: modified_before_ms, }; + let mut trace = TraceCollector::new(if debug_performance { + MetricsMode::Debug + } else { + MetricsMode::Basic + }); let results = if let (Some(model), Some(runtime)) = (model_dir, embedding_worker) { - HybridSearch::open(&db, model, runtime, usize::from(cpu_threads))? - .search(&query, usize::from(limit), &options) + let mut service = trace.timed("cli.session_initialize", None, |_, _| { + HybridSearch::open(&db, model, runtime, usize::from(cpu_threads)) + })?; + service + .search_traced(&query, usize::from(limit), &options, &mut trace, None) .context("Hybrid search failed")? } else { - SearchIndex::open(&db) - .with_context(|| format!("Cannot open index {}", db.display()))? - .search_with_options(&query, usize::from(limit), &options) + let index = trace + .timed("cli.index_open", None, |_, _| SearchIndex::open(&db)) + .with_context(|| format!("Cannot open index {}", db.display()))?; + index + .search_with_options_traced( + &query, + usize::from(limit), + &options, + &mut trace, + None, + ) .context("Search failed")? }; + let response = SearchResponse { + metrics: trace.finish(results.len()), + results, + }; if json { - println!("{}", serde_json::to_string_pretty(&results)?); - } else if results.is_empty() { + if performance || debug_performance { + println!("{}", serde_json::to_string_pretty(&response)?); + } else { + println!("{}", serde_json::to_string_pretty(&response.results)?); + } + } else if response.results.is_empty() { println!("No matching files."); } else { - for result in results { + for result in &response.results { println!("{} [{}]", result.path, result.match_kind); - if let Some(source) = result.source { + if let Some(source) = &result.source { println!(" {} {}", source.kind, source.number); } - if let Some(error) = result.extraction_error { + if let Some(error) = &result.extraction_error { println!(" Text extraction unavailable: {error}"); } if !result.snippet.is_empty() { @@ -172,18 +222,36 @@ fn main() -> Result<()> { } } } + if !json { + eprintln!( + "{} results · {:.2} ms (includes CLI initialization)", + response.metrics.result_count, response.metrics.total_ms + ); + if debug_performance { + eprintln!("{}", serde_json::to_string_pretty(&response.metrics)?); + } + } } Command::Embed { db, model_dir, embedding_worker, cpu_threads, + ffmpeg, + ffprobe, + text_only, } => { require_existing_index(&db)?; - let report = - HybridSearch::open(&db, model_dir, embedding_worker, usize::from(cpu_threads))? - .index_embeddings() - .context("Semantic indexing failed; prior generation remains active")?; + let mut service = + HybridSearch::open(&db, model_dir, embedding_worker, usize::from(cpu_threads))?; + let report = if text_only { + service.index_embeddings() + } else { + let tools = resolve_media_tools(ffmpeg, ffprobe)?; + service + .index_embeddings_with_media(&tools, &searchi_service::MediaLimits::default()) + } + .context("Semantic indexing failed; prior generation remains active")?; println!("{}", serde_json::to_string_pretty(&report)?); } Command::Stats { db, json } => { @@ -204,6 +272,32 @@ fn main() -> Result<()> { Ok(()) } +fn resolve_media_tools( + ffmpeg: Option, + ffprobe: Option, +) -> Result { + if let (Some(ffmpeg), Some(ffprobe)) = (ffmpeg, ffprobe) { + return searchi_service::FfmpegTools::new(ffmpeg, ffprobe); + } + if let Some(tools) = searchi_service::FfmpegTools::from_environment()? { + return Ok(tools); + } + let development = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../.searchi/media-runtime/bin"); + let directory = if cfg!(debug_assertions) && development.is_dir() { + development + } else { + std::env::current_exe()? + .parent() + .context("CLI installation directory is unavailable")? + .join("media-runtime/bin") + }; + searchi_service::FfmpegTools::new( + directory.join(if cfg!(windows) { "ffmpeg.exe" } else { "ffmpeg" }), + directory.join(if cfg!(windows) { "ffprobe.exe" } else { "ffprobe" }), + ).context("Media tools are missing from this installation; repair the headless package or explicitly use --text-only") +} + /// Read commands must not silently create a new empty database after a typo. fn require_existing_index(db: &std::path::Path) -> Result<()> { if !db.is_file() { diff --git a/crates/searchi-cli/tests/commands.rs b/crates/searchi-cli/tests/commands.rs index b80de1d..116f061 100644 --- a/crates/searchi-cli/tests/commands.rs +++ b/crates/searchi-cli/tests/commands.rs @@ -68,6 +68,36 @@ fn indexes_persists_and_returns_search_and_stats_json() { .unwrap() .contains("termination")); + for flag in ["--performance", "--debug-performance"] { + let measured = fixture.run(&["search", "--db", "index.db", "termination", "--json", flag]); + assert!( + measured.status.success(), + "{}", + String::from_utf8_lossy(&measured.stderr) + ); + let envelope: serde_json::Value = serde_json::from_slice(&measured.stdout).unwrap(); + assert_eq!( + envelope["results"], + serde_json::Value::Array(results.clone()) + ); + assert_eq!(envelope["metrics"]["result_count"], 1); + let total = envelope["metrics"]["total_ms"].as_f64().unwrap(); + assert!(total.is_finite() && total >= 0.0); + if flag == "--performance" { + assert!(envelope["metrics"]["trace"].is_null()); + } else { + let spans = envelope["metrics"]["trace"].as_array().unwrap(); + assert!(spans.iter().any(|span| span["name"] == "cli.index_open")); + assert!(spans.len() > 2); + for span in spans { + let start = span["start_ms"].as_f64().unwrap(); + let duration = span["duration_ms"].as_f64().unwrap(); + assert!(start >= 0.0 && duration >= 0.0 && start + duration <= total + 0.001); + assert!(!span["name"].as_str().unwrap().contains("termination")); + } + } + } + let stats = fixture.run(&["stats", "--db", "index.db", "--json"]); assert!(stats.status.success()); let stats: serde_json::Value = serde_json::from_slice(&stats.stdout).unwrap(); diff --git a/crates/searchi-core/examples/trace_overhead.rs b/crates/searchi-core/examples/trace_overhead.rs new file mode 100644 index 0000000..ce1845c --- /dev/null +++ b/crates/searchi-core/examples/trace_overhead.rs @@ -0,0 +1,80 @@ +//! Small prepared SQLite instrumentation diagnostic; not a production benchmark. +use anyhow::{ensure, Result}; +use searchi_core::SearchIndex; +use std::{fs, path::Path, time::Instant}; + +fn distribution(samples: &[f64]) -> serde_json::Value { + let mut sorted = samples.to_vec(); + sorted.sort_by(f64::total_cmp); + let percentile = |fraction: f64| { + sorted[((sorted.len() as f64 * fraction).ceil() as usize).saturating_sub(1)] + }; + serde_json::json!({"samples":sorted.len(),"p50_ms":percentile(0.50),"p95_ms":percentile(0.95),"mean_ms":sorted.iter().sum::()/sorted.len() as f64}) +} +fn main() -> Result<()> { + let fixture = tempfile::tempdir()?; + let root = fixture.path().join("files"); + fs::create_dir(&root)?; + for index in 0..1000 { + fs::write( + root.join(format!("record-{index:04}.txt")), + format!( + "Supplier agreement {index}. Cancellation needs written notice. Group {}.", + index % 31 + ), + )?; + } + let mut index = SearchIndex::open(fixture.path().join("index.sqlite"))?; + let report = index.index_folder(&root)?; + index.prewarm()?; + ensure!(report.indexed == 1000, "Unexpected fixture indexing count"); + let queries: Vec = (0..24) + .map(|index| format!("record-{:04}.txt", index * 37)) + .collect(); + for query in &queries { + index.search_measured(query, 10, false)?; + index.search_measured(query, 10, true)?; + } + let mut basic = Vec::new(); + let mut debug = Vec::new(); + let mut trace_spans = Vec::new(); + // Alternate order to reduce monotonic cache/CPU-order effects. + for repetition in 0..20 { + for query in &queries { + for detailed in if repetition % 2 == 0 { + [false, true] + } else { + [true, false] + } { + let started = Instant::now(); + let response = index.search_measured(query, 10, detailed)?; + let elapsed = started.elapsed().as_secs_f64() * 1000.0; + ensure!( + response + .results + .first() + .is_some_and(|result| &result.filename == query), + "Fixture retrieval changed" + ); + if detailed { + trace_spans.push(response.metrics.trace.as_ref().unwrap().len()); + debug.push(elapsed); + } else { + ensure!( + response.metrics.trace.is_none(), + "Basic unexpectedly stored traces" + ); + basic.push(elapsed); + } + } + } + } + let output = serde_json::json!({"kind":"prepared_sqlite_trace_overhead","production_claim":false,"profile":if cfg!(debug_assertions){"debug"}else{"release"},"os":std::env::consts::OS,"arch":std::env::consts::ARCH,"files":1000,"queries":24,"repetitions":20,"measurement":"outer Rust call including metrics assembly; excludes fixture setup/JSON serialization","basic":distribution(&basic),"debug":distribution(&debug),"basic_samples_ms":basic,"debug_samples_ms":debug,"debug_span_count_min":trace_spans.iter().min(),"debug_span_count_max":trace_spans.iter().max(),"limits":"tiny warm lexical corpus; harness serial/no model/media/GPU; other VM work including native photo inference may contend; not isolated production performance"}); + let serialized = serde_json::to_string_pretty(&output)?; + if let Some(path) = std::env::args_os().nth(1) { + fs::write(Path::new(&path), serialized)?; + } else { + println!("{serialized}"); + } + Ok(()) +} diff --git a/crates/searchi-core/src/lib.rs b/crates/searchi-core/src/lib.rs index 5df2799..014a031 100644 --- a/crates/searchi-core/src/lib.rs +++ b/crates/searchi-core/src/lib.rs @@ -4,7 +4,10 @@ //! Text and document extraction have byte limits, but still run in this process. //! Worker isolation remains a production milestone. mod extraction; +pub mod metrics; use anyhow::{bail, Context, Result}; +pub use metrics::{MetricsMode, SearchMetrics, SearchResponse, SearchSpan}; +use metrics::{SpanToken, TraceCollector}; use rusqlite::{params, params_from_iter, types::Value, Connection, OptionalExtension}; use serde::Serialize; use std::{ @@ -16,7 +19,7 @@ use std::{ }; use walkdir::WalkDir; -const SCHEMA_VERSION: i64 = 9; +const SCHEMA_VERSION: i64 = 10; const MAX_RESULTS: usize = 1000; #[derive(Debug, Default, Serialize)] @@ -53,6 +56,8 @@ pub struct SearchOptions { pub max_size: Option, pub modified_after_unix_ms: Option, pub modified_before_unix_ms: Option, + pub min_duration_ms: Option, + pub max_duration_ms: Option, } #[derive(Debug, Serialize)] @@ -66,7 +71,8 @@ pub struct SearchResult { pub extraction_error: Option, } -/// A verified matching passage location; numbers are one based. +/// Verified source location. Document numbers are one based; timestamp_ms +/// numbers are milliseconds from media start, and image numbers are zero. #[derive(Debug, Clone, Serialize)] pub struct SourceLocation { pub kind: String, @@ -227,6 +233,15 @@ impl SearchIndex { UPDATE name_statistics_state SET dirty=1 WHERE singleton=1; END; PRAGMA user_version=9;", )?; + initialization.execute_batch("CREATE INDEX IF NOT EXISTS files_extension ON files(extension,id); + CREATE TABLE IF NOT EXISTS media_metadata(path TEXT PRIMARY KEY, file_id INTEGER NOT NULL UNIQUE, tags TEXT NOT NULL,duration_ms INTEGER NOT NULL); + CREATE VIRTUAL TABLE IF NOT EXISTS media_tags USING fts5(tags,content='media_metadata',content_rowid='file_id'); + CREATE TRIGGER IF NOT EXISTS media_metadata_insert AFTER INSERT ON media_metadata BEGIN INSERT INTO media_tags(rowid,tags) VALUES(new.file_id,new.tags); END; + CREATE TRIGGER IF NOT EXISTS media_metadata_delete AFTER DELETE ON media_metadata BEGIN INSERT INTO media_tags(media_tags,rowid,tags) VALUES('delete',old.file_id,old.tags); END; + CREATE TRIGGER IF NOT EXISTS media_metadata_update AFTER UPDATE ON media_metadata BEGIN INSERT INTO media_tags(media_tags,rowid,tags) VALUES('delete',old.file_id,old.tags); INSERT INTO media_tags(rowid,tags) VALUES(new.file_id,new.tags); END; + CREATE TRIGGER IF NOT EXISTS files_media_delete AFTER DELETE ON files BEGIN DELETE FROM media_metadata WHERE path=old.path; END; + CREATE TRIGGER IF NOT EXISTS files_media_update AFTER UPDATE ON files WHEN new.path!=old.path OR new.size!=old.size OR new.mtime!=old.mtime BEGIN DELETE FROM media_metadata WHERE path=old.path; END; + PRAGMA user_version=10;")?; initialization.commit()?; } Ok(Self { @@ -236,6 +251,32 @@ impl SearchIndex { }) } + /// Persist genuine extracted media tags, guarded against filesystem changes. + pub fn set_media_metadata( + &mut self, + path: &str, + tags: &str, + duration_ms: u32, + size: u64, + mtime_ns: i64, + ) -> Result<()> { + if tags.len() > 32768 { + bail!("Media tags exceed 32 KiB bound"); + } + let tx = self.connection.transaction()?; + let id: Option = tx + .query_row( + "SELECT id FROM files WHERE path=?1 AND size=?2 AND mtime=?3", + params![path, i64::try_from(size)?, mtime_ns], + |r| r.get(0), + ) + .optional()?; + let id = id.context("Media metadata file changed since indexing")?; + tx.execute("INSERT INTO media_metadata(path,file_id,tags,duration_ms) VALUES(?1,?2,?3,?4) ON CONFLICT(path) DO UPDATE SET tags=excluded.tags,duration_ms=excluded.duration_ms",params![path,id,tags,duration_ms])?; + tx.commit()?; + Ok(()) + } + /// Refresh candidate-frequency statistics off the foreground search path. /// Stale/missing estimates can affect speed, never literal-match correctness. /// The app invokes this during background startup and after reconciliation. @@ -465,6 +506,56 @@ impl SearchIndex { limit: usize, options: &SearchOptions, ) -> Result> { + let mut trace = TraceCollector::new(MetricsMode::Basic); + self.search_with_options_traced(query, limit, options, &mut trace, None) + } + pub fn search_measured( + &self, + query: &str, + limit: usize, + debug: bool, + ) -> Result> { + self.search_with_options_measured(query, limit, &SearchOptions::default(), debug) + } + pub fn search_with_options_measured( + &self, + query: &str, + limit: usize, + options: &SearchOptions, + debug: bool, + ) -> Result> { + let mut trace = TraceCollector::new(if debug { + MetricsMode::Debug + } else { + MetricsMode::Basic + }); + let results = self.search_with_options_traced(query, limit, options, &mut trace, None)?; + let metrics = trace.finish(results.len()); + Ok(SearchResponse { results, metrics }) + } + /// Share one monotonic request collector with downstream retrieval lanes. + pub fn search_with_options_traced( + &self, + query: &str, + limit: usize, + options: &SearchOptions, + trace: &mut TraceCollector, + parent: Option, + ) -> Result> { + trace.timed("lexical.search", parent, |trace, parent| { + self.search_inner(query, limit, options, trace, parent) + }) + } + fn search_inner( + &self, + query: &str, + limit: usize, + options: &SearchOptions, + trace: &mut TraceCollector, + parent: Option, + ) -> Result> { + let normalization = trace.begin("lexical.normalization", parent); + if options .min_size .zip(options.max_size) @@ -479,6 +570,13 @@ impl SearchIndex { { bail!("modified-after exceeds modified-before"); } + if options + .min_duration_ms + .zip(options.max_duration_ms) + .is_some_and(|(a, b)| a > b) + { + bail!("Minimum duration exceeds maximum duration"); + } let folder = options .folder .as_ref() @@ -518,11 +616,16 @@ impl SearchIndex { .map(|term| format!("\"{}\"", term.replace('"', "\"\""))) .collect::>() .join(" AND "); + trace.counter(normalization, "query_bytes", query.len() as u64); + trace.end(normalization, Default::default()); + let planning = trace.begin("lexical.candidate_plan", parent); let limit = limit.min(MAX_RESULTS); let filters = " AND (?3 IS NULL OR substr(f.path,1,length(?3))=?3) AND (?4 IS NULL OR f.extension=?4) AND (?5 IS NULL OR f.size>=?5) AND (?6 IS NULL OR f.size<=?6) - AND (?7 IS NULL OR f.mtime/1000000>=?7) AND (?8 IS NULL OR f.mtime/1000000<=?8)"; + AND (?7 IS NULL OR f.mtime/1000000>=?7) AND (?8 IS NULL OR f.mtime/1000000<=?8) + AND (?10 IS NULL OR EXISTS(SELECT 1 FROM media_metadata m WHERE m.file_id=f.id AND m.duration_ms>=?10)) + AND (?11 IS NULL OR EXISTS(SELECT 1 FROM media_metadata m WHERE m.file_id=f.id AND m.duration_ms<=?11))"; let filter_values = [ folder_prefix.map_or(Value::Null, Value::Text), extension.map_or(Value::Null, Value::Text), @@ -535,7 +638,9 @@ impl SearchIndex { .modified_before_unix_ms .map_or(Value::Null, Value::Integer), ]; - let has_filters = filter_values.iter().any(|value| *value != Value::Null); + let has_filters = filter_values.iter().any(|value| *value != Value::Null) + || options.min_duration_ms.is_some() + || options.max_duration_ms.is_some(); let mut results = Vec::new(); let mut selected = Vec::::new(); // Each lane filters its entire candidate set before LIMIT. There is no @@ -561,13 +666,17 @@ impl SearchIndex { if cache.len() + grams.len() > 4096 { cache.clear(); } + let mut frequency_hits = 0u64; + let mut frequency_misses = 0u64; let mut rare_first = grams .into_iter() .map(|gram| { let term = gram.to_lowercase(); let frequency = if let Some(frequency) = cache.get(&term) { + frequency_hits += 1; *frequency } else { + frequency_misses += 1; let frequency = vocabulary .query_row([&term], |row| row.get::<_, i64>(0)) .optional()? @@ -581,6 +690,9 @@ impl SearchIndex { rare_first.sort(); drop(cache); let anchor = substring_anchor(&characters, &rare_first); + trace.counter(planning, "frequency_cache_hits", frequency_hits); + trace.counter(planning, "frequency_cache_misses", frequency_misses); + trace.counter(planning, "trigram_index", u64::from(trigram)); let grams = format!("\"{}\"", anchor.replace('"', "\"\"")); let mut lanes = vec![ ( @@ -648,10 +760,30 @@ impl SearchIndex { "rank,f.id", )); } + lanes.push(( + "media_metadata", + "media_tags CROSS JOIN files f ON f.id=media_tags.rowid".into(), + "media_tags MATCH ?1".into(), + fts.clone(), + "rank,f.id", + )); + trace.end(planning, Default::default()); for (kind, from, condition, expression, ordering) in lanes { if results.len() == limit { break; } + let lane = trace.begin( + match kind { + "exact_filename" => "lexical.exact_filename", + "filename" => "lexical.filename_substring", + "path" => "lexical.path_substring", + "name_terms" => "lexical.filename_terms", + "content" => "lexical.content", + "media_metadata" => "lexical.media_metadata", + _ => "lexical.other", + }, + parent, + ); let exclusions = if selected.is_empty() { String::new() } else { @@ -664,12 +796,14 @@ impl SearchIndex { .join(",") ) }; - let rank = if matches!(kind, "content" | "name_terms") { + let rank = if matches!(kind, "content" | "name_terms" | "media_metadata") { "rank" } else { "0.0" }; - let snippet = if kind == "content" { + let snippet = if kind == "media_metadata" { + "snippet(media_tags,0,'','',' … ',24)" + } else if kind == "content" { "snippet(content_search,0,'','',' … ',24)" } else if kind == "name_terms" { "snippet(search,2,'','',' … ',24)" @@ -698,6 +832,20 @@ impl SearchIndex { let mut values = vec![Value::Text(expression), Value::Text(query.into())]; values.extend(filter_values.iter().cloned()); values.push(Value::Integer((limit - results.len()) as i64)); + if sql.contains("?10") { + values.push( + options + .min_duration_ms + .map_or(Value::Null, |v| Value::Integer(i64::from(v))), + ); + values.push( + options + .max_duration_ms + .map_or(Value::Null, |v| Value::Integer(i64::from(v))), + ); + } + let sql_span = trace.begin("lexical.filtered_sql", lane); + trace.counter(sql_span, "filters_active", u64::from(has_filters)); let mut statement = self.connection.prepare(&sql)?; let matches = statement .query_map(params_from_iter(values), |row| { @@ -715,12 +863,16 @@ impl SearchIndex { )) })? .collect::>>()?; + trace.counter(sql_span, "rows", matches.len() as u64); + trace.end(sql_span, Default::default()); for (id, result) in matches { selected.push(id); results.push(result); } + trace.end(lane, Default::default()); } if !results.is_empty() { + let source_span = trace.begin("lexical.source_locations", parent); // Ownership has a B-tree index. The rowid IN constraint intersects // the FTS postings with only the actual finalists' passage IDs. let placeholders = (0..results.len()) @@ -762,6 +914,9 @@ impl SearchIndex { result.snippet = snippet.clone(); } } + trace.counter(source_span, "files", results.len() as u64); + trace.counter(source_span, "matched_sources", sources.len() as u64); + trace.end(source_span, Default::default()); } Ok(results) } @@ -856,6 +1011,100 @@ fn substring_anchor(characters: &[char], frequencies: &[(i64, String)]) -> Strin #[cfg(test)] mod tests { + #[test] + fn measured_search_preserves_results_and_contains_private_free_nested_spans( + ) -> anyhow::Result<()> { + let directory = tempfile::tempdir()?; + let root = directory.path().join("sensitive-private-location"); + std::fs::create_dir(&root)?; + std::fs::write( + root.join("agreement.txt"), + "confidentialneedle cancellation policy", + )?; + let db = directory.path().join("index.db"); + let mut index = super::SearchIndex::open(&db)?; + index.index_folder(&root)?; + let basic = index.search_measured("confidentialneedle", 10, false)?; + let debug = index.search_measured("confidentialneedle", 10, true)?; + assert_eq!( + serde_json::to_value(&basic.results)?, + serde_json::to_value(&debug.results)? + ); + assert_eq!(basic.metrics.result_count, 1); + assert!(basic.metrics.trace.is_none()); + let spans = debug.metrics.trace.as_ref().unwrap(); + assert!(spans.iter().any(|s| s.name == "lexical.content")); + assert!(spans.iter().any(|s| s.name == "lexical.source_locations")); + for span in spans { + assert!(span.start_ms >= 0.0 && span.duration_ms >= 0.0); + assert!(span.start_ms + span.duration_ms <= debug.metrics.total_ms + 1e-6); + if let Some(parent) = span.parent { + let parent = &spans[parent]; + assert!(span.start_ms >= parent.start_ms); + assert!( + span.start_ms + span.duration_ms <= parent.start_ms + parent.duration_ms + 1e-6 + ); + } + } + let trace = serde_json::to_string(spans)?; + assert!(!trace.contains("confidentialneedle")); + assert!(!trace.contains("sensitive-private-location")); + Ok(()) + } + #[test] + fn genuine_media_tags_search_duration_filter_and_lifecycle() -> anyhow::Result<()> { + let directory = tempfile::tempdir()?; + let root = directory.path().join("music"); + std::fs::create_dir(&root)?; + let file = root.join("track.ogg"); + std::fs::write(&file, b"storage fixture")?; + let db = directory.path().join("index.db"); + let mut index = super::SearchIndex::open(&db)?; + index.index_folder(&root)?; + let path = file.canonicalize()?.to_string_lossy().into_owned(); + let (size, mtime): (u64, i64) = index.connection.query_row( + "SELECT size,mtime FROM files WHERE path=?1", + [&path], + |r| Ok((r.get(0)?, r.get(1)?)), + )?; + index.set_media_metadata( + &path, + "artist: Kimiko Ishizaka\ntitle: Variatio 13 a 2 Clav.", + 180000, + size, + mtime, + )?; + let results = index.search("Kimiko Ishizaka", 10)?; + assert_eq!(results.len(), 1); + assert_eq!(results[0].match_kind, "media_metadata"); + assert!(results[0].snippet.contains("Kimiko")); + let too_short = super::SearchOptions { + max_duration_ms: Some(100000), + ..Default::default() + }; + assert!(index + .search_with_options("track.ogg", 10, &too_short)? + .is_empty()); + let correct = super::SearchOptions { + min_duration_ms: Some(170000), + max_duration_ms: Some(190000), + ..Default::default() + }; + assert_eq!(index.search_with_options("Kimiko", 10, &correct)?.len(), 1); + drop(index); + let mut index = super::SearchIndex::open(&db)?; + assert_eq!(index.search("Variatio", 10)?.len(), 1); + std::fs::write(&file, b"changed file bytes")?; + index.index_folder(&root)?; + assert!(index.search("Kimiko", 10)?.is_empty()); + assert!(index + .set_media_metadata(&path, "stale", 180000, size, mtime) + .is_err()); + std::fs::remove_file(&file)?; + index.index_folder(&root)?; + assert!(index.search("Variatio", 10)?.is_empty()); + Ok(()) + } use super::*; #[test] fn persistence_updates_deletes_and_exact_priority() -> Result<()> { diff --git a/crates/searchi-core/src/metrics.rs b/crates/searchi-core/src/metrics.rs new file mode 100644 index 0000000..335a110 --- /dev/null +++ b/crates/searchi-core/src/metrics.rs @@ -0,0 +1,292 @@ +//! Monotonic request metrics. Stage names are static labels, never queries/paths. +use serde::{Deserialize, Serialize}; +use std::{ + collections::BTreeMap, + sync::atomic::{AtomicU64, Ordering}, + time::Instant, +}; +const MAX_SPANS: usize = 512; +static COLLECTOR_ID: AtomicU64 = AtomicU64::new(1); + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SearchResponse { + pub results: Vec, + pub metrics: SearchMetrics, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SearchMetrics { + pub total_ms: f64, + pub result_count: usize, + pub trace: Option>, + #[serde(default)] + pub dropped_spans: u64, +} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SearchSpan { + pub name: String, + pub start_ms: f64, + pub duration_ms: f64, + pub parent: Option, + pub counters: BTreeMap, +} +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MetricsMode { + Basic, + Debug, +} +#[derive(Debug, Clone, Copy)] +pub struct SpanToken { + collector: u64, + index: usize, +} +impl SpanToken { + pub fn index(self) -> usize { + self.index + } +} +struct OpenSpan { + value: SearchSpan, + started: Instant, + ended: bool, +} +struct DebugTrace { + id: u64, + spans: Vec, + dropped: u64, +} +/// Basic mode stores only one Instant: no span Vec or stage/counter allocation. +pub struct TraceCollector { + started: Instant, + debug: Option, +} +impl TraceCollector { + pub fn new(mode: MetricsMode) -> Self { + Self { + started: Instant::now(), + debug: match mode { + MetricsMode::Basic => None, + MetricsMode::Debug => Some(DebugTrace { + id: COLLECTOR_ID.fetch_add(1, Ordering::Relaxed), + spans: Vec::new(), + dropped: 0, + }), + }, + } + } + pub fn elapsed_ms(&self) -> f64 { + self.started.elapsed().as_secs_f64() * 1000.0 + } + pub fn is_debug(&self) -> bool { + self.debug.is_some() + } + pub fn begin(&mut self, name: &'static str, parent: Option) -> Option { + let debug = self.debug.as_mut()?; + let parent_index = match parent { + Some(token) + if token.collector == debug.id + && debug.spans.get(token.index).is_some_and(|span| !span.ended) => + { + Some(token.index) + } + Some(_) => { + debug.dropped = debug.dropped.saturating_add(1); + return None; + } + None => None, + }; + if debug.spans.len() >= MAX_SPANS { + debug.dropped = debug.dropped.saturating_add(1); + return None; + } + let started = Instant::now(); + let index = debug.spans.len(); + debug.spans.push(OpenSpan { + value: SearchSpan { + name: name.chars().take(96).collect(), + start_ms: started.duration_since(self.started).as_secs_f64() * 1000.0, + duration_ms: 0.0, + parent: parent_index, + counters: BTreeMap::new(), + }, + started, + ended: false, + }); + Some(SpanToken { + collector: debug.id, + index, + }) + } + /// Invalid/previously ended tokens are harmless. Closing a parent also + /// closes open descendants at the same instant, preserving containment. + pub fn end(&mut self, token: Option, counters: BTreeMap) { + let Some(token) = token else { + return; + }; + let Some(debug) = self.debug.as_mut() else { + return; + }; + if token.collector != debug.id + || token.index >= debug.spans.len() + || debug.spans[token.index].ended + { + return; + } + let now = Instant::now(); + for index in token.index..debug.spans.len() { + let mut ancestor = Some(index); + let mut contained = false; + while let Some(current) = ancestor { + if current == token.index { + contained = true; + break; + } + ancestor = debug.spans[current].value.parent; + } + if contained && !debug.spans[index].ended { + let span = &mut debug.spans[index]; + span.value.duration_ms = now.duration_since(span.started).as_secs_f64() * 1000.0; + span.ended = true; + } + } + // At most32 distinct bounded keys; callers should use static diagnostic + // names and counts, never source text or paths. + let stored = &mut debug.spans[token.index].value.counters; + for (key, value) in counters.into_iter().take(32) { + let key: String = key.chars().take(96).collect(); + if stored.len() < 32 || stored.contains_key(&key) { + stored.insert(key, value); + } + } + } + pub fn counter(&mut self, token: Option, name: &'static str, value: u64) { + let Some(token) = token else { + return; + }; + let Some(debug) = self.debug.as_mut() else { + return; + }; + if token.collector != debug.id { + return; + } + let Some(span) = debug.spans.get_mut(token.index) else { + return; + }; + if span.value.counters.len() < 32 || span.value.counters.contains_key(name) { + span.value + .counters + .insert(name.chars().take(96).collect(), value); + } + } + /// Return the closure's value unchanged, including any Result error. + /// The closure receives its parent token for safe nested instrumentation. + pub fn timed( + &mut self, + name: &'static str, + parent: Option, + run: impl FnOnce(&mut Self, Option) -> R, + ) -> R { + let token = self.begin(name, parent); + let value = run(self, token); + self.end(token, BTreeMap::new()); + value + } + pub fn finish(mut self, result_count: usize) -> SearchMetrics { + let now = Instant::now(); + if let Some(debug) = self.debug.as_mut() { + for span in &mut debug.spans { + if !span.ended { + span.value.duration_ms = + now.duration_since(span.started).as_secs_f64() * 1000.0; + span.ended = true; + } + } + } + let (trace, dropped_spans) = match self.debug { + Some(debug) => ( + Some(debug.spans.into_iter().map(|span| span.value).collect()), + debug.dropped, + ), + None => (None, 0), + }; + SearchMetrics { + total_ms: now.duration_since(self.started).as_secs_f64() * 1000.0, + result_count, + trace, + dropped_spans, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn nesting_contains_children_and_preserves_error() { + let mut trace = TraceCollector::new(MetricsMode::Debug); + let result: Result<(), &str> = trace.timed("request", None, |trace, parent| { + trace.timed("index", parent, |trace, child| { + trace.counter(child, "rows", 7); + Err("failure") + }) + }); + assert_eq!(result, Err("failure")); + let metrics = trace.finish(0); + let spans = metrics.trace.unwrap(); + assert_eq!(spans[1].parent, Some(0)); + assert_eq!(spans[1].counters["rows"], 7); + assert!(spans[1].start_ms >= spans[0].start_ms); + assert!( + spans[1].start_ms + spans[1].duration_ms + <= spans[0].start_ms + spans[0].duration_ms + 1e-6 + ); + assert!(metrics.total_ms >= spans[0].start_ms + spans[0].duration_ms - 1e-6); + } + #[test] + fn basic_disables_stage_storage_and_preserves_counts() { + let mut trace = TraceCollector::new(MetricsMode::Basic); + assert!(!trace.is_debug()); + assert!(trace.begin("unused", None).is_none()); + assert_eq!(trace.timed("unused", None, |_, _| 42), 42); + let metrics = trace.finish(3); + assert_eq!(metrics.result_count, 3); + assert!(metrics.trace.is_none()); + assert_eq!(metrics.dropped_spans, 0); + } + #[test] + fn trace_is_capped_and_reports_dropped_spans() { + let mut trace = TraceCollector::new(MetricsMode::Debug); + for index in 0..520 { + let token = trace.begin("stage", None); + if index == 0 { + trace.counter(token, "existing", 99); + } + let counters = if index == 0 { + (0..40).map(|key| (format!("counter_{key}"), key)).collect() + } else { + BTreeMap::new() + }; + trace.end(token, counters); + } + let metrics = trace.finish(2); + let spans = metrics.trace.unwrap(); + assert_eq!(spans.len(), 512); + assert_eq!(spans[0].counters.len(), 32); + assert_eq!(spans[0].counters["existing"], 99); + assert_eq!(metrics.dropped_spans, 8); + } + #[test] + fn foreign_tokens_and_early_parent_close_are_safe() { + let mut one = TraceCollector::new(MetricsMode::Debug); + let mut two = TraceCollector::new(MetricsMode::Debug); + let root = one.begin("root", None); + let child = one.begin("child", root); + assert!(two.begin("foreign", root).is_none()); + one.end(root, BTreeMap::new()); + one.end(child, BTreeMap::new()); + let spans = one.finish(0).trace.unwrap(); + assert!( + spans[1].start_ms + spans[1].duration_ms + <= spans[0].start_ms + spans[0].duration_ms + 1e-6 + ); + } +} diff --git a/crates/searchi-media/Cargo.toml b/crates/searchi-media/Cargo.toml new file mode 100644 index 0000000..1ce5053 --- /dev/null +++ b/crates/searchi-media/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "searchi-media" +version.workspace = true +edition.workspace = true +license.workspace = true +description = "Bounded local CPU media probing and timestamp-preserving sampling" + +[dependencies] +anyhow.workspace = true +serde.workspace = true +serde_json.workspace = true +sha2 = "0.10" +tempfile = "3" +image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "bmp"] } diff --git a/crates/searchi-media/README.md b/crates/searchi-media/README.md new file mode 100644 index 0000000..40a7e50 --- /dev/null +++ b/crates/searchi-media/README.md @@ -0,0 +1,70 @@ +# Local media preparation + +`searchi-media` prepares actual files for the Google multimodal embedder. It +does not download programs or models and has no UI dependency. Callers supply +verified packaged FFmpeg/ffprobe paths through `FfmpegTools::new`, or explicitly +set both `SEARCHI_FFMPEG_PATH` and `SEARCHI_FFPROBE_PATH`. + +FFmpeg handles maintained codecs and container timestamps; serde parses its +bounded JSON, tempfile owns frame cleanup, and sha2 validates file identity. +The embedding crate uses the Rust image library for bounded raster decoding. +USearch supplies the service's persisted HNSW index; no codec or vector index +is reimplemented here. + +Every FFmpeg/ffprobe media input restricts protocols to `file,pipe`. A selected +local playlist cannot fetch HTTP/HTTPS/RTSP references. A real loopback-listener +regression verifies probing and both decoding paths never connect. This is a +protocol restriction, not a filesystem sandbox: explicitly selected files on +network-mounted drives still use their operating system's filesystem access. + +Windows VM tests use CPU only. Decoder commands specify one thread and +`-hwaccel none`; subprocess windows are hidden. Portable argument arrays avoid +shell interpretation. Production hardware decode and reliable CPU fallback +remain unimplemented; this crate does not silently enable accelerators. + +Supported images are PNG, JPEG, WebP and BMP (actual bounded embedding-library +decode, including EXIF orientation). AVIF, HEIC, TIFF, animated GIF and embedded +album artwork are not supported yet. Movie containers include MP4, MKV, MOV, +AVI, WebM, M4V, MPEG/MPG; audio includes MP3, FLAC, WAV, M4A, Ogg, Opus, AAC, +AIFF. Actual codec support comes from the packaged FFmpeg build. Unknown or +corrupt files remain filename-searchable with explicit indexing errors. + +Default limits: 16 GiB media input; four-hour known duration; 16 million source +video pixels; 45 seconds per decoder command; 64 KiB ffprobe JSON; 256 KiB +frame diagnostic output; 8 MiB encoded PNG frame. Images are separately limited +to 64 MiB input. Captured pipe output is bounded and timed processes are killed. +Process address-space sandboxing remains a release gate; these limits do not +guarantee a codec's internal allocations fit a fixed RAM ceiling. + +Video samples span the whole timeline at two-second intervals, becoming coarser +when the default 240 distributed-frame budget is reached. Up to 120 additional +scene-cut frames are captured within 1.5-second windows around sample anchors. +This is **partial visual coverage**, not exhaustive scene detection. Actual +decoded presentation timestamps are retained relative to container start. The +primary non-cover-art video stream is selected. Full images use model budget +280; video frames use 70. No fabricated captions are stored. + +The primary audio stream is decoded to mono 16 kHz PCM, embedded in 30-second +windows with two seconds of overlap. The complete stream is covered or the +600-window budget returns an explicit failure. Standalone music uses the same +real audio embedding; artist/title/album/genre tags are merged from genuine +stream and format metadata and stored separately for lexical search. Audio +embeddings are not transcripts; exact spoken-word retrieval is not provided. +Alternative language tracks and isolated channels remain a release gate. + +The service publishes text, image, video and audio vectors as one generation. +It persists origin and page/timestamp locations, policy/model fingerprints, +full file SHA at indexing, and size/mtime guards. Corrupt-file failures discard +that file's partial vectors and persist reasons. Model inference failure aborts +the generation. At query time only actual media candidate hits are stat-checked; +no corpus-wide hash/stat scan occurs. Changes preserving both size and mtime +cannot be detected by this fast guard; periodic content-hash reconciliation is +a release gate. Builds currently rebuild a complete generation, with a +100,000-vector / 10,000-media-file bound; unchanged-vector reuse is future work. + +Offline tests cover complete audio windows, frame budgets and identity changes. +The ignored `real_decoder_preserves_frame_timestamps_and_audio` test has been +executed successfully in the CPU Windows VM with provisioned FFmpeg 9.0.2. +It creates genuine FFV1/PCM media, validates decoded two-second PTS and actual +mono sine samples. Linux/macOS execution and installer codec/license delivery +have not been validated. diff --git a/crates/searchi-media/src/lib.rs b/crates/searchi-media/src/lib.rs new file mode 100644 index 0000000..067e9af --- /dev/null +++ b/crates/searchi-media/src/lib.rs @@ -0,0 +1,789 @@ +//! Local bounded media preparation. No network, model, executable installer, or +//! fabricated caption/transcript lives here. FFmpeg paths come from the caller. +//! +//! Video coverage is distributed sampling, not a guarantee that every scene is +//! represented. Audio windows cover the complete primary stream or return an +//! explicit budget error. Decoder process memory is not sandbox-limited yet. +use anyhow::{bail, ensure, Context, Result}; +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; +use std::{ + collections::BTreeMap, + fs::{self, File}, + io::Read, + path::{Path, PathBuf}, + process::{Command, Stdio}, + thread, + time::{Duration, Instant, UNIX_EPOCH}, +}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)] +pub enum MediaKind { + Image, + Video, + Audio, +} + +#[cfg(test)] +mod tests { + use super::*; + + fn fixture(duration_ms: u32) -> MediaProbe { + MediaProbe { + duration_ms, + start_ms: 0, + video_stream_index: 0, + width: 64, + height: 64, + has_video: true, + has_audio: true, + audio_start_ms: 0, + audio_end_ms: duration_ms, + tags: BTreeMap::new(), + } + } + + #[test] + fn audio_covers_tail_with_overlap_and_rejects_budget() -> Result<()> { + let probe = fixture(65_000); + let limits = MediaLimits::default(); + let windows = audio_windows(&probe, &limits)?; + assert_eq!( + windows.iter().map(|w| w.start_ms).collect::>(), + vec![0, 28_000, 56_000] + ); + assert_eq!(windows.last().unwrap().duration_ms, 9_000); + let tight = MediaLimits { + max_audio_windows: 2, + ..limits + }; + assert!(audio_windows(&probe, &tight).is_err()); + Ok(()) + } + + #[test] + fn finer_audio_windows_cover_long_movie_or_explicitly_reject() -> Result<()> { + let probe = fixture(3 * 60 * 60 * 1000); + let limits = MediaLimits { + audio_window_ms: 10_000, + audio_overlap_ms: 2000, + max_audio_windows: 1800, + ..Default::default() + }; + let windows = audio_windows(&probe, &limits)?; + assert_eq!(windows.first().unwrap().start_ms, 0); + let last = windows.last().unwrap(); + assert_eq!(last.start_ms + last.duration_ms, probe.duration_ms); + assert!(windows.len() >= 1300 && windows.len() <= 1440); + let too_small = MediaLimits { + max_audio_windows: 1000, + ..limits + }; + assert!(audio_windows(&probe, &too_small).is_err()); + Ok(()) + } + + #[test] + fn frame_budget_spans_entire_movie() -> Result<()> { + let probe = fixture(3_600_000); + let times = frame_times(&probe, &MediaLimits::default())?; + assert!(times.len() <= 240); + assert_eq!(times.first(), Some(&0)); + assert_eq!(times.last(), Some(&3_599_500)); + Ok(()) + } + + #[test] + fn identity_rejects_changes_and_oversized_input() -> Result<()> { + let temp = tempfile::tempdir()?; + let file = temp.path().join("audio.wav"); + fs::write(&file, b"first")?; + assert!(MediaIdentity::read(&file, 4).is_err()); + let identity = MediaIdentity::read(&file, 10)?; + fs::write(&file, b"changed size")?; + assert!(identity.ensure_unchanged().is_err()); + Ok(()) + } + + #[test] + #[ignore = "Requires explicitly provisioned CPU FFmpeg/ffprobe executables"] + fn decoder_rejects_network_references_inside_local_media() -> Result<()> { + let tools = FfmpegTools::from_environment()?.context("Set CPU decoder paths")?; + let listener = std::net::TcpListener::bind("127.0.0.1:0")?; + listener.set_nonblocking(true)?; + let temp = tempfile::tempdir()?; + let file = temp.path().join("local.m3u8"); + fs::write(&file,format!("#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-TARGETDURATION:2\n#EXTINF:2.0,\nhttp://{}/segment.ts\n#EXT-X-ENDLIST\n",listener.local_addr()?))?; + let limits = MediaLimits { + command_timeout: Duration::from_secs(3), + ..Default::default() + }; + let error = super::probe(&tools, &file, &limits).unwrap_err(); + assert!(format!("{error:#}").contains("whitelist"), "{error:#}"); + assert!(decode_frames(&tools, &file, &fixture(2000), 0, false, &limits).is_err()); + assert!(decode_audio( + &tools, + &file, + AudioWindow { + start_ms: 0, + duration_ms: 2000 + }, + &limits + ) + .is_err()); + match listener.accept() { + Err(error) if error.kind() == std::io::ErrorKind::WouldBlock => {} + other => panic!("Decoder attempted network connection: {other:?}"), + } + Ok(()) + } + + #[test] + #[ignore = "Requires explicitly provisioned CPU FFmpeg/ffprobe executables"] + fn real_decoder_preserves_frame_timestamps_and_audio() -> Result<()> { + let tools = FfmpegTools::from_environment()?.context("Set CPU decoder paths")?; + let temp = tempfile::tempdir()?; + let video = temp.path().join("fixture.mkv"); + let mut command = Command::new(&tools.ffmpeg); + command + .args([ + "-nostdin", + "-v", + "error", + "-threads", + "1", + "-f", + "lavfi", + "-i", + "color=c=red:s=64x64:r=10:d=4", + "-f", + "lavfi", + "-i", + "sine=frequency=440:sample_rate=16000:duration=4", + "-c:v", + "ffv1", + "-c:a", + "pcm_s16le", + "-threads", + "1", + "-y", + ]) + .arg(&video); + run(command, Duration::from_secs(30), 4096, 65536)?; + let limits = MediaLimits::default(); + let probe = probe(&tools, &video, &limits)?; + assert!(probe.has_video && probe.has_audio); + let frames = decode_frames(&tools, &video, &probe, 2000, false, &limits)?; + assert_eq!(frames.frames.len(), 1); + assert!((1900..=2100).contains(&frames.frames[0].timestamp_ms)); + let audio = decode_audio( + &tools, + &video, + AudioWindow { + start_ms: 1000, + duration_ms: 2000, + }, + &limits, + )?; + assert!((31_000..=32_000).contains(&audio.len())); + assert!(audio.iter().any(|x| x.abs() > 0.01)); + assert!(audio.iter().all(|x| x.is_finite() && x.abs() <= 1.0)); + let ogg = temp.path().join("overshoot.ogg"); + let mut command = Command::new(&tools.ffmpeg); + command + .args([ + "-nostdin", + "-v", + "error", + "-threads", + "1", + "-f", + "lavfi", + "-i", + "sine=frequency=440:sample_rate=44100:duration=31.123", + "-c:a", + "libvorbis", + "-metadata", + "artist=CPU decoder fixture", + "-threads", + "1", + "-y", + ]) + .arg(&ogg); + run(command, Duration::from_secs(30), 4096, 65536)?; + let music_probe = super::probe(&tools, &ogg, &limits)?; + assert_eq!( + music_probe.tags.get("artist").map(String::as_str), + Some("CPU decoder fixture") + ); + let pcm = decode_audio( + &tools, + &ogg, + AudioWindow { + start_ms: 0, + duration_ms: 30000, + }, + &limits, + )?; + assert_eq!( + pcm.len(), + 480000, + "Vorbis packets must not overshoot model limit" + ); + Ok(()) + } +} + +pub fn classify(path: &Path) -> Option { + match path.extension()?.to_str()?.to_ascii_lowercase().as_str() { + "png" | "jpg" | "jpeg" | "webp" | "bmp" => Some(MediaKind::Image), + "mp4" | "mkv" | "mov" | "avi" | "webm" | "m4v" | "mpeg" | "mpg" => Some(MediaKind::Video), + "mp3" | "flac" | "wav" | "m4a" | "ogg" | "opus" | "aac" | "aiff" | "aif" => { + Some(MediaKind::Audio) + } + _ => None, + } +} + +/// Validate bounded raster decoding before treating model errors as fatal. +/// The provider still performs its own bounds and EXIF-aware preprocessing. +pub fn validate_image(path: &Path) -> Result<()> { + ensure!( + fs::metadata(path)?.len() <= 64 * 1024 * 1024, + "Image exceeds 64 MiB" + ); + let reader = image::ImageReader::open(path)?.with_guessed_format()?; + let (width, height) = reader.into_dimensions()?; + ensure!( + width <= 16384 && height <= 16384 && u64::from(width) * u64::from(height) <= 16_000_000, + "Image exceeds 16M pixels" + ); + let mut reader = image::ImageReader::open(path)?.with_guessed_format()?; + let mut limits = image::Limits::default(); + limits.max_alloc = Some(256 * 1024 * 1024); + limits.max_image_width = Some(16384); + limits.max_image_height = Some(16384); + reader.limits(limits); + use image::ImageDecoder; + let mut decoder = reader.into_decoder()?; + decoder + .orientation() + .context("Invalid image EXIF orientation")?; + image::DynamicImage::from_decoder(decoder).context("Image decoder rejected corrupt content")?; + Ok(()) +} + +#[derive(Debug, Clone)] +pub struct FfmpegTools { + pub ffmpeg: PathBuf, + pub ffprobe: PathBuf, +} +impl FfmpegTools { + pub fn new(ffmpeg: impl AsRef, ffprobe: impl AsRef) -> Result { + ensure!( + ffmpeg.as_ref().is_file() && ffprobe.as_ref().is_file(), + "FFmpeg/ffprobe executable is missing" + ); + Ok(Self { + ffmpeg: fs::canonicalize(ffmpeg)?, + ffprobe: fs::canonicalize(ffprobe)?, + }) + } + pub fn from_environment() -> Result> { + match ( + std::env::var_os("SEARCHI_FFMPEG_PATH"), + std::env::var_os("SEARCHI_FFPROBE_PATH"), + ) { + (None, None) => Ok(None), + (Some(ffmpeg), Some(ffprobe)) => Self::new(ffmpeg, ffprobe).map(Some), + _ => bail!("Set both SEARCHI_FFMPEG_PATH and SEARCHI_FFPROBE_PATH"), + } + } +} + +#[derive(Debug, Clone)] +pub struct MediaLimits { + pub max_file_bytes: u64, + pub max_duration_ms: u32, + pub max_frames: usize, + pub frame_interval_ms: u32, + pub max_scene_frames: usize, + pub audio_window_ms: u32, + pub audio_overlap_ms: u32, + pub max_audio_windows: usize, + pub command_timeout: Duration, +} +impl Default for MediaLimits { + fn default() -> Self { + Self { + max_file_bytes: 16 * 1024 * 1024 * 1024, + max_duration_ms: 4 * 60 * 60 * 1000, + max_frames: 240, + frame_interval_ms: 2000, + max_scene_frames: 120, + audio_window_ms: 30_000, + audio_overlap_ms: 2000, + max_audio_windows: 600, + command_timeout: Duration::from_secs(45), + } + } +} + +#[derive(Debug, Clone, Serialize)] +pub struct MediaIdentity { + pub path: PathBuf, + pub bytes: u64, + pub modified_ns: i64, + pub sha256: String, +} +impl MediaIdentity { + pub fn read(path: &Path, maximum: u64) -> Result { + let file = File::open(path)?; + let before = file.metadata()?; + ensure!( + before.len() <= maximum, + "Media file exceeds {maximum} bytes" + ); + let modified_ns = modified_ns(&before)?; + let mut reader = file.take(maximum.saturating_add(1)); + let mut buffer = [0u8; 65536]; + let mut hash = Sha256::new(); + let mut count = 0u64; + loop { + let read = reader.read(&mut buffer)?; + if read == 0 { + break; + } + count += read as u64; + ensure!(count <= maximum, "Media grew past file budget"); + hash.update(&buffer[..read]); + } + let identity = Self { + path: fs::canonicalize(path)?, + bytes: count, + modified_ns, + sha256: format!("{:x}", hash.finalize()), + }; + ensure!(count == before.len(), "Media changed while fingerprinting"); + identity.ensure_unchanged()?; + Ok(identity) + } + pub fn ensure_unchanged(&self) -> Result<()> { + let metadata = fs::metadata(&self.path)?; + ensure!( + metadata.len() == self.bytes && modified_ns(&metadata)? == self.modified_ns, + "Media changed during indexing" + ); + Ok(()) + } +} +fn modified_ns(metadata: &fs::Metadata) -> Result { + i64::try_from(metadata.modified()?.duration_since(UNIX_EPOCH)?.as_nanos()) + .context("Unsupported media timestamp") +} + +#[derive(Debug, Clone, Serialize)] +pub struct MediaProbe { + pub duration_ms: u32, + pub start_ms: i64, + pub video_stream_index: u32, + pub width: u32, + pub height: u32, + pub has_video: bool, + pub has_audio: bool, + pub audio_start_ms: u32, + pub audio_end_ms: u32, + pub tags: BTreeMap, +} +#[derive(Deserialize)] +struct ProbeJson { + #[serde(default)] + streams: Vec, + format: ProbeFormat, +} +#[derive(Deserialize)] +struct ProbeFormat { + duration: String, + #[serde(default)] + start_time: Option, + #[serde(default)] + tags: BTreeMap, +} +#[derive(Deserialize)] +struct ProbeStream { + index: u32, + codec_type: String, + #[serde(default)] + width: u32, + #[serde(default)] + height: u32, + #[serde(default)] + duration: Option, + #[serde(default)] + start_time: Option, + #[serde(default)] + tags: BTreeMap, + #[serde(default)] + disposition: BTreeMap, +} +fn milliseconds(value: &str) -> Result { + let value: f64 = value.parse()?; + ensure!( + value.is_finite() && value.abs() < 100_000_000.0, + "Invalid media duration/timestamp" + ); + Ok((value * 1000.0).round() as i64) +} + +pub fn probe(tools: &FfmpegTools, path: &Path, limits: &MediaLimits) -> Result { + let mut command = Command::new(&tools.ffprobe); + command.args(["-protocol_whitelist", "file,pipe"]); + command + .args([ + "-v", + "error", + "-threads", + "1", + "-probesize", + "5000000", + "-analyzeduration", + "5000000", + "-show_streams", + "-show_format", + "-of", + "json", + ]) + .arg(path); + let output = run(command, limits.command_timeout, 65536, 65536)?; + let parsed: ProbeJson = + serde_json::from_slice(&output.stdout).context("Invalid ffprobe JSON")?; + let duration = milliseconds(&parsed.format.duration)?; + ensure!( + duration > 0 && duration <= i64::from(limits.max_duration_ms), + "Media duration exceeds policy or is unknown" + ); + let start = parsed + .format + .start_time + .as_deref() + .map(milliseconds) + .transpose()? + .unwrap_or(0); + let video = parsed.streams.iter().find(|stream| { + stream.codec_type == "video" && stream.disposition.get("attached_pic") != Some(&1) + }); + if let Some(video) = video { + ensure!( + u64::from(video.width) * u64::from(video.height) <= 16_000_000, + "Video dimensions exceed 16M pixels" + ); + } + let audio = parsed + .streams + .iter() + .find(|stream| stream.codec_type == "audio"); + let audio_start = audio + .and_then(|stream| stream.start_time.as_deref()) + .map(milliseconds) + .transpose()? + .unwrap_or(start) + - start; + let audio_length = audio + .and_then(|stream| stream.duration.as_deref()) + .map(milliseconds) + .transpose()? + .unwrap_or(duration); + let mut tags = parsed.format.tags; + for stream in &parsed.streams { + for (key, value) in &stream.tags { + tags.entry(key.clone()).or_insert_with(|| value.clone()); + } + } + tags = tags + .into_iter() + .map(|(key, value)| { + ( + key.to_ascii_lowercase(), + value.chars().take(2048).collect::(), + ) + }) + .filter(|(key, _)| { + matches!( + key.as_str(), + "title" + | "artist" + | "album" + | "album_artist" + | "genre" + | "comment" + | "date" + | "composer" + | "description" + | "track" + ) + }) + .take(16) + .collect(); + Ok(MediaProbe { + duration_ms: duration as u32, + start_ms: start, + video_stream_index: video.map_or(0, |stream| stream.index), + width: video.map_or(0, |stream| stream.width), + height: video.map_or(0, |stream| stream.height), + has_video: video.is_some(), + has_audio: audio.is_some(), + audio_start_ms: audio_start.max(0) as u32, + audio_end_ms: (audio_start + audio_length).clamp(0, duration) as u32, + tags, + }) +} + +/// Uniform coverage is distributed over the entire movie; this is not a prefix +/// truncation. Scene probes may add extra local cuts around these anchors. +pub fn frame_times(probe: &MediaProbe, limits: &MediaLimits) -> Result> { + if !probe.has_video { + return Ok(Vec::new()); + } + ensure!( + limits.max_frames >= 2 && limits.max_frames <= 2000, + "Frame budget must be 2..2000" + ); + let last = probe.duration_ms.saturating_sub(500); + let interval = limits + .frame_interval_ms + .max(last.div_ceil((limits.max_frames - 1) as u32)) + .max(1); + let mut times = Vec::new(); + let mut time = 0; + while time < last { + times.push(time); + time = time.saturating_add(interval); + } + times.push(last); + ensure!( + times.len() <= limits.max_frames, + "Frame sampling budget exceeded" + ); + Ok(times) +} + +#[derive(Debug, Clone, Copy, Serialize)] +pub struct AudioWindow { + pub start_ms: u32, + pub duration_ms: u32, +} +pub fn audio_windows(probe: &MediaProbe, limits: &MediaLimits) -> Result> { + if !probe.has_audio { + return Ok(Vec::new()); + } + ensure!( + limits.audio_window_ms >= 5_000 + && limits.audio_window_ms <= 30_000 + && limits.audio_overlap_ms < limits.audio_window_ms, + "Invalid audio window policy" + ); + let step = limits.audio_window_ms - limits.audio_overlap_ms; + let mut windows = Vec::new(); + let mut start = probe.audio_start_ms; + while start < probe.audio_end_ms { + ensure!( + windows.len() < limits.max_audio_windows, + "Whole audio coverage exceeds window budget; no partial index produced" + ); + windows.push(AudioWindow { + start_ms: start, + duration_ms: limits.audio_window_ms.min(probe.audio_end_ms - start), + }); + if start + limits.audio_window_ms >= probe.audio_end_ms { + break; + } + start = start.saturating_add(step); + } + Ok(windows) +} + +pub struct DecodedFrame { + pub path: PathBuf, + pub timestamp_ms: u32, +} +pub struct FrameBatch { + directory: tempfile::TempDir, + pub frames: Vec, +} +impl FrameBatch { + pub fn directory(&self) -> &Path { + self.directory.path() + } +} +pub fn decode_frames( + tools: &FfmpegTools, + path: &Path, + probe: &MediaProbe, + start_ms: u32, + include_scene: bool, + limits: &MediaLimits, +) -> Result { + let directory = tempfile::tempdir()?; + let mut command = Command::new(&tools.ffmpeg); + command.args(["-protocol_whitelist", "file,pipe"]); + command.args(["-nostdin","-hide_banner","-loglevel","info","-threads","1","-hwaccel","none","-copyts","-ss"]) + .arg(format!("{:.3}",f64::from(start_ms)/1000.0)).args(["-t",if include_scene {"1.5"} else {"0.5"},"-i"]).arg(path) + .arg("-map").arg(format!("0:{}",probe.video_stream_index)).args(["-an","-filter_threads","1","-vf"]) + .arg(if include_scene {"select=eq(n\\,0)+gt(scene\\,0.32),showinfo,scale=960:960:force_original_aspect_ratio=decrease"} + else {"showinfo,scale=960:960:force_original_aspect_ratio=decrease"}) + .args(["-frames:v",if include_scene {"2"} else {"1"},"-fps_mode","vfr","-threads","1","-y"]) + .arg(directory.path().join("frame-%02d.png")); + let output = run(command, limits.command_timeout, 4096, 256 * 1024)?; + let mut timestamps = Vec::new(); + for line in String::from_utf8_lossy(&output.stderr).lines() { + if line.contains("showinfo") { + if let Some((_, tail)) = line.split_once("pts_time:") { + let value = tail + .split_whitespace() + .next() + .context("Missing frame PTS")?; + let actual = (milliseconds(value)? - probe.start_ms).max(0); + ensure!( + actual <= i64::from(probe.duration_ms) + 1000, + "Frame PTS lies beyond media timeline" + ); + timestamps.push(actual as u32); + } + } + } + let mut frames = Vec::new(); + for ordinal in 1..=if include_scene { 2 } else { 1 } { + let file = directory.path().join(format!("frame-{ordinal:02}.png")); + if file.is_file() { + ensure!( + fs::metadata(&file)?.len() <= 8 * 1024 * 1024, + "Decoded frame exceeds 8MiB" + ); + let timestamp_ms = *timestamps + .get(ordinal - 1) + .context("Decoder did not report genuine frame PTS")?; + frames.push(DecodedFrame { + path: file, + timestamp_ms, + }); + } + } + ensure!( + !frames.is_empty(), + "Decoder produced no frame at requested timeline position" + ); + Ok(FrameBatch { directory, frames }) +} + +pub fn decode_audio( + tools: &FfmpegTools, + path: &Path, + window: AudioWindow, + limits: &MediaLimits, +) -> Result> { + ensure!( + window.duration_ms > 0 && window.duration_ms <= 30_000, + "Audio decode window exceeds 30 seconds" + ); + let mut command = Command::new(&tools.ffmpeg); + command.args(["-protocol_whitelist", "file,pipe"]); + command + .args([ + "-nostdin", + "-hide_banner", + "-v", + "error", + "-threads", + "1", + "-ss", + ]) + .arg(format!("{:.3}", f64::from(window.start_ms) / 1000.0)) + .args(["-t"]) + .arg(format!("{:.3}", f64::from(window.duration_ms) / 1000.0)) + .arg("-i") + .arg(path) + .arg("-af") + .arg(format!( + "aresample=16000,atrim=end_sample={},asetpts=PTS-STARTPTS", + u64::from(window.duration_ms) * 16 + )) + .args([ + "-map", "0:a:0", "-vn", "-ac", "1", "-ar", "16000", "-threads", "1", "-f", "s16le", + "pipe:1", + ]); + let output = run(command, limits.command_timeout, 960_000, 65536)?; + ensure!( + !output.stdout.is_empty() && output.stdout.len() % 2 == 0, + "Empty or invalid decoded PCM audio" + ); + Ok(output + .stdout + .as_chunks::<2>() + .0 + .iter() + .map(|bytes| f32::from(i16::from_le_bytes([bytes[0], bytes[1]])) / 32768.0) + .collect()) +} + +struct Output { + stdout: Vec, + stderr: Vec, +} +fn run( + mut command: Command, + timeout: Duration, + stdout_limit: usize, + stderr_limit: usize, +) -> Result { + #[cfg(windows)] + { + use std::os::windows::process::CommandExt; + command.creation_flags(0x08000000); + } + let mut child = command + .stdin(Stdio::null()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + .context("Launch configured FFmpeg tool")?; + let stdout = child.stdout.take().context("Missing decoder stdout")?; + let stderr = child.stderr.take().context("Missing decoder stderr")?; + let read = |reader: Box, limit: usize| { + thread::spawn(move || -> Result> { + let mut bytes = Vec::new(); + reader.take(limit as u64 + 1).read_to_end(&mut bytes)?; + ensure!(bytes.len() <= limit, "Decoder output exceeded byte budget"); + Ok(bytes) + }) + }; + let out = read(Box::new(stdout), stdout_limit); + let err = read(Box::new(stderr), stderr_limit); + let start = Instant::now(); + let status = loop { + if let Some(status) = child.try_wait()? { + break Some(status); + } + if start.elapsed() > timeout { + child.kill()?; + child.wait()?; + break None; + } + thread::sleep(Duration::from_millis(10)); + }; + let stdout = out + .join() + .map_err(|_| anyhow::anyhow!("Decoder stdout reader panicked"))??; + let stderr = err + .join() + .map_err(|_| anyhow::anyhow!("Decoder stderr reader panicked"))??; + let status = status.context("Decoder exceeded time budget")?; + ensure!( + status.success(), + "Decoder failed: {}", + String::from_utf8_lossy(&stderr) + .chars() + .take(2048) + .collect::() + ); + Ok(Output { stdout, stderr }) +} diff --git a/crates/searchi-semantic/Cargo.toml b/crates/searchi-semantic/Cargo.toml index fae1a2d..49d0dc3 100644 --- a/crates/searchi-semantic/Cargo.toml +++ b/crates/searchi-semantic/Cargo.toml @@ -11,6 +11,9 @@ minilm-proof = ["dep:ort", "dep:tokenizers"] [dependencies] anyhow.workspace = true +base64 = "0.22" +image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "bmp"] } +jpeg-decoder = { version = "0.3.2", default-features = false } ort = { version = "=2.0.0-rc.13", optional = true, default-features = false, features = ["std", "load-dynamic", "api-27"] } sha2 = "0.10" tokenizers = { version = "=0.22.2", optional = true, default-features = false, features = ["fancy-regex"] } diff --git a/crates/searchi-semantic/README.md b/crates/searchi-semantic/README.md new file mode 100644 index 0000000..5a8a634 --- /dev/null +++ b/crates/searchi-semantic/README.md @@ -0,0 +1,44 @@ +# Google worker image decoding + +The production adapter verifies model/projector SHA256 and performs genuine +Google MTMD image/audio inference. Images are decoded with established Rust +libraries, not filename captions. `WorkerInfo.media_supported` comes from the +native handshake; absent fields on older text workers mean false. Media APIs +return an explicit runtime repair error for such workers while text remains +compatible. + +JPEG sources up to 64 Mi pixels (including 48 MP camera photos), 16,384 pixels +per side, and 64 MiB compressed size are supported. For JPEG above 16 Mi pixels, +`image-rs/jpeg-decoder` 0.3.2 applies scaled IDCT before final model resizing. +Its default features are disabled, so this path adds no Rayon worker pool. +The source dimensions are checked before pixels are decoded. The secondary +header must match the first to detect file changes. RGB24 and grayscale camera +JPEGs are supported on this scaled path; unusual large CMYK/16-bit JPEGs fail +explicitly rather than silently taking an unbounded full-resolution fallback. + +The published decoder offers 1/8, 1/4, 1/2, and full-scale decoding. It is in +maintenance mode; the current image 0.25 zune JPEG adapter exposes no scaled +IDCT interface. See the [decoder API](https://docs.rs/jpeg-decoder/0.3.2/jpeg_decoder/struct.Decoder.html) +and [upstream maintenance note](https://github.com/image-rs/jpeg-decoder). +Small JPEGs retain the existing image/zune path and pinned parity behavior. + +PNG, WebP, and BMP remain capped at 16 Mi pixels with explicit diagnostics. +Both paths enforce a 256 MiB advertised decoding-buffer ceiling and apply +EXIF orientation. That ceiling is a buffer/output bound, not an absolute +process RSS guarantee: compressed data, codec working state, and resizing +have additional allocations. Extreme/progressive files need broader resource +profiling. The media fingerprint includes `largejpeg-scaled-v2`; generations +must additionally include visual token budget. Text fingerprints are unchanged. + +An executed Windows CPU release test encodes and decodes an actual 8000x6000 +JPEG with EXIF rotation, verifies orientation and region colors, and resizes it +to a 280-token grid. Decode plus resize took 176–220 ms and produced 672x912 +RGB (1,838,592 bytes). A sampled whole-test peak was 146.86 MiB, including +144 MB of source fixture construction; it is not a decoder-only measurement +or a semantic quality benchmark. An 81 MP JPEG header is rejected before +pixel decode in the default tests. + +```powershell +cargo test --release -p searchi-semantic large_phone_jpeg -- --ignored --nocapture +cargo test -p searchi-semantic --lib +``` \ No newline at end of file diff --git a/crates/searchi-semantic/native/CMakeLists.txt b/crates/searchi-semantic/native/CMakeLists.txt index f97a6e8..b3a92fc 100644 --- a/crates/searchi-semantic/native/CMakeLists.txt +++ b/crates/searchi-semantic/native/CMakeLists.txt @@ -41,11 +41,12 @@ set(LLAMA_BUILD_TOOLS OFF CACHE BOOL "No runtime tools" FORCE) set(LLAMA_BUILD_SERVER OFF CACHE BOOL "No HTTP server" FORCE) set(LLAMA_BUILD_EXAMPLES OFF CACHE BOOL "No examples" FORCE) set(LLAMA_BUILD_TESTS OFF CACHE BOOL "No upstream tests in worker build" FORCE) -set(LLAMA_BUILD_MTMD OFF CACHE BOOL "Text worker; media encoder follows separately" FORCE) +set(LLAMA_BUILD_MTMD ON CACHE BOOL "Google image/audio projector" FORCE) +set(MTMD_VIDEO OFF CACHE BOOL "Frames decoded by bounded media adapter" FORCE) set(LLAMA_OPENSSL OFF CACHE BOOL "No network runtime dependencies" FORCE) add_subdirectory("${LLAMA_CPP_DIR}" llama-build) add_executable(searchi-gemma-worker worker.cpp) target_include_directories(searchi-gemma-worker PRIVATE "${LLAMA_CPP_DIR}/vendor") -target_link_libraries(searchi-gemma-worker PRIVATE llama) +target_link_libraries(searchi-gemma-worker PRIVATE llama mtmd) target_compile_definitions(searchi-gemma-worker PRIVATE SEARCHI_LLAMA_TAG="b11461-no-logits-v1") install(TARGETS searchi-gemma-worker RUNTIME DESTINATION bin) diff --git a/crates/searchi-semantic/native/worker.cpp b/crates/searchi-semantic/native/worker.cpp index dddfe22..5e8febc 100644 --- a/crates/searchi-semantic/native/worker.cpp +++ b/crates/searchi-semantic/native/worker.cpp @@ -1,11 +1,14 @@ // Local NDJSON helper around the pinned llama.cpp encoder. stdout is exclusively // protocol output; llama diagnostics go to stderr. No model download or HTTP. #include "llama.h" +#include "mtmd.h" #include "nlohmann/json.hpp" #include #include +#include #include #include +#include #include #include #include @@ -13,7 +16,7 @@ #include using json = nlohmann::json; -constexpr size_t max_request_bytes = 2 * 1024 * 1024; +constexpr size_t max_request_bytes = 16 * 1024 * 1024; constexpr size_t max_passage_bytes = 1024 * 1024; constexpr size_t max_text_bytes = 65536; constexpr size_t max_windows = 256; @@ -34,12 +37,14 @@ class Encoder { llama_context * context = nullptr; llama_batch_ext * batch = nullptr; const llama_vocab * vocab = nullptr; + mtmd_context * media = nullptr; std::string model_path; void release() { + if (media) mtmd_free(media); if (batch) llama_batch_ext_free(batch); if (context) llama_free(context); if (model) llama_model_free(model); - batch = nullptr; context = nullptr; model = nullptr; vocab = nullptr; + batch = nullptr; context = nullptr; model = nullptr; vocab = nullptr; media = nullptr; } bool open(bool gpu) { auto mp = llama_model_default_params(); @@ -68,6 +73,9 @@ public: llama_log_set([](ggml_log_level level, const char * text, void *) { if (level >= GGML_LOG_LEVEL_WARN) std::fputs(text,stderr); },nullptr); + mtmd_log_set([](ggml_log_level level, const char * text, void *) { + if (level >= GGML_LOG_LEVEL_WARN) std::fputs(text,stderr); + },nullptr); llama_backend_init(); bool use_gpu = want_gpu && llama_supports_gpu_offload(); require(open(use_gpu) || (use_gpu && open(false)),"Cannot initialize local EmbeddingGemma 2 model/context"); @@ -77,6 +85,52 @@ public: llama_backend_free(); } bool healthy() const {return context != nullptr && batch != nullptr;} + void ensure_media(const std::string & projector) { + if (media) return; + auto params = mtmd_context_params_default(); + params.use_gpu = device == "gpu"; params.n_threads = threads; + params.print_timings = false; params.warmup = false; + params.image_min_tokens = 1; params.image_max_tokens = 1120; + media = mtmd_init_from_file(projector.c_str(),model,params); + require_inference(media != nullptr,"Cannot initialize Google media projector"); + } + std::vector embed_bitmap(mtmd_bitmap * bitmap) { + std::unique_ptr chunks(mtmd_input_chunks_init(),mtmd_input_chunks_free); + require_inference(chunks != nullptr,"Cannot allocate media chunks"); + const char * marker = mtmd_default_marker(); + mtmd_input_text text{marker,std::strlen(marker),true,true}; + const mtmd_bitmap * bitmaps[] = {bitmap}; + require_inference(mtmd_tokenize(media,chunks.get(),&text,bitmaps,1) == 0,"Media tokenization failed"); + llama_batch_ext_clear(batch); size_t position = 0; + auto place = [&](int index) { + require_inference(index >= 0 && position < context_tokens,"Media batch exceeds context"); + llama_pos pos[4] = {llama_pos(position++),0,0,0}; + require_inference(llama_batch_ext_set_pos(batch,index,pos) && llama_batch_ext_set_output_embd(batch,index,true),"Cannot place media row"); + }; + for (size_t i=0;i0 && std::isfinite(norm),"Invalid media vector norm"); + std::vector vector(dimensions);for(int i=0;i embed(const std::string & text, int cap) { + std::vector embed(const std::string & text, int cap, json * timings = nullptr) { + using clock = std::chrono::steady_clock; + auto started = timings ? clock::now() : clock::time_point{}; + auto mark = [&](const char * name) { + if (timings) { + auto now = clock::now(); + (*timings)[name] = std::chrono::duration_cast(now-started).count(); + started = now; + } + }; require(!text.empty() && text.size() <= max_text_bytes, "Embedding text must be nonempty and at most 64 KiB"); auto tokens = tokenize(text,true); require(!tokens.empty() && tokens.size() <= size_t(cap), "Prompt exceeds model token budget; split document windows first"); + if (timings) (*timings)["token_count"] = tokens.size(); + mark("tokenization_us"); llama_batch_ext_clear(batch); for (size_t i = 0; i < tokens.size(); ++i) { int index = llama_batch_ext_add_token(batch,0,tokens[i]); @@ -115,7 +180,9 @@ public: require(llama_batch_ext_set_pos(batch,index,position), "Cannot set encoder position"); require(llama_batch_ext_set_output_embd(batch,index,true), "Cannot select embedding output"); } + mark("batch_prepare_us"); require_inference(llama_process(context,LLAMA_PROCESS_TYPE_ENCODE,batch) == 0, "llama_process encoder failed"); + mark("inference_us"); const float * pooled = llama_get_embeddings_seq(context,0); require_inference(pooled != nullptr, "Encoder returned no pooled vector"); double norm = 0; @@ -123,6 +190,7 @@ public: require_inference(norm > 0 && std::isfinite(norm), "Zero or nonfinite embedding norm"); std::vector vector(dimensions); for (int i = 0; i < dimensions; ++i) vector[i] = float(pooled[i]/std::sqrt(norm)); + mark("pool_normalize_us"); return vector; } json windows(const std::string & text, const std::string & title) const { @@ -157,8 +225,42 @@ public: } json handle(const json & request) { auto op = request.at("op").get(); + if(op=="image" || op=="audio") { + auto encoded=request.at("data").get(); + require(encoded.size()<=12000000 && encoded.size()%4==0,"Invalid media payload length"); + static const std::string alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + std::vector bytes; bytes.reserve(encoded.size()/4*3); + unsigned accumulator=0;int bits=0;bool padding=false; + for(char c:encoded){if(c=='='){padding=true;continue;} require(!padding,"Invalid base64 padding");auto n=alphabet.find(c);require(n!=std::string::npos,"Invalid base64");accumulator=(accumulator<<6)|unsigned(n);bits+=6;if(bits>=8){bits-=8;bytes.push_back(static_cast(accumulator>>bits));}} + auto projector=request.at("projector").get(); + require(!projector.empty() && projector.size()<32768,"Invalid projector path"); + ensure_media(projector); + mtmd_bitmap * raw=nullptr; + if(op=="image") { + int w=request.at("width"),h=request.at("height"); + require(w>=48 && h>=48 && w%48==0 && h%48==0 && uint64_t(w)*h<=1120*48*48,"Invalid bounded image dimensions"); + require(bytes.size()==size_t(w)*h*3,"RGB image length mismatch"); + raw=mtmd_bitmap_init(w,h,bytes.data()); + } else { + require(bytes.size()%4==0 && !bytes.empty() && bytes.size()/4<=30*16000,"Audio must be at most30seconds mono16kHz PCM"); + std::vector pcm(bytes.size()/4); + std::memcpy(pcm.data(),bytes.data(),bytes.size()); + for(float f:pcm)require(std::isfinite(f) && std::abs(f)<=1,"Audio PCM outside normalized range"); + raw=mtmd_bitmap_init_from_audio(pcm.size(),pcm.data()); + } + std::unique_ptr bitmap(raw,mtmd_bitmap_free); + require_inference(bitmap != nullptr,"Cannot allocate media bitmap"); + return {{"vectors",json::array({embed_bitmap(bitmap.get())})}}; + } if (op == "windows") return {{"windows",windows(request.at("text").get(),request.value("title",std::string()))}}; - if (op == "query") return {{"vectors",json::array({embed("task: search result | query: "+request.at("text").get(),512)})}}; + if (op == "query") { + bool debug = request.value("debug_performance",false); + json timings; + auto vector = embed("task: search result | query: "+request.at("text").get(),512,debug ? &timings : nullptr); + json response = {{"vectors",json::array({vector})}}; + if (debug) response["performance"] = timings; + return response; + } if (op == "documents") { const auto & texts = request.at("texts"); require(texts.is_array() && !texts.empty() && texts.size() <= 8,"Batch size must be between 1 and 8"); @@ -187,11 +289,11 @@ int main(int argc, char ** argv) { bool force_cpu = std::getenv("SEARCHI_FORCE_CPU") && std::string(std::getenv("SEARCHI_FORCE_CPU")) == "1"; Encoder encoder(path,threads,device == "auto" && !force_cpu); std::cout << json({{"ready",true},{"model","google/embeddinggemma-2"},{"dimensions",dimensions}, - {"device",encoder.device},{"threads",threads},{"runtime",SEARCHI_LLAMA_TAG}}).dump() << '\n' << std::flush; + {"device",encoder.device},{"threads",threads},{"runtime",SEARCHI_LLAMA_TAG},{"media_supported",true}}).dump() << '\n' << std::flush; for (;;) { std::string line; char c; while (std::cin.get(c) && c != '\n') { - require(line.size() < max_request_bytes,"Request exceeds 2 MiB"); line.push_back(c); + require(line.size() < max_request_bytes,"Request exceeds 16 MiB"); line.push_back(c); } if (!std::cin && line.empty()) break; json response; diff --git a/crates/searchi-semantic/src/gemma.rs b/crates/searchi-semantic/src/gemma.rs index cad2fd6..72b59ae 100644 --- a/crates/searchi-semantic/src/gemma.rs +++ b/crates/searchi-semantic/src/gemma.rs @@ -1,24 +1,35 @@ use crate::TextWindow; use anyhow::{ensure, Context, Result}; +use base64::Engine; use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; use sha2::{Digest, Sha256}; use std::{ + collections::BTreeMap, fs::File, io::{BufRead, BufReader, Read, Write}, path::{Path, PathBuf}, process::{Child, ChildStdin, Command, Stdio}, sync::mpsc::{self, Receiver}, thread, - time::Duration, + time::{Duration, Instant}, }; pub const GEMMA_DIMENSIONS: usize = 768; pub const GEMMA_FINGERPRINT: &str = "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mean:l2:query512:doc2048:windows-overlap128:prompts-v1"; +pub const GEMMA_MEDIA_FINGERPRINT: &str = "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mtmd:mean:l2:rgb-catmullrom48-exif-largejpeg-scaled-v2:pcm16k30s-v1"; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ImageEmbedding { + pub vector: Vec, + pub encoded_width: u32, + pub encoded_height: u32, + pub token_budget: u32, +} const MODEL_FILE: &str = "embeddinggemma-2-Q8_0.gguf"; const MODEL_BYTES: u64 = 309855456; const MODEL_SHA256: &str = "2188ac1deca4b77dffefd603c2776a9d76d9d74ec01841392982ebb840b09135"; -const MAX_REQUEST: usize = 2 * 1024 * 1024; +const MAX_REQUEST: usize = 16 * 1024 * 1024; const MAX_RESPONSE: usize = 4 * 1024 * 1024; #[derive(Debug, Clone, Copy)] @@ -35,6 +46,8 @@ pub struct WorkerInfo { pub device: String, pub threads: usize, pub runtime: String, + #[serde(default)] + pub media_supported: bool, } /// Persistent isolated native worker. No HTTP or remote model fallback. @@ -47,6 +60,8 @@ pub struct GemmaEmbedder { force_cpu: bool, model_dir: PathBuf, worker_path: PathBuf, + projector_verified: bool, + query_profile: Option>, } impl Drop for GemmaEmbedder { @@ -161,6 +176,8 @@ impl GemmaEmbedder { force_cpu: cpu, model_dir, worker_path: worker, + projector_verified: false, + query_profile: None, }) } @@ -169,10 +186,12 @@ impl GemmaEmbedder { self.healthy, "Gemma worker session failed; reopen it explicitly" ); + let encode_started = self.query_profile.as_ref().map(|_| Instant::now()); let encoded = serde_json::to_vec(&request)?; + self.record_query_duration("request_encode_us", encode_started); ensure!( encoded.len() < MAX_REQUEST, - "Gemma request exceeds 2 MiB protocol budget" + "Gemma request exceeds 16 MiB protocol budget" ); let response = match self.exchange(&encoded) { Ok(response) => response, @@ -180,6 +199,7 @@ impl GemmaEmbedder { // GPU runtimes can abort rather than return an encoder error. // Restart once as CPU and retry this same bounded request. let _ = self.child.wait(); + let restart_started = self.query_profile.as_ref().map(|_| Instant::now()); let replacement = Self::load_with_device( &self.model_dir, &self.worker_path, @@ -189,7 +209,13 @@ impl GemmaEmbedder { .with_context(|| { format!("CPU worker restart failed after GPU transport error: {error}") })?; + let diagnostics = self.query_profile.take(); *self = replacement; + self.query_profile = diagnostics; + self.record_query_duration("cpu_restart_us", restart_started); + if let Some(profile) = &mut self.query_profile { + profile.insert("cpu_restart_count".into(), 1); + } self.exchange(&encoded)? } Err(error) => return Err(error), @@ -201,6 +227,11 @@ impl GemmaEmbedder { ); self.info.device = device.into(); } + if response["fallback"].as_str() == Some("gpu_inference_failure") { + if let Some(profile) = &mut self.query_profile { + profile.insert("worker_cpu_retry_count".into(), 1); + } + } if response["fatal"] == true { self.healthy = false; self.info.ready = false; @@ -215,18 +246,21 @@ impl GemmaEmbedder { } fn exchange(&mut self, encoded: &[u8]) -> Result { + let write_started = self.query_profile.as_ref().map(|_| Instant::now()); let sent = (|| { self.stdin.write_all(encoded)?; self.stdin.write_all(b"\n")?; self.stdin.flush() })() .context("Cannot write local Gemma worker request"); + self.record_query_duration("request_write_us", write_started); if let Err(error) = sent { self.healthy = false; self.info.ready = false; let _ = self.child.kill(); return Err(error); } + let wait_started = self.query_profile.as_ref().map(|_| Instant::now()); let response = match self.responses.recv_timeout(Duration::from_secs(180)) { Ok(Ok(value)) => value, other => { @@ -236,6 +270,7 @@ impl GemmaEmbedder { anyhow::bail!("Gemma worker request failed: {other:?}"); } }; + self.record_query_duration("worker_wait_and_response_decode_us", wait_started); Ok(response) } @@ -281,15 +316,265 @@ impl GemmaEmbedder { } pub fn embed_query(&mut self, query: &str) -> Result> { + self.query_profile = None; + self.embed_query_inner(query, false) + } + + /// Opt-in diagnostics contain only durations and counts, never query text. + pub fn embed_query_debug(&mut self, query: &str) -> Result> { + self.query_profile = Some(BTreeMap::new()); + self.embed_query_inner(query, true) + } + + pub fn query_diagnostics(&self) -> BTreeMap { + self.query_profile.clone().unwrap_or_default() + } + + fn record_query_duration(&mut self, name: &str, started: Option) { + if let (Some(profile), Some(started)) = (&mut self.query_profile, started) { + let micros = started.elapsed().as_micros().min(u64::MAX as u128) as u64; + *profile.entry(name.into()).or_default() += micros; + } + } + + fn embed_query_inner(&mut self, query: &str, debug: bool) -> Result> { ensure!( !query.trim().is_empty() && query.len() <= 4096, "Query must be nonempty and at most 4096 UTF-8 bytes" ); - let response = self.request(json!({"op":"query","text":query}))?; + let response = + self.request(json!({"op":"query","text":query,"debug_performance":debug}))?; + if debug { + if let Some(profile) = &mut self.query_profile { + for name in [ + "tokenization_us", + "batch_prepare_us", + "inference_us", + "pool_normalize_us", + "token_count", + ] { + if let Some(value) = response["performance"][name].as_u64() { + profile.insert(format!("worker_{name}"), value); + } + } + } + } + let validation_started = self.query_profile.as_ref().map(|_| Instant::now()); + let result = extract_vectors(response, 1)?.remove(0); + self.record_query_duration("response_validate_us", validation_started); + Ok(result) + } + + fn projector(&mut self) -> Result { + ensure!( + self.info.media_supported, + "Installed embedding worker does not support media; repair/rebuild the native runtime" + ); + let path = self.model_dir.join("mmproj-embeddinggemma-2-Q8_0.gguf"); + if !self.projector_verified { + verify_artifact( + &path, + 554821024, + "c4a8a52691ecef40618438928bdf9e68379b854e24166f292592353db0aab64f", + )?; + self.projector_verified = true; + } + Ok(path) + } + + /// Genuine Google pixel embeddings, serial bounded image operations. + pub fn embed_images(&mut self, paths: &[&Path]) -> Result>> { + self.embed_images_with_budget(paths, 280) + } + + /// 70 tokens for video frames, 140 for photos, 280 or 1120 for screenshots. + pub fn embed_images_with_budget( + &mut self, + paths: &[&Path], + budget: u32, + ) -> Result>> { + Ok(self + .embed_images_with_metadata(paths, budget)? + .into_iter() + .map(|image| image.vector) + .collect()) + } + + pub fn embed_images_with_metadata( + &mut self, + paths: &[&Path], + budget: u32, + ) -> Result> { + ensure!( + !paths.is_empty() && paths.len() <= 8, + "Image batch must contain 1–8 paths" + ); + let projector = self.projector()?; + let mut vectors = Vec::with_capacity(paths.len()); + for path in paths { + let pixels = decode_image(path, budget)?; + let response=self.request(json!({"op":"image","projector":projector,"width":pixels.width(),"height":pixels.height(),"data":base64::engine::general_purpose::STANDARD.encode(pixels.as_raw())}))?; + vectors.push(ImageEmbedding { + vector: extract_vectors(response, 1)?.remove(0), + encoded_width: pixels.width(), + encoded_height: pixels.height(), + token_budget: budget, + }); + } + Ok(vectors) + } + + /// One mono 16 kHz normalized PCM window, at most 30 seconds. Callers + /// segment entire recordings and preserve real timestamps; no truncation. + pub fn embed_audio_pcm(&mut self, samples: &[f32]) -> Result> { + ensure!( + !samples.is_empty() && samples.len() <= 480000, + "Audio window must contain 1–480000 mono 16 kHz samples" + ); + ensure!( + samples.iter().all(|v| v.is_finite() && v.abs() <= 1.0), + "Invalid normalized audio PCM" + ); + ensure!( + cfg!(target_endian = "little"), + "Native PCM worker requires little-endian host" + ); + let projector = self.projector()?; + let bytes: Vec = samples.iter().flat_map(|v| v.to_le_bytes()).collect(); + let response=self.request(json!({"op":"audio","projector":projector,"data":base64::engine::general_purpose::STANDARD.encode(bytes)}))?; Ok(extract_vectors(response, 1)?.remove(0)) } } +fn decode_image(path: &Path, budget: u32) -> Result { + ensure!( + (70..=1120).contains(&budget), + "Image token budget must be 70–1120" + ); + ensure!( + std::fs::metadata(path)?.len() <= 64 * 1024 * 1024, + "Image file exceeds 64 MiB" + ); + let mut reader = image::ImageReader::open(path)?.with_guessed_format()?; + let is_jpeg = reader.format() == Some(image::ImageFormat::Jpeg); + let mut limits = image::Limits::default(); + limits.max_alloc = Some(256 * 1024 * 1024); + limits.max_image_width = Some(16384); + limits.max_image_height = Some(16384); + reader.limits(limits); + use image::ImageDecoder; + let mut decoder = reader + .into_decoder() + .context("Cannot initialize bounded image decoder")?; + let (source_width, source_height) = decoder.dimensions(); + ensure!( + u64::from(source_width) * u64::from(source_height) <= 64 * 1024 * 1024 + && decoder.total_bytes() <= 256 * 1024 * 1024, + "Decoded image exceeds memory/pixel budget" + ); + let orientation = decoder + .orientation() + .context("Cannot read image EXIF orientation")?; + if is_jpeg && u64::from(source_width) * u64::from(source_height) > 16 * 1024 * 1024 { + drop(decoder); + return decode_large_jpeg(path, budget, source_width, source_height, orientation); + } + ensure!(u64::from(source_width)*u64::from(source_height)<=16*1024*1024,"Non-JPEG image exceeds16megapixels; bounded scaled decoding is currently available for JPEG"); + let mut decoded = image::DynamicImage::from_decoder(decoder) + .context("Cannot decode supported image pixels")?; + decoded.apply_orientation(orientation); + ensure!( + u64::from(decoded.width()) * u64::from(decoded.height()) <= 16 * 1024 * 1024, + "Image exceeds 16 megapixels" + ); + let (w, h) = image_target(decoded.width(), decoded.height(), budget)?; + Ok(image::imageops::resize( + &decoded.to_rgb8(), + w, + h, + image::imageops::FilterType::CatmullRom, + )) +} + +fn decode_large_jpeg( + path: &Path, + budget: u32, + width: u32, + height: u32, + orientation: image::metadata::Orientation, +) -> Result { + let (target_width, target_height) = image_target(width, height, budget)?; + let mut decoder = jpeg_decoder::Decoder::new(BufReader::new(File::open(path)?)); + decoder.set_max_decoding_buffer_size(256 * 1024 * 1024); + decoder + .read_info() + .context("Cannot read scaled JPEG header")?; + let source = decoder.info().context("Missing scaled JPEG header")?; + ensure!( + u32::from(source.width) == width && u32::from(source.height) == height, + "JPEG changed during decoding" + ); + ensure!( + matches!( + source.pixel_format, + jpeg_decoder::PixelFormat::RGB24 | jpeg_decoder::PixelFormat::L8 + ), + "Large JPEG requires supported RGB24 or grayscale scaled decoding" + ); + let (w, h) = decoder.scale(u16::try_from(target_width)?, u16::try_from(target_height)?)?; + ensure!( + u64::from(w) * u64::from(h) * 4 <= 256 * 1024 * 1024, + "Scaled JPEG output exceeds memory budget" + ); + let pixels = decoder + .decode() + .context("Cannot decode large JPEG with scaled IDCT")?; + let mut decoded = match source.pixel_format { + jpeg_decoder::PixelFormat::RGB24 => image::DynamicImage::ImageRgb8( + image::RgbImage::from_raw(u32::from(w), u32::from(h), pixels) + .context("Invalid scaled JPEG RGB length")?, + ), + jpeg_decoder::PixelFormat::L8 => image::DynamicImage::ImageLuma8( + image::GrayImage::from_raw(u32::from(w), u32::from(h), pixels) + .context("Invalid scaled JPEG grayscale length")?, + ), + other => anyhow::bail!( + "Large JPEG pixel format {other:?} is not supported by bounded scaled decoder" + ), + }; + decoded.apply_orientation(orientation); + let (w, h) = image_target(decoded.width(), decoded.height(), budget)?; + Ok(image::imageops::resize( + &decoded.into_rgb8(), + w, + h, + image::imageops::FilterType::CatmullRom, + )) +} + +fn image_target(width: u32, height: u32, budget: u32) -> Result<(u32, u32)> { + ensure!( + width > 0 && height > 0 && (70..=1120).contains(&budget), + "Invalid image dimensions/budget" + ); + let scale = (f64::from(budget) * 2304.0 / (f64::from(width) * f64::from(height))).sqrt(); + let mut w = ((f64::from(width) * scale / 48.0).floor() as u32) * 48; + let mut h = ((f64::from(height) * scale / 48.0).floor() as u32) * 48; + if w == 0 { + w = 48; + h = (height / width * 48).min(budget * 48); + } + if h == 0 { + h = 48; + w = (width / height * 48).min(budget * 48); + } + ensure!( + w >= 48 && h >= 48 && u64::from(w) * u64::from(h) <= u64::from(budget) * 2304, + "Image target outside token budget" + ); + Ok((w, h)) +} + fn can_retry_cpu(actual_device: &str, force_cpu: bool) -> bool { actual_device == "gpu" && !force_cpu } @@ -331,6 +616,10 @@ fn extract_vectors(response: Value, count: usize) -> Result>> { } fn verify_model(path: &Path) -> Result<()> { + verify_artifact(path, MODEL_BYTES, MODEL_SHA256) +} + +fn verify_artifact(path: &Path, bytes: u64, sha: &str) -> Result<()> { let file = File::open(path).with_context(|| { format!( "Missing Google EmbeddingGemma 2 model {}; run explicit model setup first", @@ -338,7 +627,7 @@ fn verify_model(path: &Path) -> Result<()> { ) })?; ensure!( - file.metadata()?.len() == MODEL_BYTES, + file.metadata()?.len() == bytes, "EmbeddingGemma 2 model size mismatch" ); let mut reader = BufReader::new(file); @@ -352,7 +641,7 @@ fn verify_model(path: &Path) -> Result<()> { hash.update(&buffer[..count]); } ensure!( - format!("{:x}", hash.finalize()) == MODEL_SHA256, + format!("{:x}", hash.finalize()) == sha, "EmbeddingGemma 2 model SHA256 mismatch" ); Ok(()) @@ -362,6 +651,101 @@ fn verify_model(path: &Path) -> Result<()> { mod tests { use super::*; #[test] + fn old_text_worker_handshake_does_not_claim_media_support() { + let mut handshake = json!({"ready":true,"model":"google/embeddinggemma-2","dimensions":768,"device":"cpu","threads":1,"runtime":"b11461-no-logits-v1"}); + let old: WorkerInfo = serde_json::from_value(handshake.clone()).unwrap(); + assert!(!old.media_supported); + handshake["media_supported"] = json!(true); + assert!( + serde_json::from_value::(handshake) + .unwrap() + .media_supported + ); + } + #[test] + fn media_image_grid_is_bounded_for_extreme_aspects_and_full_budget() { + for budget in [70, 140, 280, 1120] { + for (width, height) in [(1, 16384), (16384, 1), (1920, 1080), (500, 500)] { + let (w, h) = image_target(width, height, budget).unwrap(); + assert_eq!(w % 48, 0); + assert_eq!(h % 48, 0); + assert!(u64::from(w) * u64::from(h) <= u64::from(budget) * 2304); + } + } + assert!(image_target(0, 100, 280).is_err()); + assert!(image_target(100, 100, 1121).is_err()); + } + #[test] + fn artifact_verification_rejects_projector_size_and_checksum_mismatch() { + let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/LICENSE-DigUp.txt"); + let bytes = std::fs::read(&path).unwrap(); + let sha = format!("{:x}", Sha256::digest(&bytes)); + assert!(verify_artifact(&path, bytes.len() as u64, &sha).is_ok()); + assert!(verify_artifact(&path, bytes.len() as u64 + 1, &sha).is_err()); + assert!(verify_artifact(&path, bytes.len() as u64, &"0".repeat(64)).is_err()); + } + #[test] + #[ignore = "Explicit48MP JPEG resource test; no model needed, run release CPU"] + fn large_phone_jpeg_scaled_decode_preserves_exif_and_bounds() { + use image::ImageEncoder; + let image = image::RgbImage::from_fn(8000, 6000, |x, _| { + if x < 4000 { + image::Rgb([240, 10, 10]) + } else { + image::Rgb([10, 10, 240]) + } + }); + let mut encoded = Vec::new(); + let mut encoder = image::codecs::jpeg::JpegEncoder::new_with_quality(&mut encoded, 80); + // Little-endian TIFF orientation tag6: rotate90clockwise. + encoder + .set_exif_metadata(vec![ + b'I', b'I', 42, 0, 8, 0, 0, 0, 1, 0, 0x12, 1, 3, 0, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, + ]) + .unwrap(); + encoder.encode_image(&image).unwrap(); + drop(image); + let path = + std::env::temp_dir().join(format!("searchi-phone48mp-{}.jpg", std::process::id())); + std::fs::write(&path, &encoded).unwrap(); + drop(encoded); + let started = std::time::Instant::now(); + let result = decode_image(&path, 280); + let _ = std::fs::remove_file(&path); + let pixels = result.unwrap(); + println!( + "48MPactualJPEG scaleddecode+EXIF+resize {:?}; output{}x{} RGB{}bytes", + started.elapsed(), + pixels.width(), + pixels.height(), + pixels.as_raw().len() + ); + assert!(pixels.height() > pixels.width()); + assert!(pixels.get_pixel(pixels.width() / 2, pixels.height() / 4)[0] > 200); + assert!(pixels.get_pixel(pixels.width() / 2, pixels.height() * 3 / 4)[2] > 200); + assert!(u64::from(pixels.width()) * u64::from(pixels.height()) <= 280 * 2304); + } + #[test] + fn oversized_jpeg_header_rejected_before_pixel_decode() { + let mut encoded = Vec::new(); + image::codecs::jpeg::JpegEncoder::new(&mut encoded) + .encode_image(&image::RgbImage::new(16, 16)) + .unwrap(); + let sof = encoded.windows(2).position(|p| p == [0xff, 0xc0]).unwrap(); + encoded[sof + 5..sof + 7].copy_from_slice(&9000u16.to_be_bytes()); + encoded[sof + 7..sof + 9].copy_from_slice(&9000u16.to_be_bytes()); + let path = + std::env::temp_dir().join(format!("searchi-too-large-{}.jpg", std::process::id())); + std::fs::write(&path, encoded).unwrap(); + let result = decode_image(&path, 280); + let _ = std::fs::remove_file(&path); + assert!(result + .unwrap_err() + .to_string() + .contains("memory/pixel budget")); + } + #[test] fn missing_google_model_fails_without_starting_worker() { assert!(GemmaEmbedder::load("missing-google-model", "missing-worker", 1).is_err()); } diff --git a/crates/searchi-semantic/src/lib.rs b/crates/searchi-semantic/src/lib.rs index 5e07e8c..2ef38a2 100644 --- a/crates/searchi-semantic/src/lib.rs +++ b/crates/searchi-semantic/src/lib.rs @@ -1,7 +1,10 @@ //! Local Google EmbeddingGemma 2 inference through an isolated native worker. //! The rejected MiniLM experiment is available only under `minilm-proof`. mod gemma; -pub use gemma::{Device, GemmaEmbedder, WorkerInfo, GEMMA_DIMENSIONS, GEMMA_FINGERPRINT}; +pub use gemma::{ + Device, GemmaEmbedder, ImageEmbedding, WorkerInfo, GEMMA_DIMENSIONS, GEMMA_FINGERPRINT, + GEMMA_MEDIA_FINGERPRINT, +}; /// A verified source byte range covered by a model token window. #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] diff --git a/crates/searchi-semantic/tests/fixtures/README.md b/crates/searchi-semantic/tests/fixtures/README.md new file mode 100644 index 0000000..536d820 --- /dev/null +++ b/crates/searchi-semantic/tests/fixtures/README.md @@ -0,0 +1,14 @@ +# Pinned Google media reference fixtures + +The `digup-photo.jpg`, `digup-screen.png`, `digup-speech.wav`, and +`digup-media-reference.json` files are copied unchanged from +`ARahim3/DigUp`, commit `6faa29e4c315a3a591de1b41bd78751bdf39588d`, +`Tests/LlamaRuntimeTests/Reference/`. They and the existing text reference +fixture are retained under the adjacent `LICENSE-DigUp.txt` MIT notice. + +The source test uses image budgets 280 (screen), 140 (photo), 70 (frame), +and a mono 16 kHz speech recording. The native CPU test compares actual +768-dimensional Google vectors with the pinned llama.cpp b11461 reference +at cosine >=0.999. This is runtime parity evidence, not a production media +relevance corpus. Independent images, audio, and video require separate +quality evaluation. \ No newline at end of file diff --git a/crates/searchi-semantic/tests/fixtures/digup-media-reference.json b/crates/searchi-semantic/tests/fixtures/digup-media-reference.json new file mode 100644 index 0000000..a296ab7 --- /dev/null +++ b/crates/searchi-semantic/tests/fixtures/digup-media-reference.json @@ -0,0 +1 @@ +{"made_with":"llama.cpp b11461","vector_version":1,"vectors":{"document":[0.0023304052,-0.021797102,-0.025986522,-0.025894934,0.0046086097,-0.029744277,-0.04186634,0.03234369,0.015701862,-0.13444579,-0.049679857,-0.067124754,-0.008888296,0.049783457,0.04075608,-0.0027419934,0.0494676,0.0092225745,-0.003042357,0.021539804,-0.066572726,-0.04184304,-0.008146685,-0.015800655,0.0028940293,0.026850378,0.023585942,0.012522315,-0.018817414,0.19809185,-0.0541878,-0.033899978,0.06363426,-0.012184333,0.026218394,-0.030783277,-0.016514625,0.0010143976,0.016249185,0.00673781,0.07569905,-0.032087695,0.01618515,0.008316216,0.009405525,0.035788074,0.011760172,-0.0018986556,0.03811712,0.04686964,-0.0019338331,-0.06858261,-0.020950682,0.0061196685,-0.012488069,0.055386145,0.00828158,-0.028973866,0.029866058,0.019298207,0.0064102146,0.03210796,0.031232368,-0.024290783,-0.009193791,-0.00788917,0.07007842,-0.036232397,0.048318822,0.03329114,-0.021271994,-0.01810213,0.056723867,0.026635557,-0.0066668643,-0.03339305,-0.09275154,-0.005457068,-0.037602138,0.06852603,-0.086277,0.0108406255,-0.022301262,0.054799795,0.048695795,-0.0094250385,0.04326083,-0.05584021,0.009427591,0.018164966,0.0077456376,0.012890579,0.011140378,0.009403773,-0.013322473,0.014014791,0.0045265807,0.0026267597,-0.02777846,0.03337617,-0.014311906,-0.0027436074,0.0016559366,0.04267254,-0.0074306116,0.010555651,0.00801582,0.019190526,0.026427642,-0.02305468,0.017346293,-0.254231,-0.037654083,0.004254816,-0.029559055,0.30139065,-0.0017701226,0.012945749,0.045082387,-0.005745192,0.023981802,0.11611545,0.02849787,0.0050043385,0.019032571,0.01543062,0.013486391,-0.0073420904,-0.0120351305,0.027507395,0.017718071,0.0048503615,0.0070377868,-0.00946547,0.015142535,0.013139711,0.019906517,-0.038481727,0.060138095,0.0027306078,-0.010124241,0.020947324,-0.005082965,0.009129657,-0.06960446,0.04814667,0.012469531,-0.017168682,-0.007835558,-0.018339474,0.04499317,-0.048769984,-0.021295255,0.0008460758,0.042394932,0.02629723,0.015862137,-0.027827857,0.02877754,0.044078708,0.02864664,0.015502866,-0.011931367,0.006051371,-0.0676744,-0.032051444,-0.0051915697,0.022663914,0.010766299,-0.045957707,-0.071434505,-0.0071970616,-0.00080499344,-0.019176258,0.039329063,0.07615527,-0.02934876,0.03178097,0.030727895,-0.0014563488,0.033275653,-0.016663045,0.016650142,0.03149862,-0.042355653,-0.01447139,-0.031222051,-0.0371221,-0.071084455,0.02895739,0.012906462,-0.034588896,0.005292062,0.04567936,0.057948757,0.016161263,0.026154758,0.037441123,0.020264363,0.0021852585,0.010503882,0.02564951,-0.0034963347,-0.002975977,-0.05896342,0.090469755,-0.02141068,-0.018266847,0.03979448,0.006404804,0.048994806,-0.0013431136,0.003767527,0.009192836,0.03172842,0.0018301627,-0.032883424,0.070755646,-0.008929331,0.007731602,0.039488316,-0.0026821592,0.047416102,0.017939921,-0.046493225,-0.003571527,0.017453436,0.027679116,-0.045083456,-0.0018627502,-0.0058596916,-0.016741525,-0.041559335,-0.07398639,0.035852198,-0.01250213,-0.027620463,-0.022970477,-0.007722595,0.006369175,-0.027909646,0.05087572,0.04319605,0.0249135,-0.045503743,-0.050388955,-0.07399011,-0.031614304,-0.009977491,-0.011919013,0.017587284,0.046735547,0.051120915,-0.01913088,-0.0040965537,-0.030126736,0.022246089,-0.024694057,-0.0011967963,-0.0076620826,-0.0001045683,0.025630128,0.0023922755,-0.016251149,0.029261485,0.026775412,-0.0011348778,-0.023079926,0.0046075485,0.013615946,-0.022271913,0.0063756416,-0.011097959,-0.057059642,0.017879428,0.039326653,-0.010385263,-0.024296982,-0.0056849266,-0.021441974,0.023893535,-0.004312103,-0.0029023795,0.011346968,-0.05022057,-0.00962676,-0.030292084,0.0022458949,-0.0012382208,0.014016518,0.0130033605,-0.0075721424,0.022480633,0.0378293,-0.0060748337,0.020296352,-0.038013346,0.02737668,0.051704004,0.029559156,-0.008555367,-0.040540576,0.0028047708,-0.01888827,-0.017475538,0.022049233,-0.018655647,0.00035712068,0.0007242559,-0.031585597,0.002809768,-0.010847336,0.019464653,-0.038227003,0.004094894,-0.0045381063,-0.032818098,-0.025449943,-0.0048597767,-0.052715924,0.024247607,-0.025617195,-0.028776655,-0.01491966,0.027141426,0.022653097,0.01347185,0.0010195217,0.0077305734,0.006165836,-0.009121481,-0.011312435,0.0010023145,0.033321623,0.0020216978,-0.04601626,-0.020557044,-0.023531808,0.013099387,0.049464565,-0.0083905,-0.12218178,-0.0090951715,-0.037435923,-0.043180246,0.008593723,0.003133877,0.03239143,-0.02740052,0.028175933,0.00713765,0.010822759,-0.011402951,-0.042760924,-0.03611006,0.011457286,0.060568936,0.0027335465,-0.024305783,-0.004420147,0.0068441983,0.002837347,-0.02218109,-0.022486687,-0.01941801,0.01667096,-0.03958557,-0.0077348636,-0.0012779543,-0.009598079,-0.008962751,0.033793483,0.018625712,-0.006633453,0.026242023,0.021685809,0.013799533,-0.0060389466,0.0020937775,0.02297482,-0.02592566,0.0011351658,0.00793861,-0.01809629,0.050504446,-0.026299631,-0.028017156,0.006029957,-0.02648004,0.03030571,0.016809817,0.29351303,-0.028621448,0.01694766,0.021401705,0.012320341,0.0015229117,-0.008129053,-0.03414468,-0.028855989,-0.0111221,0.016094722,-0.009122331,-0.012579664,0.039652735,-0.0015469433,0.026674459,0.0021885976,-0.08253249,0.033036754,-0.014868821,-0.014332645,0.036526278,-0.01766209,-0.020124977,-0.0034296303,-0.014005681,-0.004601791,-0.009327924,-0.011515968,-0.007886169,-0.0041743773,0.010690235,-0.00089737185,-0.001164567,-0.03708284,-0.020461231,-0.029766092,0.021977667,-0.0030903136,-0.03882194,-0.0040304814,-0.005889251,0.0070626875,0.050626628,-0.013480615,0.021490151,-0.031914305,-0.053065706,0.020997914,0.015631972,-0.045284476,0.009909403,-0.016594738,0.015630603,0.017378146,0.0036790697,0.008031603,0.008594249,-0.0097002145,0.027526753,0.024597274,0.033324126,-0.009833362,-0.018773828,-0.021822508,0.021222144,-0.013842002,-0.04008253,0.019500451,0.03202993,-0.041551553,-0.00909319,0.036807355,-0.029013487,-0.03885951,-0.010589081,0.021106789,0.015298516,-0.017060777,-0.01739247,0.03370951,0.012063843,-0.001421933,0.01723632,-0.0059082266,0.034853842,0.0001414414,-0.004065009,0.02613758,0.019346753,-0.013989706,0.032959696,-0.03180193,0.047186714,0.003124887,-0.04343547,-0.012197043,0.0078124665,0.018750655,-0.01054314,-0.01374814,0.002202656,-0.015776752,0.028681586,0.0006740798,-0.0077975816,0.020080643,0.002014489,-0.024605112,-0.005957045,-0.02429209,0.03337058,-0.033816665,-0.036966167,0.014424739,0.051343787,-0.1426791,0.05728573,0.054759525,-0.00283572,0.026190821,-0.007163155,-0.010828461,0.038858987,0.00042094343,-0.019169753,0.010289358,0.05158726,-0.04530911,-0.007890386,0.0059088017,0.047462456,-0.009264869,0.039195035,-0.0016884381,-0.056487247,-0.02510224,-0.035118386,0.020060148,0.002899512,-0.014169895,-0.025514884,-0.028525727,-0.031336457,0.0046514757,0.018933801,0.012139317,0.003702483,0.0058358517,0.038969677,-0.002549884,0.0062751905,0.020983327,-0.009954991,-0.002548966,0.015137436,-0.011458916,0.037894517,0.02554064,0.018447932,0.004799534,0.018712357,0.0022152332,-0.22232346,-0.03098116,-0.009694401,0.01804692,-0.03996067,0.0025305052,-0.025941543,-0.02889645,0.03633529,-0.023152914,-0.033687416,-0.011612494,-0.04580391,0.013616023,-0.019674538,0.004965583,0.05022121,0.027306138,0.018472912,0.0074440567,0.038919814,0.025238382,-0.026040506,-0.02587982,0.01949649,0.046985254,-0.043086953,0.0086789355,0.0036454939,0.007666583,-0.03497541,-0.03160331,-0.02316425,-0.004761782,-0.013255472,0.020398434,0.02325057,-0.0034629786,0.018612014,0.0013833606,-0.0029180397,0.03522988,0.03886604,-0.052247092,-0.007805861,-0.020683177,0.008170049,0.0020921058,-0.007431282,0.016908726,-0.0017200557,0.022308081,0.030215522,-0.0062259347,-0.012918318,0.034343,0.037543565,0.015066949,-0.013493293,-0.0047099055,-0.018737689,-0.025036918,-0.0025260665,-0.029296799,0.026094172,-0.03547309,0.017262554,0.04301273,0.045649968,0.002757701,0.012535473,0.026811121,0.006304665,0.018632624,-0.034843236,-0.01949036,-0.012743749,0.010711088,0.011894132,0.010589953,-0.005021451,0.017350642,0.009708856,-0.0025436045,-0.05403738,0.034465652,0.016464446,0.0153448,-0.058381796,0.01259997,0.019286193,0.013592071,0.0032159034,1.5818241e-05,0.015456042,-0.0030818488,-0.03365496,0.0027926278,-0.024657905,-0.007019512,-0.032580033,-0.0071443478,0.049754333,0.0020589156,0.049664073,0.016466593,-0.009452267,0.03131244,0.013167636,0.006365039,-0.012739036,0.039702322,-0.0061579784,0.019326784,-0.030592583,0.015107551,-0.006695954,0.0015801399,-0.008298045,-0.014460284,0.0010027253,0.0024621687,0.016694404,-0.03725942,0.017425654,-0.015946789,-0.019247483,0.01547504,0.002812039,0.0047619212,-0.001791708,0.028477076,0.0419381,-0.027074536,-0.030157238,0.014040049,-0.010393231,-0.011609807,-0.0051780464,-0.01127466,0.012490858,0.0017368363,0.0117046395,-0.004965198,-0.012211073,-0.0074167033,0.06665544,0.037733797,-0.025913008,-0.0032772382,-0.015299275,-0.016191425,0.0020010457,-0.009165898,0.015927292,0.022919023,0.010263074,-0.0053235427,-0.0237268,0.050051987,-0.022676302,0.011947598,0.023939593,-0.0051834024,0.009056852,0.007844487,-0.0132050915,0.034942653,0.03800978,0.037870683,-0.030081848,0.026836164,0.0068580587,-0.044646658,-0.021957247,0.020268008,-0.0034561954,-0.011163275,0.20250374,0.028618678,-0.0211924,-0.02107084,-0.020690097,0.001979537,0.0036518718,0.032889295,-0.0042643566,0.003999938,0.024571909,-0.00626931,0.040756647,-0.018879458,0.013868022,-0.015232512,-0.037815645,0.016404975,-0.0012262135,0.0095838765,-0.025655104,0.02322123,-0.026738351,0.03696619,0.00016871374,0.0034849297,-0.00056358916,0.00997812,0.005070547,0.02776031,0.00049960206,0.0039493004,-0.024934428,0.035303254,0.056500725,0.005086232],"document-long":[-0.032646477,0.01862483,-0.0034248086,-0.035296537,0.01118451,-0.025681015,-0.008392663,0.04257367,0.026163246,-0.16160189,-0.012808873,-0.025131559,0.022857402,0.011356826,0.01282011,-0.011041249,0.04798782,-0.0012005175,0.06274811,-0.005362404,-0.013816186,-0.03352277,-0.012315371,0.021754362,-0.053508557,0.014161537,0.040379204,0.0056297965,-0.0017265155,0.22867835,-0.050365698,-0.0076235738,0.008839492,-0.003436979,0.052136827,-0.018871475,0.05253495,0.077486925,0.005917229,0.0493282,-0.029468404,0.042901255,-0.004140508,0.0095066065,0.044601083,0.056717087,-0.0066054985,-0.007948583,-0.04097101,-0.0055366918,0.012784551,-0.074805826,0.015963208,-0.010097898,-0.015521752,0.012792321,-0.06490802,-0.007414306,0.05867573,0.04902979,0.011897871,0.028032668,-0.00013528336,0.023394514,-0.03762675,0.018418867,0.010590813,-0.03537607,-0.010182295,0.0065278993,0.02063717,-0.0016868786,0.009253835,0.009623544,0.009586763,-0.03188329,-0.107567206,0.036789376,0.010789865,0.007977942,-0.03296375,0.009129049,0.021072486,-0.031451825,0.033128385,-0.009225719,-0.050173856,-0.014510138,-0.014594011,0.065835714,0.030298231,0.01899847,0.012773833,0.037572555,-0.043631285,-0.047300033,0.02651102,-0.0010370493,-0.04331896,0.053905893,0.030181559,0.02532043,-0.043298528,0.01694816,0.053928375,-0.042501703,-0.013907294,0.0070125586,0.024641044,0.0034436674,0.03886665,-0.335707,0.0029359632,0.021472817,-0.004575376,0.25748745,0.057357326,-0.016277935,-0.000204798,0.03817791,-0.061957903,0.053669464,-0.005649428,-0.033789832,-0.021924391,0.027969887,0.006644997,0.045023352,0.0012903368,0.011361031,0.0047245715,-0.0082111275,0.0074045835,0.023922527,0.063659325,0.0003980499,0.022939458,0.0015253858,0.008909964,-0.020972917,0.012784527,0.03839942,0.035295695,-0.021484977,-0.073883995,-0.011168925,0.003458178,-0.00837942,0.04640683,0.03824447,-0.04600141,0.013182427,-0.030230539,0.011127455,0.036382172,0.0022253953,-0.0033019139,0.0016781059,0.004103471,0.025031086,0.003773496,0.0073205717,-0.005033653,-0.044667315,-0.019500647,0.028617317,-0.008494055,0.0023643202,-0.029769365,-0.005964689,-0.042137094,0.0045097857,0.011543056,0.03632147,0.01566381,0.054229844,-0.0073096706,-0.012450977,0.0077100876,-0.012736223,-0.014892508,-0.05434614,0.020501178,0.02559261,-0.0049915323,-0.055898137,-0.011185562,-0.01770619,0.003678757,-0.018572165,0.050549634,-0.016996946,0.043023735,-0.0048233974,0.060081683,-0.005383103,0.028646534,0.011365366,0.019090336,0.012352224,0.028300771,-0.013448554,0.011554865,0.013260026,-0.004106969,-0.00694772,-0.041240003,0.045143098,0.013550959,-0.014933092,0.008088799,-0.044860166,-0.02841227,-0.029728996,0.03172348,0.03966682,-0.020779375,0.07569086,-0.012829733,0.026299981,-0.021377282,0.01084997,0.06808111,-0.020005288,-0.011564212,-0.008128068,0.072304204,0.020787476,0.017095163,-0.019631479,-0.017285705,-0.0042826515,0.00972111,-0.045253668,0.03037571,0.025397252,-0.032155663,0.028209468,-0.031805143,0.037527747,-0.023387225,0.011014653,-0.030483024,-0.01353982,-0.059182968,-0.069360636,0.011137176,0.0022649672,-0.024282062,-0.00036354308,0.019914916,0.012764232,0.027097736,-0.023270804,-0.0002458226,-0.018625911,0.027881732,-0.01192104,0.0031597572,0.0014028179,-0.020884821,-0.031002006,0.021534653,-0.005152673,0.0067629754,0.023025205,0.028128004,-0.008001674,-0.0065193493,-0.06297321,-0.024761075,-0.018131588,-0.0018305533,0.00020975298,-0.027089594,0.05140791,-0.00064239145,0.027968584,0.014750592,0.02573278,-0.0073137768,-0.04470193,-0.007410579,0.03113369,-0.02247595,0.0006378062,-0.006443276,0.023215644,0.026714457,0.014013733,0.015542809,-0.013052096,0.029179433,0.035927474,0.024186444,0.047302645,-0.0012806319,0.03881039,0.032691993,-0.024700189,-0.008693648,0.011787687,-0.01416788,0.010030247,-0.0075989338,0.0206933,0.0133951865,-0.006368828,0.011543902,-0.00919263,0.00710558,0.010540875,-0.024271643,0.01548073,0.0023511664,0.0032611599,0.002908263,0.020251442,0.008185149,-0.108034156,-0.020673431,-0.016931722,0.013491287,0.0023757694,0.001892162,0.012546577,-0.009962741,0.017189393,0.036545247,-0.00010351734,0.03509363,-0.035458688,-0.029974155,0.0133095775,-0.01347986,-0.011832459,-0.0015695774,0.0038219218,0.025890904,-0.0026899935,0.016123101,-0.18924719,0.021091748,-0.0015688903,0.010572826,0.0040775915,-0.033963528,0.009418266,0.006719819,0.029565243,0.030636484,0.015880594,-0.011341673,-0.020496355,-0.0128728645,-0.0026001646,0.00052129047,-0.02656791,-0.017217716,0.016577393,-0.023959868,0.0017641534,-0.005491431,-0.054422084,-0.005998524,-0.0061189663,-0.012696417,0.009198177,-0.016304422,0.002604621,0.010400925,0.009000545,-0.014906562,-0.021206615,-0.003110318,0.018736232,-0.021106787,0.01176595,-0.030499578,0.0148878945,0.0684303,-0.016252888,-0.009876473,0.022603752,0.052639004,-0.03405607,0.012868432,-0.006909797,0.06035497,-0.0038581248,0.0014470399,0.2594436,0.018513685,0.006533724,-0.0049225944,0.017148014,-0.032130107,0.008934542,0.01760306,-0.0113040935,0.01841793,0.037717592,0.015652576,0.011315404,-0.027994027,0.0028550546,0.025144204,0.0024020544,0.01938486,-0.012340887,0.010456594,-0.031361654,0.019083593,-0.024566645,0.008648715,0.009780004,-0.012324315,-0.033103902,-0.0069435034,0.009492747,0.01860137,0.0057305507,0.022667723,-0.05031715,0.0061657038,-0.00527202,-0.017115798,-0.028323935,0.03153766,0.036727116,-0.007459034,0.0049243947,-0.011629239,0.019242909,-0.0055659325,-0.007225988,-0.006062272,-0.021638779,-0.058029484,0.0059354915,-0.006151568,-0.0014751279,-0.007833885,-0.0458762,0.035290428,-0.041697145,-0.0022095712,0.009421172,-0.025393296,0.028304428,0.01767457,0.0048844595,0.04139035,-0.015183575,-0.023821179,-0.030500956,0.019834202,-0.026467705,-0.028398061,0.028211439,0.0012478441,-0.024384301,1.6164717e-05,0.030850925,0.0345168,-0.0030939288,-0.023858748,0.013201634,-0.013927588,0.039681807,0.005219426,0.013641031,-0.019611843,-0.035531197,-0.0025116096,-0.011580307,-0.0010016087,0.05512462,-0.012420601,-0.008966062,0.039575752,-0.0095454035,-0.02577104,-0.03451557,0.0502172,-0.0294677,-0.004759149,0.013408763,0.004710288,-0.0028127427,-0.011551217,-0.030104002,-0.0008946219,-0.052726496,0.017188875,0.024567949,-0.0073090824,-0.009820584,0.00745355,0.010426149,-0.005369369,0.019002665,-0.0020726472,0.04474264,0.025755981,-0.008463994,-0.00047731563,-0.16403401,-0.030924628,0.039499372,-0.031530146,0.011925715,0.0035674833,0.0039526974,-0.0005123769,-0.006593851,0.010496066,-0.011518787,0.018075686,-0.027774587,-0.022201259,0.023989033,-0.003694167,-0.010324041,0.00852154,0.04243254,-0.057051934,-0.010975183,0.032728247,-0.006876734,-0.008254108,0.05178644,0.027016252,-0.05086986,-0.03317877,-0.024830658,-0.009422995,0.026987936,0.02129512,-0.019810788,0.009978431,-0.02257402,0.022217745,0.009988149,0.012124156,-0.021822363,-0.0009119591,-0.0057258033,0.016017724,0.016428059,-0.01563884,0.034599748,0.0033681057,-0.008629138,-0.23080917,0.00063413015,-0.0213236,0.01677158,-0.003683771,-0.044899583,0.004504008,0.02870831,0.002160134,0.00084263674,-0.004749074,-0.0024873316,-0.013684534,0.038360827,-0.030329276,0.0044528744,0.050864913,0.019866442,-0.06528517,-0.00763558,0.07133414,0.010983182,0.025926266,-0.029504409,0.048233695,-0.027595751,-0.0077010393,-0.005278272,-0.02482865,0.0074605932,-0.053648323,0.008731387,0.017258588,-0.0022480774,-0.015578153,0.055494502,-0.008144661,-0.024688149,0.058295738,-0.0020812694,0.026829598,-0.008225143,0.030979712,-0.0012289457,-0.008472991,-0.020066755,-0.0053405915,-0.0058724917,0.0015786372,-0.017448427,-0.0047632423,-0.030659555,-0.010746732,-0.008569852,0.010847722,-0.019099813,0.03257032,-0.006756686,0.017995706,-0.031796668,0.02653874,-0.014082385,0.0023482062,0.018340336,0.009185553,-0.023282835,-0.02709556,-0.022614388,-0.0046399967,-0.0013088273,-0.0002312796,0.031118156,0.010304733,-0.012150273,0.013741711,-0.014244924,-0.023026587,0.036989614,0.0043842457,0.024603833,0.001073325,0.025133565,-0.028971031,0.040488042,-0.008346104,0.002371388,-0.011482135,-0.031650033,-0.009717655,-0.004986315,-0.02023688,0.019171521,-0.010917932,0.01449833,-0.039930217,-0.009804154,-0.0038996176,0.010831711,-0.031947445,-0.008155372,-0.0025757507,0.0073254174,-0.003484829,-0.0022802127,-0.02422697,0.012816126,0.010387391,0.014098164,-0.049628317,-0.006073331,-0.006941446,-0.0029274193,0.012595779,0.014733842,-0.00276941,0.01772323,0.012274302,0.0025467393,-0.041331317,-0.019013608,-0.0012123906,-0.0046171155,0.015165608,-0.044200644,0.00066036265,-0.015718887,0.0017656588,0.007969254,0.03687275,-0.0018211196,-0.029455807,-0.0011890734,0.007496439,-0.03714898,-0.008189237,0.010586574,-0.018120334,0.030172348,0.02452529,-0.010235115,0.024733339,-0.012839788,0.023441719,-0.0022105577,-0.012227908,0.027081529,0.09068528,-0.029737229,-0.045532703,-0.0028645436,-0.008343838,-0.013163261,0.0025032908,-0.023877084,0.051745515,0.012589177,-0.021725804,0.017334865,-0.028990338,-0.026265858,-0.0060377023,-0.010672267,0.049320087,0.016192213,-0.009835871,0.011516243,0.012776202,0.020399671,0.012985086,-0.009635642,0.007153005,0.0057604117,-0.00996611,0.0011414409,-0.028369494,0.021056598,0.023920473,0.017454067,0.21265991,0.031019565,0.0008588429,-0.0135805,-0.0039707893,0.0004304463,0.0025705236,-0.0072664213,-0.009327697,-0.014942886,-0.0034495778,0.01629735,0.06541639,0.010953399,-0.038242545,-0.018494667,0.020420987,-0.023471447,-0.017147385,-0.013489216,0.0023706227,0.013871909,0.012959041,0.036096558,0.012897954,-0.014970036,0.00850496,0.00041659718,0.0018579451,0.02047709,0.010888282,-0.002939342,0.0046407143,0.018964801,0.008577839,0.024355229],"frame-70":[-0.03514983,-0.056117542,0.008843882,-0.004894119,0.010629616,0.007928402,0.000930653,-0.051790044,0.04194432,-0.13763455,-0.011904811,-0.02908255,-0.016173406,0.006349417,0.04048655,-0.03573731,0.015756615,0.025263408,0.0069463965,-0.0074443,-0.04263589,-0.022873083,0.025465567,0.014882145,-0.059214633,0.0021136366,0.03519893,0.0010415694,-0.024985727,0.25499332,-0.028944274,0.020582289,0.040040005,0.01609302,0.046980683,-0.042686388,0.0066883406,-0.0010172642,0.00039635258,-0.028865088,0.018064942,-0.0063640927,-0.002260432,-0.03610709,0.00085234083,-0.0008767853,-0.022107698,-0.008452405,-0.041386735,0.0516034,0.030084487,0.031701256,-0.053125143,-0.013387491,0.008874996,0.035537142,-0.025695741,-0.04087601,-0.045619667,0.033581223,0.010029061,0.011259263,-0.0075802184,0.008058297,-0.020924754,0.0036621485,0.021797238,-0.029203318,0.027423156,-0.028529925,-0.026104253,-0.016859697,0.048475817,0.026949584,-0.05379471,-0.017679201,-0.06636321,0.015098319,-0.04252871,-0.036819838,-0.016616523,-0.012036519,-0.03323944,0.004093567,-0.012303588,-0.058172148,-0.01508086,0.024429815,-0.03959439,0.0022073204,0.07096459,-0.0024903025,-0.021243805,0.04086845,0.0090585,-0.049855646,-0.037986044,-0.03907625,-0.019747585,0.061017342,0.012172234,0.0089698555,0.005274634,0.038692664,0.045079052,-0.076995805,0.020901037,-0.0006444611,-0.042995956,-0.050701622,-0.0026149894,-0.31878018,-0.06679469,-0.0016485377,0.0029476385,0.3175627,-0.017773157,0.029525287,0.0016857777,0.022494499,0.004421624,0.027637351,-0.0044041853,-0.011462639,0.0429894,0.029266339,0.040484022,0.015217983,0.043059513,-0.039551593,0.010543565,0.0056667305,0.10099606,-0.021431105,-0.0029122615,-0.017469902,-0.07391963,0.024724144,0.0442995,-0.0113304425,0.019450258,0.012145376,-0.036503855,-0.037402883,-0.033788387,0.022702705,-0.009521039,-0.01937086,-0.023147307,-0.02862702,-0.0003738585,0.0029698538,-0.010770703,-0.035450526,0.0011592935,-0.021660801,0.008133294,-0.0098525295,-0.015158871,-0.02644521,-0.02118544,-0.04110649,-0.013081032,-0.0157068,0.0055802744,-0.005327511,0.0058721276,0.022990815,-0.01721791,0.03400266,-0.020681687,0.0083245095,-0.016656473,0.033640485,0.02977517,0.013400218,-0.025796402,-0.03445149,0.023690064,-0.0029147656,0.027376715,-0.04377245,0.015511497,-0.041364945,-0.007931627,0.009483877,0.0205007,-0.033275466,-0.024890602,-0.011690184,-0.022761537,-0.01634989,0.052554086,0.009137755,-0.012877116,0.026375575,0.046092402,-0.053893954,0.01886051,0.010847348,0.020838138,0.04754947,0.040579155,0.00049122615,-0.015302545,0.019172387,-0.008217342,0.0006452916,0.05427069,0.025352988,0.08217741,-0.019398723,-0.027827717,0.0023022895,0.0052439487,0.00066425215,0.04001595,0.027322808,-0.02649484,-0.03611362,-0.027808214,0.03960916,0.08244662,-0.026788134,-0.029624948,0.02973067,0.047345012,0.019701054,-0.0014861207,0.0440874,0.029949423,-0.013552406,-0.0031571153,-0.025647962,-0.053231552,-0.043468826,0.028470315,-0.03565889,0.03730247,0.07945182,-0.058090843,0.046266515,-0.013181034,0.0040887445,0.027746953,-0.020690486,-0.02515275,0.046303123,-0.02048804,-0.015760992,-0.0054980284,0.009831649,0.00075830444,-0.012089125,-0.015541239,-0.0038925686,-0.013947818,-0.037334815,0.0074191703,0.04602368,-0.007326415,0.03147987,-0.018198885,-0.0072799637,0.041542254,0.022019472,0.01287194,-0.017674293,0.012753249,-0.014026005,0.017733224,0.028355544,0.004943426,0.004701982,0.028924067,0.048326362,-0.011175268,-0.022620061,-0.01649842,-0.007552712,-0.008583293,-0.013556557,-0.014811633,0.013720498,0.004500287,0.0065819793,-0.02721813,0.024231376,-0.018257584,-0.013438916,0.0072179046,0.030969866,-0.0057347193,0.0017997338,0.0025209112,0.0045505427,0.022981873,0.006315839,0.011908766,-0.051433727,-0.079632685,0.009588051,0.011823107,-0.0029839654,0.010983673,-0.0035529733,-0.008952508,-0.044965144,-0.043444015,0.003929596,0.015763799,0.0064957594,-0.018091427,-0.013037876,0.0069348323,0.018928593,-0.031660683,-0.019196171,0.00016980404,-0.08293326,-0.036225602,0.034968764,-0.0057806186,-0.0098826485,-0.03039084,0.02726954,-0.01947449,-0.0028725767,0.01071028,0.007621588,0.014795628,0.01084819,-0.017519614,0.0030390753,-0.003999268,0.028622476,0.021752847,0.0016653275,0.005000497,0.017242178,-0.014823718,-0.15552981,-0.014234543,0.035027996,-0.023588454,0.014412588,-0.034788564,-0.017930673,0.011890052,0.011276684,0.023545297,0.035509888,0.013352099,-0.0146024255,-0.0049959477,-0.016252248,0.0002959188,0.054582503,0.012756162,-0.020954665,0.027304621,0.026013434,-0.021598948,0.023515403,0.024309209,0.035177372,-1.6807868e-05,-0.0056608515,0.03436735,-0.02723472,-0.0036053963,0.0035578553,0.016743204,0.024206148,-0.004141222,-0.020952636,0.038076874,-0.020568226,-0.03305905,0.03871119,-0.0076468852,-0.05316477,0.025934538,0.01867499,0.012618967,-0.06397273,0.0065403064,-0.021445429,-0.0040482874,0.027989509,0.015354631,0.2774588,-0.016357742,-0.02632406,-0.037214674,0.021674901,-0.028460516,0.014066212,0.008768176,-0.034751095,-0.010299067,0.018464556,0.04165972,0.018091971,0.003936813,0.037026946,0.019160096,-0.014871513,0.009363177,-0.04726992,-0.013260039,-0.00568545,0.020533739,-0.00089336076,-0.004971692,0.03724872,-0.014420278,-0.028401982,-0.02890325,0.010413856,-0.006774933,0.0048447195,-0.024084555,0.018108416,0.03740106,0.0038939177,-0.018115157,-0.014072568,0.022897525,-0.034908276,0.003307763,-0.028349793,-0.020900883,-0.024347583,-0.016491203,-0.019563928,0.01103799,-0.020510562,-0.019574791,0.02265795,0.015679024,-0.018578177,-0.007380004,-0.022355374,0.023879502,0.0002875235,-0.021148948,0.011424006,-0.021335864,-0.022872629,0.016550655,-0.019262584,0.03255971,0.041712474,0.012150214,0.014409261,-0.022423334,-0.021361373,0.0033009413,0.0074309176,-0.014456378,0.0046152957,-0.03930323,0.0013742438,0.02800455,-0.011881839,-0.005520788,-0.010953354,0.004970727,-0.0008017078,-0.0066580167,0.004911279,-0.026079793,0.026083443,-0.007882623,-0.008260658,0.037285477,0.025698084,-0.0062183305,-0.010473879,0.018781872,-0.03102139,-0.0011035998,-0.03543451,-0.000178368,0.006569971,0.00020320913,0.00501347,-0.004078284,0.0058893003,0.018634487,0.012015829,-0.021732034,0.009621406,0.02777245,-0.011546964,-0.0061716996,-0.030388156,0.011960296,-0.0054793996,-0.029763542,0.016470263,0.0064966423,0.016041184,-0.012081956,-0.015278147,0.027156822,-0.13527,0.047637206,-0.007526107,0.01129548,0.024093352,0.047096875,0.03383395,0.034635253,-0.011216535,-0.01501502,-0.001237047,0.008162617,-0.025248433,-0.049082726,0.004847793,0.047193076,0.0010407454,0.004943675,0.028868748,-0.008256847,-0.00023075694,-0.03372321,0.008905211,0.027745048,0.045288526,-0.009921787,-0.008285711,-0.020202277,0.018504933,0.019068288,-0.0227922,0.018951176,-0.025881555,-0.001473669,-0.016927317,0.040679254,-0.0035053482,0.022295825,-0.004764646,-0.015447483,-0.008544664,-0.010822584,0.023024581,0.00824212,0.038108986,-0.005220217,-0.03535619,-0.22931926,-0.009575569,-0.039847583,0.010861698,-0.0057264487,-0.0018166252,-0.011612289,0.011861179,-0.0004946811,-0.027060704,0.0100728525,-0.0017181712,-0.022696765,0.020880576,-0.03639336,0.010644496,0.020429518,0.024945006,-0.0149480775,-0.042422134,0.051013608,0.011291388,-0.0020028488,-0.008149089,0.009390405,0.033249814,0.0062143886,0.036632366,-0.0046848,0.0125830965,-0.022225935,0.035518866,-0.015527285,0.0024623263,-0.035091076,0.033470742,-0.007337704,0.013716044,0.027405608,-0.005794856,-0.0262559,0.028625049,0.011574262,0.002361781,0.007978265,-0.01998401,0.014931723,0.009208065,-0.0019520437,0.011598305,0.025954163,-0.00896768,-0.022093095,0.008141585,0.009016298,-0.026521742,-0.0115269525,0.009830328,0.0015359058,0.019276123,0.0137032475,-0.00649873,-0.00015392217,0.01135925,-0.03932001,-0.027142564,-0.00916629,0.03268739,0.03016428,0.0011456006,-0.017868482,-0.007899733,-0.003882938,0.025788728,-0.0012647602,0.0030692192,-0.017130096,0.026182609,0.014650736,0.0077554816,0.011226458,0.030473663,0.014593859,-0.0059875473,-0.0014375177,-0.030463513,-0.06034841,0.004752543,0.0015394166,0.04846659,0.01391473,0.054018993,-0.028982263,-0.031904902,-0.015225388,-0.011472986,-0.009291219,-0.009987755,-0.011822258,-0.025357453,-0.04476165,-0.034743622,0.024185054,-0.0035451192,-0.029465834,-0.0011760697,0.019567963,0.01148653,-0.002501257,0.008846842,-0.034628373,0.029706433,-0.002410498,0.017875457,-0.015350932,-0.008002923,0.01985561,0.014862094,0.00032359868,0.0317359,0.010979383,-0.014671821,0.050457526,-0.03522366,-0.014864619,0.037980326,0.0010755712,0.027304308,-0.009459724,0.041415267,-0.026431553,0.035354923,0.03884867,-0.004482913,-0.011014457,-0.010072148,0.03299321,0.00025889225,0.022327976,-0.026210789,0.027340146,0.01593073,0.007228189,-0.031979397,0.048413556,0.017130714,0.01762524,0.0049405913,0.017246203,0.030396057,0.010666224,-0.03700781,-0.020742672,-0.016131595,0.013721127,0.0030478262,0.014786298,-0.0033492884,0.017524403,0.02998964,-0.025866522,0.044086743,0.0043863584,0.0079787625,0.023030601,-0.034128338,-0.0006623482,0.02925059,0.015439752,0.02939502,-0.0017319954,-0.015204754,-0.047556117,0.024309933,-0.0030885858,0.00512904,-0.020602107,0.010001735,0.19912119,-0.0006627673,-0.0013729712,-0.015389915,-0.0071518607,-0.0033369798,-0.0018451443,0.0275665,-0.039113477,-0.013899674,0.01904552,-0.012971779,0.006874903,-0.028435618,-0.018356977,0.0047523743,0.012900304,-0.012729496,-0.024123337,0.005995455,-0.036701027,-0.014978837,0.02019768,-0.025124863,0.02279183,0.0155481845,-0.00618361,-0.004376383,-0.014888997,0.0303594,0.032264017,0.009535267,-0.042284604,-0.03271428,-0.0049653715,0.02199046],"photo-140":[-0.030302607,-0.05765799,0.006591331,0.003659555,0.00955291,0.014295605,-0.0031119578,-0.051981945,0.03966733,-0.12180777,-0.012869279,-0.019561028,-0.020759407,-0.0010123478,0.040840495,-0.042013038,0.017076302,0.020698763,0.0015858889,-0.0027828738,-0.030169504,-0.030362315,0.034325898,0.014628868,-0.05447528,0.0065280427,0.029129606,0.013382503,-0.022386776,0.2587082,-0.02193071,0.027671427,0.045656297,0.019986479,0.03801198,-0.028197918,0.0027141934,-0.004770912,-0.002584234,-0.026304994,0.017961789,-0.006460174,0.0048805852,-0.04226084,-0.013902201,-0.007309208,-0.020421501,-0.0023372432,-0.04490766,0.053094834,0.033111677,0.03452681,-0.06320722,-0.019026034,0.010218719,0.037365153,-0.029357549,-0.04607815,-0.042957976,0.045441844,0.011926126,0.01902122,-0.018699938,-0.0030776658,-0.022648612,0.0024061254,0.023470743,-0.032447584,0.041044507,-0.024133665,-0.028823288,-0.005851724,0.0414762,0.02010354,-0.052454617,-0.012002456,-0.05556668,0.013942567,-0.050109897,-0.03973684,-0.010360244,-0.013897031,-0.027607873,-0.001999506,-0.025434595,-0.06204223,-0.01894808,0.028417913,-0.04209265,-0.0029400892,0.08221319,-0.008896638,-0.025865069,0.037261534,0.014488819,-0.050121076,-0.039379336,-0.038113646,-0.023388367,0.06145937,0.017601538,0.011347265,-0.00031996923,0.03158729,0.04297275,-0.077693805,0.025124311,-0.017704869,-0.04658538,-0.04934503,-0.0041651526,-0.3152969,-0.06697766,0.012738533,0.00468489,0.31041166,-0.012801606,0.032160383,0.011146039,0.023803068,-0.00042131852,0.022736913,-0.004781789,-0.006084223,0.04280125,0.026569225,0.034853797,0.004182496,0.049379323,-0.0335118,0.009014241,0.009337093,0.09567344,-0.025732644,-0.0028445367,-0.013285146,-0.07221714,0.02281493,0.04289387,-0.0033736434,0.014697355,0.00836196,-0.040092174,-0.04376285,-0.030733382,0.031485096,-8.04881e-05,-0.0134573085,-0.025811173,-0.027864426,-0.0002547103,0.003944406,-0.013518304,-0.040308867,-0.002420077,-0.008953476,0.0051260577,-0.021580188,-0.019641396,-0.03958178,-0.024439275,-0.04956919,-0.008503375,-0.020301158,0.0007092847,0.0030263748,0.0073986505,0.012816223,-0.017510902,0.046636198,-0.021231841,0.0040388606,-0.018051377,0.03948987,0.024447257,0.009335052,-0.026091488,-0.03265584,0.039194304,-0.0007348204,0.017742949,-0.042527147,0.007483659,-0.032532476,-0.019666152,0.0072451695,0.023782095,-0.035609502,-0.021726567,-0.010540077,-0.016256334,-0.012898749,0.047764506,0.0017405194,-0.020153552,0.026027394,0.043209534,-0.053702418,0.025367698,0.009064168,0.015238286,0.045735292,0.046709232,-0.0021439064,-0.01057815,0.03502247,-0.0052867774,0.002262709,0.05254338,0.027636616,0.08705877,-0.021794764,-0.039339665,0.004603879,-0.0022856842,0.00412752,0.029855506,0.027550148,-0.028077334,-0.026148299,-0.031010695,0.044285554,0.088575594,-0.031253558,-0.030434871,0.036392618,0.041912325,0.017798284,-9.447014e-05,0.038739778,0.028852945,-0.020604257,-0.0028541274,-0.02516536,-0.06189624,-0.0390145,0.030377045,-0.033910036,0.036510747,0.08096044,-0.05798336,0.036966175,-0.007548233,0.0013983677,0.031376448,-0.029530577,-0.023264872,0.049864143,-0.015459619,-0.01268899,-0.0117784105,0.019276831,-0.006881322,-0.019583423,-0.024582239,1.38726255e-05,-0.016000416,-0.035697002,0.00051875325,0.046390932,-0.0084732445,0.033655465,-0.015907437,-0.0020299996,0.044538636,0.022137616,0.012927363,-0.0067671975,0.009095862,-0.01320696,0.017163496,0.034101266,0.01024413,-0.0056325034,0.02620224,0.05337334,-0.009991858,-0.018900871,-0.01663101,-0.006124275,0.0058498653,-0.0137352375,-0.01826118,0.016396802,0.007939063,0.011487893,-0.02345327,0.026682796,-0.017942667,-0.011412802,0.006820844,0.037147895,-0.0068159634,0.0071229674,0.0019624925,0.0036435656,0.02879533,0.004346672,0.010379658,-0.04336784,-0.082202114,0.008445879,0.007887901,-0.00018017377,0.0038036637,-0.01353363,-0.011559032,-0.050242405,-0.044389177,0.0047253515,0.013274063,-0.0031615268,-0.012673665,-0.018389516,0.011660488,0.01846444,-0.020532377,-0.008622656,-0.00063665176,-0.08061348,-0.05057967,0.030444885,0.003168202,-0.007769456,-0.02372826,0.031955082,-0.016601171,-0.005304883,0.0120024625,0.005634417,0.013060363,0.0095805805,-0.013483446,0.005028875,-0.01505137,0.026308613,0.025273962,0.005653724,0.0044561275,0.019022359,-0.00912537,-0.15136428,-0.027742136,0.03540687,-0.030522846,0.021380683,-0.036164943,-0.019197103,0.018337553,0.011978825,0.029057061,0.02768572,0.009424086,-0.021556864,-0.009236065,-0.01125221,-0.0017077916,0.04619872,0.006492992,-0.029672155,0.021324845,0.025669307,-0.026561873,0.028038684,0.02724253,0.039409116,0.003923919,-0.009625829,0.034411933,-0.021899732,-0.008589385,0.0017822026,0.025832964,0.02175756,-0.0027119047,-0.02409364,0.034380894,-0.024809252,-0.030097295,0.036365613,-0.010233807,-0.050419636,0.04002092,0.021208005,0.01185302,-0.06851642,0.007829081,-0.015723549,-0.008329361,0.025858117,0.014736942,0.26984873,-0.02631182,-0.032289367,-0.04146573,0.027385525,-0.024456099,0.016986342,0.0065359203,-0.022823028,-0.007763751,0.01920215,0.04243267,0.0027974776,0.010894893,0.037934493,0.024543604,-0.017806968,0.009060649,-0.043501463,-0.016586497,-0.007998603,0.01978353,-0.002114669,0.0024330278,0.032640424,-0.017537871,-0.02040533,-0.036077634,0.0063767107,-0.006596836,0.0021130755,-0.02165276,0.021733655,0.039686654,-0.00013822505,-0.017029217,-0.007714883,0.02271797,-0.031149605,0.014108062,-0.031287532,-0.022536699,-0.016516266,-0.02246834,-0.01953386,0.008043756,-0.022604112,-0.007455916,0.017985411,0.024795543,-0.01782423,-0.004754113,-0.019357484,0.035991058,-0.0127664665,-0.028825887,0.009217336,-0.019863544,-0.022455953,0.010244384,-0.013113028,0.03161789,0.04505217,0.016256073,0.0069920416,-0.015850727,-0.017273543,0.006894834,0.010630822,-0.015367231,0.0016665288,-0.042841725,0.0011369778,0.028084489,-0.007839409,0.0012357215,-0.017425193,0.0071694725,-0.0016605101,-0.0080908835,-0.0036102287,-0.03403113,0.03228764,-0.010118523,-0.0009570631,0.02927818,0.03716041,-0.0072519705,-0.010202112,0.013293614,-0.03854299,-0.0053229937,-0.032394223,-0.0058521186,0.012594785,-0.0027092001,0.010968017,0.002443988,0.0016358502,0.023310235,0.016006632,-0.025748199,0.009959921,0.026353566,-0.008914707,-0.006856858,-0.03384001,0.018751426,-0.0044408976,-0.024438646,0.012213324,-0.0015215357,0.016418433,-0.01601528,-0.019922882,0.029971518,-0.13431294,0.05906384,-0.0126987165,0.0053107115,0.023397531,0.04815828,0.034254055,0.037815202,-0.012468287,-0.014835484,0.0020991634,0.018126301,-0.03013517,-0.043711405,0.013153105,0.048158273,0.005022441,0.01149703,0.035894122,-0.0065947794,0.008283197,-0.029186806,0.006307674,0.019246956,0.037101068,-0.0024143567,-0.0154837435,-0.014119998,0.015937194,0.03734758,-0.025888305,0.019945296,-0.041276883,-0.0035826396,-0.015830053,0.038346384,-0.003230171,0.022354258,-0.008610191,-0.015736535,-0.0054315208,-0.0057387794,0.022768777,0.0040936135,0.028811622,-0.0064418376,-0.035470504,-0.22901206,-0.013002152,-0.035355628,0.005352686,-0.0008722341,-0.0003463022,-0.007330334,0.008589275,-0.0019298526,-0.023314746,0.019754652,8.063893e-05,-0.013533688,0.01948403,-0.03265689,0.009744801,0.008496206,0.025948262,-0.013453662,-0.04245953,0.052477963,0.00907426,0.0003891333,-0.0049531427,0.0066656903,0.03278165,0.0045517418,0.037094805,-0.003496791,0.014378794,-0.031381205,0.03140955,-0.011602503,0.00013115414,-0.03656794,0.031117003,-0.00091668835,0.0048964256,0.025307981,-0.0037459175,-0.023735167,0.029542143,0.019766647,0.0033623371,0.015564877,-0.020267366,0.018048298,0.013774984,0.0043719434,0.015579568,0.029466053,-0.021359958,-0.012972756,0.010019108,0.02027447,-0.01871407,-0.009059491,0.01393738,0.005817783,0.026425434,0.010065378,-0.0052981125,-0.00901053,0.0096339835,-0.039816327,-0.01915554,-0.00172625,0.026346551,0.030318087,0.0027405457,-0.01581906,-0.002168326,0.0006920065,0.021916816,0.0053108926,0.005125349,-0.010041087,0.016923865,0.009051996,0.0074993796,0.004580536,0.03006093,0.019661607,-0.006466226,-0.004082972,-0.029779796,-0.06268283,0.0011506443,0.001116489,0.04577198,0.011728297,0.05853711,-0.021351274,-0.030419363,-0.014612269,-0.01789148,-0.009437285,-0.007091159,-0.019207137,-0.027604464,-0.038108665,-0.029762054,0.024578387,-0.0018312171,-0.02906386,-0.011441585,0.021771425,0.007231713,-0.0030499322,0.0153962,-0.027744126,0.03078026,-0.009125099,0.014535979,-0.016970184,-0.006137063,0.020531692,0.016814025,0.0007163005,0.027243223,0.009166916,-0.010889503,0.053233676,-0.03090878,-0.010069498,0.036499653,-0.005547611,0.027687123,-0.011449,0.044786204,-0.026016379,0.036540393,0.034523595,-0.006346432,-0.017531594,-0.006504492,0.033793163,-0.0018938828,0.020409795,-0.0143280085,0.023910081,0.015077547,0.0066100564,-0.0427776,0.050198216,0.021712862,0.021142911,0.0033574386,0.026002206,0.026821356,0.015352374,-0.04187492,-0.02331654,-0.018742647,0.0063110073,-0.0032499775,0.013088713,-0.007987641,0.020914497,0.023451988,-0.03253827,0.042375114,0.0032858313,0.009744952,0.018262098,-0.027631957,-0.0031228564,0.029229041,0.012253218,0.028199118,0.0046419683,-0.009383207,-0.047213424,0.03294504,0.0023644043,0.0048134564,-0.027729254,0.007348543,0.18941587,0.00019745831,-0.0040213456,-0.018107628,-0.009446873,-0.005573656,0.0024975967,0.031736888,-0.030709164,-0.019255446,0.024182258,-0.011287921,0.007936157,-0.027445672,-0.022071289,0.0032221095,0.0119711375,-0.007550115,-0.02373525,-0.0012697071,-0.039773494,-0.020674367,0.013324155,-0.025190843,0.026434932,0.0151903145,-0.008210269,-0.0027892683,-0.016412036,0.027504927,0.034906097,0.0077136774,-0.04679224,-0.033381782,0.004444386,0.01927424],"query":[0.009141362,0.004595954,0.03697771,-0.03924775,-0.046800263,0.031747133,-0.07023465,0.022561094,-0.011688937,-0.14915372,-0.04322271,-0.029022574,-0.00050914736,-0.017619444,-0.009016437,-0.044816535,0.04303211,-0.014225843,0.05779183,-0.002291718,-0.02282429,-0.0075406088,0.017359925,-0.01071035,-0.049750466,-0.028161423,-0.009303816,0.012247537,-0.011739835,0.17748277,-0.04918404,0.03382273,0.019623248,-0.017774351,0.0247293,-0.04477462,0.054076914,0.023920864,0.041094705,0.036056656,0.027448736,0.009707494,-0.06890787,-0.022756971,0.02506926,-0.044360474,-0.043582845,-0.046317697,0.03907841,0.003059255,0.017070452,-0.04953796,-0.068591975,0.08048904,-0.021913521,-0.0005789084,-0.025811773,0.001021431,0.018705416,0.024491468,0.02461197,0.025139004,0.01057481,0.03664384,-0.027915837,-0.025536982,-0.031523913,-0.0054650973,0.046110906,0.022113234,0.025056224,0.0029362207,-0.008748186,0.078912005,0.05205353,-0.057631776,-0.06591206,0.046554476,0.0057448875,-0.0045846365,0.003022846,-0.052745186,0.014594861,0.029914185,-0.04152043,0.022699066,-0.00077920576,0.0499941,-0.03886061,-0.024076205,-0.043327164,-0.014002699,-0.012609761,-0.053638335,0.011118356,0.02199034,0.051250465,0.03791597,0.0024626926,-0.023437137,-0.07330131,-0.025495047,-0.014415293,0.006935488,0.015914194,-0.0067782803,-0.013770995,0.0034830475,-0.039350506,0.029347982,0.0336771,-0.22949737,-0.0008076763,-0.010952631,0.07436644,0.28442305,0.010808203,0.0437399,0.015002969,-0.038658254,0.0097393235,0.047645193,-0.033433106,-0.04542568,-0.003923318,0.025578182,0.014919509,-0.030072875,-0.024657097,0.011166125,0.020066194,0.038186304,-0.050118513,0.015672637,-0.045378122,0.052034117,0.008239651,0.026902255,0.016955432,0.04428536,0.01364218,0.012282874,0.021115173,-0.030580265,-0.016789744,0.061283704,0.008069433,-0.04806866,-0.0092479745,0.02100864,-0.006943761,-0.051632885,-0.038920436,-0.041672356,-0.0009877835,0.0058009312,0.01703353,-0.028023008,-0.06809856,0.0017250796,-0.04890346,0.0019558868,-0.021626245,0.011225459,0.01934965,-0.022405116,-0.053227946,0.015608035,-0.050081708,0.033420376,0.012188739,0.02208518,0.006269562,0.070168465,0.010270178,0.039613236,-0.009861783,0.03244526,-0.021178339,0.0074334634,-0.048472174,0.009269514,-0.018837482,-0.0070472835,-0.0028551524,0.03200084,0.03357622,-0.015462309,-0.07211984,-0.032640312,-0.007013945,0.021526203,-0.017888065,-0.022385182,-0.020952025,0.030194487,-0.0041723717,0.054698225,0.0069553,0.08490545,-0.00395652,-0.018355275,0.034325823,-0.01722806,-0.0058172285,-0.029398778,0.012643341,0.005674087,0.0066137244,0.05176497,0.040432367,-0.015714383,-0.0013154713,0.04299767,-0.0095045185,0.010788898,-0.009985774,0.08459264,0.028137032,0.015443527,-0.018409409,0.018062046,0.003357799,0.003485326,0.01558474,0.010875887,0.068598345,-0.028975258,-0.007585311,0.006576377,-0.016025715,0.025004933,0.029552866,-0.037232433,0.08333405,-0.014907054,-0.012403186,0.027207484,-0.0020759646,-0.005716154,0.0012968533,-0.051338315,0.0030991414,-0.049901403,-0.013750642,0.033328746,0.035186775,0.015414061,0.05007727,0.045777366,0.046936303,0.027878366,-0.025131162,0.031820938,0.002320502,-0.019894743,0.020488918,-0.013302711,-0.022079494,0.02875668,-0.039758675,-0.008389707,-0.011888884,7.2293005e-05,-0.028272916,0.016779043,-0.03452454,0.0022832032,-0.042493153,0.020115336,-0.01766973,-0.0029987374,-0.030688511,0.00945268,-0.03973479,0.01698506,-0.027812555,-0.0047824327,-0.03518242,-0.059310187,0.040518228,0.021854244,-0.0012633095,0.00037047765,-0.03800379,0.00013466507,0.0022750492,-0.01690499,0.0036892912,-0.002298366,0.008266,0.025322495,0.014996008,0.006741168,-0.01947033,-0.010112819,0.016853217,-0.0037742779,0.015805462,0.0015150436,-0.009745734,0.028309174,-0.0088075455,0.05765364,0.049161237,0.032337308,-0.06329383,0.04436108,0.018124407,0.032403447,0.03815121,0.00211698,0.021197457,0.051220782,-0.01737317,-0.0040834285,0.0046531875,0.015082915,0.0049096467,-0.045221165,-0.009607915,-0.023695724,-0.032131884,-0.0330133,-0.0035803649,-0.0339893,-0.0020626893,-0.0112938145,-0.055258624,0.053895526,0.033153042,0.02823163,-0.004663304,0.014701491,0.0034926897,-0.0069953664,-0.0007391118,-0.0013234443,0.051826,-0.039459426,0.013428908,-0.110696636,0.004368332,0.02412593,-0.00088134146,0.004740194,-0.017706087,0.00861038,-0.027247246,-0.04277286,0.0007272358,0.021929082,0.044814423,0.032066938,0.028490424,0.022975137,0.048711598,0.017809799,-0.017583007,0.046345733,0.0333727,0.016765734,0.0071594766,0.02770035,-0.0043402202,-0.016939458,6.0164613e-05,0.033674825,-0.043570455,0.020291887,-0.07578042,0.041574087,-0.005172457,-0.00014437338,0.046893995,0.0036088147,0.03663702,-0.011544612,0.0056960704,-0.0027600643,0.02872558,-0.059132256,-0.047727656,-0.056918543,0.014415206,-0.03400833,0.05160065,-0.013925364,-0.0012726068,-0.0011034599,-0.021532025,0.2562787,0.0009353548,0.009189153,-0.019769715,-0.010833541,-0.023948925,-0.0281474,-0.020807952,-0.023689434,-0.0051260884,0.0002992211,0.019269975,-0.010504378,-0.053148523,0.06596755,0.011835593,-0.053959582,0.003334592,-0.0030921833,0.0063317167,-0.0034783178,-0.0018402236,-0.015882222,-0.061058633,-0.010256204,-0.008864539,-0.008269289,-0.016946174,-0.027274856,-0.013344695,-0.04232155,-0.010031453,-0.04358959,-0.00059142435,0.025941359,0.04681491,-0.04684226,0.021193866,0.009528904,-0.03059471,9.103176e-05,-0.0108007165,0.028784294,0.049741335,0.005988208,0.047806073,-0.033066835,-0.036658075,0.003975455,0.050343685,-0.013040413,-0.004234762,-0.013871302,0.03732544,-0.013228659,-0.021114368,0.03673849,-0.043730993,0.011820268,0.0110185305,-0.014192025,0.030362688,0.018430594,0.010310638,-0.0040919925,0.045622192,-0.039158497,0.004683485,0.026404124,0.009170525,-0.05821508,-0.0047077886,0.018412104,0.021103522,0.019285608,-0.026990823,0.0021562623,-0.028101511,0.01283861,0.0003837563,-0.03246547,-0.037615,0.013941199,-0.013550802,-0.028300837,-0.012972145,0.014565305,-0.039036896,-0.022476148,0.0054726256,-0.0041085356,0.0021333254,-0.04454063,0.014016376,-0.0036414117,0.0013365707,0.020766065,-0.00236656,-0.0082180835,-0.002792824,0.03492279,0.020810213,0.023142295,0.027947282,0.017264673,-0.0044136727,-0.051782228,0.035532117,0.00052357104,0.021538757,0.040478583,-0.03465764,0.03336233,0.028250037,0.010716356,-0.044108294,-0.1286513,0.020344133,0.009145648,-0.023553083,-0.018684773,0.027276877,-0.019683843,-0.007957278,-0.05181691,0.012355596,0.0042261095,0.011085475,-0.026601885,0.044987485,0.050809897,-0.026580371,0.017566415,-0.0022873797,0.011607066,0.022679782,0.02928546,0.037081253,0.033981934,0.016948208,0.026014956,-0.02507834,0.0027698395,-0.010544785,0.018554475,0.004553672,0.004812276,0.0017841029,0.007963742,0.0140855145,-0.011438274,-0.016218005,-0.0042651426,0.021249129,-0.012842189,0.057435278,-0.0045676217,-0.013319062,0.029793926,0.008008972,0.025593007,-0.019840583,0.06253901,-0.20818529,-0.0015039276,-0.036741894,0.013506826,-0.06559355,-0.037097666,-0.040470075,0.029526504,-0.02129934,-0.015362309,-0.037093434,0.025780901,-0.02169789,-0.01826107,0.0011504953,0.016264388,0.022198051,0.0017502216,-0.026427338,0.023911444,0.036172815,0.009171245,0.01622899,0.029588213,0.046051964,-0.005178562,-0.015766423,-0.02233792,0.0154770585,-0.042314034,-0.061561074,-0.024674572,0.008555333,-0.011363019,0.02854752,0.0435193,0.017966744,0.007059303,0.008724762,-0.012279953,-0.040521014,0.013225853,-0.024950888,0.00672853,-0.012467484,0.027378952,0.019002918,-0.0018073216,0.003182903,-0.00640826,0.026117092,-0.03554122,0.007454892,-0.031156573,-0.017540727,0.040356506,0.040455367,-0.023704214,0.0144551955,-0.012003787,-0.00527264,-0.016833952,0.0044396147,-0.010808355,-0.007439104,-0.047041703,0.049134262,0.01985129,-0.0026472223,-0.0018317433,-0.0007479256,0.0075065284,-0.0021319753,-0.031783793,-0.007768143,-0.042735875,0.016017264,0.02017616,0.021217184,0.011241873,-0.0015305947,0.0034506351,0.05601349,0.0031104072,-0.042243995,0.043106645,0.017769672,0.029853879,0.039827704,-0.004492979,0.031013492,0.06481314,0.042446632,0.0074939784,-0.033371594,-0.033309013,-0.00029873793,0.030500427,-0.017335245,-0.004711148,0.025977118,-0.030225681,0.03288895,-0.036582064,0.0013143751,-0.020926116,0.00029351137,0.022387426,0.014627345,-0.012828858,-0.01678117,-0.041651655,0.008810608,-0.023956291,0.021726042,0.024234302,0.0044094087,-0.006893426,0.003260806,-0.030014535,-0.008796582,0.0009127952,0.023538042,0.025771372,0.00817079,-0.01606769,0.0030451927,0.060596265,-0.009031857,0.028002204,-0.035035346,-0.015453503,0.02862778,-0.028327549,0.038310345,0.04303542,-0.033378135,0.014452158,0.020236226,-0.010744217,-0.012823874,0.011954281,0.02374289,0.030712659,0.022504862,0.00043438782,0.04677268,-0.030789826,-0.03222936,-0.021251954,0.03357492,0.01938137,-0.020453807,0.015741423,-0.006050099,0.004891595,-0.028534219,0.02097625,-0.012349876,0.022163508,0.0069947666,-0.0060411333,0.032547735,0.0009285639,0.017488115,0.004686597,0.0032805584,0.002997707,0.010665596,-0.0063236565,0.043216407,0.0025371835,0.0037366864,-0.03353733,0.015251257,0.041701194,-0.009997456,0.003141244,0.20778349,0.05473673,-0.011367685,-0.009103204,-0.013249972,0.018358255,-0.0073219766,-0.008362824,0.0018251024,0.0055465237,0.028624987,0.03879128,0.0032198448,0.018881526,-0.037026323,-0.062366735,-0.022519086,-0.02283086,0.0145174945,0.022359762,-0.014134539,-0.021690674,0.020609805,0.0281909,-0.022294084,-0.0052796733,0.0071761776,0.017985566,-0.015375388,0.041714344,-0.007927094,0.04063204,-0.038843896,0.02677475,-0.003225756,0.029741386],"query-ar":[0.012912377,-0.026964284,0.042006046,-0.009919589,0.011826653,0.02066793,0.0073334696,0.00093632605,-0.012834916,-0.12568028,-0.018015638,-0.06255204,0.0036767158,-0.016295718,0.0053345356,-0.036792744,0.0028105571,-0.008689444,0.03987337,-0.012977211,-0.023243744,0.03389244,0.020958157,0.035092637,-0.04082576,-0.031819664,-0.020780854,-0.06650411,-0.026464421,0.19440737,0.022673646,-0.01568262,-0.005027088,-0.03723543,-0.0004647678,-0.010276287,-0.03529427,0.04605182,0.049928986,0.0100556025,0.046311,0.0075059347,-0.041625816,0.012018806,0.019316237,0.0009565418,0.06425472,0.012391087,-0.019256324,-0.0048690583,0.12698612,-0.0026035344,0.034859966,0.09040641,-0.042160507,0.06484707,-0.06328723,0.042266786,0.031262375,0.023188371,-0.010253917,-0.025991848,-0.03914155,0.02878137,0.021311061,-0.011020493,0.0323132,0.00069041835,0.01299216,0.05467576,0.05378651,0.021354718,0.07797217,0.020146864,-0.015437386,-0.043637384,-0.04677828,0.012953245,-0.020631213,0.0523168,-0.011579458,-0.016622366,-0.009242118,-0.015668295,0.056574393,0.0049962746,0.0024452857,0.005502925,-0.016892683,0.02995019,0.042964417,0.069074035,-0.048362453,-0.0014372955,0.0028510592,-0.019208401,-0.020487364,0.071785234,0.041782055,0.018642297,-0.051385883,-0.026604773,0.019961817,0.0126116965,0.028482942,0.011293173,-0.035029907,0.019625647,0.022006562,0.020493975,0.009593091,-0.26825944,0.03311504,0.03572855,0.018231008,0.28733236,-0.040448662,-0.032459676,0.0074919746,0.024102814,-0.010603307,0.044702217,0.017732471,0.023911102,-0.02086419,-0.011383285,-0.002029338,-0.040618002,-0.0065802047,-0.008673013,0.014239556,0.0435511,-0.015087997,0.05332902,0.010992904,0.01558836,-0.021518013,0.050145313,0.014655923,-0.04873621,-0.04295391,-0.059176445,0.024585474,-0.016581569,-0.032731105,0.06321178,0.026754994,-0.045625858,0.01826593,0.019418236,-0.06476888,-0.022642756,-0.03347063,0.052621283,-0.010813447,-0.01593875,0.0331518,-0.01782018,0.030861229,-0.018707287,0.008638777,-0.0158159,0.0337828,0.015913814,-0.010838099,-0.0040348344,-0.0099229235,0.08834723,0.031118173,0.016817637,-0.07792061,-0.015428271,-0.022967052,-0.012112393,0.05759065,0.030964019,0.044617046,-0.003605594,0.008854465,-0.020369567,0.004665397,-0.020126253,-0.028578965,0.004053499,-0.010887943,0.035636123,0.039436128,0.0027362143,0.025335126,0.023646483,-0.008598673,-0.0036893382,-0.036580954,-0.01743097,-0.031853955,-0.001773087,-0.015043672,-0.050746497,0.03887207,0.06327762,0.0036558378,0.001376088,-0.030745506,-0.00090921385,-0.034986388,0.04267238,0.0010097886,0.019426363,0.050943483,0.0146085825,0.0037746353,-0.0029572144,0.015144985,-0.02652233,-0.0205429,-0.002972953,-0.04098875,0.054780573,-0.024345519,0.0303709,-0.0011637382,0.00792233,0.0219669,-0.041679054,-0.0070239576,0.011595586,0.043125853,0.028461251,0.032604847,0.017710593,-0.0053935824,0.02997965,-0.010889849,-0.06501154,0.054922666,0.0070473915,-0.055261724,0.04063437,0.0045423787,0.0042085396,-0.014661251,-0.011600813,0.02557362,-0.010362737,-0.010657496,-0.04181437,-0.0018825098,-0.0005285879,-0.028445393,-0.04432249,-0.02063948,0.0048538,-0.035298042,-0.044801556,0.047737654,-0.014260016,0.036989927,-0.006663293,0.025192203,0.023595408,-0.038055666,-0.0141786635,-0.0346366,-0.021709863,-0.0011641703,0.026980646,-0.043309733,-0.016095728,-0.0140498765,-0.025054835,-0.015079598,0.015181005,-0.032908306,-0.0013132504,0.024870427,0.011415999,0.00067711127,0.01904832,-0.014688074,-0.0571701,-0.0062549794,0.04743147,-0.0034537727,0.04805402,-0.0051575475,0.0017743412,0.0015056446,0.021904543,0.01656959,0.004842959,0.009512309,-0.02343464,0.013292645,-0.015553246,-0.034230717,0.041075297,-0.004819808,-0.01312882,0.010754313,0.020994952,-0.007770605,0.030754622,0.0017101843,-0.020535797,0.04476654,-0.031678792,-0.03886526,-0.006769284,-0.033495024,-0.045645997,-0.016845241,-0.034635767,-0.0014040492,0.028485106,0.014836302,-0.048290327,-0.032136846,-0.030830123,-0.0015045905,-0.08921331,0.010101639,-0.044385273,0.004275267,-0.060343042,-0.011564068,0.019067876,0.006978652,-0.021732746,-0.006697218,-0.013111714,-0.02391677,0.0037199368,0.005313943,0.040792532,0.0064067696,-0.0062371506,0.0104652,0.022684174,-0.007429049,-0.021347139,-0.0077350517,-0.12656716,-0.024546286,0.017227057,-0.017195707,0.017097386,-0.006647159,-0.0017176842,-0.040061656,0.023927713,0.020648153,0.03718383,0.01562129,0.020392379,-0.016372072,0.012048714,0.023579063,0.034565207,-0.011787117,-0.024294566,0.0023890035,-0.008221712,0.038094044,0.03168422,-0.01453801,0.00025569662,-0.017978774,0.003130547,-0.024482466,-0.0038752032,-0.035443272,-0.0009599651,-0.03711318,-0.0003626042,0.029939182,0.019510308,-0.005351495,-0.0013859802,-0.017567286,0.04277606,0.011561627,0.037930813,-0.020578345,-0.050107595,0.025094107,-0.025539853,-0.025169723,-0.03452622,0.0063982764,0.04013468,-0.034750417,0.2778944,0.023640607,-0.048358172,0.019925201,-0.009518524,-0.019170804,-0.024938328,-0.024864946,-0.0037452455,0.0032678149,0.031671662,0.050531674,0.00091232604,-0.020852558,0.045520216,0.02129542,-0.054820213,-0.062236078,-0.007104808,0.016685074,-0.017508844,-0.012981764,-0.025393786,-0.011009314,-0.018829085,-0.019421054,-0.07773863,0.0338014,-0.02937876,-0.011404514,0.018277405,0.059940156,-0.06272499,0.003702604,0.021678474,0.03275712,-0.040243737,-0.020670608,0.0407745,-0.00897584,-0.0063303644,0.001323629,0.027778348,0.040334735,-0.006579704,0.02413432,-0.04428828,0.023779033,-0.009060223,-0.016242897,-0.04039821,0.008540102,-0.009247779,-0.011054783,-0.0137936715,-0.008147613,0.014545311,0.0035439457,0.058437657,0.0282486,-0.0020235088,-0.00029788646,0.053863525,-0.034584574,-0.03286973,-0.026303696,-0.015808001,-0.0057327356,-0.029038124,0.0036349192,-0.031501625,0.009889992,-0.023535216,-0.025368711,-0.013006207,-0.019468902,0.0066996543,0.010086089,0.026899936,-0.0021945098,-0.00076756824,-0.011865144,0.03728685,0.008726371,-0.008997842,0.026238557,0.048171476,-0.054580465,-0.007157809,0.024976194,-0.031210968,0.008573531,-0.027458014,0.035662882,0.010387063,-0.004839074,0.033639908,0.0036325967,-0.04352459,0.0062987404,-0.011899663,-0.0043507735,-0.0074272165,0.014677723,-0.010972172,0.019896708,0.024513595,0.019550037,-0.0010945242,0.0049403547,0.00742843,-0.032270458,-0.030283637,0.003717873,-0.019816933,-0.0031070437,-0.09003385,-0.016660672,0.008991086,0.0019014082,0.00424158,0.045312762,-0.013051466,-0.011020735,-0.05809049,-0.00771896,0.0063540186,-0.00058028346,-0.011497716,-0.00026027014,0.026428716,-0.007908498,-0.0318349,0.044548076,-0.0025393981,-0.014809065,-0.001554318,0.0453973,0.0009773547,0.022711879,-0.023070663,-0.037371393,-0.027175758,-0.037490666,-0.021805262,-0.012363658,0.00038987407,-0.010904766,0.027410485,0.017181031,-0.03967857,0.0071224594,0.019030578,-0.008944078,0.037441093,0.010830807,-0.02374203,0.009942253,0.047170088,-0.023585282,0.006472621,-0.035718255,-0.012380802,-0.22605065,0.020499833,0.006520095,0.0034182598,0.023402328,-0.051009372,-0.024377234,0.031599723,0.025160719,0.005492919,-0.012131717,-0.016619263,-0.042195305,0.04887694,0.0051193694,0.0045032375,0.016609985,0.041525282,-0.03767191,-0.03706955,0.03275385,-0.031385552,-0.015982395,0.022259977,0.021335103,0.017043397,0.0114146145,0.018028837,0.02604173,-0.0059787603,-0.026527701,0.0025951606,-0.020125229,-9.20535e-05,-0.046437073,0.028809724,-0.009788008,-0.029670384,0.02527545,-0.04427748,0.0018448365,0.044100706,0.004860907,0.0069282125,-0.0118323285,-0.013394255,0.00059181533,0.00083986804,0.00075263693,-0.0062624393,-0.012304469,-0.01806113,0.036815565,0.0033110518,-0.000923361,0.047516588,0.0042510964,0.013083579,-0.018696144,0.0133818155,0.0040445183,-0.018977342,0.009232794,-0.015398945,0.002358386,-0.007548928,-0.011269329,-0.035115253,0.017311327,-0.059313323,-0.0030222547,0.013308608,0.016435903,0.03443911,0.012755587,-0.052913677,-0.061738502,0.021430565,-0.020790663,-0.014643233,-0.011626874,0.030160006,0.018106898,-0.020611528,-0.014825576,0.045453727,-0.00516928,0.034327514,0.02579645,-0.0009859997,0.007862472,0.046130944,0.0029896616,0.031751156,-0.025216283,0.029717602,-0.006721698,0.04100046,-0.03114247,-0.0019021246,0.0006852417,0.0077056657,0.030973969,0.012161686,0.0044473023,0.020161776,0.047711164,0.007926917,0.037228923,-0.0053876946,-0.008859571,0.022193214,-0.026714962,0.02587052,-0.026978066,0.016068157,0.0076224143,0.027112184,-0.029198281,-0.006904679,-0.012468527,-0.029232942,-0.029496552,-0.010729126,0.012094227,-0.013871443,0.013224645,0.05363996,-0.0017824952,0.05204431,0.009319799,0.030756518,0.022026096,-0.042806365,0.034299105,-0.012875964,-0.059701256,0.0051450203,0.04306331,-0.012148461,0.018197816,-0.03733255,0.0072999117,0.0015358705,0.010695309,0.01944106,0.058162466,0.003660973,-0.0191717,0.017532919,0.015965726,0.029649066,0.0034331626,-0.013076831,-0.009437651,-0.023399493,0.014646977,-0.016471885,-0.005869638,0.015270202,-0.029410629,-0.004188104,0.024890201,-2.6467487e-05,0.022083413,-0.023550238,-0.031999223,-0.020387322,0.008804396,0.0065724696,0.0034411736,-0.034368772,-0.0074870028,-0.0110877035,-0.033621926,0.0030944883,-0.0046580387,0.024106653,0.1962051,-0.011503531,-0.005079654,-0.076067634,-0.019941041,0.041237697,0.028077899,0.02916759,-0.017473448,0.036483962,-0.020628082,0.019222528,0.016342012,-0.022395536,-0.019360624,0.0021201738,-0.0100721875,0.009217445,0.01028111,-0.011505838,0.017655015,-0.0008417505,-0.031385537,0.006442161,-0.0019086663,0.02529264,-0.040223245,0.01723835,0.007232797,0.020407096,-0.0005885056,-0.01812987,-0.012173368,0.029638974,0.034451507,0.0032483048],"query-bn":[-0.014283904,-0.032585353,-0.007086229,0.03582342,-0.03260066,0.059361767,-0.0003441072,-0.016196962,0.010190764,-0.11147432,0.05008422,-4.5387977e-05,-0.053204715,-0.002411035,-0.04851426,0.02385611,0.049126785,0.010326392,-0.010404369,-0.008518706,-0.005902568,-0.00056165725,-0.060589306,0.03840618,0.031958267,-0.03386067,-0.031877693,-0.06482223,-0.07292989,0.19768426,0.01434052,0.0023536012,0.040538263,-0.035743296,0.041850336,0.037566613,0.0127388835,0.03307766,-0.025903052,-0.020613678,0.05395535,-0.004214766,-0.020561194,0.04216762,-0.013114766,0.0064498116,0.047123775,-0.021667002,-0.04353801,-0.030082958,0.054797687,-0.09164422,0.035231803,0.035722584,-0.021530453,0.032527983,-0.010167543,-0.033514615,-0.022525813,0.042551693,0.00913002,0.038616903,-0.03094929,-0.015634488,-0.0036518718,0.033305492,0.04415115,0.05644602,0.019409342,0.059792854,0.057435643,-0.025187708,0.08083236,0.0003737,-0.0045065153,-0.058361493,-0.072439365,0.035297062,-0.019071275,0.0056812926,-0.020437445,-0.08895194,-0.011658879,0.040644318,0.06198864,-0.05379186,-0.061675902,0.041815124,0.009628687,0.03820689,0.029555537,0.008420512,0.032487307,-0.015929183,-0.011294521,-0.05920862,-0.016617535,0.02924488,0.022780715,0.027933173,0.046323836,0.07332908,-0.030594185,0.036574155,-0.0098189525,0.0037417288,0.007813139,0.019286864,-0.05182492,-0.04911212,-0.026242748,-0.24034038,0.0008896462,0.009467541,-0.06082142,0.24663126,0.026641648,-0.018844433,0.07582033,0.024331046,0.024640623,0.03701211,0.03138657,-0.06355401,-0.05739947,-0.018752214,0.019576656,0.039414167,0.017139312,-0.016484123,0.051734183,0.010895154,-0.008074422,0.04110029,-0.0031910206,-0.015228478,-0.006643562,0.016443048,0.1146702,-0.043390937,0.008315911,0.025700398,-0.049095247,0.0290852,-0.061592326,-0.05931246,-0.0010917025,-0.0011172752,0.010035458,0.028183589,0.06799789,-0.02021709,-0.04743889,-0.014289981,-0.06199855,-0.003812707,0.03687052,-0.10079742,0.018675549,0.01996977,-0.020337122,0.053048108,-0.048402887,0.04186571,0.00938716,-0.02854487,0.009534667,0.0005064484,-0.058342747,-0.024578942,-0.006606582,0.053330388,-0.0049192146,-0.05406556,-0.0035056896,-0.05255962,-0.004115255,-0.020663075,0.02333331,-0.025870172,0.0104535585,0.029759755,-0.01458736,-0.021283677,-0.027546948,0.02169452,-0.012196953,-0.017414276,-0.046188932,0.043683473,-0.011794784,0.020683253,-0.024654673,0.0021245973,-0.027384903,0.05566953,0.040163994,0.0249048,0.014664653,-0.0056234086,-0.019362118,0.031641394,0.008280985,-0.060525328,-0.010178011,0.024250269,0.00066757103,-0.042660862,0.03845187,0.041602544,-0.0015540136,-0.0404835,-0.0709274,0.09271624,-0.03530371,0.029116075,0.0028299005,0.037027467,0.021294167,-0.034171812,0.0059547247,-0.042183258,0.028025584,-0.007632454,-0.030693015,-0.025115585,0.04123729,0.004950713,0.007828223,-0.015181942,-0.01154228,-0.077660546,-0.020225346,-0.01636164,0.07331029,0.0061693434,-0.04696084,-0.016386032,0.03112072,0.039428014,0.0060389573,0.008828959,0.017133018,-0.053430162,-0.0081858095,0.00029120475,-0.03464634,-0.0029611813,0.036948517,-0.04307359,0.015965864,-0.0045315805,-0.0192972,-0.053766333,-0.027968585,0.007975102,0.029779345,-0.0057129418,0.010577179,0.01912268,-0.021807669,-0.0075036334,-0.00087964174,0.019241823,-0.006393868,0.0003851941,0.0026732425,0.00938951,0.003217678,-0.0533325,0.0012165295,0.006572378,-0.009730526,0.0139474915,-0.009964625,0.026905838,-0.010383077,-0.035319824,0.012776586,-0.022945981,0.047253452,0.04324978,0.042063493,0.015539153,0.010557636,0.002477339,-0.011314381,0.029307202,0.0031438624,-0.00040475547,-0.017494882,-0.011571635,0.086651064,-0.036230024,0.027547266,0.0040109656,-0.042660695,0.019825967,-0.009410819,-0.0325573,0.0047380645,0.018420694,0.010490497,-0.008589622,0.013573162,0.006037556,-0.0071579916,0.04288291,0.0018880679,0.026426496,-0.041488897,-0.021908036,0.02584329,-0.0929857,0.0511296,-0.005334164,-0.01154804,0.03362052,0.0026956615,-0.07801243,-0.0104922755,0.05836148,-0.058926515,0.0048337057,0.007785085,0.00065754954,-0.018839309,-0.0027176829,0.0018625887,0.017594695,0.010450902,0.013937091,-0.0060609845,0.020314002,-0.0018304527,-0.0033515843,0.015037075,0.0060913223,0.0030185655,0.0057066446,0.049153294,-0.12561095,-0.02777109,-0.017293638,-0.0011841793,-0.03108295,-0.009916914,0.01011441,0.010084828,0.059634425,0.02882658,0.04671525,0.04530667,0.0055029234,-0.025353443,-0.0127639705,0.022674814,0.016421601,0.008336114,0.03266476,-0.013092093,-0.007183622,0.021348333,-0.007938576,-0.0031347843,-0.025303394,0.0097688995,0.024678888,-0.07536573,0.020427996,0.0078232065,-0.008294243,-0.004633053,0.0008508906,-0.008141754,-0.0068455283,0.0025236993,-0.0021411625,-0.0025388603,0.058837637,-0.028465534,-0.006171778,-0.044471867,-0.0219836,0.02541901,-0.031953227,-0.008996445,-0.0022721922,-0.006715432,0.03918388,0.04033067,0.23391522,0.0067570177,0.0024164382,-0.019381883,-0.019607278,0.019754639,-0.0065860515,-0.015578786,-0.0039056884,-0.0013186999,0.007780108,-0.010439729,0.0005126666,-0.042174663,0.043881476,-0.061917204,-0.024390662,0.006378057,0.012668427,0.0029269268,-0.015235738,0.018730812,0.006507802,0.024226714,-0.022701409,-0.006843185,-0.018151607,-0.018869733,-0.052159216,0.00168989,-0.033332985,-0.014363193,-0.059178147,-0.013511112,0.0034105647,-0.0013930312,-0.03517708,-0.0014212792,-0.024445023,0.0033450003,-0.015866151,-0.002314401,0.0027148672,0.021637207,-0.0016052815,0.04873276,-0.013194774,-0.0025202625,0.007528928,-0.033563748,-0.0617967,0.017297253,0.034448374,-0.048572235,0.023655292,-0.020513225,0.01071227,0.045478385,0.02351891,0.009286714,0.0038594452,0.012838999,-0.0025624875,0.0360648,-0.011592961,-0.029117577,0.026241805,-0.017238678,0.024755463,0.03532811,-0.0056134467,-0.013671042,-0.0021276227,-0.027815724,-0.04795001,-0.044154905,-0.009265045,-0.013988351,0.029315569,0.022011826,0.019897042,-0.0015857294,-0.01166499,0.021865569,-0.0074022957,0.0010840024,-0.036729906,-0.045238387,-0.031533163,0.024128897,0.019660994,0.018559456,-0.050077207,0.014597563,0.013898389,0.027969193,-0.027359527,0.01798935,-0.0060320687,-0.014237529,0.0017420017,-0.018401437,0.036998425,0.02889159,0.014318248,-0.034273405,-0.011966897,0.011999181,-0.018836733,-0.0077045965,0.039532036,-0.012960311,0.0066662678,-0.024468675,0.017441638,0.034082074,-0.11804592,-0.00231895,0.017260928,-0.013480433,0.018278114,0.07059869,0.016593847,0.039480805,0.011248729,0.012148784,0.011284118,0.023781603,-0.01184716,-0.03904462,0.054810047,0.044046167,-0.011217997,-0.0011532559,-0.028339608,0.0032513728,0.011836072,0.022567037,0.028512603,0.016248822,0.018091071,-0.009204676,0.017438622,-0.023183411,-0.012667928,0.03223768,-0.0047645043,0.02582784,-0.019951697,0.03318307,-0.039838396,-0.03511877,-0.042946085,0.015252066,-0.007952521,0.026041042,-0.027720544,-0.026963824,0.049855653,-0.024512315,-0.04483822,-0.0033772283,-0.014328414,-0.21260008,-0.021618802,-0.0033114518,0.031192936,-0.039138507,-0.0061880117,0.0074678953,-0.03540431,0.020377696,-0.019945286,-0.014023053,0.032802626,0.007962186,0.005959074,-0.025888214,0.051449012,-0.0035722319,0.042830143,-0.0032935564,-0.0059657604,0.011694917,0.0026594105,0.033542246,0.0068228478,0.018144911,0.025143128,0.011150576,0.0050408365,0.053375136,-0.016684994,-0.0396637,0.03755822,-0.04700934,0.030603206,0.000985058,-0.006290548,-0.007464764,-0.04061995,0.019389784,0.024897536,-0.016398435,0.015903438,0.076358035,-0.0123423,-0.023789624,0.048000913,0.026230749,-0.012267852,-0.013345723,0.01953544,0.033187103,0.011271347,0.027419945,0.02807335,-0.010415939,0.021409733,0.022234453,0.046453886,-0.020445924,0.010003683,0.034850687,-0.0051091625,0.036415614,-0.007918252,-0.006146234,-0.012061008,0.017666312,-0.011319879,-0.0074420786,-0.0056878948,-0.018156823,-0.010127166,-0.04624462,0.020985955,0.00942551,-0.02381508,0.039336145,-0.0124002835,-0.016688,-0.00849724,-0.024274766,0.011635106,0.043512285,0.014693019,-0.011062314,0.015190279,-0.031323086,0.036560196,-0.025126273,-0.0074035292,-0.034585845,0.07324744,0.019608758,-0.014134982,-0.02675488,0.0006008162,-0.039221592,0.021392943,-0.00033311849,-0.014487402,-0.021864666,0.04405036,0.015080339,-0.008358248,0.049131833,0.0056672995,-0.020608421,0.013528447,0.026321538,0.0024544871,-0.009848348,0.028310189,-0.027632393,0.019624433,0.007846689,0.008801481,0.023989264,0.026651973,0.0032711236,0.03324445,-0.0061697625,0.012352843,-0.03974976,0.026942775,-0.012852951,-0.055285104,-0.010468415,0.0014903456,0.01794791,0.007824344,0.020564593,0.012007006,-0.0019553513,0.007188942,-0.016295565,-0.00091921486,-0.03137089,-0.0045528156,0.04271274,-0.03446436,-0.022342527,-0.0040172115,0.032868057,-0.015024201,0.02209828,0.03422828,0.054281443,0.021136513,-0.050634563,0.019144146,-0.020154815,-0.0057925265,-0.0061266315,-0.013004304,-0.016320357,0.0043133725,-0.008415729,0.0050538555,-0.029015997,0.018440079,-0.022250473,0.019534066,-0.014812882,-0.00080761453,0.005083712,-0.020507872,0.0057715536,0.0037333027,-0.025837285,-0.011647397,0.0034763117,-0.046982516,-0.01860974,-0.010674708,-0.0071402574,-0.0044842483,0.058213443,0.020458855,0.15588413,0.048154812,0.008268314,-0.026240623,-0.024578892,-0.004446078,0.01333233,-0.015882857,0.0077365637,0.031154504,0.023802966,-0.006410838,0.012035792,0.0059297504,-0.011824232,-0.021293534,0.027096229,0.007305008,0.004098421,0.036834795,0.019948639,0.03226637,0.006986329,0.026015263,-0.047078833,-0.007146662,0.010272631,0.03259122,-0.0033198167,0.012443621,0.011641396,0.0036574276,-0.010790068,-0.02994261,0.022831753,0.041375425],"screen-280":[-0.05983978,-0.033894524,0.0142377885,-0.024808958,-0.008878919,0.0396803,-0.029327292,-0.011993032,0.018527312,-0.1646354,-0.06089205,-0.0065169884,-0.02644371,-0.037424013,0.031607043,-0.017923292,0.034616653,-0.018928805,0.055336453,0.0034153042,-0.0011149668,-0.025770508,-0.02700622,-0.006311806,-0.020885054,0.011359918,-0.005796749,-0.0415306,-0.077534534,0.285277,0.039657008,-0.008081452,0.027476288,-0.00040380657,0.043276515,0.008439147,0.0072281575,0.032177363,-0.019914644,0.042964697,0.007217651,0.0020351866,-0.047545116,-0.021583825,0.020272063,0.003476253,-0.027975345,-0.054557864,0.011024728,-0.03357325,0.03237294,-0.050656997,-0.00781631,-0.038293194,0.023754897,0.010260471,0.005551646,-0.035735156,0.011889041,0.00047251504,0.03297164,0.022105822,0.018055798,0.010116994,-0.02734988,-0.0058911266,0.024896175,-0.028229326,-0.014235704,0.004039065,0.032342527,0.0043769227,0.012267627,0.007996829,0.016365293,-0.066811144,-0.10681943,0.019106956,-0.0089295795,0.022106789,-0.006024726,-0.035357863,0.0040154345,-0.006212667,0.02793703,-0.052862912,-0.012921934,0.028839849,-0.047932856,-0.0032822574,0.0031513467,-0.014453649,-0.015705388,-0.012990224,0.0014523277,-0.04029227,-0.0381239,-0.03617331,0.00095860835,0.0509209,-0.05024042,-0.01830696,-0.0047098147,0.013959416,0.023031624,-0.04322544,0.014220318,0.009477594,0.021810193,-0.021213524,-0.020936308,-0.3023003,-0.03366934,-0.013808458,0.004257463,0.29577273,0.01145492,0.013968421,0.015862754,0.016983896,-0.0214766,0.047536105,0.020251319,-0.034552127,0.02333534,-0.0004931196,0.056533586,0.021895265,0.03144959,0.016099302,0.081492275,-0.015129838,0.029894741,0.021212129,-0.017276404,-0.018571218,-0.04605131,-0.006652737,0.04672729,0.024362512,-0.018614218,0.016697694,-0.007019647,0.001034119,-0.04687177,-0.001118708,-0.016649587,-0.00077131396,0.025129186,0.00087075133,-0.027694123,-0.013816733,-0.03543334,0.0373317,-0.070165105,-0.0029061267,0.014204828,0.012724633,-0.0064177937,0.0023643945,-0.026174417,-0.027888063,-0.0044771833,0.039348233,-0.0025701192,-0.042308845,-0.056559213,0.003274938,-0.034231085,0.036595795,0.01177345,0.061117437,-0.008030322,0.020055683,0.029961048,0.0249264,-0.013335771,0.02997832,0.019887624,-0.044495266,-0.022962831,-0.0338258,-0.0003308293,-0.027172934,-0.02506398,-0.026251065,-0.026126483,-0.038748987,-0.05198333,0.0048761456,-0.0045880005,0.014284603,-0.018620469,-0.06849197,0.023634495,0.0013510394,0.07684499,-0.040697757,-0.02901489,0.010269978,0.034066405,0.024383783,0.014090645,-0.00042272368,0.0037273543,0.0055551785,0.0005815828,0.028180983,0.049766317,0.012845819,0.05173364,-0.038813498,-0.023708519,-0.013353567,0.014922534,-0.012786736,-0.024556685,0.073198326,0.015259118,-0.03413008,0.00089755194,0.033682164,0.09335208,0.0016690982,-0.028234,0.03303509,0.06483678,-0.0023480807,0.03987167,0.033593494,0.035603847,-0.0018483383,0.041413486,-0.014455514,0.05609787,0.02807548,-0.0017378904,0.012826598,-0.0010294269,0.05258823,-0.029811513,0.0048134075,-0.003620651,-0.018455837,0.048902076,-0.03420733,-0.005613675,0.028831892,-0.0511449,-0.016588708,0.015040467,0.021818265,-0.0042836573,0.003043545,0.012753277,0.0046465234,0.02515606,0.014266072,0.040606137,0.019106355,-0.02497873,-0.0017124949,0.015080342,-0.043840703,0.02260731,0.021276597,0.0071737557,-0.024165254,0.029727018,-0.0097045945,0.008555768,-0.0034844046,0.0004328041,0.014200883,-0.009459553,0.01075861,-0.013761793,-0.006858852,-0.008674079,0.003449796,-0.020314312,-0.026284534,-0.01823415,-0.017151784,-0.00056621357,0.001045334,-0.010888204,0.019842641,-0.0039910744,0.031708404,0.00621508,-0.028312415,-0.029977856,0.005054725,0.0011283841,0.025624625,-0.012371511,-0.0076814382,0.039554086,-0.023439648,0.00019508631,0.014222873,-0.01865166,-0.02573535,0.0209098,-0.012298327,-0.01403167,-0.007111843,-0.0017070975,-0.023504054,-0.0046533593,-0.026827753,-0.022048946,-0.0012130511,-0.003846552,-0.015903391,0.029714976,0.016234728,0.027288388,-0.125628,0.004442548,-0.006615925,-0.035401978,0.005071395,0.017247718,0.011393617,-0.016384669,-0.014342018,0.020104567,-0.0019760334,-0.0038902692,-0.010707693,-0.020183338,0.018193835,0.017920146,-0.01421266,-0.014074902,-0.0010691644,0.021406857,-0.0022893252,-0.0011686244,-0.16268376,-0.010536631,0.001830539,-0.012976866,-0.0034943237,-0.08393189,-0.0013601787,0.037825495,0.03538677,0.01588086,0.022341693,0.012757891,-0.000537405,0.007360601,0.013162958,0.048597064,0.02173779,0.017926887,0.019975763,-0.0028772897,-0.009241723,0.0022588992,-0.0072352723,0.013379137,0.0132240895,0.023495886,-0.013953243,-0.0059702685,-0.0059874062,-0.025319124,-0.0029933285,0.02343867,-0.04027187,0.021834446,0.011247466,0.015131375,-0.0040550977,-0.024719285,-0.018320195,-0.020779226,0.015208617,-0.005881231,-0.0069357716,-0.0013034248,-0.052710287,0.02778015,0.01233896,-0.01189916,0.009495061,-0.014523035,0.26657662,-0.016950795,-0.027100073,-0.011779601,-0.008612342,-0.007815959,0.009858062,-0.005564542,-0.0034296599,0.015538117,0.05364667,0.04200663,0.013184965,-0.034139488,-0.007892981,0.04684439,0.010352261,0.027196826,-0.0003106503,-0.017119851,-0.028526463,-0.000510472,-0.0029768595,-0.002347734,-0.005588916,-0.030107554,-0.042499684,-0.020153109,-0.021734413,0.0047109923,-0.008346854,-0.007326597,0.0024074123,0.0369784,-0.030064296,0.01691269,-0.016735207,-0.011226202,0.0015245884,-0.012778054,0.0075511704,-0.0036960877,0.007557204,0.004086089,0.01201397,0.016889635,-0.01043358,-0.026365364,0.007564963,0.014455612,-0.029092388,-0.0048543913,-0.022532541,0.036314867,-0.018714048,-0.04234853,0.05374953,-0.005088211,0.02802868,0.007032665,-0.013708327,0.02259749,0.014672147,0.0039892304,0.013406576,-0.008899346,-0.053986657,-0.0028548366,0.015907476,-0.008634683,-0.024635049,0.009619603,0.030945139,0.019252894,0.0050535616,-0.00050209893,-0.0037356333,-0.016610641,-0.03802282,0.0033026694,0.0026228111,-0.014433053,-0.038119502,-0.0494239,-0.0022713619,1.52181065e-05,0.0012925637,-0.0040486315,-0.016803684,0.024120556,-0.016389,0.008063007,-0.025969999,0.014533825,0.019690765,0.03835233,-0.019438662,0.040554848,-0.00017535147,0.009428719,0.0055744327,-0.08923083,0.016443327,-0.019336568,-0.0028349522,0.023673775,-0.018435935,0.002861199,-0.05258798,-0.010684996,0.03753102,-0.02321737,0.006015733,-0.0049898177,-0.011764404,0.024470262,-0.13286671,0.0039183684,0.02289449,0.010244386,-0.024367178,0.070972316,-0.020450655,0.004516031,-0.0043534557,0.0014819244,0.01242916,-0.000103918945,-0.00869918,-0.020049838,0.0374293,0.016343923,-0.017669555,0.012200321,-0.005584785,-0.02116514,-0.0052528814,-0.0034294124,0.013645206,0.02808796,0.011906592,-0.009564408,-0.027972374,-0.0047058356,-0.025116818,0.025897307,-0.011869098,0.033881415,-0.0067400006,-0.00053728046,-0.008783229,-0.0006055689,-0.0017233378,-0.023622466,-0.013778804,0.011142708,-0.0161844,0.003341545,0.017919397,0.0071474686,0.0069361324,-0.010483957,-0.019333832,-0.20897062,0.015796462,-0.076056525,-0.016877756,-0.021354383,0.00602685,-0.009557978,0.022109607,0.008299952,-0.017353112,-0.011412818,0.02342276,-0.011899881,0.02056504,-0.07114123,0.02845133,0.03293863,0.038570743,-0.026302248,-0.01809,0.029987916,0.016138706,0.020723626,0.0034367389,-0.0076112854,0.028519977,-0.0061860224,0.026696142,0.0051199,-0.008605177,0.0097912075,-0.018894183,-0.026326416,-0.009258131,-0.012451601,0.018749231,-0.016188737,-0.0051473747,0.07706056,0.027667673,0.041301712,-0.025577217,0.04727949,-0.012466428,-0.02333799,-0.016615383,0.03804953,0.017801832,-0.0249728,-0.0003685728,0.012348818,-0.0345361,-0.009509851,-0.009691232,-0.0341012,0.002881266,-0.0039609885,-0.026087318,0.0052951076,0.0040958645,0.00591946,0.0027629873,0.032581203,0.023740796,-0.0240678,-0.01607918,-0.016412713,0.018614115,0.020191925,-0.011088601,-0.014865248,0.00480677,-0.019845905,0.014473731,0.022977423,0.005933075,0.0117747225,0.002267902,0.021359531,0.011409378,-0.013403398,0.02975119,0.03684277,0.0056752907,-0.05271053,-0.026123023,-0.03722627,0.009225671,-0.009765392,-0.0033797943,-0.012013605,0.073611535,0.012428044,0.011051029,-0.017614631,0.0027571076,-0.01864981,0.03451256,-0.00958726,-0.05116791,-0.014229344,-0.012470823,0.0023751904,-0.037846256,-0.027494697,-0.021660673,0.0019112194,-0.0020549106,0.035318926,-0.0005395336,-0.003138815,-0.0062430063,0.017382665,-0.0071148085,0.035948887,0.033148535,-0.006885622,0.017452562,0.002109909,-0.01607638,0.0048778895,-0.0010750184,0.021735689,-0.021488545,0.027190546,0.0042808084,0.0049291872,0.026152788,0.0075522107,0.033454433,0.009068476,0.008024505,-0.027511507,-0.0135135045,-0.025227034,0.002555637,-0.0041393065,0.033711627,0.06253372,0.0065529365,0.0070475955,-0.0010127986,-0.00017797349,-0.017569296,0.032099213,0.020652838,0.051586736,-0.009354076,-0.021960534,0.01672265,0.00036686097,-0.027229575,0.01925929,-0.0050076484,0.013911398,-0.0053777946,0.025660502,0.0028741653,0.030279491,0.014034035,-0.007472715,0.025062583,0.0045057745,0.015657015,0.0218817,-0.027092673,0.019799309,0.0140926605,-0.019288398,-0.01321222,0.016092876,0.004857971,-0.026044704,0.029119914,0.011073059,0.020628158,-0.0034369135,0.007849876,0.21609718,0.041014273,-0.018461121,-0.026998825,-0.04534591,-0.022391351,0.01230753,0.01861479,-0.033344787,-0.016963165,-0.0002133218,0.018259354,0.02682787,0.0060259243,-0.03103303,-0.0332291,-0.005351051,-0.043544225,0.02720006,0.0077646608,-0.024713008,0.040226445,0.02748696,-0.010893006,-0.024288828,-0.002186831,-0.009373297,0.024736693,-0.009819411,0.036264036,0.027224373,0.001309985,-0.008474611,-0.008705946,0.008972549,0.06403325],"speech":[-0.016249897,-0.025135597,0.056929234,-0.039811555,0.006093971,0.03127757,0.00036406674,-0.018691333,-0.0013949412,-0.124084376,-0.008162631,-0.027181474,-0.07811085,-0.011067666,0.0018907739,-5.861767e-05,0.028272586,-0.0382965,0.026544353,-0.029857464,-0.02228946,-0.026051806,0.03195917,0.02145499,-0.017812457,0.008860457,-0.026447147,-0.018776134,-0.024999155,0.28696954,-0.053128757,0.021302918,0.037015308,-0.03966027,0.04970315,0.027426967,-0.008902285,0.005462069,-0.0012045498,-0.008946151,-0.0019115909,0.0044210483,-0.04066114,0.045195438,0.018702433,-0.02999742,-0.019609971,-0.03619861,-0.03035366,0.0052570147,0.05484365,-0.056269374,0.0034603449,-0.018674249,0.008854441,0.005381425,0.019926628,-0.012673354,-0.029192677,0.029525833,0.063781954,-0.015500603,0.021836141,0.0337107,-0.03478147,0.0066533163,0.01432101,0.026685365,0.059016082,-0.018797604,0.012041915,0.011464874,0.034499258,0.044946518,-0.011828514,-0.0401707,-0.06335569,0.00888125,-0.018405754,0.0033852141,0.016386138,0.004302499,-0.022537097,-0.016418068,0.04152628,-0.015617901,-0.03233981,0.013588164,-0.051579446,0.039604492,0.010371341,0.02545096,-0.024079392,0.027272312,-0.017894218,-0.0077741398,-0.00018853831,-0.005440863,-0.009346957,0.018607518,-0.009176298,0.0029252141,0.013554879,0.030118324,0.003857866,0.00027041996,0.00024026526,0.009249367,-0.012090424,-0.028826678,0.035504375,-0.43366393,0.0036017317,0.031745847,-0.02578825,0.16400059,-0.0064981603,-0.020483898,0.030970437,0.010612245,-0.009487123,0.010089852,-0.01119853,0.013841898,-0.067447186,0.039905433,0.021166762,0.0063080667,-0.040515866,0.00041461346,-0.0008578672,0.02582864,0.02917678,-0.001811584,0.04933828,-0.030719608,0.018958772,-0.034395143,0.03576433,0.0019692136,0.01748409,0.022484813,-0.0079618525,-0.016511682,-0.025114208,0.026971856,-0.006233956,-0.02171344,0.006127995,0.013403149,-0.038722437,-0.046608217,-0.017135037,0.016453665,0.001266039,0.0039971108,0.034580935,-0.037929434,0.019025946,0.007792981,-0.04275589,0.014257708,-0.014286087,0.009570045,0.0031563127,0.012328184,-6.0942188e-05,-0.028788175,0.004588155,0.0023494302,0.0004148907,0.015294593,0.016182285,0.07805403,0.03514308,-0.010288376,0.006365222,-0.009055527,0.028752176,0.022002611,0.0018407326,0.026791455,-0.005727767,0.0383167,0.006095872,0.0055213356,-0.00975627,-0.061843067,0.0011131605,-0.001171441,-0.037771396,-0.009891461,0.0042998353,0.00783075,0.004488963,0.03448726,0.033200752,0.02084382,-0.016287167,0.02554251,-0.009822754,0.02341366,-0.012893654,0.012794675,-0.03135672,0.027318874,-0.0009919214,0.06357304,0.014117083,0.039445825,0.05092274,-0.024084464,0.0081594465,-0.02321789,-0.009028431,-0.010532145,-0.00015049055,0.08107607,0.009590487,0.010337297,-0.025236338,0.028644746,0.023936434,0.013529191,-0.017508043,0.0043541603,0.061813015,0.020954233,0.011512324,0.04754692,-0.03582951,-0.0096315,0.05677367,-0.022004675,0.057346117,-0.028504588,-0.020907465,0.024961775,-0.007907854,0.04622033,-0.029094527,-0.019825434,-0.032005135,0.039498206,0.0049967673,-0.003943705,-0.020026844,0.0033949711,-0.011379696,-0.016572516,0.043795284,0.022969361,-0.028094325,0.00612274,0.009311811,0.0004692371,0.0046386146,0.017468698,0.047539394,-0.0046758447,0.0045159627,-0.008129524,-0.016804373,-0.01892566,0.003313135,0.011839485,-0.010867116,0.009316491,-0.0092143575,-0.020837232,0.03372775,0.01504965,0.0074396036,-0.0046403566,0.031329677,0.011405417,-0.016184293,0.025756828,0.013231941,0.008313735,-0.0020395294,0.01489598,-0.0019239679,0.0059052184,-0.006193761,0.00415176,-0.0050026146,0.046168756,0.03354945,0.018963482,-0.0062462958,-0.017148042,0.020329462,-0.011692212,-0.012836821,-0.0009475179,0.020815423,0.013673684,0.010924175,-0.01983085,0.031451896,0.04970314,0.0031702647,-0.0057599875,0.037951354,0.023188498,-0.017788311,-0.008876874,0.010574774,-0.033475615,-0.026107285,-0.02161203,-0.027708901,0.028571945,0.034946386,-0.009143669,0.025140919,-0.017305436,-0.031221924,-0.09939108,-0.021405047,-0.03866546,-0.010697789,0.026233543,0.019209389,0.001217427,0.0072570355,-0.04216941,-0.007789449,0.012625839,-0.00841438,-0.033467244,0.02201285,0.008381992,-0.01668089,0.03501905,0.011693628,0.036653765,-0.021933105,0.0034666697,-0.031647723,-0.26240057,0.028720388,-0.0021985343,-0.0052745054,0.002592082,-0.017724592,-0.012857107,-0.001985048,0.01976184,-0.0064957314,-0.0040195803,0.0140956715,0.012845451,-0.023057379,-0.004546892,0.0005268254,0.004391455,-0.008430275,0.0010458188,-0.0067900564,-0.0019183231,0.023561142,-0.00021379879,0.015075583,0.00594597,-0.0070253,0.017607857,-0.006195814,-0.024188302,-0.028976057,0.04034309,0.0009924493,0.019290842,0.021017464,0.024602111,0.0045358283,-0.0006039022,-0.0038205716,0.014155097,-0.0035355818,-0.030620791,-0.022251572,-0.02523429,0.056455143,-0.026847763,0.014250856,-0.018402075,-0.023457738,0.030548247,-0.00011605235,0.19625734,0.0035686558,-0.033911914,-0.031588785,0.0035703285,-0.0064525236,0.028978545,0.0038034813,0.0011138731,-0.020264987,0.021686494,0.014520989,-0.021508396,0.004059253,-0.009902596,0.03371096,0.009433526,0.02187029,0.0030498968,0.0070178853,-0.010583997,0.03721435,-0.021090725,-0.016808674,0.03945471,-0.027661428,-0.015958892,-0.040610895,-0.025228977,0.011209344,0.01055319,0.0099798255,-0.044517055,0.017400702,-0.026506022,0.032263856,-0.035796933,-0.02275891,-0.013200825,-0.020053549,-0.01151327,0.026177399,-0.00521506,0.007848201,-0.04850364,0.0414753,0.011606696,-0.02375193,-0.005161706,0.02863902,-0.018704737,0.006921046,-0.02433967,-0.0042203045,-0.029320775,0.0016053446,0.008744631,-0.017008264,0.0011705526,-0.013987676,-0.015760472,0.019298002,0.0064404327,-0.0073449067,-0.0054106284,-0.025609335,0.045732766,-0.0019149034,0.00506351,0.0035714786,-0.00020985882,-0.03388518,0.004640315,0.016292766,-0.0016875955,-0.020492382,-0.013683695,0.005861192,-0.012560339,-0.017737182,0.013504883,-0.016326018,-0.016268635,0.024505543,0.01845486,0.028402753,0.030511267,-0.022821784,-0.0027892624,0.014451415,-0.0076573566,0.027857346,-0.011770555,0.012491202,-0.0018114578,-0.0089877425,0.015635239,0.020095797,-0.015605308,0.017893562,0.0047905357,-0.005689267,0.021075645,0.0093238,-0.011789726,0.0155463535,0.0010901949,-0.0011411785,0.009911868,-0.013534078,0.031991158,-0.018570283,-0.022220613,0.020660432,-0.0125185605,0.0041999086,-0.2333628,-0.02133096,0.032814637,0.010717988,0.0024225288,0.023198776,-0.023618747,0.009622737,-0.0041254186,0.0032280667,0.00042804627,0.007186088,-0.037205283,-0.009171367,0.011065492,0.039412353,-0.012429408,0.0009029618,-0.006669522,-0.03675618,0.0023895465,0.014681947,0.010859276,0.0021263072,0.008270106,0.0057448754,-0.025478397,-0.029688112,0.009845385,0.002658866,0.021101015,0.040949002,-0.003919989,0.020605382,0.003435203,-0.012112578,0.0011792314,0.02635271,0.022774555,0.0030450644,-0.008543953,0.008468823,0.036193322,-0.024641754,-0.019303696,-0.03848394,-0.027471494,-0.21189451,0.020355923,-0.022062909,-0.0016623314,-0.03463625,-0.018933728,0.004118901,0.03412774,-0.011379446,0.00032796696,-0.020343335,0.0040862313,-0.08326081,0.04099847,-0.03504152,0.012165223,0.03195873,0.011836308,-0.0455588,-0.03152701,0.14743173,-0.007846044,0.003006086,-0.016165769,0.038515624,0.035993103,-0.017117044,-0.0009911143,0.015199601,0.0027929728,-0.017027952,0.012497719,-0.013121993,-0.0047715865,-0.022239078,0.047492098,0.003061398,0.007965026,0.014505796,-0.0034120586,-0.032911614,-0.0043779924,0.034211945,0.011544807,-0.019913105,-0.024104662,0.019126046,-0.05886067,-0.0027960974,-0.016563674,-0.028443983,-0.011571401,-0.040518034,-0.0083963545,0.007628753,0.0051170066,0.016454635,-0.0044863517,-0.00043225192,0.044545546,-0.0057746284,-0.038920045,0.0031984055,0.021470917,-0.0026195473,-0.027135424,0.016297696,0.016324256,0.01010424,0.00775518,-0.022288544,0.011502191,0.0070057986,-0.0050002476,-0.017000334,-0.0127154095,-0.030188648,0.036257636,0.026929194,-0.0008509269,-0.02841522,-0.017521258,0.022002839,0.0011884663,-0.0039497474,-0.0021300367,-0.013654646,0.017292943,-0.016089253,0.020456228,-0.000958562,0.05002545,0.002884071,0.029130086,-0.02987807,0.019034855,-0.02600585,0.0024250818,-0.023951417,-0.025573647,0.0034437007,0.007402217,0.0072533474,0.016394313,0.022669343,-0.021545516,-0.0144001655,-0.0031436554,-0.0033177675,-0.03807001,0.0055023734,0.0029501177,-0.0050287005,0.03841055,0.00448021,0.006252212,0.03804993,0.011537056,0.011125966,-0.0010576769,0.03787795,-0.00547818,0.015683085,0.029719949,-0.019078717,-0.017817406,-0.016162625,0.03415389,-0.008375274,0.041832983,-0.015102873,0.030649936,0.003989278,0.0032682603,0.030348144,0.044901196,0.016571125,0.010476789,0.033320613,-0.021548016,-0.006641602,0.01279729,0.028004427,-0.029721688,0.041428186,0.010344938,0.090336524,-0.025017764,-0.0044042417,0.013211208,0.018590776,0.0014198981,-0.013663698,0.024676507,-0.0014417984,0.004672577,-0.016739158,-0.031647295,0.014958101,0.02982654,0.012749122,-0.0029708857,0.028161932,0.013752629,-0.028058978,0.004901428,-0.011477682,0.012528804,-0.011574079,0.0018149011,-0.0002533687,-0.018033866,0.015916478,0.002448716,-0.017385835,0.016716594,0.034321293,-0.014982071,0.18034671,0.044239927,-0.011578887,-0.004484983,0.0011715326,-0.00048826303,0.015482203,0.025939744,-0.040196564,-0.013781288,-0.012321062,0.027769458,0.019281413,-0.014036145,0.009059809,-0.0010377832,0.011015587,-0.007487627,-0.020599723,-0.033544287,0.017340073,-0.0056165424,-0.0007974834,0.0037611206,-0.024353104,-0.0064675603,-0.027613914,0.01287178,-0.022770545,0.00060584216,0.016376764,0.0001274272,-0.021994073,0.015305306,0.01639156,0.034914427]}} \ No newline at end of file diff --git a/crates/searchi-semantic/tests/fixtures/digup-photo.jpg b/crates/searchi-semantic/tests/fixtures/digup-photo.jpg new file mode 100644 index 0000000..0aa579c Binary files /dev/null and b/crates/searchi-semantic/tests/fixtures/digup-photo.jpg differ diff --git a/crates/searchi-semantic/tests/fixtures/digup-screen.png b/crates/searchi-semantic/tests/fixtures/digup-screen.png new file mode 100644 index 0000000..5027d07 Binary files /dev/null and b/crates/searchi-semantic/tests/fixtures/digup-screen.png differ diff --git a/crates/searchi-semantic/tests/fixtures/digup-speech.wav b/crates/searchi-semantic/tests/fixtures/digup-speech.wav new file mode 100644 index 0000000..98b9dbe Binary files /dev/null and b/crates/searchi-semantic/tests/fixtures/digup-speech.wav differ diff --git a/crates/searchi-semantic/tests/gemma_cpu.rs b/crates/searchi-semantic/tests/gemma_cpu.rs index 15c78ae..873a54d 100644 --- a/crates/searchi-semantic/tests/gemma_cpu.rs +++ b/crates/searchi-semantic/tests/gemma_cpu.rs @@ -1,6 +1,49 @@ use anyhow::Result; use searchi_semantic::{Device, GemmaEmbedder, GEMMA_DIMENSIONS}; +#[test] +#[ignore = "Requires explicitly provisioned Google model and CPU worker"] +fn google_cpu_debug_query_reports_actual_worker_stages_without_changing_vectors() -> Result<()> { + let model = std::env::var_os("SEARCHI_GEMMA_MODEL_DIR").expect("Set SEARCHI_GEMMA_MODEL_DIR"); + let worker = std::env::var_os("SEARCHI_GEMMA_WORKER").expect("Set SEARCHI_GEMMA_WORKER"); + let mut embedder = GemmaEmbedder::load_with_device(model, worker, 1, Device::Cpu)?; + let query = "supplier contract cancellation policy"; + let debug = embedder.embed_query_debug(query)?; + let diagnostics = embedder.query_diagnostics(); + for name in [ + "request_encode_us", + "request_write_us", + "worker_wait_and_response_decode_us", + "response_validate_us", + "worker_tokenization_us", + "worker_batch_prepare_us", + "worker_inference_us", + "worker_pool_normalize_us", + "worker_token_count", + ] { + assert!( + diagnostics.contains_key(name), + "Missing actual stage {name}: {diagnostics:?}" + ); + } + assert!(diagnostics["worker_inference_us"] > 0); + assert!(diagnostics["worker_token_count"] > 0); + assert!(!serde_json::to_string(&diagnostics)?.contains(query)); + let normal = embedder.embed_query(query)?; + assert!(embedder.query_diagnostics().is_empty()); + let cosine: f64 = debug + .iter() + .zip(&normal) + .map(|(a, b)| f64::from(*a) * f64::from(*b)) + .sum(); + assert!( + cosine >= 0.99999, + "Debug tracing changed embeddings: {cosine}" + ); + println!("CPU query diagnostics: {diagnostics:?}; debug/normal cosine {cosine:.8}"); + Ok(()) +} + #[test] #[ignore = "Requires explicitly provisioned Google model and CPU worker"] fn google_cpu_real_embeddings_and_verified_tail_windows() -> Result<()> { diff --git a/crates/searchi-semantic/tests/gemma_media_cpu.rs b/crates/searchi-semantic/tests/gemma_media_cpu.rs new file mode 100644 index 0000000..df23aa6 --- /dev/null +++ b/crates/searchi-semantic/tests/gemma_media_cpu.rs @@ -0,0 +1,57 @@ +use anyhow::Result; +use searchi_semantic::{Device, GemmaEmbedder}; +use std::path::Path; + +#[test] +#[ignore = "Requires explicitly provisioned Google media model and CPU worker"] +fn google_cpu_pixels_match_digup_reference() -> Result<()> { + let model = std::env::var_os("SEARCHI_GEMMA_MODEL_DIR").expect("Set model path"); + let worker = std::env::var_os("SEARCHI_GEMMA_WORKER").expect("Set worker path"); + let mut embedder = GemmaEmbedder::load_with_device(model, worker, 1, Device::Cpu)?; + let fixtures = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures"); + let reference: serde_json::Value = + serde_json::from_str(include_str!("fixtures/digup-media-reference.json"))?; + for (name, file, budget) in [ + ("screen-280", "digup-screen.png", 280), + ("photo-140", "digup-photo.jpg", 140), + ("frame-70", "digup-photo.jpg", 70), + ] { + let path = fixtures.join(file); + let vector = embedder + .embed_images_with_budget(&[path.as_path()], budget)? + .remove(0); + let cosine: f64 = vector + .iter() + .zip(reference["vectors"][name].as_array().unwrap()) + .map(|(a, b)| f64::from(*a) * b.as_f64().unwrap()) + .sum(); + println!("Google image {name} reference cosine={cosine:.8}"); + assert!(cosine >= 0.999, "Image parity below0.999: {name} {cosine}"); + } + assert_eq!(embedder.info.device, "cpu"); + let wav = include_bytes!("fixtures/digup-speech.wav"); + let mut offset = 12; + let mut samples = Vec::new(); + while offset + 8 <= wav.len() { + let length = u32::from_le_bytes(wav[offset + 4..offset + 8].try_into()?) as usize; + if &wav[offset..offset + 4] == b"data" { + for pair in wav[offset + 8..offset + 8 + length].as_chunks::<2>().0 { + samples.push(f32::from(i16::from_le_bytes(*pair)) / 32768.0); + } + break; + } + offset += 8 + length + (length % 2); + } + let vector = embedder.embed_audio_pcm(&samples)?; + let cosine: f64 = vector + .iter() + .zip(reference["vectors"]["speech"].as_array().unwrap()) + .map(|(a, b)| f64::from(*a) * b.as_f64().unwrap()) + .sum(); + println!("Google audio reference cosine={cosine:.8}"); + assert!( + cosine >= 0.999, + "Audio reference parity below0.999: {cosine}" + ); + Ok(()) +} diff --git a/crates/searchi-service/Cargo.toml b/crates/searchi-service/Cargo.toml index 26175e1..1470a37 100644 --- a/crates/searchi-service/Cargo.toml +++ b/crates/searchi-service/Cargo.toml @@ -10,6 +10,7 @@ anyhow.workspace = true serde.workspace = true searchi-core = { path = "../searchi-core" } searchi-semantic = { path = "../searchi-semantic" } +searchi-media = { path = "../searchi-media" } rusqlite = { version = "0.32", features = ["bundled"] } sha2 = "0.10" fs2 = "0.4" diff --git a/crates/searchi-service/README.md b/crates/searchi-service/README.md new file mode 100644 index 0000000..5bfedde --- /dev/null +++ b/crates/searchi-service/README.md @@ -0,0 +1,43 @@ +# Shared hybrid retrieval + +`HybridSearch` combines genuine lexical and Google multimodal retrieval. The +CLI and desktop use the same service; it has no desktop-shell dependency. + +`search`, `search_semantic` and `search_semantic_with_origin` preserve grouped +parent files. ANN candidates expand until enough unique eligible parents exist +or the complete bounded eligible chunk set is requested. Filename/type/folder, +size/date/duration and explicit source filters apply before ANN top-k. Media +candidate filesystem metadata is checked once per parent per query. Ninety-six +near-identical video vectors cannot hide a second eligible parent (regression +tested). HNSW remains approximate retrieval, not an exact recall guarantee. + +Explicit spoken/audio wording prefers actual audio-source vectors, preserving +exact lexical filename priority. Conservative English/German token cues detect +requests such as “someone mentions”, “spoken”, “audio”, “jemand erwähnt” and +“Gespräch”. Visual/document cues veto automatic routing. This finite parser is +not language understanding; paraphrases, negation and mixed intents can remain +ambiguous. If the preferred lane has no eligible results, ordinary retrieval +is used. `SemanticOrigin::All` bypasses the hint; `Audio`, `Image`, `Video` and +`Text` select an explicit channel without fallback or reembedding. + +Persisted custom sampling limits can be reopened without generating embeddings +again only when the complete model and preprocessing fingerprint matches. +The custom suffix must contain the eight valid numeric sampling limits. Model +or preprocessing changes never silently reuse incompatible vectors. + +`search_measured(query,limit,options,debug)` returns `SearchResponse` with results +and monotonic total milliseconds/result count. Basic mode stores no trace. +`search_traced(...,&mut TraceCollector,parent)` shares the native request clock +so queue/lock time and actual engine stages remain comparable. Debug mode adds +bounded nested spans for lexical SQL, query embedding, worker diagnostics, +filtered eligibility and its cache, ANN read/checksum/deserialization/search +passes, parent materialization and validation, and rank fusion. Static stage +names and numerical counters exclude query/source text and paths. Worker-local +microsecond counters have a separate clock and are not aligned request spans. + +Measured/source APIs retain existing result behavior except the explicit +spoken/audio preference. Debug instrumentation does not change vector policy. +Audio timestamps represent segment starts, not exact word locations. Smaller +windows alone have not demonstrated accurate spoken navigation. No-answer +calibration, music discrimination, exact spoken positions, process isolation, +unchanged-vector reuse and production platform checks remain release gates. diff --git a/crates/searchi-service/src/lib.rs b/crates/searchi-service/src/lib.rs index 842ae90..40ee60e 100644 --- a/crates/searchi-service/src/lib.rs +++ b/crates/searchi-service/src/lib.rs @@ -1,10 +1,15 @@ //! Shared offline hybrid search using real Google embeddings and persisted, //! filtered HNSW retrieval. Production-scale validation remains a release gate. +mod media; +mod routing; +pub use routing::SemanticOrigin; mod store; +pub use searchi_media::{FfmpegTools, MediaLimits}; use anyhow::{ensure, Result}; +use searchi_core::metrics::{MetricsMode, SpanToken, TraceCollector}; use searchi_core::SearchIndex; -pub use searchi_core::{SearchOptions, SearchResult}; +pub use searchi_core::{SearchMetrics, SearchOptions, SearchResponse, SearchResult}; pub use searchi_semantic::WorkerInfo; use searchi_semantic::{GemmaEmbedder, TextWindow, GEMMA_DIMENSIONS, GEMMA_FINGERPRINT}; use serde::Serialize; @@ -17,7 +22,24 @@ const BYTE_OVERLAP: usize = 512; const MAX_PASSAGE_WINDOWS: usize = 2048; const CHUNK_POLICY: &str = "byte64k-overlap512-title512-v1"; fn generation_fingerprint(model: &str) -> String { - format!("{model}:{CHUNK_POLICY}") + format!( + "{model}:{CHUNK_POLICY}:{}:image280-frame70-audio30s-overlap2-distributed240-scene120-v1", + searchi_semantic::GEMMA_MEDIA_FINGERPRINT + ) +} + +fn reusable_policy(expected: &str, active: &str) -> bool { + if active == expected || active == format!("{expected}:text-only") { + return true; + } + let Some(policy) = active.strip_prefix(&format!("{expected}:custom-")) else { + return false; + }; + let values = policy + .split('-') + .map(str::parse::) + .collect::, _>>(); + matches!(values,Ok(v) if v.len()==8 && v[0]>=2 && (5000..=30000).contains(&v[3]) && v[4]0 && v[6]<=u32::MAX as u64) } /// Model-specific query/document prompts and actual tokenizer windows belong @@ -28,6 +50,18 @@ pub trait EmbeddingProvider: Send { fn split_windows(&mut self, text: &str, title: &str) -> Result>; fn embed_documents(&mut self, texts: &[&str], title: &str) -> Result>>; fn embed_query(&mut self, query: &str) -> Result>; + fn embed_query_debug(&mut self, query: &str) -> Result> { + self.embed_query(query) + } + fn query_diagnostics(&self) -> std::collections::BTreeMap { + Default::default() + } + fn embed_images(&mut self, _paths: &[&Path], _budget: u32) -> Result>> { + anyhow::bail!("Provider does not support real images") + } + fn embed_audio(&mut self, _pcm: &[f32]) -> Result> { + anyhow::bail!("Provider does not support real audio") + } fn worker_info(&self) -> Option { None } @@ -49,13 +83,34 @@ impl EmbeddingProvider for GemmaEmbedder { fn embed_query(&mut self, query: &str) -> Result> { self.embed_query(query) } + fn embed_query_debug(&mut self, query: &str) -> Result> { + GemmaEmbedder::embed_query_debug(self, query) + } + fn query_diagnostics(&self) -> std::collections::BTreeMap { + GemmaEmbedder::query_diagnostics(self) + } + fn embed_images(&mut self, paths: &[&Path], budget: u32) -> Result>> { + self.embed_images_with_budget(paths, budget) + } + fn embed_audio(&mut self, pcm: &[f32]) -> Result> { + self.embed_audio_pcm(pcm) + } fn worker_info(&self) -> Option { Some(self.info.clone()) } } +#[derive(Debug, Serialize)] +pub struct MediaFailure { + pub path: String, + pub message: String, +} + #[derive(Debug, Serialize)] pub struct EmbeddingReport { + pub media_files: usize, + pub media_failures: usize, + pub failures: Vec, pub passages: usize, pub chunks: usize, pub generation: i64, @@ -64,6 +119,7 @@ pub struct EmbeddingReport { #[derive(Debug, Serialize)] pub struct EmbeddingStatus { + pub failures: Vec, pub generation: Option, pub chunks: usize, pub model_fingerprint: Option, @@ -98,9 +154,10 @@ impl HybridSearch { |row| row.get(0), )?; let pending: usize = - connection.query_row("SELECT count(*) FROM passages", [], |row| row.get(0))?; + connection.query_row("SELECT (SELECT count(*) FROM passages)+(SELECT count(*) FROM files WHERE extension IN ('png','jpg','jpeg','webp','bmp','mp4','mkv','mov','avi','webm','m4v','mpeg','mpg','mp3','flac','wav','m4a','ogg','opus','aac','aiff','aif'))", [], |row| row.get(0))?; if !exists { return Ok(EmbeddingStatus { + failures: Vec::new(), generation: None, chunks: 0, model_fingerprint: None, @@ -113,8 +170,9 @@ impl HybridSearch { [], |row| row.get(0), )?; - if version < 5 { + if version < 6 { return Ok(EmbeddingStatus { + failures: Vec::new(), generation: None, chunks: 0, model_fingerprint: None, @@ -123,7 +181,7 @@ impl HybridSearch { }); } ensure!( - version == 5, + version == 6, "Unsupported semantic schema version {version}" ); let (generation,fingerprint,revision,current):(Option,Option,Option,i64)=connection.query_row( @@ -134,9 +192,19 @@ impl HybridSearch { [generation], |row| row.get(0), )?; + let mut failures_query=connection.prepare("SELECT path,message FROM semantic_media_errors WHERE generation=?1 ORDER BY path LIMIT 1000")?; + let failures = failures_query + .query_map([generation], |r| { + Ok(MediaFailure { + path: r.get(0)?, + message: r.get(1)?, + }) + })? + .collect::>>()?; let stale = revision != Some(current) || fingerprint.as_deref() != Some(generation_fingerprint(GEMMA_FINGERPRINT).as_str()); Ok(EmbeddingStatus { + failures, generation, chunks, model_fingerprint: fingerprint, @@ -162,7 +230,12 @@ impl HybridSearch { ) -> Result { let lexical = SearchIndex::open(&db)?; let store = Store::open(db.as_ref(), embedder.dimensions())?; - let generation_fingerprint = generation_fingerprint(embedder.fingerprint()); + let expected = generation_fingerprint(embedder.fingerprint()); + let active = store.active_fingerprint()?; + let generation_fingerprint = match active { + Some(active) if reusable_policy(&expected, &active) => active, + _ => expected, + }; Ok(Self { lexical, embedder, @@ -189,6 +262,11 @@ impl HybridSearch { /// storage errors leave the previous generation active. A crashed build is /// reclaimed on the next explicit rebuild under an OS advisory lock. pub fn index_embeddings(&mut self) -> Result { + let previous_fingerprint = self.generation_fingerprint.clone(); + self.generation_fingerprint = format!( + "{}:text-only", + generation_fingerprint(self.embedder.fingerprint()) + ); let _lock = self.store.build_lock()?; let generation = self.store.begin(&self.generation_fingerprint)?; let built = self.build(generation); @@ -199,6 +277,7 @@ impl HybridSearch { } Err(error) => { self.store.abandon(generation)?; + self.generation_fingerprint = previous_fingerprint; Err(error) } } @@ -206,6 +285,9 @@ impl HybridSearch { fn build(&mut self, generation: i64) -> Result { let mut report = EmbeddingReport { + media_files: 0, + media_failures: 0, + failures: Vec::new(), passages: 0, chunks: 0, generation, @@ -253,21 +335,81 @@ impl HybridSearch { query: &str, limit: usize, options: &SearchOptions, + ) -> Result> { + let mut trace = TraceCollector::new(MetricsMode::Basic); + self.search_traced(query, limit, options, &mut trace, None) + } + pub fn search_measured( + &mut self, + query: &str, + limit: usize, + options: &SearchOptions, + debug: bool, + ) -> Result> { + let mut trace = TraceCollector::new(if debug { + MetricsMode::Debug + } else { + MetricsMode::Basic + }); + let results = self.search_traced(query, limit, options, &mut trace, None)?; + let metrics = trace.finish(results.len()); + Ok(SearchResponse { results, metrics }) + } + pub fn search_traced( + &mut self, + query: &str, + limit: usize, + options: &SearchOptions, + trace: &mut TraceCollector, + parent: Option, + ) -> Result> { + trace.timed("hybrid.search", parent, |trace, parent| { + self.search_inner(query, limit, options, trace, parent) + }) + } + fn search_inner( + &mut self, + query: &str, + limit: usize, + options: &SearchOptions, + trace: &mut TraceCollector, + parent: Option, ) -> Result> { let candidates = limit.saturating_mul(4).clamp(20, 1000); // Core validates filters and query budgets even for empty requests. let mut lexical = self .lexical - .search_with_options(query, candidates, options)?; + .search_with_options_traced(query, candidates, options, trace, parent)?; if query.trim().is_empty() || limit == 0 { return Ok(Vec::new()); } - promote_identifiers(query.trim(), &mut lexical); - let vector = self.embedder.embed_query(query.trim())?; + trace.timed("hybrid.identifier_priority", parent, |_, _| { + promote_identifiers(query.trim(), &mut lexical) + }); + let embedding_span = trace.begin("semantic.query_embedding", parent); + let vector = if trace.is_debug() { + self.embedder.embed_query_debug(query.trim()) + } else { + self.embedder.embed_query(query.trim()) + }; + trace.counter(embedding_span, "failed", u64::from(vector.is_err())); + trace.end( + embedding_span, + if trace.is_debug() { + self.embedder.query_diagnostics() + } else { + Default::default() + }, + ); + let vector = vector?; let semantic = - self.store - .search(&vector, &self.generation_fingerprint, candidates, options)?; - Ok(fuse(lexical, semantic, limit.min(1000))) + self.routed_semantic_traced(query, &vector, candidates, options, trace, parent)?; + let results = trace.timed("hybrid.rank_fusion", parent, |trace, span| { + trace.counter(span, "lexical_files", lexical.len() as u64); + trace.counter(span, "semantic_files", semantic.len() as u64); + fuse(lexical, semantic, limit.min(1000)) + }); + Ok(results) } /// Semantic lane for reproducible relevance evaluation and diagnostics. @@ -282,12 +424,7 @@ impl HybridSearch { return Ok(Vec::new()); } let vector = self.embedder.embed_query(query.trim())?; - self.store.search( - &vector, - &self.generation_fingerprint, - limit.min(1000), - options, - ) + self.routed_semantic(query, &vector, limit.min(1000), options) } } @@ -417,6 +554,58 @@ fn fuse( #[cfg(test)] mod tests { use super::*; + #[test] + fn failed_query_inference_retains_diagnostics_in_shared_trace() -> Result<()> { + // Failure-only provider: no fabricated embeddings are generated. + struct FailingProvider; + impl EmbeddingProvider for FailingProvider { + fn fingerprint(&self) -> &str { + "failure-injection" + } + fn dimensions(&self) -> usize { + 768 + } + fn split_windows(&mut self, _: &str, _: &str) -> Result> { + anyhow::bail!("unused") + } + fn embed_documents(&mut self, _: &[&str], _: &str) -> Result>> { + anyhow::bail!("unused") + } + fn embed_query(&mut self, _: &str) -> Result> { + anyhow::bail!("injected worker failure") + } + fn query_diagnostics(&self) -> std::collections::BTreeMap { + std::collections::BTreeMap::from([("request_write_us".into(), 7)]) + } + } + let directory = tempfile::tempdir()?; + let db = directory.path().join("index.db"); + let mut service = HybridSearch::with_provider(&db, Box::new(FailingProvider))?; + let mut trace = TraceCollector::new(MetricsMode::Debug); + assert!(service + .search_traced( + "ordinary query", + 5, + &SearchOptions::default(), + &mut trace, + None + ) + .is_err()); + let metrics = trace.finish(0); + let spans = metrics.trace.unwrap(); + let embedding = spans + .iter() + .find(|s| s.name == "semantic.query_embedding") + .unwrap(); + assert_eq!(embedding.counters["failed"], 1); + assert_eq!(embedding.counters["request_write_us"], 7); + let parent = &spans[embedding.parent.unwrap()]; + assert!( + embedding.start_ms + embedding.duration_ms + <= parent.start_ms + parent.duration_ms + 1e-6 + ); + Ok(()) + } fn result(path: &str, kind: &str) -> SearchResult { SearchResult { path: path.into(), diff --git a/crates/searchi-service/src/media.rs b/crates/searchi-service/src/media.rs new file mode 100644 index 0000000..3f2539d --- /dev/null +++ b/crates/searchi-service/src/media.rs @@ -0,0 +1,232 @@ +use super::*; +use searchi_media::*; + +#[derive(Debug)] +struct InferenceFailure(anyhow::Error); +impl std::fmt::Display for InferenceFailure { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Media inference failed: {}", self.0) + } +} +impl std::error::Error for InferenceFailure {} + +impl HybridSearch { + /// Publish text and actual image/frame/audio vectors in one atomic generation. + pub fn index_embeddings_with_media( + &mut self, + tools: &FfmpegTools, + limits: &MediaLimits, + ) -> Result { + let previous_fingerprint = self.generation_fingerprint.clone(); + self.generation_fingerprint = generation_fingerprint(self.embedder.fingerprint()); + let defaults = MediaLimits::default(); + if limits.max_frames != defaults.max_frames + || limits.frame_interval_ms != defaults.frame_interval_ms + || limits.max_scene_frames != defaults.max_scene_frames + || limits.audio_window_ms != defaults.audio_window_ms + || limits.audio_overlap_ms != defaults.audio_overlap_ms + || limits.max_audio_windows != defaults.max_audio_windows + || limits.max_duration_ms != defaults.max_duration_ms + || limits.max_file_bytes != defaults.max_file_bytes + { + self.generation_fingerprint.push_str(&format!( + ":custom-{}-{}-{}-{}-{}-{}-{}-{}", + limits.max_frames, + limits.frame_interval_ms, + limits.max_scene_frames, + limits.audio_window_ms, + limits.audio_overlap_ms, + limits.max_audio_windows, + limits.max_duration_ms, + limits.max_file_bytes + )); + } + let _lock = self.store.build_lock()?; + let generation = self.store.begin(&self.generation_fingerprint)?; + let built = (|| { + let mut report = self.build(generation)?; + let mut after = 0; + let mut media_count = 0usize; + loop { + let files = self.store.media_batch(after)?; + if files.is_empty() { + break; + } + for (id, path, _, _) in files { + after = id; + let path = Path::new(&path); + let Some(kind) = classify(path) else { + continue; + }; + media_count += 1; + ensure!( + media_count <= 10000, + "Media generation exceeds 10000-file resource budget" + ); + let before_chunks = report.chunks; + match self.build_media_file( + generation, + id, + path, + kind, + tools, + limits, + &mut report, + ) { + Ok(()) => report.media_files += 1, + Err(error) => { + if error.downcast_ref::().is_some() { + return Err(error); + } + self.store.media_failure( + generation, + &path.to_string_lossy(), + &format!("{error:#}"), + )?; + report.chunks = before_chunks; + if report.failures.len() < 1000 { + report.failures.push(MediaFailure { + path: path.to_string_lossy().into_owned(), + message: format!("{error:#}").chars().take(2048).collect(), + }); + } + report.media_failures += 1; + } + } + } + } + Ok(report) + })(); + match built { + Ok(report) => { + self.store.activate(generation)?; + Ok(report) + } + Err(error) => { + self.store.abandon(generation)?; + self.generation_fingerprint = previous_fingerprint; + Err(error) + } + } + } + + #[allow(clippy::too_many_arguments)] + fn build_media_file( + &mut self, + generation: i64, + id: i64, + path: &Path, + kind: MediaKind, + tools: &FfmpegTools, + limits: &MediaLimits, + report: &mut EmbeddingReport, + ) -> Result<()> { + let identity = MediaIdentity::read( + path, + if kind == MediaKind::Image { + 64 * 1024 * 1024 + } else { + limits.max_file_bytes + }, + )?; + let mut ordinal = 0; + if kind == MediaKind::Image { + validate_image(path)?; + ensure!( + report.chunks < MAX_SCAN_CHUNKS, + "Media exceeds generation chunk budget" + ); + let vectors = self + .embedder + .embed_images(&[path], 280) + .map_err(|e| anyhow::Error::new(InferenceFailure(e)))?; + ensure!(vectors.len() == 1, "Image embedding count mismatch"); + self.store + .insert_media(generation, id, ordinal, &identity, "image", 0, &vectors[0])?; + report.chunks += 1; + } else { + let metadata = probe(tools, path, limits)?; + let tags = metadata + .tags + .iter() + .map(|(k, v)| format!("{k}: {v}")) + .collect::>() + .join("\n"); + self.lexical.set_media_metadata( + &path.to_string_lossy(), + &tags, + metadata.duration_ms, + identity.bytes, + identity.modified_ns, + )?; + if metadata.has_video && kind == MediaKind::Video { + let mut seen = std::collections::HashSet::new(); + let mut scenes = 0; + for time in frame_times(&metadata, limits)? { + let frames = decode_frames( + tools, + path, + &metadata, + time, + scenes < limits.max_scene_frames, + limits, + )?; + for (i, frame) in frames.frames.iter().enumerate() { + if !seen.insert(frame.timestamp_ms) { + continue; + } + if i > 0 { + scenes += 1; + } + ensure!( + report.chunks < MAX_SCAN_CHUNKS, + "Media exceeds generation chunk budget" + ); + let vectors = self + .embedder + .embed_images(&[frame.path.as_path()], 70) + .map_err(|e| anyhow::Error::new(InferenceFailure(e)))?; + ensure!(vectors.len() == 1, "Frame embedding count mismatch"); + self.store.insert_media( + generation, + id, + ordinal, + &identity, + "video", + frame.timestamp_ms, + &vectors[0], + )?; + ordinal += 1; + report.chunks += 1; + } + } + } + if metadata.has_audio { + for window in audio_windows(&metadata, limits)? { + ensure!( + report.chunks < MAX_SCAN_CHUNKS, + "Audio exceeds generation chunk budget" + ); + let pcm = decode_audio(tools, path, window, limits)?; + let vector = self + .embedder + .embed_audio(&pcm) + .map_err(|e| anyhow::Error::new(InferenceFailure(e)))?; + self.store.insert_media( + generation, + id, + ordinal, + &identity, + "audio", + window.start_ms, + &vector, + )?; + ordinal += 1; + report.chunks += 1; + } + } + } + identity.ensure_unchanged()?; + Ok(()) + } +} diff --git a/crates/searchi-service/src/routing.rs b/crates/searchi-service/src/routing.rs new file mode 100644 index 0000000..a2a96ff --- /dev/null +++ b/crates/searchi-service/src/routing.rs @@ -0,0 +1,213 @@ +use super::*; + +/// Explicit semantic source channel, independent of filename/type filters. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum SemanticOrigin { + All, + Text, + Image, + Video, + Audio, +} +impl SemanticOrigin { + fn source_type(self) -> Option<&'static str> { + match self { + Self::All => None, + Self::Text => Some("text"), + Self::Image => Some("image"), + Self::Video => Some("video"), + Self::Audio => Some("audio"), + } + } +} + +/// A conservative intent hint, not a language understanding model. Explicit +/// document/visual cues veto it; ordinary topic and instrument queries do not +/// silently restrict modality. Word boundaries avoid filename substrings. +fn preferred_origin(query: &str) -> Option { + if query.split_whitespace().count() == 1 && Path::new(query).extension().is_some() { + return None; + } + let lower = query.to_lowercase(); + let words: Vec<_> = lower + .split(|c: char| !c.is_alphanumeric()) + .filter(|s| !s.is_empty()) + .collect(); + let has = |values: &[&str]| words.iter().any(|word| values.contains(word)); + if has(&[ + "image", + "photo", + "picture", + "screenshot", + "diagram", + "document", + "pdf", + "text", + "paper", + "bild", + "foto", + "screenshot", + "dokument", + "textdatei", + ]) { + return None; + } + if has(&[ + "audio", + "spoken", + "speech", + "recording", + "conversation", + "interview", + "podcast", + "sound", + "music", + "gesprochen", + "gespräch", + "gespraech", + "geräusch", + "geraeusch", + "musik", + "hörbar", + "hörbarer", + "hörbare", + "hoerbar", + "hoerbarer", + "hoerbare", + "tonaufnahme", + ]) { + return Some(SemanticOrigin::Audio); + } + if (has(&["someone", "speaker"]) + && has(&[ + "mentions", + "mentioned", + "says", + "said", + "speaks", + "speaking", + ])) + || (has(&["jemand", "sprecher", "sprecherin"]) + && has(&["erwähnt", "erwaehnt", "sagt", "gesagt", "spricht"])) + { + return Some(SemanticOrigin::Audio); + } + None +} + +impl HybridSearch { + pub(super) fn routed_semantic( + &mut self, + query: &str, + vector: &[f32], + limit: usize, + options: &SearchOptions, + ) -> Result> { + let mut trace = TraceCollector::new(MetricsMode::Basic); + self.routed_semantic_traced(query, vector, limit, options, &mut trace, None) + } + pub(super) fn routed_semantic_traced( + &mut self, + query: &str, + vector: &[f32], + limit: usize, + options: &SearchOptions, + trace: &mut TraceCollector, + parent: Option, + ) -> Result> { + trace.timed("semantic.routing", parent, |trace, parent| { + if let Some(origin) = preferred_origin(query) { + trace.counter(parent, "audio_preference", 1); + let preferred = self.store.search_origin_traced( + vector, + &self.generation_fingerprint, + limit, + options, + origin.source_type(), + trace, + parent, + )?; + if !preferred.is_empty() { + return Ok(preferred); + } + } + trace.counter(parent, "general_lane", 1); + self.store.search_origin_traced( + vector, + &self.generation_fingerprint, + limit, + options, + None, + trace, + parent, + ) + }) + } + + /// Query one actual source channel, or All to bypass automatic spoken/audio + /// preference. This never embeds files again or changes an active policy. + pub fn search_semantic_with_origin( + &mut self, + query: &str, + limit: usize, + options: &SearchOptions, + origin: SemanticOrigin, + ) -> Result> { + let _ = self.lexical.search_with_options(query, 0, options)?; + if query.trim().is_empty() || limit == 0 { + return Ok(Vec::new()); + } + let vector = self.embedder.embed_query(query.trim())?; + self.store.search_origin( + &vector, + &self.generation_fingerprint, + limit.min(1000), + options, + origin.source_type(), + ) + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn persisted_custom_limits_require_identical_model_and_preprocessing() { + let expected = "pinned-model:pinned-media:preprocessing-v1"; + assert!(reusable_policy( + expected, + &format!("{expected}:custom-240-2000-120-10000-2000-1800-14400000-17179869184") + )); + for active in ["other-model:pinned-media:preprocessing-v1:custom-240-2000-120-10000-2000-1800-14400000-17179869184","pinned-model:pinned-media:preprocessing-v2:custom-240-2000-120-10000-2000-1800-14400000-17179869184","pinned-model:pinned-media:preprocessing-v1:custom-unknown"] {assert!(!reusable_policy(expected,active));} + } + #[test] + fn explicit_spoken_intent_is_conservative_and_bilingual() { + for query in [ + "where someone mentions a contract", + "a speaker says the date", + "spoken discussion of ecology", + "audio of a waterfall", + "jemand erwähnt das Budget", + "Wo spricht jemand über Kündigung?", + "Gespräch über die neue Wohnung", + "hörbarer Regen", + ] { + assert_eq!( + preferred_origin(query), + Some(SemanticOrigin::Audio), + "{query}" + ); + } + for query in [ + "contract deadline", + "violin solo", + "photo of someone speaking", + "Bild von einem Sprecher", + "a document that someone mentioned", + "speech.png", + "a screenshot of an audio waveform", + ] { + assert_eq!(preferred_origin(query), None, "{query}"); + } + } +} diff --git a/crates/searchi-service/src/store.rs b/crates/searchi-service/src/store.rs index efc2cae..016d839 100644 --- a/crates/searchi-service/src/store.rs +++ b/crates/searchi-service/src/store.rs @@ -8,6 +8,7 @@ use std::{ use anyhow::{ensure, Context, Result}; use fs2::FileExt; use rusqlite::{params, Connection, OptionalExtension}; +use searchi_core::metrics::{MetricsMode, SpanToken, TraceCollector}; use searchi_core::{IndexedPassage, SearchOptions, SearchResult, SourceLocation}; use searchi_semantic::TextWindow; use sha2::{Digest, Sha256}; @@ -24,6 +25,9 @@ struct FilterKey { max_size: Option, modified_after: Option, modified_before: Option, + min_duration: Option, + max_duration: Option, + source_type: Option, } struct EligibilityCache { @@ -57,8 +61,13 @@ pub(crate) fn content_hash(text: &str) -> String { #[cfg(test)] thread_local! { static HASH_CALLS:std::cell::Cell=const {std::cell::Cell::new(0)}; } +#[cfg(test)] +thread_local! { static MEDIA_STAT_CALLS:std::cell::Cell=const {std::cell::Cell::new(0)}; } impl Store { + pub(crate) fn active_fingerprint(&self) -> Result> { + Ok(self.connection.query_row("SELECT g.fingerprint FROM semantic_meta m JOIN semantic_generations g ON g.id=m.active_generation WHERE m.singleton=1",[],|r|r.get(0)).optional()?) + } pub(crate) fn open(db: &Path, dimensions: usize) -> Result { ensure!( (1..=4096).contains(&dimensions), @@ -85,7 +94,7 @@ impl Store { |row| row.get(0), )?; ensure!( - (1..=5).contains(&version), + (1..=6).contains(&version), "Unsupported semantic schema version {version}" ); initialization.execute_batch(" @@ -130,8 +139,25 @@ impl Store { UPDATE semantic_meta SET corpus_revision=corpus_revision+1 WHERE singleton=1; INSERT INTO semantic_dirty_paths(path,revision) VALUES(old.path,(SELECT corpus_revision FROM semantic_meta WHERE singleton=1)) ON CONFLICT(path) DO UPDATE SET revision=excluded.revision; END; - UPDATE semantic_meta SET schema_version=5 WHERE singleton=1;", + UPDATE semantic_meta SET schema_version=6 WHERE singleton=1;", )?; + for (column, declaration) in [ + ("source_type", "TEXT NOT NULL DEFAULT 'text'"), + ("file_size", "INTEGER"), + ("file_mtime", "INTEGER"), + ] { + let exists: bool = initialization.query_row( + "SELECT EXISTS(SELECT 1 FROM pragma_table_info('semantic_chunks') WHERE name=?1)", + [column], + |r| r.get(0), + )?; + if !exists { + initialization.execute_batch(&format!( + "ALTER TABLE semantic_chunks ADD COLUMN {column} {declaration}" + ))?; + } + } + initialization.execute_batch("CREATE TABLE IF NOT EXISTS semantic_media_errors(generation INTEGER NOT NULL REFERENCES semantic_generations(id) ON DELETE CASCADE,path TEXT NOT NULL,message TEXT NOT NULL,PRIMARY KEY(generation,path))")?; initialization.commit()?; let canonical = db.canonicalize()?; let lock_path = PathBuf::from(format!("{}.semantic.lock", canonical.to_string_lossy())); @@ -170,6 +196,67 @@ impl Store { Ok(id) } + pub(crate) fn media_batch(&self, after: i64) -> Result> { + let mut q = self.connection.prepare( + "SELECT rowid,path,size,mtime FROM files WHERE rowid>?1 ORDER BY rowid LIMIT 64", + )?; + let rows = q + .query_map([after], |r| { + Ok((r.get(0)?, r.get(1)?, r.get(2)?, r.get(3)?)) + })? + .collect::>>()?; + Ok(rows) + } + pub(crate) fn media_failure(&self, generation: i64, path: &str, message: &str) -> Result<()> { + self.connection.execute( + "DELETE FROM semantic_chunks WHERE generation=?1 AND path=?2 AND source_type!='text'", + params![generation, path], + )?; + self.connection.execute("INSERT OR REPLACE INTO semantic_media_errors(generation,path,message) VALUES(?1,?2,?3)",params![generation,path,message.chars().take(2048).collect::()])?; + Ok(()) + } + #[allow(clippy::too_many_arguments)] + pub(crate) fn insert_media( + &self, + generation: i64, + file_id: i64, + ordinal: usize, + identity: &searchi_media::MediaIdentity, + source_type: &str, + timestamp: u32, + vector: &[f32], + ) -> Result<()> { + ensure!( + vector.len() == self.dimensions && vector.iter().all(|v| v.is_finite()), + "Invalid media embedding" + ); + let norm = vector.iter().map(|v| v * v).sum::().sqrt(); + ensure!( + (norm - 1.).abs() < 1e-3, + "Media embeddings must be normalized" + ); + let path = identity.path.to_string_lossy(); + let valid:bool=self.connection.query_row("SELECT EXISTS(SELECT 1 FROM files WHERE rowid=?1 AND path=?2 AND size=?3 AND mtime=?4)",params![file_id,path,identity.bytes as i64,identity.modified_ns],|r|r.get(0))?; + ensure!(valid, "Media file changed since filesystem indexing"); + let kind = if source_type == "image" { + "image" + } else { + "timestamp_ms" + }; + let snippet = if source_type == "image" { + "Image content".to_string() + } else { + format!( + "{} content at {:.3} seconds", + source_type, + f64::from(timestamp) / 1000. + ) + }; + let bytes: Vec = vector.iter().flat_map(|v| v.to_le_bytes()).collect(); + self.connection.execute("INSERT INTO semantic_chunks(generation,passage_id,ordinal,path,kind,number,content_hash,start_byte,end_byte,snippet,vector,source_type,file_size,file_mtime) VALUES(?1,?2,?3,?4,?5,?6,?7,0,0,?8,?9,?10,?11,?12)",params![generation,-file_id,ordinal as i64,path,kind,timestamp,identity.sha256,snippet,bytes,source_type,identity.bytes as i64,identity.modified_ns])?; + Ok(()) + } + pub(crate) fn insert( &mut self, generation: i64, @@ -312,6 +399,61 @@ impl Store { fingerprint: &str, limit: usize, options: &SearchOptions, + ) -> Result> { + self.search_origin(query, fingerprint, limit, options, None) + } + pub(crate) fn search_origin( + &mut self, + query: &[f32], + fingerprint: &str, + limit: usize, + options: &SearchOptions, + source_type: Option<&str>, + ) -> Result> { + let mut trace = TraceCollector::new(MetricsMode::Basic); + self.search_origin_traced( + query, + fingerprint, + limit, + options, + source_type, + &mut trace, + None, + ) + } + #[allow(clippy::too_many_arguments)] + pub(crate) fn search_origin_traced( + &mut self, + query: &[f32], + fingerprint: &str, + limit: usize, + options: &SearchOptions, + source_type: Option<&str>, + trace: &mut TraceCollector, + parent: Option, + ) -> Result> { + trace.timed("semantic.retrieval", parent, |trace, parent| { + self.search_inner( + query, + fingerprint, + limit, + options, + source_type, + trace, + parent, + ) + }) + } + #[allow(clippy::too_many_arguments)] + fn search_inner( + &mut self, + query: &[f32], + fingerprint: &str, + limit: usize, + options: &SearchOptions, + source_type: Option<&str>, + trace: &mut TraceCollector, + parent: Option, ) -> Result> { ensure!( query.len() == self.dimensions && query.iter().all(|v| v.is_finite()), @@ -321,17 +463,30 @@ impl Store { return Ok(Vec::new()); } // A consistent read snapshot covers eligibility and materialization. + let generation_span = trace.begin("semantic.generation_snapshot", parent); let snapshot = self.connection.unchecked_transaction()?; let active:Option=snapshot.query_row("SELECT g.id FROM semantic_generations g JOIN semantic_meta m ON m.active_generation=g.id WHERE g.fingerprint=?1 AND g.dimensions=?2", params![fingerprint,self.dimensions as i64],|row|row.get(0)).optional()?; let Some(active) = active else { return Ok(Vec::new()); }; + trace.end(generation_span, Default::default()); + let ann_load = trace.begin("semantic.ann_load", parent); + trace.counter( + ann_load, + "cache_hit", + u64::from( + self.ann_cache + .as_ref() + .is_some_and(|(generation, _)| *generation == active), + ), + ); if !self .ann_cache .as_ref() .is_some_and(|(generation, _)| *generation == active) { + let blob_span = trace.begin("semantic.ann_blob_read", ann_load); let length: Option = snapshot.query_row( "SELECT length(ann_blob) FROM semantic_generations WHERE id=?1", [active], @@ -346,10 +501,15 @@ impl Store { [active], |row| Ok((row.get(0)?, row.get(1)?)), )?; + trace.counter(blob_span, "bytes", serialized.len() as u64); + trace.end(blob_span, Default::default()); + let checksum_span = trace.begin("semantic.ann_checksum", ann_load); ensure!( format!("{:x}", Sha256::digest(&serialized)) == checksum, "ANN generation SHA256 mismatch; rebuild embeddings explicitly" ); + trace.end(checksum_span, Default::default()); + let deserialize_span = trace.begin("semantic.ann_deserialize", ann_load); let ann = self.new_ann()?; ann.load_from_buffer(&serialized)?; ensure!( @@ -357,8 +517,12 @@ impl Store { "ANN dimensions differ from embedding provider" ); ann.reserve_capacity_and_threads(ann.size().max(1), 1)?; + trace.counter(deserialize_span, "chunks", ann.size() as u64); + trace.end(deserialize_span, Default::default()); self.ann_cache = Some((active, ann)); } + trace.end(ann_load, Default::default()); + let filter_span = trace.begin("semantic.filter_normalization", parent); let folder = options .folder .as_ref() @@ -384,13 +548,25 @@ impl Store { max_size, modified_after: options.modified_after_unix_ms, modified_before: options.modified_before_unix_ms, + min_duration: options.min_duration_ms, + max_duration: options.max_duration_ms, + source_type: source_type.map(str::to_owned), }; + trace.end(filter_span, Default::default()); + let eligibility_span = trace.begin("semantic.eligibility", parent); let (revision, floor): (i64, i64) = snapshot.query_row( "SELECT corpus_revision,dirty_floor FROM semantic_meta WHERE singleton=1", [], |row| Ok((row.get(0)?, row.get(1)?)), )?; let existing = self.eligibility_cache.take(); + trace.counter( + eligibility_span, + "cache_hit", + u64::from(existing.as_ref().is_some_and(|c| { + c.generation == active && c.filter == filter && c.revision == revision + })), + ); let mut cache = match existing { Some(mut cache) if cache.generation == active @@ -404,8 +580,17 @@ impl Store { row.get::<_, String>(0) })? .collect::>>()?; + trace.counter(eligibility_span, "dirty_paths", paths.len() as u64); if paths.len() > 1000 { - cache = collect_eligibility(&snapshot, active, revision, &filter, None)?; + cache = collect_eligibility_traced( + &snapshot, + active, + revision, + &filter, + None, + trace, + eligibility_span, + )?; } else { for path in paths { if let Some(old) = cache.by_path.remove(&path) { @@ -413,12 +598,14 @@ impl Store { Arc::make_mut(&mut cache.keys).remove(&key); } } - let changed = collect_eligibility( + let changed = collect_eligibility_traced( &snapshot, active, revision, &filter, Some(&path), + trace, + eligibility_span, )?; Arc::make_mut(&mut cache.keys).extend(changed.keys.iter().copied()); cache.by_path.extend(changed.by_path); @@ -428,12 +615,22 @@ impl Store { } cache } - _ => collect_eligibility(&snapshot, active, revision, &filter, None)?, + _ => collect_eligibility_traced( + &snapshot, + active, + revision, + &filter, + None, + trace, + eligibility_span, + )?, }; ensure!( cache.keys.len() <= MAX_SCAN_CHUNKS, "Eligibility cache exceeds chunk resource budget" ); + trace.counter(eligibility_span, "eligible_chunks", cache.keys.len() as u64); + trace.end(eligibility_span, Default::default()); cache.revision = revision; let eligible = Arc::clone(&cache.keys); self.eligibility_cache = Some(cache); @@ -443,40 +640,97 @@ impl Store { let ann = &self.ann_cache.as_ref().expect("loaded ANN cache").1; let mut candidate_count = limit.saturating_mul(4).min(eligible.len()).max(1); let mut results; + let mut filesystem_validity = HashMap::::new(); + let mut passes = 0u64; loop { + passes += 1; + let pass_span = trace.begin("semantic.ann_pass", parent); + trace.counter(pass_span, "requested_chunks", candidate_count as u64); + let ann_span = trace.begin("semantic.ann_search", pass_span); let matches = ann.filtered_search(query, candidate_count, |key| eligible.contains(&key))?; + trace.counter(ann_span, "returned_chunks", matches.keys.len() as u64); + trace.end(ann_span, Default::default()); + let materialization_span = trace.begin("semantic.parent_materialization", pass_span); let mut ranked: Vec<_> = matches.keys.into_iter().zip(matches.distances).collect(); ranked.sort_by(|a, b| a.1.total_cmp(&b.1).then_with(|| a.0.cmp(&b.0))); let mut best = HashMap::::new(); - let mut materialize=snapshot.prepare("SELECT c.path,f.filename,c.snippet,c.kind,c.number FROM semantic_chunks c JOIN files f ON f.path=c.path WHERE c.rowid=?1 AND c.generation=?2")?; + let mut materialize=snapshot.prepare("SELECT c.path,f.filename,c.snippet,c.kind,c.number,c.source_type,c.file_size,c.file_mtime FROM semantic_chunks c JOIN files f ON f.path=c.path WHERE c.rowid=?1 AND c.generation=?2")?; for (key, distance) in ranked { let cosine = 1.0 - distance; ensure!(cosine.is_finite(), "ANN produced nonfinite distance"); if cosine < MIN_COSINE { continue; } - let result = + let (result, size, mtime) = materialize.query_row(params![i64::try_from(key)?, active], |row| { - Ok(SearchResult { - path: row.get(0)?, - filename: row.get(1)?, - snippet: row.get(2)?, - score: f64::from(cosine), - match_kind: "semantic".into(), - source: Some(SourceLocation { - kind: row.get(3)?, - number: row.get(4)?, - }), - extraction_error: None, - }) + Ok(( + SearchResult { + path: row.get(0)?, + filename: row.get(1)?, + snippet: row.get(2)?, + score: f64::from(cosine), + match_kind: match row.get::<_, String>(5)?.as_str() { + "text" => "semantic".into(), + other => format!("semantic_{other}"), + }, + source: Some(SourceLocation { + kind: row.get(3)?, + number: row.get(4)?, + }), + extraction_error: None, + }, + row.get::<_, Option>(6)?, + row.get::<_, Option>(7)?, + )) })?; + if let (Some(size), Some(mtime)) = (size, mtime) { + let valid = *filesystem_validity + .entry(result.path.clone()) + .or_insert_with(|| { + #[cfg(test)] + MEDIA_STAT_CALLS.with(|count| count.set(count.get() + 1)); + let validation_span = trace.begin( + "semantic.parent_filesystem_validation", + materialization_span, + ); + let valid = + std::fs::metadata(&result.path) + .ok() + .is_some_and(|metadata| { + metadata.is_file() + && i64::try_from(metadata.len()).ok() == Some(size) + && metadata + .modified() + .ok() + .and_then(|t| { + t.duration_since(std::time::UNIX_EPOCH).ok() + }) + .and_then(|d| i64::try_from(d.as_nanos()).ok()) + == Some(mtime) + }); + trace.counter(validation_span, "valid", u64::from(valid)); + trace.end(validation_span, Default::default()); + valid + }); + if !valid { + continue; + } + } if best.contains_key(&result.path) { continue; } best.insert(result.path.clone(), result); } results = best.into_values().collect::>(); + trace.counter(materialization_span, "unique_parents", results.len() as u64); + trace.counter( + materialization_span, + "filesystem_checks", + filesystem_validity.len() as u64, + ); + trace.end(materialization_span, Default::default()); + trace.end(pass_span, Default::default()); if results.len() >= limit || candidate_count == eligible.len() { break; } @@ -488,6 +742,13 @@ impl Store { .then_with(|| a.path.cmp(&b.path)) }); results.truncate(limit); + trace.counter(parent, "ann_passes", passes); + trace.counter(parent, "result_files", results.len() as u64); + trace.counter( + parent, + "filesystem_checks", + filesystem_validity.len() as u64, + ); snapshot.commit()?; Ok(results) } @@ -614,6 +875,30 @@ impl Store { } } +#[allow(clippy::too_many_arguments)] +fn collect_eligibility_traced( + connection: &Connection, + generation: i64, + revision: i64, + filter: &FilterKey, + path: Option<&str>, + trace: &mut TraceCollector, + parent: Option, +) -> Result { + trace.timed( + "semantic.eligibility_filtered_scan_and_hash", + parent, + |trace, span| { + let result = collect_eligibility(connection, generation, revision, filter, path); + if let Ok(cache) = &result { + trace.counter(span, "eligible_chunks", cache.keys.len() as u64); + } + trace.counter(span, "single_dirty_file", u64::from(path.is_some())); + result + }, + ) +} + fn collect_eligibility( connection: &Connection, generation: i64, @@ -621,12 +906,15 @@ fn collect_eligibility( filter: &FilterKey, path: Option<&str>, ) -> Result { - let mut statement=connection.prepare("SELECT c.rowid,c.passage_id,c.content_hash,p.text,c.path FROM semantic_chunks c - JOIN passages p ON p.rowid=c.passage_id AND p.file_path=c.path AND p.kind=c.kind AND p.number=c.number - JOIN files f ON f.path=c.path WHERE c.generation=?1 + let mut statement=connection.prepare("SELECT c.rowid,c.passage_id,c.content_hash,p.text,c.path,c.source_type FROM semantic_chunks c + LEFT JOIN passages p ON c.source_type='text' AND p.rowid=c.passage_id AND p.file_path=c.path AND p.kind=c.kind AND p.number=c.number + JOIN files f ON f.path=c.path WHERE c.generation=?1 AND ((c.source_type='text' AND p.rowid IS NOT NULL) OR (c.source_type!='text' AND c.file_size=f.size AND c.file_mtime=f.mtime)) AND (?2 IS NULL OR substr(f.path,1,length(?2))=?2) AND (?3 IS NULL OR f.extension=?3) AND (?4 IS NULL OR f.size>=?4) AND (?5 IS NULL OR f.size<=?5) AND (?6 IS NULL OR f.mtime/1000000>=?6) AND (?7 IS NULL OR f.mtime/1000000<=?7) + AND (?10 IS NULL OR EXISTS(SELECT 1 FROM media_metadata m WHERE m.path=f.path AND m.duration_ms>=?10)) + AND (?11 IS NULL OR EXISTS(SELECT 1 FROM media_metadata m WHERE m.path=f.path AND m.duration_ms<=?11)) + AND (?12 IS NULL OR c.source_type=?12) AND (?9 IS NULL OR c.path=?9) ORDER BY c.passage_id,c.ordinal LIMIT ?8")?; let mut rows = statement.query(params![ generation, @@ -637,7 +925,10 @@ fn collect_eligibility( filter.modified_after, filter.modified_before, MAX_SCAN_CHUNKS as i64 + 1, - path + path, + filter.min_duration, + filter.max_duration, + filter.source_type ])?; let mut hashes = HashMap::::new(); let mut keys = HashSet::new(); @@ -650,7 +941,9 @@ fn collect_eligibility( "Corpus exceeds {MAX_SCAN_CHUNKS} chunk resource budget" ); let passage_id: i64 = row.get(1)?; - let hash = if let Some(hash) = hashes.get(&passage_id) { + let hash = if row.get::<_, String>(5)? != "text" { + row.get::<_, String>(2)? + } else if let Some(hash) = hashes.get(&passage_id) { hash.clone() } else { let hash = content_hash(&row.get::<_, String>(3)?); @@ -678,6 +971,340 @@ mod tests { use searchi_core::SearchIndex; const DIMENSIONS: usize = 768; + #[test] + fn many_video_windows_do_not_crowd_out_other_parent_files() -> Result<()> { + // Geometry verifies grouped retrieval, not model inference or codecs. + let directory = tempfile::tempdir()?; + let root = directory.path().join("media"); + std::fs::create_dir(&root)?; + for name in ["long.mp4", "other.mp4", "excluded.png"] { + std::fs::write(root.join(name), b"parent-grouping identity fixture")?; + } + let db = directory.path().join("index.db"); + let mut lexical = SearchIndex::open(&db)?; + lexical.index_folder(&root)?; + let mut store = Store::open(&db, DIMENSIONS)?; + let generation = store.begin("grouped-retrieval-proof")?; + let mut query = vec![0.; DIMENSIONS]; + query[0] = 1.; + let mut second = query.clone(); + second[0] = 0.95; + second[1] = (1.0_f32 - 0.95_f32.powi(2)).sqrt(); + for (id, path, _, _) in store.media_batch(0)? { + let identity = searchi_media::MediaIdentity::read(Path::new(&path), 1024)?; + if path.ends_with("long.mp4") { + for ordinal in 0..96 { + store.insert_media( + generation, + id, + ordinal, + &identity, + "video", + ordinal as u32 * 2000, + &query, + )?; + } + } else if path.ends_with("other.mp4") { + store.insert_media(generation, id, 0, &identity, "video", 4000, &second)?; + } else { + store.insert_media(generation, id, 0, &identity, "image", 0, &query)?; + } + } + store.activate(generation)?; + let options = SearchOptions { + extension: Some("mp4".into()), + ..Default::default() + }; + MEDIA_STAT_CALLS.with(|count| count.set(0)); + let mut trace = TraceCollector::new(MetricsMode::Debug); + let results = store.search_origin_traced( + &query, + "grouped-retrieval-proof", + 2, + &options, + None, + &mut trace, + None, + )?; + assert_eq!(results.len(), 2); + assert!(results[0].path.ends_with("long.mp4")); + assert!(results[1].path.ends_with("other.mp4")); + assert_eq!(results[1].source.as_ref().unwrap().number, 4000); + assert_eq!( + MEDIA_STAT_CALLS.with(std::cell::Cell::get), + 2, + "Each parent is stat-checked once despite repeated ANN expansions" + ); + let metrics = trace.finish(results.len()); + let spans = metrics.trace.unwrap(); + assert!( + spans + .iter() + .filter(|s| s.name == "semantic.ann_pass") + .count() + > 1 + ); + assert_eq!( + spans + .iter() + .filter(|s| s.name == "semantic.parent_filesystem_validation") + .count(), + 2 + ); + assert!( + spans + .iter() + .find(|s| s.name == "semantic.retrieval") + .unwrap() + .counters["ann_passes"] + > 1 + ); + for span in &spans { + if let Some(parent) = span.parent { + let parent = &spans[parent]; + assert!(span.start_ms >= parent.start_ms); + assert!( + span.start_ms + span.duration_ms <= parent.start_ms + parent.duration_ms + 1e-6 + ); + } + } + Ok(()) + } + + #[test] + fn media_origins_persist_filters_and_changes_remove_stale_candidates() -> Result<()> { + let directory = tempfile::tempdir()?; + let root = directory.path().join("media"); + std::fs::create_dir(&root)?; + let file = root.join("clip.mp4"); + std::fs::write(&file, b"storage identity fixture; not an inference test")?; + let db = directory.path().join("index.db"); + let mut lexical = SearchIndex::open(&db)?; + lexical.index_folder(&root)?; + let mut store = Store::open(&db, DIMENSIONS)?; + let (id, path, _, _) = store.media_batch(0)?.remove(0); + let identity = searchi_media::MediaIdentity::read(Path::new(&path), 1024)?; + lexical.set_media_metadata( + &path, + "artist: real extracted metadata fixture", + 65000, + identity.bytes, + identity.modified_ns, + )?; + let mut vector = vec![0.; DIMENSIONS]; + vector[0] = 1.; + let generation = store.begin("media-storage-proof")?; + store.insert_media(generation, id, 0, &identity, "video", 2345, &vector)?; + store.insert_media(generation, id, 1, &identity, "audio", 28000, &vector)?; + store.activate(generation)?; + drop(store); + let mut store = Store::open(&db, DIMENSIONS)?; + let mut cold = TraceCollector::new(MetricsMode::Debug); + let results = store.search_origin_traced( + &vector, + "media-storage-proof", + 5, + &SearchOptions::default(), + None, + &mut cold, + None, + )?; + let cold = cold.finish(results.len()).trace.unwrap(); + assert_eq!( + cold.iter() + .find(|s| s.name == "semantic.ann_load") + .unwrap() + .counters["cache_hit"], + 0 + ); + assert!(cold.iter().any(|s| s.name == "semantic.ann_checksum")); + let mut warm = TraceCollector::new(MetricsMode::Debug); + let warm_results = store.search_origin_traced( + &vector, + "media-storage-proof", + 5, + &SearchOptions::default(), + None, + &mut warm, + None, + )?; + assert_eq!( + serde_json::to_value(&results)?, + serde_json::to_value(&warm_results)? + ); + let warm = warm.finish(warm_results.len()).trace.unwrap(); + assert_eq!( + warm.iter() + .find(|s| s.name == "semantic.ann_load") + .unwrap() + .counters["cache_hit"], + 1 + ); + assert_eq!( + warm.iter() + .find(|s| s.name == "semantic.eligibility") + .unwrap() + .counters["cache_hit"], + 1 + ); + assert!(!warm.iter().any(|s| s.name == "semantic.ann_blob_read")); + assert_eq!(results.len(), 1); + assert_eq!(results[0].source.as_ref().unwrap().kind, "timestamp_ms"); + assert!([2345, 28000].contains(&results[0].source.as_ref().unwrap().number)); + let audio = store.search_origin( + &vector, + "media-storage-proof", + 5, + &SearchOptions::default(), + Some("audio"), + )?; + assert_eq!(audio.len(), 1); + assert_eq!(audio[0].match_kind, "semantic_audio"); + assert_eq!(audio[0].source.as_ref().unwrap().number, 28000); + let video = store.search_origin( + &vector, + "media-storage-proof", + 5, + &SearchOptions::default(), + Some("video"), + )?; + assert_eq!(video.len(), 1); + assert_eq!(video[0].match_kind, "semantic_video"); + assert_eq!(video[0].source.as_ref().unwrap().number, 2345); + assert!(store + .search_origin( + &vector, + "media-storage-proof", + 5, + &SearchOptions::default(), + Some("image") + )? + .is_empty()); + assert!( + results[0].match_kind == "semantic_video" || results[0].match_kind == "semantic_audio" + ); + let filter = SearchOptions { + extension: Some("png".into()), + ..SearchOptions::default() + }; + assert!(store + .search(&vector, "media-storage-proof", 5, &filter)? + .is_empty()); + let duration_filter = SearchOptions { + min_duration_ms: Some(66000), + ..Default::default() + }; + assert!(store + .search(&vector, "media-storage-proof", 5, &duration_filter)? + .is_empty()); + let duration_filter = SearchOptions { + min_duration_ms: Some(64000), + max_duration_ms: Some(66000), + ..Default::default() + }; + assert_eq!( + store + .search(&vector, "media-storage-proof", 5, &duration_filter)? + .len(), + 1 + ); + std::fs::write(&file, b"changed")?; + // Foreground hits check only actual candidate metadata, before watcher + // reconciliation; they never rehash the complete filesystem corpus. + assert!(store + .search(&vector, "media-storage-proof", 5, &SearchOptions::default())? + .is_empty()); + lexical.index_folder(&root)?; + assert!(store + .search(&vector, "media-storage-proof", 5, &SearchOptions::default())? + .is_empty()); + assert!(store + .insert_media(generation, id, 2, &identity, "video", 0, &vector) + .is_err()); + std::fs::remove_file(&file)?; + lexical.index_folder(&root)?; + assert!(store + .search(&vector, "media-storage-proof", 5, &SearchOptions::default())? + .is_empty()); + Ok(()) + } + + #[test] + fn media_failure_removes_partial_vectors_and_persists_reason() -> Result<()> { + let directory = tempfile::tempdir()?; + let file = directory.path().join("picture.png"); + std::fs::write(&file, b"identity fixture")?; + let db = directory.path().join("index.db"); + let mut lexical = SearchIndex::open(&db)?; + lexical.index_folder(directory.path())?; + let mut store = Store::open(&db, DIMENSIONS)?; + let (id, path, _, _) = store + .media_batch(0)? + .into_iter() + .find(|(_, p, _, _)| p.ends_with("picture.png")) + .unwrap(); + let identity = searchi_media::MediaIdentity::read(Path::new(&path), 1024)?; + let mut vector = vec![0.; DIMENSIONS]; + vector[0] = 1.; + let generation = store.begin("failure-proof")?; + store.insert_media(generation, id, 0, &identity, "image", 0, &vector)?; + store.media_failure(generation, &path, "Decoder rejected corrupt image")?; + let chunks: usize = store.connection.query_row( + "SELECT count(*) FROM semantic_chunks WHERE generation=?1", + [generation], + |r| r.get(0), + )?; + assert_eq!(chunks, 0); + let reason: String = store.connection.query_row( + "SELECT message FROM semantic_media_errors WHERE generation=?1", + [generation], + |r| r.get(0), + )?; + assert!(reason.contains("corrupt")); + Ok(()) + } + + #[test] + fn deleted_media_without_reconciliation_does_not_hide_later_valid_top_k() -> Result<()> { + let directory = tempfile::tempdir()?; + let root = directory.path().join("images"); + std::fs::create_dir(&root)?; + for name in ["a.png", "b.png"] { + std::fs::write(root.join(name), b"storage fixture")?; + } + let db = directory.path().join("index.db"); + let mut lexical = SearchIndex::open(&db)?; + lexical.index_folder(&root)?; + let mut store = Store::open(&db, DIMENSIONS)?; + let generation = store.begin("candidate-stat-proof")?; + let mut vector = vec![0.; DIMENSIONS]; + vector[0] = 1.; + for (id, path, _, _) in store.media_batch(0)? { + let identity = searchi_media::MediaIdentity::read(Path::new(&path), 1024)?; + store.insert_media(generation, id, 0, &identity, "image", 0, &vector)?; + } + store.activate(generation)?; + std::fs::remove_file(root.join("a.png"))?; + let results = store.search( + &vector, + "candidate-stat-proof", + 1, + &SearchOptions::default(), + )?; + assert_eq!(results.len(), 1); + assert!(results[0].path.ends_with("b.png")); + std::fs::remove_file(root.join("b.png"))?; + assert!(store + .search( + &vector, + "candidate-stat-proof", + 1, + &SearchOptions::default() + )? + .is_empty()); + Ok(()) + } + #[test] fn generation_persists_failed_staging_preserves_active_and_changes_hide_stale_vectors( ) -> Result<()> { diff --git a/docs/BUILDING.md b/docs/BUILDING.md index 9543688..b278c39 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -22,6 +22,7 @@ The Python CMake package is needed only when CMake is absent from PATH. python -m pip install cmake python tools/embeddinggemma2/build_runtime.py --backend cpu --jobs 2 python tools/embeddinggemma2/stage_runtime.py --backend cpu +python tools/media-runtime/provision.py --stage python tools/embeddinggemma2/download.py $env:SEARCHI_FORCE_CPU = '1' $env:SEARCHI_GEMMA_MODEL_DIR = (Resolve-Path .searchi/models/embeddinggemma2).Path @@ -38,8 +39,7 @@ The worker is statically linked with the MSVC CRT on Windows. Staging copies it and the llama.cpp license into the desktop resources directory. Add `--bundle-model` to staging for an offline model bundle after downloading; otherwise desktop setup provisions verified models on first launch. Search -itself performs no network inference or downloads. Media weights are staged -for future integration; the current worker supports text only. +itself performs no network inference or downloads. The worker now uses the verified media projector for genuine image/audio embeddings. The FFmpeg script stages verified standalone decoders and their notices. The desktop is a standalone Cargo workspace and needs separate validation: @@ -50,7 +50,7 @@ npm ci npm run format:check npm test npm run build -$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu' +$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu --disable-accelerated-video-decode' npm run tauri -- dev ``` @@ -67,13 +67,18 @@ Linux release. On a native Linux build host, run from the repository root: ```sh python3 tools/embeddinggemma2/build_runtime.py --backend cpu --jobs 2 python3 tools/embeddinggemma2/download.py +python3 tools/media-runtime/provision.py export SEARCHI_FORCE_CPU=1 cargo build --release -p searchi-cli --locked ./target/release/searchi index --db searchi.sqlite --root /path/to/documents -./target/release/searchi embed --db searchi.sqlite --model-dir .searchi/models/embeddinggemma2 --embedding-worker .searchi/runtime/cpu/searchi-gemma-worker --cpu-threads 1 +./target/release/searchi embed --db searchi.sqlite --model-dir .searchi/models/embeddinggemma2 --embedding-worker .searchi/runtime/cpu/searchi-gemma-worker --ffmpeg .searchi/media-runtime/bin/ffmpeg --ffprobe .searchi/media-runtime/bin/ffprobe --cpu-threads 1 ./target/release/searchi search --db searchi.sqlite 'supplier cancellation terms' --model-dir .searchi/models/embeddinggemma2 --embedding-worker .searchi/runtime/cpu/searchi-gemma-worker --cpu-threads 1 ``` +`embed` builds document, image, video and audio/music vectors by default. Use +`--text-only` explicitly to omit media. Default media indexing needs paired +FFmpeg/FFprobe paths or packaged helpers beside the installed CLI. + `searchi setup --model-dir PATH` is an alternative verified model-provisioning command. It provisions model assets, not the native worker. Package the worker separately and pass its path to headless embedding/search. Each short-lived CLI @@ -114,5 +119,9 @@ installers, stage the target worker, retain dependency/model notices, verify clean-machine launch and setup, run native Google smoke tests, and complete upgrade/migration, signatures, and rollback checks. Optional offline bundles need both verified model files. See [semantic bounds and evidence](SEMANTIC.md) -for current text-only, corpus, and performance limitations. Keep signing keys, -repository tokens, and model credentials outside source control. \ No newline at end of file +for current corpus, localization, and performance limitations. Keep signing keys, +repository tokens, and model credentials outside source control. +FFmpeg provisioning supports manifest-pinned Windows/Linux x86-64 and ARM64 artifacts; +only Windows x86-64 has executed here. macOS decoder packaging remains a gate. +See [media runtime provenance](../tools/media-runtime/README.md) and +[measured media limitations](MEDIA-QUALITY.md). diff --git a/docs/MEDIA-QUALITY.md b/docs/MEDIA-QUALITY.md new file mode 100644 index 0000000..51470e1 --- /dev/null +++ b/docs/MEDIA-QUALITY.md @@ -0,0 +1,99 @@ +# Media search quality + +## Evaluation contract + +The independent v1 corpus contains **20 real assets and 65 frozen queries**: 12 photos, four videos, two music performances, and two sound effects. Queries include English/German visual memories, visually similar hard negatives, timestamp-sensitive actions, spoken topics, exact artist/title metadata, strict filter constraints, and no-answer cases. + +Labels were frozen before media inference with fixture SHA256 `b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393`. Original asset hashes and licenses are recorded in [fixture.json](../fixtures/media/fixture.json) and [provenance](../fixtures/media/README.md). All Windows VM evaluation uses the real Google worker on **CPU, one thread**, with CPU FFmpeg decoding. No simulated embeddings or inferred model captions enter the corpus labels. + +The reference environment is Windows 11 Pro in a shared VM exposing four logical CPUs on an AMD Ryzen 7 7800X3D host, approximately 9.93 GiB visible memory. Inference deliberately uses one thread and `SEARCHI_FORCE_CPU=1`. [Recorded environment and worker hash](../fixtures/media/environment.json). Observed worker RAM varied around 0.9–1.2 GB during indexing; these snapshots are not a measured peak-memory guarantee. + +The corpus has one assistant annotator. Actual image/video frames were visually inspected; speech timestamps use independently published NASA captions. Human audio listening and blinded second-annotator review remain unexecuted. Existing artist/title tags are retained and checked at the stream level, where Vorbis stores them. English/German pairs refer to the same assets and are correlated, not twice as many independent examples. There is only one spoken-topic video and two music files; category-perfect recall can therefore be easy and must not be extrapolated. + +## Results + +The first **direct real-model dense reference** completed on CPU with 94/95 candidate encodings. This is an embedding/retrieval diagnostic, not yet the production pipeline. Candidate filtering in that reference is a benchmark constraint; exact metadata was deliberately marked unsupported. + +| Category | Queries | File recall@1 | File recall@5 | MRR | Precise timestamp hit@1 | +|---|---:|---:|---:|---:|---:| +| Photo memory | 24 | 100% | 100% | 1.000 | — | +| Video actions | 4 | 100% | 100% | 1.000 | 100% | +| Video scenes | 6 | 100% | 100% | 1.000 | 100% | +| Flower temporal states | 4 | 100% | 100% | 1.000 | 75% | +| Spoken topics in video | 8 | 100% | 100% | 1.000 | **25%** | +| Music memories | 4 | **50%** | **50%** | 0.500 | — | +| Sound effects | 4 | 100% | 100% | 1.000 | — | + +Across 55 supported positive queries (including one reference extension constraint), recall@1/@5 and MRR were **96.36% / 96.36% / 0.964**. Across 22 temporal queries, segment overlap@1 was **95.45%**, but precise point hits were **68.18%**. [Full recorded summary and failures](../fixtures/media/reference-summary.json), [rankings](../fixtures/media/reference-results.json). + +Important failures: + +- **Music encoding harness:** the original jazz violin Vorbis decode briefly overshot normalized PCM range. The direct tool sent unclamped floats, and the worker correctly rejected that one candidate. The two associated music misses are an explicit preprocessing failure, not evidence that the model confuses piano with violin. The production decoder clamps its PCM and must be evaluated separately; preserve this failed reference rather than hiding it. +- **Speech localization:** all eight spoken-topic queries found the right file and an overlapping thirty-second audio segment, but six returned a segment start outside the labelled utterance. Correct-file retrieval therefore does **not** fulfill precise “jump to the bit where somebody mentions a topic.” Shorter local windows or another alignment mechanism need independent evaluation. +- **Temporal visual distinction:** one red-flower query selected the right clip but the wrong stage of opening. +- **No-answer behavior:** all six supported absent/negative queries returned nearest neighbors (**100% unsuppressed return rate**). No arbitrary cosine threshold was invented. This exposes missing abstention evidence, not a calibrated confidence score. +- **Exact metadata:** four identity/no-answer cases remain unsupported in the direct embedding lane. A separate actual FFprobe → guarded Searchi core FTS run passed all three frozen artist/title queries at rank 1 and returned no result for the absent artist: **recall@1/@5 = 100%, MRR = 1.0; absent-artist return rate = 0%**. [Metadata results](../fixtures/media/metadata-summary.json). These are three small lexical identity cases, not proof that hybrid fallback abstains or that all music collections work. + +Encoding took **498.66 seconds** for the photo/frame/audio candidates in this CPU-one-thread run. Query p50/p95 were **92.78 / 122.93 ms** after encoding. Runtime reported `google/embeddinggemma-2`, 768 dimensions, CPU, one thread, `b11461-no-logits-v1`. Other concurrent VM work can affect timings; this is not a clean-room hardware benchmark. + +### Actual production pipeline: 30-second audio windows + +The real shared Searchi service, FFmpeg 9.0.2 decoder, metadata extraction, guarded core index, ANN retrieval and hybrid ranking completed **20/20 files and 118 chunks with zero encoding failures**. This rerun used the fixed decoder's exact sample trimming; the earlier direct harness failure remains recorded separately. Indexing took **668.04 seconds**, and warm query p50/p95 were **92.23 / 113.38 ms**, on one CPU thread. These serial evaluation runs can still share the VM with unrelated work. + +Across 58 supported positive queries, actual file recall@1/@5 was **96.55% / 100%**, with **MRR 0.983**. EN recall@1 was 96.77% (31 positives), DE 96.30% (27 positives). Photo memories 24/24, video file retrieval 22/22, sound effects 4/4, artist/title metadata 3/3 and the positive extension filter 1/1 passed at rank 1. Music memories passed **2/4 at rank 1 and 4/4 in the first five**: both violin queries ranked piano first despite successful decoding, an actual music hard-negative confusion. + +Temporal point accuracy was **12/22 (54.55%)**; segment overlap was 18/22 (81.82%). Video action/scenery point hits passed 10/10, flower state hits 2/4, and spoken-topic hits **0/8**. Two spoken orange-soil queries surfaced image/video-frame hits instead of audio. Remaining speech starts ranged from 0.539 to 15.777 seconds outside the labelled utterance. The 0/8 strict score does not mean every start is equally unusable; raw distance and wrong-channel failures are retained rather than tuning a tolerance to this test corpus. + +All six supported no-answer cases returned results, including the absent artist through semantic fallback. The separate lexical-only metadata absence test passed, but that does **not** establish abstention for the hybrid product. A requested temporal-range negative was explicitly unsupported, rather than silently counted as a pass. [Production summary](../fixtures/media/pipeline-30s-summary.json), [complete actual rankings](../fixtures/media/pipeline-30s-results.json). + +### Same-label shorter audio experiment + +The same fixed decoder, files, queries and two-second overlap were rerun with ten-second audio windows. All 20 files indexed successfully into **154 chunks**, with zero failures. This is a predeclared policy comparison, not a new production default. + +| Metric | 30-second windows | 10-second windows | +|---|---:|---:| +| CPU indexing time | 668.04 s | 671.51 s | +| Actual chunks | 118 | 154 | +| File recall@1 / @5 | 96.55% / 100% | 96.55% / 100% | +| MRR | 0.983 | 0.983 | +| Speech precise point hits | 0/8 | 1/8 | +| Speech segment overlap | 6/8 | 6/8 | +| Overall temporal point hits | 12/22 | 13/22 | +| Worst correct-channel timestamp distance | 15.777 s | 3.777 s | +| Warm query p50 / p95 | 92.23 / 113.38 ms | 90.65 / 110.42 ms | +| Music top-1 | 2/4 | 2/4 | +| No-answer returned results | 6/6 | 6/6 | + +Shorter windows improve the worst raw localization distance, but only one strict utterance hit and unchanged wrong-channel failures are insufficient for the original spoken-topic navigation goal. Similar measured cost here does not establish cost equivalence for long recordings; window count, media mix and VM contention differ. The actual hybrid artist/title regression still passes all three identity cases. [Ten-second summary](../fixtures/media/pipeline-10s-summary.json), [complete rankings and policy fingerprint](../fixtures/media/pipeline-10s-results.json). + +### Predeclared photo-budget comparison + +The same 12 photos and 24 frozen EN/DE memories were encoded at 70, 280 and 1120 tokens. Query embeddings were computed once and shared; no labels or thresholds changed. + +| Image tokens | Actual CPU batch encoding time | Recall@1 / @5 | MRR | +|---|---:|---:|---:| +| 70 | 47.61 s | 100% / 100% | 1.000 | +| 280 | 199.65 s | 100% / 100% | 1.000 | +| 1120 | 1493.32 s | 100% / 100% | 1.000 | + +There was no retrieval improvement on this small corpus despite a substantial high-budget cost. The high-budget run overlapped independent native compilation/profiling in the shared CPU VM, so the table is an observed experiment, not a controlled hardware scaling law. A worker RAM snapshot reached approximately 1.5 GB; peak RAM was not instrumented. Equal recall here does not establish equivalent retrieval for small text, dense screenshots or subtle visual distinctions. Keep the existing production policy pending a broader quality/cost corpus; these observations do not justify making 1120 tokens the default. [Budget summary](../fixtures/media/image-budget-summary.json), [actual dimensions, rankings and worker report](../fixtures/media/image-budget-results.json). + +Production defaults have not changed as part of these experiments. The current **self-rating is 4/10: experimental media retrieval**. Real visual retrieval is promising, but precise speech timestamps, music hard negatives and abstention remain essential gaps. This rating follows the rubric below rather than extrapolating the small corpus's high file-recall score. The production measurements above precede a subsequent spoken-cue channel-routing improvement; that change has not been rescored against this corpus and must not inherit a better measured score without a new run. + +The existing **20-document/24-query synthetic regression** was rerun with the actual Google CPU worker and unchanged fixture SHA256 `3bab37fc0ec9c2e2e40684962b049172b5078358c6487c9033ed8697b8128dd7`: + +| Lane | Top-1 | Recall@3 | Recall@10 | +|---|---:|---:|---:| +| Filename/keyword | 20.83% | 20.83% | 20.83% | +| Semantic | 100% | 100% | 100% | +| Hybrid | 100% | 100% | 100% | + +Measured hybrid p95 was **146.83 ms** on this run. [Recorded output](../fixtures/media/document-baseline.json). This remains a synthetic seed, not independent production-quality evidence or a large-corpus performance claim. + +## Scoring and release gates + +Report recall@1/@5, MRR, language/type breakdowns, segment-overlap hits, precise timestamp point hits, and failure categories. No-answer return rate is distinct from positive recall. Do not invent an arbitrary cosine rejection threshold from these results; calibrate on a separate development set, then validate on held-out negatives. + +Self-rating rubric is declared before scores: **1–2/10** broken core retrieval; **3–4/10** experimental retrieval with missing essential capabilities or unvalidated abstention/metadata; **5–6/10** useful limited beta after independent basic retrieval/filter/metadata checks; **7–8/10** strong pilot with high recall and timestamp quality on representative corpora; **9–10/10** requires production release evidence across all operating systems, large representative libraries, calibrated no-answer behavior, and complete lifecycle/security/resource verification. A small diagnostic alone cannot justify a production score. + +Remaining gates: broader production metadata/filter enforcement beyond the four positive seed constraints, calibrated no-answer handling, reliable spoken-topic alignment and channel selection, realistic long videos, audio listening review, unseen music/accents, corrupt codec cases, missing files/renames, hardware resource bounds, and native Windows/Linux/macOS validation. The measured production pipeline and explicit failures above establish a reproducible baseline; they do not close these gates. diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md new file mode 100644 index 0000000..7e902f2 --- /dev/null +++ b/docs/PERFORMANCE.md @@ -0,0 +1,158 @@ +# Search performance diagnostics + +Search performance must distinguish total request latency from the work inside +it. The shared Rust schema exposes basic metrics for routine searches and a +bounded nested trace for deliberate debugging. It uses monotonic `Instant` +timing, not wall-clock timestamps. No query text, source passages or file paths +belong in stage names/counters. + +## Shared response + +`SearchResponse` contains `results: Vec` and `metrics: SearchMetrics`. + +| Field | Meaning | +| --- | --- | +| total_ms | Elapsed time inside the collector's measured request boundary | +| result_count | Number of final returned results | +| trace | null in basic mode; debug spans in begin order | +| dropped_spans | Spans omitted when the 512-span ceiling or invalid parent is encountered | + +A `SearchSpan` has a static `name`, relative `start_ms`, `duration_ms`, optional +parent index and integer `counters`. Parent indices reference earlier spans in +the same trace; child timings lie within their parent. Nested durations overlap, +so summing every span would double-count work. Counters are capped at 32 keys per +span, with 96-character labels. Missing spans due to the cap are visible through +`dropped_spans`, never presented as complete instrumentation. + +Basic mode retains only the request start Instant and result count; there is no +per-stage span Vec or diagnostic string allocation. Debug mode captures up to +512 spans. Scope timings preserve normal closure return values and errors. +Already-ended or foreign tokens are harmless, and unfinished scopes close at +collector finish. Closing a parent closes its open descendants for containment. + +## Instrumenting the shared engine + +```rust +use searchi_core::metrics::{MetricsMode, TraceCollector}; +let mut trace = TraceCollector::new(MetricsMode::Debug); +let results = trace.timed("search", None, |trace, parent| { + trace.timed("candidate_selection", parent, |trace, token| { + trace.counter(token, "candidate_count", candidates.len() as u64); + retrieve_candidates(candidates) + }) +}); +let metrics = trace.finish(results.len()); +``` + +This is an API illustration, not a measured benchmark. `begin(name,parent)` / +`end(token,counters)` supports explicit scopes spanning locks or separate calls; +`SpanToken` is Copy and exposes its index. `counter` records bounded integer +counts without source data. `elapsed_ms` reports elapsed request time. Capture +queue/lock boundaries in the caller, then pass that same collector into the +shared core/service so stages refer to one origin. + +Useful actual boundaries include request admission/reader lock, filter snapshot, +filename/FTS retrieval, tokenizer/query inference, active ANN load, eligibility +refresh, filtered HNSW traversal, per-file deduplication, ranking/fusion and +result assembly. Name only work that is truly measured. Do not label the whole +worker round trip as pure neural execution or fabricate stage splits from a +single elapsed number. Model load/warmup and initial eligibility work should be +reported separately from a retained worker's first foreground and warm queries. + +## CLI and desktop integration + +The CLI exposes these actual modes: + +```sh +searchi search --db searchi.sqlite contract --json +searchi search --db searchi.sqlite contract --performance --json +searchi search --db searchi.sqlite contract --debug-performance --json +``` + +Plain `--json` preserves the legacy result array. `--performance --json` emits +`SearchResponse` with basic metrics; `--debug-performance --json` emits the +same envelope with detailed spans. Normal terminal output prints results and +reports elapsed time/count on stderr, including CLI index/session initialization. +Debug terminal mode also prints the detailed metrics on stderr. Legacy Vec +interfaces remain wrappers for compatibility. The desktop should use a compact ordinary summary and an optional +diagnostic view, without confusing score/similarity with elapsed time or confidence. + +Both measured GUI commands start the native clock at command entry, include instrumented queue/lock waits, and finish before response serialization. UI timing separately captures input/debounce, lane/retry waits, invoke/round trip and synchronous DOM updates. Display latency ends at the DOM update; actual compositor paint and deferred media preview loading are not measured. Their overlapping boundaries must not be summed. Native metrics exclude frontend delays and post-return paint. A fast Rust request does not +prove a responsive first foreground interaction. Conversely, pending setup or +model loading must not be silently included in a warm-query claim. + +## Reproducible performance validation + +Record build profile, CPU/device and thread budget, VM/host resources, corpus and +active generation, filters, cold/warm state, concurrent indexing and setup costs. +Use multiple queries and p50/p95 distributions; retain raw reports. Compare basic +and debug mode on the same corpus to quantify instrumentation overhead. Debug +traces guide investigation but are not a substitute for representative benchmarks. + +Current recorded filename, actual Google seed and synthetic ANN evidence is in +[VALIDATION](VALIDATION.md) and [SEMANTIC](SEMANTIC.md). Media quality/timing is in +[MEDIA-QUALITY](MEDIA-QUALITY.md). Synthetic vectors measure index behavior only; +real Google inference remains required for product semantic search. Platform, +large-corpus, concurrent-indexing and GPU performance gates remain independent. +## Worker round-trip diagnostics + +Measured desktop failures return `{message, metrics}` and retain the trace for +the failed attempt. Busy retries are separate attempts. If an unexpected worker +task failure loses its collector, elapsed time is retained, the trace is null, +and a dropped-span marker makes the missing detail explicit. Error messages are +excluded from the exported timing report. + +Embedding IPC spans expose named `*_us` integer counters for request encoding, +writing, worker wait/response decode, validation, and native tokenization, batch +preparation, inference and pooling/normalization when genuinely reported. They +also expose `worker_token_count` and the GPU-to-CPU restart count. Microsecond +counters are durations, not occurrence counts; their suffix records units. + +The native worker clock is not aligned with Rust's collector origin. Native +stage values remain counters on the IPC span rather than invented positioned +child spans. Worker wait includes response-reader JSON parsing and scheduling; +it is not pure inference time. The encompassing round trip and its component +counters overlap. A fallback/restart may include setup outside the last worker's +reported neural pass; retain that distinction when diagnosing slow requests. + +## Small instrumentation-overhead diagnostic + +The deterministic example creates 1,000 local text files, builds/prewarms SQLite, +then alternates basic/debug order over 24 exact filename queries and 20 repeats. +Both modes must retrieve the correct file. It records 480 samples per mode, +outer-call p50/p95/mean and actual debug span counts, excluding fixture setup +and JSON serialization. It runs no model, media decoder or network. + +```powershell +cargo run --release -p searchi-core --example trace_overhead -- .searchi/trace-overhead.json +``` + +This tiny warm lexical corpus measures diagnostic overhead under the current +VM conditions. It does not certify production search latency or model-query +tracing overhead. Keep the raw report and profile/device/concurrency caveats; +repeat on representative corpora and compare instrumentation policies before +claiming low overhead across every retrieval mode. + +Windows CPU release diagnostic, 2026-10-12 (480 samples per mode): + +| Mode | Mean | p50 | p95 | +| --- | --- | --- | --- | +| Basic | 0.556 ms | 0.440 ms | 0.934 ms | +| Detailed | 0.968 ms | 0.819 ms | 1.615 ms | + +The detailed searches retained 14 spans each. These measurements include the +search itself and metrics assembly, and exclude fixture setup and JSON encoding. +Other work in the VM could contend for CPU. [Raw samples and measurement scope](evidence/windows-cpu-trace-overhead.json). +The recorded Windows x86-64 release run retained 480 raw samples per mode and +14 actual debug spans per request: + +| Mode | Mean | p50 | p95 | +| --- | ---: | ---: | ---: | +| Basic | 0.556 ms | 0.440 ms | 0.934 ms | +| Debug | 0.968 ms | 0.819 ms | 1.615 ms | + +[Raw samples and measurement contract](evidence/windows-cpu-trace-overhead.json) +include the active VM-contention caveat: native photo inference and other work +may overlap. This is an absolute small-corpus comparison, not an old-baseline +regression claim or proof of model/media tracing overhead. The extra cost +supports keeping detailed mode optional rather than claiming it is free. diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 631a269..117a6fa 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -38,10 +38,21 @@ Status: implementation started; no production release yet. Windows VM tests use - [ ] Watchers and reconciliation across Windows, macOS and Linux. ## 4. Media +- [x] Genuine Google image, audio and video embeddings integrated with the shared + search service and CPU-tested FFmpeg decoding; music tags and duration filters. +- [x] Frozen independent media corpus with retrieval, timestamp, negative-query + and indexing-cost measurements (see MEDIA-QUALITY.md). +- [ ] Improve precise spoken-passage localization, music hard negatives and + calibrated handling of queries without a relevant match. +- [ ] Package and verify decoders on every release OS; test production acceleration. - [ ] CPU OCR, image retrieval, audio transcription, video segment locations. - [ ] Isolated extraction workers with timeouts and resource ceilings. ## 5. Release gates +- [x] Shared monotonic Basic/Debug search metrics, granular bounded engine traces, + actual worker query diagnostics, and headless JSON performance output. +- [ ] Verify detailed performance UI interaction on native desktop platforms; + repeat overhead measurements on representative libraries and hardware. - [ ] Formatting, lint, tests and security/dependency review. - [ ] CPU benchmarks: filename p95 <50 ms/1M records; text <150 ms/100K documents; semantic <500 ms on declared hardware. - [ ] Measure cold start, indexing throughput, RAM, disk and idle CPU. diff --git a/docs/SEMANTIC.md b/docs/SEMANTIC.md index 13d9ca3..73ceaaf 100644 --- a/docs/SEMANTIC.md +++ b/docs/SEMANTIC.md @@ -38,9 +38,7 @@ on other operating systems remain independent release checks. | embeddinggemma-2-Q8_0.gguf | 309,855,456 | 2188ac1deca4b77dffefd603c2776a9d76d9d74ec01841392982ebb840b09135 | | mmproj-embeddinggemma-2-Q8_0.gguf | 554,821,024 | c4a8a52691ecef40618438928bdf9e68379b854e24166f292592353db0aab64f | -Setup downloads both pinned files. **The current worker implements text**; -image/audio projection loading and image/audio/video embeddings remain required -work. Downloaded media weights do not establish functioning multimodal search. +Setup downloads both pinned files. The native worker implements genuine text, image pixels, and mono 16 kHz audio embeddings through the verified Google projector in the same 768-dimensional query space. The shared service now persists unified document, image, video-frame and soundtrack/audio/music vectors with source locations and metadata. Scoped desktop media previews and an independent retrieval evaluation are implemented; precise localization, broader quality, native playback QA and releases remain gates. Weights use Apache-2.0; llama.cpp and DigUp use MIT; USearch and NumKong use Apache-2.0. Retain notices with distributions. Five DigUp text reference vectors @@ -64,14 +62,15 @@ HybridSearch is the shared CLI/desktop service: HybridSearch::open(db, model_dir, worker_executable, threads) HybridSearch::embedding_status(db) // No model/runtime load or network service.warmup() // Real query inference + ANN cache -service.index_embeddings() +service.index_embeddings() // Explicit document-only generation +service.index_embeddings_with_media(&tools, &MediaLimits::default()) // Unified generation service.search(query, limit, &SearchOptions) service.search_semantic(query, limit, &SearchOptions) // Diagnostics service.worker_info() // Actual model/runtime/device/threads ~~~ Threads are bounded to 1–8; VM tests use one. Document batches contain at most -eight windows. Request/response budgets are 2/4 MiB, startup has a 120-second +eight windows. Request/response budgets are 16/4 MiB, startup has a 120-second deadline, and each request has a 180-second deadline. Malformed or interrupted IPC and invalid embeddings fail explicitly. @@ -177,3 +176,92 @@ The ignored ANN test deliberately requires release mode. Default tests require no model/network and cover protocol bounds, invalid vectors, UTF-8 coverage, fusion, lifecycle, checksums, pre-top-k filtering, and dirty-path caching. Linux/macOS and GPU checks are not inferred from this Windows CPU run. + +## Genuine image and audio adapter + +`GemmaEmbedder::embed_images(&[&Path])` uses a provisional 280-token image +budget. `embed_images_with_budget(paths, budget)` supports 70 through 1120 +Google visual tokens, including full-resolution model input. Use +`embed_images_with_metadata` for encoded dimensions and the chosen budget. +The aspect-preserving dimensions are multiples of 48; Rust performs bounded +PNG/JPEG/WebP/BMP decoding, applies EXIF orientation, and bicubic Catmull-Rom +resizing before sending RGB pixels. No captions or filenames produce vectors. +Bounds are eight paths per call, one image per inference operation, 64 MiB +input files, 64 Mi-pixel JPEG sources (scaled decoding above 16 Mi pixels), +16 Mi-pixel non-JPEG sources, and a 256 MiB decoding-buffer/output ceiling. Decoder dimensions +and output size are checked before pixel allocation. Tiny/extreme images still +receive a valid bounded grid. The same API embeds decoded video frame files. + +`GemmaEmbedder::embed_audio_pcm(samples)` accepts normalized finite mono 16 kHz +PCM with 1–480,000 samples, at most 30 seconds, on a little-endian host. It +encodes actual sound through Google MTMD and the shared mean-pooled text model. +Callers must segment the entire recording/movie soundtrack and retain actual +window timestamps; this API never silently truncates audio. It provides no +transcript. Speech, music, and environmental sounds require independent quality +evaluation even though all use this genuine encoder. + +The projector is size/SHA256 verified on first media use, then loaded lazily in +the retained native worker. Model initialization and returned inference failures +share the CPU fallback policy. Native video/FFmpeg spawning is disabled; the +media adapter owns extraction. Media generations must include +`GEMMA_MEDIA_FINGERPRINT` and image budget/window policy in their identity. +Text fingerprints remain unchanged. GPU media inference is untested here. + +Actual Windows CPU parity with copied MIT DigUp fixtures passed for screenshot +280, photo 140, frame 70, and speech: cosine respectively **0.99994194, +0.99974583, 0.99921928, and 0.99983318**, all exceeding the 0.999 gate. The test +completed in 58.79 seconds including fresh model/projector startup. This proves +runtime parity on those inputs, not broad image/audio retrieval quality. +Run with the model/worker environment above: + +~~~powershell +cargo test -p searchi-semantic --test gemma_media_cpu -- --ignored --nocapture +~~~ +The large camera JPEG policy, established decoder tradeoffs, EXIF/resource test, +and memory-bound caveats are documented in [the semantic crate](../crates/searchi-semantic/README.md). + +## Unified media indexing and setup + +The desktop and default CLI `embed` command use `index_embeddings_with_media`. +Document-only indexing is an explicit `--text-only` choice. `searchi-media` +prepares actual image files, movie frames and mono 16 kHz audio windows with +verified caller-supplied FFmpeg/FFprobe executables. There is no transcription, +fabricated caption or model-derived filename substitution. Existing stream/file +artist/title metadata enters guarded keyword indexing. + +Default media policy uses image 280/frame 70 visual tokens, 30-second primary +audio windows with two-second overlap, up to 240 distributed frames plus 120 +scene candidates, up to 600 audio windows, a four-hour/16 GiB file ceiling and +45-second subprocess deadlines. Coverage includes the audio tail or reports an +explicit resource error; video sampling spans the movie without guaranteeing +every transient scene. Media files have stable content identity, persisted +vectors and sources (`image`, `timestamp_ms`); source changes/deletions suppress +stale results. Generations include preprocessing/window/sampling fingerprints. +Per-file decoding failures are reported and persisted rather than silently +counted as successful media indexing. Other filename/text matches stay useful. + +Developer preparation from the repository root: + +~~~powershell +python tools/embeddinggemma2/build_runtime.py --backend cpu --jobs 2 +python tools/embeddinggemma2/stage_runtime.py --backend cpu +python tools/media-runtime/provision.py --stage +$env:SEARCHI_FORCE_CPU = '1' +$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu --disable-accelerated-video-decode' +~~~ + +The decoder script verifies a pinned FFmpeg 9.0.2 LGPL artifact and stages tools, +notices and the manifest without global installation. Only Windows x86-64 has +been executed; Linux/ARM64 entries require native checks, and macOS decoder +packaging is still missing. End-user packages must include the worker/decoders; +Google weights are provisioned automatically and verified locally. Search does +not perform setup downloads. Headless CLI helper discovery and explicit paths +are documented in [README](../README.md) and [BUILDING](BUILDING.md). + +[Independent media evaluation](MEDIA-QUALITY.md) preserves the frozen corpus, +actual production pipeline, direct-harness failure, music confusions, speech +point-localization failures and unsuppressed no-answer results. Strong file +recall is insufficient for accurate spoken-topic navigation. A ten-second audio +experiment reduces some distances but does not close that gate; it is not a +new default. Quality policies must be validated on held-out data rather than +inventing thresholds from the evaluation corpus. \ No newline at end of file diff --git a/docs/VALIDATION.md b/docs/VALIDATION.md index b49aa7b..f65026b 100644 --- a/docs/VALIDATION.md +++ b/docs/VALIDATION.md @@ -1,64 +1,94 @@ # Validation evidence -Development host: Windows VM, x86_64 MSVC, Rust stable 1.99.0. -All local tests run on CPU; no GPU provider is configured. +Development host: Windows VM, x86_64 MSVC, stable Rust 1.99.0. All local +inference, FFmpeg decoding and WebView tests use CPU only. UI launches set +`WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS='--disable-gpu --disable-accelerated-video-decode'` +and `SEARCHI_FORCE_CPU=1`. ## Current integration checkpoint (2026-10-12) -- `cargo test --workspace --locked`: 41 default tests passed after final core integration. Four asset-dependent - or explicit benchmark tests remain opt-in; a default pass does not run them. -- Native desktop tests: 7 passed with SEARCHI_FORCE_CPU=1 and WebView2 GPU disabled. -- Frontend: 7 async-state tests passed, Prettier passed, TypeScript/Vite build passed. -- Genuine Google CPU reference/window test passed separately: five DigUp reference - vectors had cosine similarity above 0.999; actual multilingual retrieval and - tokenizer tail-window coverage passed. MiniLM evidence below is historical. -- Repository description/topics were read back after update; the branded avatar - upload returned HTTP 204 and the repository API returned its avatar URL. -- New desktop styling is in progress. `design-qa.md` records the visual gate as - blocked because browser bootstrap and native screen capture are unavailable. - No visual match or complete UI interaction verification is claimed. +- Native desktop: **9/9 tests passed**, including structured trace/basic responses. + Post-generation cached query warmup is implemented but its interactive first-query gate remains open. + Frontend: **18/18 tests passed**, TypeScript/Vite production build and + formatting passed. Preview policy tests cover fractional timestamp seeking, + image labels, one active/latest pending request, stale replies and Escape. +- Semantic adapter: **8 default tests passed**; the explicit 48 MP resource test + remains opt-in. Strict targeted all-target Clippy and formatting passed. + Protocol bounds, invalid vectors, artifact size/checksum mismatch, old-worker + capability defaults and oversized JPEG rejection are covered. +- The CPU native helper rebuilt and staged successfully with genuine Google + MTMD image/audio support. Its handshake reports `media_supported:true`; + older text workers default false rather than claiming media readiness. +- Actual Google CPU media parity passed separately in **52.85 seconds**: + screenshot 280 cosine 0.99994194, photo 140: 0.99974583, frame 70: 0.99921928 and + speech: 0.99983318 against pinned MIT DigUp vectors. All exceed the 0.999 gate. + This verifies runtime parity, not broad retrieval quality. +- The release resource test encodes/decodes an actual 8000x6000 JPEG with EXIF + rotation and verifies region colors after scaled decoding/resizing. Decode + plus resize took 176–220 ms. A sampled whole-test peak was 146.86 MiB, including + source fixture generation; it is not decoder-only RSS or neural quality. +- The independent production media pipeline has run on 20 real assets/65 frozen + queries using actual Google inference, FFmpeg, metadata, persistence and HNSW. + It encoded 20/20 files with no failures in the recorded 30-second-window run. + Broad file recall is promising; precise speech timestamps, music confusion + and no-answer behavior remain failed quality gates. Preserve the earlier + direct harness failure separately. [Raw results and limitations](MEDIA-QUALITY.md). +- Actual document seed regression passed 24/24 semantic/hybrid queries. This is + a small synthetic regression, not a production relevance corpus. +- The explicit 100,000-vector release ANN diagnostic passed 98.5% recall@10, + HNSW p95 1.37 ms and warm service p95 6.40 ms with zero warm passage hashes. + Vectors are synthetic index benchmark data, never production embeddings. +- The fixed one-million-file first-input report records 40 inputs below 50 ms in + that run: [recorded benchmark](../crates/searchi-core/benchmarks/results/windows-cpu-full-candidate-first-final.json). + These measurements do not establish every query or concurrent-indexing goal. -Final UI integration: the branded compact launcher, local Inter/Fluent assets, -themes and motion implementation passed frontend build, formatting, and seven -state tests. Native launch succeeded; accessibility text showed real controls -and a warmed Google CPU worker. UI input and screenshots remain blocked by -Windows access/capture errors, as recorded in design-qa.md. Workspace formatting -and strict all-target Clippy passed. The fixed full-corpus first-input report -is in crates/searchi-core/benchmarks/results/windows-cpu-full-candidate-first-final.json; -all 40 measured filename inputs were below 50 ms in that run. +The integrated CPU workspace checkpoint passed **62 default tests** (8 assets, 6 CLI, 23 core, 4 media, 8 semantic, 13 service), with **10 explicit opt-in tests ignored**. Workspace and native all-target Clippy passed with warnings denied. The later semantic CPU-restart counter change passed workspace Clippy and the actual CPU query diagnostics test. Earlier aggregate counts are historical. -The active parallel development branches of work may add tests or change counts -after this checkpoint. Run the documented checks again after integration. +The updated pinned C++ helper compiled in an independent CPU build directory and +was staged for desktop resources without interrupting media evaluation. Actual +Google query diagnostics passed separately in 18.09 seconds including model +initialization and two queries: 13 tokens, tokenization 149 us, batch preparation +22 us, inference 112914 us, pooling/normalization 17 us. Rust worker wait/response +decode measured 113960 us. Debug/normal embedding cosine was 0.99999999. These +are one diagnostic sample under VM contention, not production latency evidence. +See [performance boundaries and raw overhead samples](PERFORMANCE.md). -## Historical foundation evidence +## Native UI and platform limits -Initial foundation checks (2026-10-12): -- `cargo test --workspace`: CLI parser/executable checks and engine retrieval, - lifecycle, exclusions, filters, migration and concurrent-reader checks passed. -- `cargo clippy --workspace --all-targets -- -D warnings`: passed. -- Rust formatting applied; final formatting verification follows integration. -- Desktop TypeScript/Vite build passed; npm audit reported zero vulnerabilities. -- Initial Windows desktop native check, embedded app build, strict Clippy and - two desktop tests passed (index gate recovery and guarded source opening). -- Desktop launched with WebView2 `--disable-gpu`. UI automation could not capture - the window: `GetCursorPos` access denied, then monitor capture error - `0x80070057`. Visual layout and end-to-end UI interactions remain unverified. -- Real Python CPU ONNX embedding proof completed on 8 documents / 6 queries: - 5/6 top-1 accuracy, 6/6 recall@3. The strict top-1 quality gate is not met. - See `tools/semantic-proof/windows-cpu-result.json` for raw timings and rankings. - This tiny fixture is not evidence of large-corpus performance. -- Native Rust CPU embedding adapter compiled, passed its three unit tests and - the explicit local-model smoke test. The smoke reproduced the same 5/6 top-1 - limitation. Default CI omits this asset-dependent test; it must be executed - separately with provisioned local artifacts. -- Integrated workspace validation: 19 default tests passed; 1 local-model test - is opt-in. Rust formatting and strict Clippy passed after lockfile refresh. -- PDF/DOCX fixture tests include matching source locations, corrupt replacement, - encrypted PDF behavior and compressed-input limits. +The branded launcher launched natively. Accessibility inspection showed real +controls and a warmed Google CPU worker. Native screenshots, input automation +and complete image/audio/video playback interactions remain blocked by Windows +access/capture errors recorded in [design QA](../design-qa.md). Passing pure +preview policy tests does not establish real WebView codec playback or visual +fidelity. Default-application opening is not exact timestamp navigation. -Not yet established: production latency targets, semantic inference, desktop -runtime behavior, Linux/macOS execution, installer signing or upgrades. -CI configuration is source configuration, not evidence that remote jobs ran. -Gitea workflows require matching Windows, Linux and macOS runners; runner -availability has not been established. GitHub workflows are also supplied for -future mirroring, but do not run merely because code was pushed to Gitea. +Windows x86-64 verified decoder provisioning/staging has executed. Manifest +entries for Linux and ARM64 are configuration, not evidence of native execution. +A vetted macOS decoder package remains missing. Linux/macOS worker/desktop +execution, production GPU parity/fallback, installer signing, upgrade/rollback, +licenses/source distribution, large libraries and calibrated absence handling +remain unexecuted release gates. FFmpeg subprocess memory is not sandbox-capped; +bounded outputs/timeouts are not an absolute RSS guarantee. + +Gitea needs matching registered runners. GitHub workflows are supplied for +mirroring; they do not run merely because code is pushed to Gitea. The current +workflow checks do not automatically certify downloaded Google assets or the +separately built worker. CI configuration is not remote job evidence. + +## Historical evidence + +Initial engine/CLI checks covered retrieval, persistence, filesystem changes, +exclusions/filters, migration, concurrent readers, PDF pages, DOCX paragraphs, +corrupt replacement, encrypted PDF errors and bounded compressed input. +The first actual Google text adapter matched five pinned reference vectors +above 0.999, including multilingual queries and long-document window coverage. + +The rejected MiniLM/ONNX experiment achieved 5/6 top-1 on its six-query fixture; +it is retained under the opt-in historical proof only and is not a production +fallback. [Historical experiment](../tools/semantic-proof/HISTORICAL.md). +Repository metadata/avatar updates were read back successfully. Historical +foundation/default test totals changed as implementation expanded and must not +be presented as the current aggregate. + +Reproduction commands and exact interfaces are in [BUILDING.md](BUILDING.md), +[SEMANTIC.md](SEMANTIC.md), and [MEDIA-QUALITY.md](MEDIA-QUALITY.md). diff --git a/docs/evidence/windows-cpu-google-query-diagnostics.json b/docs/evidence/windows-cpu-google-query-diagnostics.json new file mode 100644 index 0000000..afb2eb9 --- /dev/null +++ b/docs/evidence/windows-cpu-google-query-diagnostics.json @@ -0,0 +1,22 @@ +{ + "date": "2026-10-12", + "model": "google/embeddinggemma-2", + "runtime": "llama.cpp b11461 with pinned no-logits patch", + "device": "cpu", + "threads": 1, + "test": "google_cpu_debug_query_reports_actual_worker_stages_without_changing_vectors", + "test_elapsed_seconds_including_initialization_and_two_queries": 18.09, + "debug_normal_cosine": 0.99999999, + "diagnostics": { + "request_encode_us": 24, + "request_write_us": 52, + "response_validate_us": 92, + "worker_batch_prepare_us": 22, + "worker_inference_us": 112914, + "worker_pool_normalize_us": 17, + "worker_token_count": 13, + "worker_tokenization_us": 149, + "worker_wait_and_response_decode_us": 113960 + }, + "scope": "One actual query diagnostic; native worker clocks are not aligned to Rust. VM had concurrent media inference. No production latency or broad overhead claim." +} diff --git a/docs/evidence/windows-cpu-trace-overhead.json b/docs/evidence/windows-cpu-trace-overhead.json new file mode 100644 index 0000000..42a3e9d --- /dev/null +++ b/docs/evidence/windows-cpu-trace-overhead.json @@ -0,0 +1,990 @@ +{ + "arch": "x86_64", + "basic": { + "mean_ms": 0.5563772916666668, + "p50_ms": 0.4403, + "p95_ms": 0.9344, + "samples": 480 + }, + "basic_samples_ms": [ + 0.434, + 0.4441, + 0.5638000000000001, + 0.41350000000000003, + 0.4078, + 0.44470000000000004, + 0.4078, + 0.5291, + 0.416, + 0.4223, + 0.43360000000000004, + 0.4181, + 0.5680999999999999, + 0.44630000000000003, + 0.4105, + 0.3995, + 0.43829999999999997, + 0.4223, + 0.4192, + 0.4153, + 0.5199999999999999, + 0.4115, + 0.482, + 0.5616, + 0.417, + 0.4108, + 0.412, + 0.3987, + 0.4224, + 0.5749000000000001, + 0.39780000000000004, + 0.40240000000000004, + 0.4188, + 0.39809999999999995, + 0.3923, + 0.532, + 0.44880000000000003, + 0.5005, + 0.4576, + 0.4341, + 0.5256, + 0.4138, + 0.5062000000000001, + 0.4152, + 0.3983, + 0.5354, + 0.4163, + 0.5561999999999999, + 0.7023, + 2.0184, + 0.483, + 0.5897, + 0.5286, + 0.4496, + 0.41750000000000004, + 2.5051, + 0.4249, + 0.8365999999999999, + 0.5505, + 0.4127, + 0.5488999999999999, + 0.47009999999999996, + 0.6473, + 0.4203, + 0.6688, + 0.4081, + 0.46749999999999997, + 0.4396, + 0.4638, + 0.4878, + 0.5753, + 0.8668, + 0.4817, + 0.41829999999999995, + 0.4106, + 0.482, + 0.4837, + 0.3935, + 0.5321, + 0.42860000000000004, + 0.41859999999999997, + 0.3914, + 0.3881, + 0.522, + 0.4021, + 0.3938, + 0.3918, + 0.38739999999999997, + 0.5252, + 0.39740000000000003, + 0.3877, + 0.421, + 0.40850000000000003, + 0.5257000000000001, + 0.40299999999999997, + 0.4779, + 1.9503000000000001, + 0.416, + 0.4799, + 0.5547, + 0.41209999999999997, + 0.4281, + 0.6578, + 0.4112, + 0.704, + 0.5748, + 0.4073, + 3.9541999999999997, + 0.5597, + 0.6794, + 0.46690000000000004, + 0.4059, + 0.5046999999999999, + 0.4214, + 0.5058, + 0.4331, + 0.4039, + 0.41100000000000003, + 2.5677, + 0.4401, + 0.4058, + 0.4004, + 0.4566, + 0.4249, + 0.5615, + 0.3956, + 0.6221, + 0.53, + 0.4347, + 0.5176999999999999, + 0.3959, + 0.4193, + 0.627, + 0.42719999999999997, + 1.1775, + 0.6066999999999999, + 0.5718, + 0.45, + 0.4439, + 0.5364, + 0.5308, + 0.4416, + 0.5453, + 0.4424, + 0.5058, + 0.4075, + 0.46099999999999997, + 0.5885, + 0.5032, + 1.3806999999999998, + 0.4668, + 0.5145, + 0.40959999999999996, + 0.5816, + 0.4249, + 0.3986, + 0.6983999999999999, + 2.6059, + 0.4276, + 0.5638000000000001, + 0.5913, + 0.4168, + 0.4255, + 1.4086999999999998, + 1.5349000000000002, + 0.4954, + 0.5483, + 0.41350000000000003, + 0.42450000000000004, + 1.1743999999999999, + 0.6155, + 0.48319999999999996, + 0.6431, + 0.4142, + 0.43370000000000003, + 0.5195, + 0.3939, + 0.41609999999999997, + 0.41619999999999996, + 0.38949999999999996, + 1.9449999999999998, + 0.5754, + 0.4729, + 0.5639, + 0.40719999999999995, + 1.8393000000000002, + 0.46490000000000004, + 0.5271, + 0.4041, + 0.5678000000000001, + 0.5701, + 0.4301, + 0.9139, + 0.4016, + 0.4486, + 0.41659999999999997, + 0.6462, + 0.7081999999999999, + 0.6969, + 0.6972, + 0.5947, + 0.4736, + 0.6512, + 0.4312, + 0.4189, + 0.5238, + 0.39130000000000004, + 0.4522, + 0.4057, + 0.5138, + 0.8949, + 0.9114, + 0.5758, + 0.5318999999999999, + 0.4661, + 0.4411, + 1.6324, + 0.4342, + 2.5791999999999997, + 0.4112, + 0.4033, + 3.1165, + 0.424, + 0.5136000000000001, + 0.40549999999999997, + 0.631, + 0.4153, + 2.9606, + 0.4458, + 0.4709, + 0.4316, + 0.4279, + 0.45790000000000003, + 0.4303, + 0.397, + 1.674, + 1.2691, + 0.7015, + 0.5775, + 0.5308, + 0.4457, + 0.7706, + 0.7252, + 0.49720000000000003, + 0.5576, + 0.5545, + 0.4265, + 0.5495, + 0.40690000000000004, + 0.4043, + 0.3976, + 0.3864, + 0.3887, + 0.4118, + 0.7454000000000001, + 0.7821, + 0.7821, + 0.627, + 0.623, + 0.41590000000000005, + 0.4231, + 0.45130000000000003, + 0.4584, + 0.5218, + 0.4885, + 0.38880000000000003, + 0.6336, + 0.4138, + 0.3964, + 0.5286, + 0.4095, + 0.40440000000000004, + 0.7086, + 0.5809, + 0.6849, + 0.4264, + 0.5157, + 0.4281, + 0.4668, + 0.6745, + 0.7035, + 0.7287, + 0.6853, + 0.415, + 0.5748, + 0.42319999999999997, + 0.3932, + 0.4022, + 0.5082, + 0.39599999999999996, + 0.42700000000000005, + 0.4045, + 0.3875, + 0.5247999999999999, + 0.4077, + 0.4099, + 0.4001, + 0.3945, + 1.2222, + 0.423, + 0.4063, + 0.4059, + 0.40890000000000004, + 0.528, + 0.4066, + 0.402, + 0.39530000000000004, + 0.3986, + 0.3931, + 0.48069999999999996, + 0.4489, + 0.4098, + 0.40059999999999996, + 0.5538000000000001, + 0.4022, + 0.4113, + 0.6244, + 0.40440000000000004, + 0.4828, + 0.40349999999999997, + 0.4216, + 0.41800000000000004, + 0.3955, + 0.3921, + 0.5814, + 0.4569, + 0.4053, + 0.47869999999999996, + 0.4563, + 0.5081, + 0.5031, + 0.44270000000000004, + 0.6819999999999999, + 0.44670000000000004, + 0.42719999999999997, + 0.5216, + 0.41619999999999996, + 0.4459, + 0.4079, + 0.5176000000000001, + 0.4091, + 0.4403, + 0.4271, + 0.399, + 0.5476, + 0.4369, + 1.5406, + 0.4229, + 0.5256, + 0.4348, + 0.40190000000000003, + 0.491, + 0.6232, + 0.4165, + 0.5216, + 0.3937, + 0.41619999999999996, + 0.4152, + 0.40640000000000004, + 0.5112, + 0.381, + 0.38230000000000003, + 0.5358, + 0.4103, + 0.3923, + 0.3892, + 0.4074, + 0.5296, + 0.40900000000000003, + 0.419, + 0.3923, + 0.4018, + 0.518, + 0.3943, + 0.443, + 0.3878, + 0.3998, + 0.39120000000000005, + 0.4237, + 0.5232, + 0.3859, + 0.4138, + 0.4401, + 0.4011, + 0.39530000000000004, + 0.4001, + 0.3907, + 0.4242, + 0.5098, + 0.3998, + 0.5058, + 0.4314, + 0.388, + 0.3998, + 0.3986, + 0.5114, + 0.3856, + 0.39490000000000003, + 0.4326, + 0.4249, + 0.5303, + 0.3922, + 0.3905, + 0.4299, + 0.3973, + 0.47409999999999997, + 0.38939999999999997, + 0.5234000000000001, + 0.4118, + 0.4851, + 0.4848, + 0.4082, + 0.4038, + 0.48410000000000003, + 0.4568, + 0.4204, + 0.7379, + 0.7857, + 0.7318, + 0.9344, + 0.9292, + 0.883, + 0.8180000000000001, + 0.7191, + 1.4266999999999999, + 0.43629999999999997, + 0.5381, + 0.4556, + 0.6560999999999999, + 0.5197999999999999, + 0.4394, + 0.46309999999999996, + 0.5307000000000001, + 0.42319999999999997, + 0.4075, + 0.3964, + 0.5482, + 0.3926, + 0.388, + 0.4299, + 0.44499999999999995, + 0.7485999999999999, + 0.44470000000000004, + 0.40759999999999996, + 0.5051, + 0.3889, + 0.5062000000000001, + 0.40700000000000003, + 0.4002, + 0.3934, + 0.3889, + 0.5202, + 0.40049999999999997, + 0.40650000000000003, + 0.3976, + 0.4211, + 0.4279, + 0.5324, + 0.40059999999999996, + 1.4782, + 0.6034999999999999, + 0.43679999999999997, + 0.4105, + 0.408, + 0.7263000000000001, + 0.4593, + 0.6996, + 0.4271, + 0.5413, + 0.3998, + 0.4329, + 0.7967, + 0.9076000000000001, + 0.8878, + 0.4333, + 0.431, + 0.8344999999999999, + 1.1369, + 0.42410000000000003, + 0.4025 + ], + "debug": { + "mean_ms": 0.967733333333333, + "p50_ms": 0.8194, + "p95_ms": 1.6146, + "samples": 480 + }, + "debug_samples_ms": [ + 0.8167, + 0.7293, + 0.9592, + 0.8642, + 0.7673, + 0.8222, + 0.7207, + 0.7231, + 0.8286, + 0.7298, + 0.8266, + 0.7201, + 0.7448, + 0.8205, + 0.7162, + 1.0768, + 0.8357, + 0.7537, + 0.8582000000000001, + 0.7343999999999999, + 0.7179000000000001, + 4.9764, + 0.8008, + 0.8557, + 0.7527, + 0.9688, + 0.8746999999999999, + 0.727, + 0.8711, + 0.7105, + 0.7215, + 0.8220000000000001, + 0.7176, + 0.8272, + 0.7191, + 0.9924999999999999, + 0.9016000000000001, + 0.7423, + 1.2084000000000001, + 0.8556, + 0.7384, + 0.7409, + 0.7081999999999999, + 0.8427, + 0.8474, + 0.7284, + 0.7603, + 3.1463, + 1.6184999999999998, + 1.1203999999999998, + 0.8165, + 1.4208, + 0.924, + 0.85, + 0.7396, + 0.8244, + 0.9145, + 0.7588, + 0.812, + 1.0149, + 0.7919, + 0.9867999999999999, + 0.8725999999999999, + 0.7468, + 0.8335, + 1.1976, + 0.9091, + 0.7374999999999999, + 0.8851, + 1.9234, + 1.1454, + 1.2746000000000002, + 1.474, + 0.7353000000000001, + 0.8841, + 0.9075, + 0.7607999999999999, + 0.8289000000000001, + 0.8323999999999999, + 0.8009000000000001, + 0.8202, + 0.7681, + 0.8252999999999999, + 0.8329, + 0.7232999999999999, + 0.8313, + 0.7251, + 0.8301, + 0.7288, + 0.7092, + 0.8169, + 0.7212, + 0.882, + 0.7234, + 0.7201, + 3.2547, + 0.7303000000000001, + 0.9255, + 0.755, + 0.7154, + 0.9, + 0.8394, + 0.7272, + 0.9393, + 0.8936000000000001, + 0.733, + 6.3655, + 2.8007, + 0.8151999999999999, + 0.7929999999999999, + 0.8479, + 1.1844, + 0.8132, + 0.9790000000000001, + 0.8571, + 0.7755000000000001, + 0.8656, + 0.73, + 0.7969999999999999, + 0.8276, + 0.7308, + 0.883, + 0.7273, + 0.8855, + 0.7218, + 0.7303999999999999, + 0.8796999999999999, + 0.9757, + 2.321, + 0.7583, + 0.7388, + 0.8352, + 0.7089000000000001, + 1.1594000000000002, + 0.9188999999999999, + 1.6146, + 7.5508, + 0.8053, + 1.2301, + 0.7657, + 1.4819, + 1.0386, + 0.7665000000000001, + 0.7372000000000001, + 0.7472, + 0.9138, + 0.782, + 0.8009999999999999, + 0.9136, + 0.9881, + 0.846, + 0.7302, + 0.7045, + 0.7411, + 0.8925, + 0.7107, + 3.5707, + 0.7821, + 0.8599, + 0.8071, + 0.7342, + 0.8309, + 0.7102999999999999, + 2.6215, + 0.8529, + 0.7293, + 0.7728, + 0.8239000000000001, + 1.3806, + 3.0549, + 1.4774, + 1.4057, + 1.4697, + 0.8741000000000001, + 1.2217, + 0.8339000000000001, + 0.7242000000000001, + 0.8094, + 0.7016, + 0.8065, + 0.7062999999999999, + 1.1670999999999998, + 0.7271, + 1.4295, + 0.7381, + 2.2805, + 1.673, + 0.7472, + 0.7219, + 3.197, + 0.7538999999999999, + 0.8595999999999999, + 0.7359, + 0.8168, + 0.7067, + 0.7971, + 2.1982999999999997, + 1.2154, + 1.27, + 3.3795, + 1.1157000000000001, + 0.7726999999999999, + 0.8442000000000001, + 0.8882, + 0.7017, + 0.7211, + 1.2641, + 0.8506, + 0.723, + 3.8099000000000003, + 1.1316, + 1.0410000000000001, + 0.8524999999999999, + 1.0685, + 0.7464999999999999, + 0.8846999999999999, + 1.0812, + 1.107, + 1.093, + 1.1158, + 0.7374, + 1.5673, + 1.0413, + 0.8394999999999999, + 0.7274, + 0.8664000000000001, + 1.0905, + 0.7726000000000001, + 1.5097, + 0.9828, + 0.9055, + 0.7475, + 0.9872, + 0.9333, + 0.8344999999999999, + 0.7199, + 1.4668, + 2.1616999999999997, + 1.0192999999999999, + 0.7895000000000001, + 1.8851, + 1.3231, + 1.2965, + 0.7644000000000001, + 0.7393000000000001, + 0.9441, + 0.7245, + 0.7081000000000001, + 0.8285, + 0.7283, + 0.8108, + 0.7171000000000001, + 0.7234999999999999, + 0.7841, + 1.0449000000000002, + 1.0277, + 1.0941, + 1.2095, + 1.158, + 0.8891, + 0.7197, + 0.882, + 0.7267, + 0.7133, + 0.7043, + 0.727, + 0.7603, + 0.8140000000000001, + 0.8274, + 0.7349, + 0.723, + 0.8446, + 0.9939, + 0.9430999999999999, + 1.2679, + 0.8774, + 0.7139, + 0.7448999999999999, + 0.7282000000000001, + 0.7496, + 1.2924, + 1.2619, + 1.2734999999999999, + 0.8732, + 0.9319000000000001, + 0.7432, + 0.842, + 0.7283, + 0.7115, + 0.8179, + 0.7108, + 0.8030999999999999, + 0.7085, + 0.7425, + 0.9125, + 0.7362, + 0.8239000000000001, + 0.7027, + 0.7646000000000001, + 0.841, + 0.727, + 0.8307, + 0.7421, + 0.7456, + 0.8228000000000001, + 0.7144, + 0.8956, + 0.7155, + 0.8194, + 1.1168, + 0.8448, + 0.7318, + 0.8819, + 0.7425, + 0.7328, + 0.8884, + 0.7295999999999999, + 0.7747, + 0.8804000000000001, + 0.7343999999999999, + 1.1522, + 0.9186, + 0.7333, + 0.8239000000000001, + 0.8241999999999999, + 0.759, + 0.861, + 0.7278, + 0.8876, + 0.7179000000000001, + 0.7827, + 0.8582000000000001, + 0.7512000000000001, + 1.0376, + 0.8305, + 0.7426, + 0.7012999999999999, + 0.8982, + 0.7402, + 0.7324, + 0.8277, + 0.7297, + 0.8775000000000001, + 0.7464999999999999, + 0.7191, + 1.0924, + 0.8524999999999999, + 0.7319, + 0.7194, + 0.8802, + 0.7388, + 1.2646, + 0.8413, + 0.7404999999999999, + 0.7242000000000001, + 0.8245, + 0.725, + 0.8404, + 0.7255, + 0.7195, + 0.7114, + 0.8140000000000001, + 0.7406, + 0.7184, + 0.8338, + 0.7412, + 0.8614, + 0.7208, + 0.7693, + 0.8305, + 0.7565000000000001, + 0.8252, + 0.7134, + 0.7383, + 0.8237, + 0.7262, + 0.8196, + 0.7092, + 0.8099, + 0.7102999999999999, + 0.7117, + 0.837, + 0.7314, + 0.8402000000000001, + 0.8168, + 0.7099, + 0.8225, + 0.7115, + 0.713, + 0.7081999999999999, + 0.7036, + 0.8197, + 0.7163, + 0.8418, + 0.7012, + 0.7218, + 0.8236, + 0.7665000000000001, + 0.8529, + 0.759, + 0.7396, + 0.8301, + 0.7272, + 0.828, + 0.7037, + 0.7199, + 0.7303999999999999, + 1.0776, + 0.8279, + 0.8061, + 0.7394, + 0.7934, + 0.805, + 0.8004, + 0.9452, + 0.791, + 1.0659, + 1.2731000000000001, + 1.2185, + 1.1789, + 1.4793, + 1.3232000000000002, + 1.3123, + 1.1511, + 4.9007, + 1.9954999999999998, + 0.7574, + 0.7156, + 1.063, + 0.7659, + 0.7311000000000001, + 0.8957, + 0.9449000000000001, + 0.7726999999999999, + 0.7187, + 0.7123, + 0.7200000000000001, + 0.8279, + 0.7073, + 0.7967, + 0.785, + 0.7429, + 0.8313, + 0.7189, + 0.7351000000000001, + 0.7239, + 0.7041000000000001, + 0.8423, + 0.7414999999999999, + 0.8124, + 0.7135, + 0.7106, + 0.8559, + 0.7453, + 0.9529, + 0.7197, + 0.8180000000000001, + 0.7674, + 0.7205, + 0.8537, + 1.0651, + 0.862, + 0.7998000000000001, + 0.8413, + 0.7829, + 0.7494999999999999, + 0.9843000000000001, + 1.0847, + 0.7273, + 0.7253999999999999, + 0.8928, + 0.722, + 1.1499, + 1.1878, + 0.8394, + 0.8515, + 1.642, + 1.8285, + 0.7554000000000001, + 0.8442999999999999 + ], + "debug_span_count_max": 14, + "debug_span_count_min": 14, + "files": 1000, + "kind": "prepared_sqlite_trace_overhead", + "limits": "tiny warm lexical corpus; harness serial/no model/media/GPU; other VM work including native photo inference may contend; not isolated production performance", + "measurement": "outer Rust call including metrics assembly; excludes fixture setup/JSON serialization", + "os": "windows", + "production_claim": false, + "profile": "release", + "queries": 24, + "repetitions": 20 +} \ No newline at end of file diff --git a/fixtures/media/.gitignore b/fixtures/media/.gitignore new file mode 100644 index 0000000..707de0f --- /dev/null +++ b/fixtures/media/.gitignore @@ -0,0 +1,3 @@ +derived/ +inspection/ +*.sqlite* diff --git a/fixtures/media/README.md b/fixtures/media/README.md new file mode 100644 index 0000000..bd0522d --- /dev/null +++ b/fixtures/media/README.md @@ -0,0 +1,22 @@ +# Independently labelled media diagnostic v1 + +`fixture.json` and `labels.lock.json` were frozen before media inference. The fixture contains 20 original public/licensed files and 65 English/German queries. Neutral filenames prevent filename semantics from giving away visual answers. Do not edit v1 labels after seeing rankings; corrections require a new version and another pre-scoring lock. + +The assistant inspected every photo and sampled real video frames through `view_image`. Cat-action/flower-state intervals came from these frames. Spoken-topic intervals came from NASA's publisher-provided SRT, not a model transcript. Music/sound labels came from independent publisher descriptions and original embedded tags; human listening verification is **not** claimed. One annotator authored these labels, so a blinded second human review remains necessary. + +## Provenance and redistribution + +Every asset has its exact source URL, description page, license, byte count, SHA256, and modification record in the fixture. The assets are a small educational search benchmark, not a stock-media product. + +- Twelve 640px photos are publisher-generated derivatives under the [Pexels License](https://www.pexels.com/license/); no local pixel modifications were made. Pexels IDs identify the sources; attribution is not required by that license. Creator names are not guessed. +- `clip01.webm`: **Cat opening door**, Astropulse, [source](https://commons.wikimedia.org/wiki/File:Cat_opening_door.webm), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). The original is unmodified. Reproduced frames are derivatives and retain that license and attribution. +- `clip02.webm`: **Water flowing strem**, BhotaRohit, [source](https://commons.wikimedia.org/wiki/File:Water_flowing_strem.webm), [CC0](https://creativecommons.org/publicdomain/zero/1.0/). Visual inspection reveals a misty waterfall; labels deliberately follow the pixels rather than the filename. +- `clip03.webm` and `sound02.mp3`: MDN contributors, original [interactive-example assets](https://github.com/mdn/interactive-examples), repository [CC0 notice](https://raw.githubusercontent.com/mdn/interactive-examples/main/LICENSE). The files are the real flower timelapse and roaring-creature effect. +- `clip04.mp4`: NASA **Artemis Origins**, [source](https://images.nasa.gov/details/Artemis%20Origins), used for educational/informational evaluation under [NASA media usage permission](https://www.nasa.gov/nasa-brand-center/images-and-media/). No endorsement is implied; NASA insignia/trademarks are not used as Searchi branding. The footage is unmodified. +- `music01.ogg`: **Variatio 13 a 2 Clav.**, Kimiko Ishizaka, [source](https://commons.wikimedia.org/wiki/File:Kimiko_Ishizaka_-_14_-_Variatio_13_a_2_Clav.ogg), [CC0](https://creativecommons.org/publicdomain/zero/1.0/). The project's primary [release description](https://github.com/robertDouglass/opengoldbergvariations.org/blob/master/config.toml) confirms the public-domain release, independently of the Commons pending-review banner. Original audio and Vorbis metadata are retained. +- `music02.ogg`: **Jazz Violin Solo**, VWD, [source](https://commons.wikimedia.org/wiki/File:00_Jazz_Violin_Solo.ogg), author's worldwide public-domain dedication on that page. Original tags identify the artist as **Violinist WTD**, which is intentionally the strict metadata query rather than a guessed identity. +- `sound01.wav`: **Dog barking mono**, Brandon Morris, uploaded by HaelDB, [source](https://opengameart.org/content/dog-barking-mono), [CC0](https://creativecommons.org/publicdomain/zero/1.0/). Original waveform retained. + +All source licenses remain attached to their files. Root repository MIT licensing does not replace these third-party media terms. `derived/` and `inspection/` are ignored; generated derivatives carry their source licenses when redistributed. + +This collection is deliberately tiny. Twenty public assets do not establish quality on a user's complete photo library, music collection, recorded meetings, or long movies. diff --git a/fixtures/media/assets/clip01.webm b/fixtures/media/assets/clip01.webm new file mode 100644 index 0000000..d7f4ff7 Binary files /dev/null and b/fixtures/media/assets/clip01.webm differ diff --git a/fixtures/media/assets/clip02.webm b/fixtures/media/assets/clip02.webm new file mode 100644 index 0000000..6baf9bd Binary files /dev/null and b/fixtures/media/assets/clip02.webm differ diff --git a/fixtures/media/assets/clip03.webm b/fixtures/media/assets/clip03.webm new file mode 100644 index 0000000..5b8edf7 Binary files /dev/null and b/fixtures/media/assets/clip03.webm differ diff --git a/fixtures/media/assets/clip04.mp4 b/fixtures/media/assets/clip04.mp4 new file mode 100644 index 0000000..685c6be Binary files /dev/null and b/fixtures/media/assets/clip04.mp4 differ diff --git a/fixtures/media/assets/image01.jpg b/fixtures/media/assets/image01.jpg new file mode 100644 index 0000000..9cdb327 Binary files /dev/null and b/fixtures/media/assets/image01.jpg differ diff --git a/fixtures/media/assets/image02.jpg b/fixtures/media/assets/image02.jpg new file mode 100644 index 0000000..435a0a2 Binary files /dev/null and b/fixtures/media/assets/image02.jpg differ diff --git a/fixtures/media/assets/image03.jpg b/fixtures/media/assets/image03.jpg new file mode 100644 index 0000000..712f738 Binary files /dev/null and b/fixtures/media/assets/image03.jpg differ diff --git a/fixtures/media/assets/image04.jpg b/fixtures/media/assets/image04.jpg new file mode 100644 index 0000000..9e0cd64 Binary files /dev/null and b/fixtures/media/assets/image04.jpg differ diff --git a/fixtures/media/assets/image05.jpg b/fixtures/media/assets/image05.jpg new file mode 100644 index 0000000..96625c7 Binary files /dev/null and b/fixtures/media/assets/image05.jpg differ diff --git a/fixtures/media/assets/image06.jpg b/fixtures/media/assets/image06.jpg new file mode 100644 index 0000000..8bfa555 Binary files /dev/null and b/fixtures/media/assets/image06.jpg differ diff --git a/fixtures/media/assets/image07.jpg b/fixtures/media/assets/image07.jpg new file mode 100644 index 0000000..b8e2117 Binary files /dev/null and b/fixtures/media/assets/image07.jpg differ diff --git a/fixtures/media/assets/image08.jpg b/fixtures/media/assets/image08.jpg new file mode 100644 index 0000000..f9d561d Binary files /dev/null and b/fixtures/media/assets/image08.jpg differ diff --git a/fixtures/media/assets/image09.jpg b/fixtures/media/assets/image09.jpg new file mode 100644 index 0000000..c7ea046 Binary files /dev/null and b/fixtures/media/assets/image09.jpg differ diff --git a/fixtures/media/assets/image10.jpg b/fixtures/media/assets/image10.jpg new file mode 100644 index 0000000..24e0a59 Binary files /dev/null and b/fixtures/media/assets/image10.jpg differ diff --git a/fixtures/media/assets/image11.jpg b/fixtures/media/assets/image11.jpg new file mode 100644 index 0000000..1562b68 Binary files /dev/null and b/fixtures/media/assets/image11.jpg differ diff --git a/fixtures/media/assets/image12.jpg b/fixtures/media/assets/image12.jpg new file mode 100644 index 0000000..c7409f5 Binary files /dev/null and b/fixtures/media/assets/image12.jpg differ diff --git a/fixtures/media/assets/music01.ogg b/fixtures/media/assets/music01.ogg new file mode 100644 index 0000000..c06634e Binary files /dev/null and b/fixtures/media/assets/music01.ogg differ diff --git a/fixtures/media/assets/music02.ogg b/fixtures/media/assets/music02.ogg new file mode 100644 index 0000000..e9a4a76 Binary files /dev/null and b/fixtures/media/assets/music02.ogg differ diff --git a/fixtures/media/assets/sound01.wav b/fixtures/media/assets/sound01.wav new file mode 100644 index 0000000..048a5ff Binary files /dev/null and b/fixtures/media/assets/sound01.wav differ diff --git a/fixtures/media/assets/sound02.mp3 b/fixtures/media/assets/sound02.mp3 new file mode 100644 index 0000000..6b2b066 Binary files /dev/null and b/fixtures/media/assets/sound02.mp3 differ diff --git a/fixtures/media/document-baseline.json b/fixtures/media/document-baseline.json new file mode 100644 index 0000000..6cfab1a --- /dev/null +++ b/fixtures/media/document-baseline.json @@ -0,0 +1,852 @@ +{ + "background_prewarm_ms": 133.0573, + "device": "cpu", + "documents": 20, + "embedding_report": { + "chunks": 20, + "generation": 1, + "model_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mean:l2:query512:doc2048:windows-overlap128:prompts-v1:byte64k-overlap512-title512-v1", + "passages": 20 + }, + "first_foreground_ms": 108.6225, + "first_foreground_top1": "supplier-agreement.txt", + "hybrid": { + "recall_at10": 1.0, + "recall_at3": 1.0, + "top1_accuracy": 1.0 + }, + "hybrid_p50_ms": 107.3451, + "hybrid_p95_ms": 146.82819999999998, + "indexing_ms": 4840.859100000001, + "lexical": { + "recall_at10": 0.20833333333333334, + "recall_at3": 0.20833333333333334, + "top1_accuracy": 0.20833333333333334 + }, + "limitation": "Synthetic seed corpus only; no production quality or large-corpus latency certification", + "load_ms": 8644.3299, + "model": "google/embeddinggemma-2", + "queries": 24, + "rankings": [ + { + "expected": "supplier-contract", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "supplier-agreement.txt", + "match_kind": "exact_filename", + "source": null + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "exact", + "lexical_rank": 1, + "query": "supplier-agreement.txt", + "semantic_rank": 1 + }, + { + "expected": "invoice", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "INV-2026-1042.txt", + "match_kind": "filename", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "network-incident.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "identifier", + "lexical_rank": 1, + "query": "INV-2026-1042", + "semantic_rank": 1 + }, + { + "expected": "error-code", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "support-error.txt", + "match_kind": "exact_identifier", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "search-engine-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "identifier", + "lexical_rank": 1, + "query": "E_SEARCH_071", + "semantic_rank": 1 + }, + { + "expected": "supplier-contract", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "supplier-agreement.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "retry-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "How can we end our relationship with the supplier?", + "semantic_rank": 1 + }, + { + "expected": "supplier-contract", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "supplier-agreement.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "mietvertrag.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "de-crosslingual", + "lexical_rank": null, + "query": "Wie kündigen wir die Zusammenarbeit mit unserem Lieferanten?", + "semantic_rank": 1 + }, + { + "expected": "apartment-lease", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "mietvertrag.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "support-error.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "urlaubsrichtlinie.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en-crosslingual", + "lexical_rank": null, + "query": "Can I keep a pet in the rented apartment?", + "semantic_rank": 1 + }, + { + "expected": "apartment-lease", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "mietvertrag.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "reisekosten.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "monitor-warranty.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "de", + "lexical_rank": null, + "query": "Wo steht etwas über die Kaution für die Wohnung?", + "semantic_rank": 1 + }, + { + "expected": "travel-expenses", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "reisekosten.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "conference-agenda.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en-crosslingual", + "lexical_rank": null, + "query": "How do I claim my train and hotel costs?", + "semantic_rank": 1 + }, + { + "expected": "conference-agenda", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "conference-agenda.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "support-error.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "search-engine-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "de-crosslingual", + "lexical_rank": null, + "query": "Wann ist der Workshop zur Datenbankleistung?", + "semantic_rank": 1 + }, + { + "expected": "deployment", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "deployment-runbook.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "product-launch.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "support-error.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "What should we do if the new release fails its health check?", + "semantic_rank": 1 + }, + { + "expected": "backup-restore", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "backup-recovery.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "network-incident.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "de-crosslingual", + "lexical_rank": null, + "query": "Ich habe Dateien gelöscht und brauche sie aus der Sicherung zurück", + "semantic_rank": 1 + }, + { + "expected": "api-retry", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "retry-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "deployment-runbook.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "network-incident.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "How should the app retry a temporary server failure?", + "semantic_rank": 1 + }, + { + "expected": "oauth", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "authentication-notes.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "retry-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "backup-recovery.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "How do we obtain another access token after it expires?", + "semantic_rank": 1 + }, + { + "expected": "network-outage", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "network-incident.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "backup-recovery.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "de-crosslingual", + "lexical_rank": null, + "query": "Warum war der Netzwerkswitch nicht erreichbar?", + "semantic_rank": 1 + }, + { + "expected": "launch-plan", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "product-launch.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "research-budget.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "deployment-runbook.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "The plan for announcing the new product after beta testing", + "semantic_rank": 1 + }, + { + "expected": "research-budget", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "research-budget.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "retry-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "Money allocated for interviews and prototype usability studies", + "semantic_rank": 1 + }, + { + "expected": "vacation-policy", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "urlaubsrichtlinie.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en-crosslingual", + "lexical_rank": null, + "query": "Who approves my time off and who covers urgent work?", + "semantic_rank": 1 + }, + { + "expected": "recipe", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "tomato-soup.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "gartenplanung.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "A soup made with roasted tomatoes and basil", + "semantic_rank": 1 + }, + { + "expected": "renovation", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "renovation-estimate.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "INV-2026-1042.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "Does the kitchen renovation quote include new flooring?", + "semantic_rank": 1 + }, + { + "expected": "warranty", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "monitor-warranty.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "network-incident.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "backup-recovery.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "The document about replacing a defective display under warranty", + "semantic_rank": 1 + }, + { + "expected": "search-architecture", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "search-engine-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "support-error.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "backup-recovery.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": null, + "query": "How can keyword results and embeddings be combined for file search?", + "semantic_rank": 1 + }, + { + "expected": "garden", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "gartenplanung.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "renovation-estimate.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en-crosslingual", + "lexical_rank": null, + "query": "Where is the plan for the raised vegetable bed and rainwater barrel?", + "semantic_rank": 1 + }, + { + "expected": "cancellation-email", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "meeting-cancellation.txt", + "match_kind": "hybrid", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "urlaubsrichtlinie.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "conference-agenda.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "en", + "lexical_rank": 1, + "query": "Cancel tomorrow's planning meeting", + "semantic_rank": 1 + }, + { + "expected": "invoice", + "hybrid_rank": 1, + "hybrid_top3": [ + { + "filename": "INV-2026-1042.txt", + "match_kind": "exact_identifier", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "meeting-cancellation.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + }, + { + "filename": "search-engine-design.txt", + "match_kind": "semantic", + "source": { + "kind": "line", + "number": 1 + } + } + ], + "language": "identifier", + "lexical_rank": 1, + "query": "OFFICE-CHAIRS-42", + "semantic_rank": 1 + } + ], + "semantic": { + "recall_at10": 1.0, + "recall_at3": 1.0, + "top1_accuracy": 1.0 + }, + "startup_init_ms": 8286.3466, + "threads": 1 +} \ No newline at end of file diff --git a/fixtures/media/environment.json b/fixtures/media/environment.json new file mode 100644 index 0000000..4426768 --- /dev/null +++ b/fixtures/media/environment.json @@ -0,0 +1,14 @@ +{ + "date": "2026-10-12", + "os": "Microsoft Windows 11 Pro", + "os_version": "10.0.26300", + "visible_memory_kib": 10416556, + "cpu_name": "AMD Ryzen 7 7800X3D 8-Core Processor ", + "vm_vcpus": 4, + "model_threads": 1, + "device": "cpu", + "force_cpu": "1", + "ffmpeg_version": "9.0.2", + "worker_sha256": "f2ad020307469371519b848c9fa92ae4c51ee8ae8a0ce917f8f408f5756e9086", + "scope": "Shared Windows VM; timing affected by other work; RAM observations are not measured peak" +} diff --git a/fixtures/media/fixture.json b/fixtures/media/fixture.json new file mode 100644 index 0000000..30f2609 --- /dev/null +++ b/fixtures/media/fixture.json @@ -0,0 +1,1362 @@ +{ + "version": 1, + "label_policy": "Labels independently authored from actual images/frames and publisher speech timestamps BEFORE media model inference. Never adjust v1 labels after inspecting rankings. Create a new version for corrections. No hand-tuned rejection threshold.", + "created_utc": "2026-10-12T15:59:36.850393+00:00", + "assets": [ + { + "id": "image01", + "path": "assets/image01.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/126407/pexels-photo-126407.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/126407/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Long-haired tabby cat lying flat indoors, eyes toward camera.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 27390, + "sha256": "c0b2ebddafcff4cd60ae1d2f1b8e53d4e0f11643ac53d0113605f333523b21ed" + }, + { + "id": "image02", + "path": "assets/image02.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/1099680/pexels-photo-1099680.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/1099680/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Fruit bowl with raspberries, mango, blackberries, strawberries and almonds, top down.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 68905, + "sha256": "72b46006e7f55dcad5bec5af977171a369917030cf2ff99e544806af939ffec1" + }, + { + "id": "image03", + "path": "assets/image03.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/459225/pexels-photo-459225.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/459225/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Jagged mountains and fir trees reflected in a daylight lake.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 34309, + "sha256": "c4abbb061e6fcbcef25d36d7bb7f24018c0c768b23176fb2a77a9eb8f5b86f21" + }, + { + "id": "image04", + "path": "assets/image04.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/355465/pexels-photo-355465.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/355465/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Dense blue star field and Milky Way above a dark mountain landscape.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 37735, + "sha256": "8999f22131c22ee1c29d79dda352c2654131eb1b4f61ba7f8b8d21dbbc5cc791" + }, + { + "id": "image05", + "path": "assets/image05.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/414612/pexels-photo-414612.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/414612/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Wooden pier into still lake at night under a bright moon.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 51106, + "sha256": "1cfd9d9c3dea4ec4e1733c55424eef93983bce1167f60777768cae6c549fd889" + }, + { + "id": "image06", + "path": "assets/image06.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/1323550/pexels-photo-1323550.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/1323550/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Layered purple mountains under a yellow-orange sunset, tiny person on ridge.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 27259, + "sha256": "91947e87067c923db2e560f67cdd0c1edec55c9bb0fbab6a83ee7c7adf88860d" + }, + { + "id": "image07", + "path": "assets/image07.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/841303/pexels-photo-841303.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/841303/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Cows grazing in green rolling hills.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 50633, + "sha256": "0b0cc8c211680d19ebdaf2b797af430120c4e65f951143bbe06544eaa0691942" + }, + { + "id": "image08", + "path": "assets/image08.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/210019/pexels-photo-210019.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/210019/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Red sports coupe on a wooded road, motion-blurred background.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 65362, + "sha256": "12b5fd662c054d1337e4adf733751da3e32c1fd40f88dfccc0bd73af4f620369" + }, + { + "id": "image09", + "path": "assets/image09.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/1640777/pexels-photo-1640777.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/1640777/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Bowl of quinoa and vegetables, sliced carrots and zucchini on pale table.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 68469, + "sha256": "6112af5f9ed170d91c7f8e1e5de95142c0190e2e2f8fbbbccf2f106553371817" + }, + { + "id": "image10", + "path": "assets/image10.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/302899/pexels-photo-302899.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/302899/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Milk pouring from metal jug into cup of coffee with latte art.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 23609, + "sha256": "632926d3bd0f4691ae7fd0a8e2cb8b455e0252511eebf322e91c64c17cdf0e2a" + }, + { + "id": "image11", + "path": "assets/image11.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/248797/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Turquoise tropical sea and white beach fringed by green vegetation.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 27716, + "sha256": "c02ad4a8bbe8091cbc3a9a0abc602a905cb46056efa94141950f3af1c749c038" + }, + { + "id": "image12", + "path": "assets/image12.jpg", + "kind": "image", + "source_url": "https://images.pexels.com/photos/167964/pexels-photo-167964.jpeg?auto=compress&cs=tinysrgb&w=640", + "source_page": "https://www.pexels.com/photo/167964/", + "license": "Pexels License", + "license_url": "https://www.pexels.com/license/", + "changes": "Publisher-provided 640px compressed derivative, no local pixel changes.", + "observation": "Black and white silhouette of a person reaching a hand toward camera.", + "independent_inspection": "view_image before any media embedding inference", + "bytes": 14256, + "sha256": "dd3bc409128a8702522bac7b953a5eb691662eebf21ac3ba0b3b15c70f86d54b" + }, + { + "id": "clip01", + "path": "assets/clip01.webm", + "kind": "video", + "duration_s": 22.204, + "source_url": "https://upload.wikimedia.org/wikipedia/commons/c/cc/Cat_opening_door.webm", + "source_page": "https://commons.wikimedia.org/wiki/File:Cat_opening_door.webm", + "license": "CC-BY-SA-4.0", + "license_url": "https://creativecommons.org/licenses/by-sa/4.0/", + "author": "Astropulse", + "changes": "None; downloaded original file.", + "observation": "Orange tabby cat twice jumps against white door near its lever, then crouches.", + "independent_inspection": "Real frames viewed before inference; NASA speech labels use publisher SRT, never model outputs.", + "bytes": 2253125, + "sha256": "1a1f420559b306574ba8a04aee0175c38c2e20815b1bd46a45aae86d17f3ad53" + }, + { + "id": "clip02", + "path": "assets/clip02.webm", + "kind": "video", + "duration_s": 13.81, + "source_url": "https://upload.wikimedia.org/wikipedia/commons/c/c9/Water_flowing_strem.webm", + "source_page": "https://commons.wikimedia.org/wiki/File:Water_flowing_strem.webm", + "license": "CC0-1.0", + "license_url": "https://creativecommons.org/publicdomain/zero/1.0/", + "author": "BhotaRohit", + "changes": "None; downloaded original file.", + "observation": "Tall waterfall descending misty rocky hillside; a tiny person appears near its base.", + "independent_inspection": "Real frames viewed before inference; NASA speech labels use publisher SRT, never model outputs.", + "bytes": 6001205, + "sha256": "5652e6490bea85dfb7a1da05e00fc7f3d8cc2cbd54790c03a48223f2256bc3d1" + }, + { + "id": "clip03", + "path": "assets/clip03.webm", + "kind": "video", + "duration_s": 5.056, + "source_url": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm", + "source_page": "https://github.com/mdn/interactive-examples", + "license": "CC0-1.0", + "license_url": "https://raw.githubusercontent.com/mdn/interactive-examples/main/LICENSE", + "author": "MDN contributors", + "changes": "None; downloaded original file.", + "observation": "Timelapse of closed red flower bud opening among green purple-edged leaves.", + "independent_inspection": "Real frames viewed before inference; NASA speech labels use publisher SRT, never model outputs.", + "bytes": 554058, + "sha256": "c6f8a348953395598a9a73b9bab1676436410797bce9f398f4be1531d6e76dda" + }, + { + "id": "clip04", + "path": "assets/clip04.mp4", + "kind": "video", + "duration_s": 80.63, + "source_url": "https://images-assets.nasa.gov/video/Artemis%20Origins/Artemis%20Origins~small.mp4", + "source_page": "https://images.nasa.gov/details/Artemis%20Origins", + "license": "NASA informational media permission", + "license_url": "https://www.nasa.gov/nasa-brand-center/images-and-media/", + "author": "NASA", + "changes": "None; downloaded original file.", + "observation": "Artemis Origins montage: Apollo astronauts, lunar surface/rover, a speech and future-space imagery. Speech intervals independently labelled from NASA publisher SRT.", + "independent_inspection": "Real frames viewed before inference; NASA speech labels use publisher SRT, never model outputs.", + "bytes": 16710310, + "sha256": "5fa4af30f984f4d7d53b50990d1e21e41df50b62a8b3ec3a2a1d44f30431f0f1" + }, + { + "id": "music01", + "path": "assets/music01.ogg", + "kind": "music", + "source_url": "https://upload.wikimedia.org/wikipedia/commons/4/49/Kimiko_Ishizaka_-_14_-_Variatio_13_a_2_Clav.ogg", + "source_page": "https://commons.wikimedia.org/wiki/File:Kimiko_Ishizaka_-_14_-_Variatio_13_a_2_Clav.ogg", + "license": "CC0-1.0", + "license_url": "https://creativecommons.org/publicdomain/zero/1.0/", + "author": "Kimiko Ishizaka", + "changes": "None; original waveform and embedded metadata retained.", + "observation": "Soft solo piano performance of Bach Goldberg Variation13, original Vorbis artist/title tags retained.", + "duration_s": 254.453333, + "tags": { + "encoder": "Lavc58.54.100 libvorbis", + "title": "Variatio 13 a 2 Clav.", + "artist": "Kimiko Ishizaka", + "track": "14", + "album": "The Open Goldberg Variations", + "disc": "1", + "date": "2012-05-29T17:49:26", + "genre": "Classical", + "copyright": "CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/", + "tdat": "2012-05-29 17:49:26", + "comment": "URL: http://freemusicarchive.org/music/Kimiko_Ishizaka/The_Open_Goldberg_Variations/KIMIKO_ISHIZAKA_-_Goldberg_Variations_BWV_988_-_14_-_Variatio_13_a_2_Clav__44k-24b\r\nComments: http://freemusicarchive.org/\r\nCurator: ccCommunity\r\nCopyright: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/\r\nComposer: J.S. Bach", + "tlen": "254453", + "tsrc": "QMNYZ1200014", + "composer": "J.S. Bach", + "album_artist": "Kimiko Ishizaka" + }, + "independent_inspection": "Publisher descriptions and original FFprobe tags checked before inference. Audio perception not claimed as human listening.", + "bytes": 4697594, + "sha256": "29fcd20414ee19c2a5aa4339eaf6375079dc87959051ab0aea32c76df52f34dc" + }, + { + "id": "music02", + "path": "assets/music02.ogg", + "kind": "music", + "source_url": "https://upload.wikimedia.org/wikipedia/commons/3/37/00_Jazz_Violin_Solo.ogg", + "source_page": "https://commons.wikimedia.org/wiki/File:00_Jazz_Violin_Solo.ogg", + "license": "PD-self", + "license_url": "https://commons.wikimedia.org/wiki/File:00_Jazz_Violin_Solo.ogg", + "author": "VWD", + "changes": "None; original waveform and embedded metadata retained.", + "observation": "Jazz violin solo, original Vorbis tags identify artist Violinist WTD and title Jazz Violin Solo.", + "duration_s": 30.0, + "tags": { + "album": "2007 Spring Concert Series", + "artist": "Violinist WTD", + "composer": "Violinist WTD/LPC Jazz Band", + "date": "2007", + "encoder": "Max 0.7.1", + "encoding": "Vorbis settings: VBR(q=3.000000)", + "genre": "Jazz", + "title": "Jazz Violin Solo" + }, + "independent_inspection": "Publisher descriptions and original FFprobe tags checked before inference. Audio perception not claimed as human listening.", + "bytes": 198070, + "sha256": "9ce9c5d07f941c07cab575e58016d6ad1b09219a36477652118d8e85c3401dd8" + }, + { + "id": "sound01", + "path": "assets/sound01.wav", + "kind": "sound", + "source_url": "https://opengameart.org/sites/default/files/dog_barking_mono.wav", + "source_page": "https://opengameart.org/content/dog-barking-mono", + "license": "CC0-1.0", + "license_url": "https://creativecommons.org/publicdomain/zero/1.0/", + "author": "Brandon Morris (uploaded by HaelDB)", + "changes": "None; original waveform and embedded metadata retained.", + "observation": "Dog bark recording from independently described source; real waveform retained.", + "duration_s": 2.038594, + "tags": {}, + "independent_inspection": "Publisher descriptions and original FFprobe tags checked before inference. Audio perception not claimed as human listening.", + "bytes": 179848, + "sha256": "bbd0f908b3514dd3bd7d2bc04dcf64f8d360a161e7f43cac5d6761e7add79451" + }, + { + "id": "sound02", + "path": "assets/sound02.mp3", + "kind": "sound", + "source_url": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3", + "source_page": "https://github.com/mdn/interactive-examples", + "license": "CC0-1.0", + "license_url": "https://creativecommons.org/publicdomain/zero/1.0/", + "author": "MDN contributors", + "changes": "None; original waveform and embedded metadata retained.", + "observation": "Roaring creature sound effect from independently described CC0 source; real waveform retained.", + "duration_s": 2.074218, + "tags": { + "encoder": "LAME3.98r" + }, + "independent_inspection": "Publisher descriptions and original FFprobe tags checked before inference. Audio perception not claimed as human listening.", + "bytes": 39868, + "sha256": "41191d0727073bf848bcc8f0bd851d71a0b0058e901abb1c1b236ad327bda52e" + } + ], + "queries": [ + { + "id": "q001", + "text": "the fluffy striped cat resting with its chin on the floor", + "language": "en", + "expected": [ + "image01" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q002", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden", + "language": "de", + "expected": [ + "image01" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q003", + "text": "the overhead breakfast bowl with berries and diced mango", + "language": "en", + "expected": [ + "image02" + ], + "category": "image-memory", + "hard_negatives": [ + "image09" + ] + }, + { + "id": "q004", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben", + "language": "de", + "expected": [ + "image02" + ], + "category": "image-memory", + "hard_negatives": [ + "image09" + ] + }, + { + "id": "q005", + "text": "the daytime lake reflecting jagged mountains and pine trees", + "language": "en", + "expected": [ + "image03" + ], + "category": "image-memory", + "hard_negatives": [ + "image05", + "image06", + "image04" + ] + }, + { + "id": "q006", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen", + "language": "de", + "expected": [ + "image03" + ], + "category": "image-memory", + "hard_negatives": [ + "image05", + "image06", + "image04" + ] + }, + { + "id": "q007", + "text": "the Milky Way over a dark mountain valley", + "language": "en", + "expected": [ + "image04" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q008", + "text": "die Milchstraße über einem dunklen Bergtal", + "language": "de", + "expected": [ + "image04" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q009", + "text": "the wooden jetty pointing into a lake under moonlight", + "language": "en", + "expected": [ + "image05" + ], + "category": "image-memory", + "hard_negatives": [ + "image03", + "image04" + ] + }, + { + "id": "q010", + "text": "der Holzsteg führt bei Mondlicht in einen See", + "language": "de", + "expected": [ + "image05" + ], + "category": "image-memory", + "hard_negatives": [ + "image03", + "image04" + ] + }, + { + "id": "q011", + "text": "the pink layered mountain ridges beneath a golden sunset", + "language": "en", + "expected": [ + "image06" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q012", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang", + "language": "de", + "expected": [ + "image06" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q013", + "text": "the herd of cows on green hills", + "language": "en", + "expected": [ + "image07" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q014", + "text": "die Kuhherde auf grünen Hügeln", + "language": "de", + "expected": [ + "image07" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q015", + "text": "the red sports car driving through woods", + "language": "en", + "expected": [ + "image08" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q016", + "text": "das rote Sportauto fährt durch den Wald", + "language": "de", + "expected": [ + "image08" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q017", + "text": "the vegetable and grain bowl beside carrot slices", + "language": "en", + "expected": [ + "image09" + ], + "category": "image-memory", + "hard_negatives": [ + "image02" + ] + }, + { + "id": "q018", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben", + "language": "de", + "expected": [ + "image09" + ], + "category": "image-memory", + "hard_negatives": [ + "image02" + ] + }, + { + "id": "q019", + "text": "milk being poured into coffee to make a pattern", + "language": "en", + "expected": [ + "image10" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q020", + "text": "Milch wird für ein Muster in den Kaffee gegossen", + "language": "de", + "expected": [ + "image10" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q021", + "text": "the empty tropical beach with turquoise water", + "language": "en", + "expected": [ + "image11" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q022", + "text": "der leere tropische Strand mit türkisfarbenem Wasser", + "language": "de", + "expected": [ + "image11" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q023", + "text": "the black and white photo with a hand reaching towards us", + "language": "en", + "expected": [ + "image12" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q024", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift", + "language": "de", + "expected": [ + "image12" + ], + "category": "image-memory", + "hard_negatives": [] + }, + { + "id": "q025", + "text": "the cat jumping up beside a door handle", + "language": "en", + "expected": [ + "clip01" + ], + "category": "video-action", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "hard_negatives": [ + "image01" + ], + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + } + }, + { + "id": "q026", + "text": "die Katze springt neben dem Türgriff hoch", + "language": "de", + "expected": [ + "clip01" + ], + "category": "video-action", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "hard_negatives": [ + "image01" + ], + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + } + }, + { + "id": "q027", + "text": "the cat sitting low by the door after trying to open it", + "language": "en", + "expected": [ + "clip01" + ], + "category": "video-action", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + } + }, + { + "id": "q028", + "text": "die Katze sitzt nach dem Öffnungsversuch unten an der Tür", + "language": "de", + "expected": [ + "clip01" + ], + "category": "video-action", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + } + }, + { + "id": "q029", + "text": "the red flower bud before its petals open", + "language": "en", + "expected": [ + "clip03" + ], + "category": "video-temporal", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + } + }, + { + "id": "q030", + "text": "die rote Blütenknospe bevor sich die Blätter öffnen", + "language": "de", + "expected": [ + "clip03" + ], + "category": "video-temporal", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + } + }, + { + "id": "q031", + "text": "the red flower with its petals open wide", + "language": "en", + "expected": [ + "clip03" + ], + "category": "video-temporal", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + } + }, + { + "id": "q032", + "text": "die rote Blume mit weit geöffneten Blütenblättern", + "language": "de", + "expected": [ + "clip03" + ], + "category": "video-temporal", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + } + }, + { + "id": "q033", + "text": "the tall waterfall on a foggy rocky mountain", + "language": "en", + "expected": [ + "clip02" + ], + "category": "video-scene", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "hard_negatives": [ + "image03", + "image05", + "image11" + ] + }, + { + "id": "q034", + "text": "der hohe Wasserfall an einem nebligen felsigen Berg", + "language": "de", + "expected": [ + "clip02" + ], + "category": "video-scene", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "hard_negatives": [ + "image03", + "image05", + "image11" + ] + }, + { + "id": "q035", + "text": "the astronaut standing on the Moon next to landing equipment", + "language": "en", + "expected": [ + "clip04" + ], + "category": "video-scene", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + } + }, + { + "id": "q036", + "text": "der Astronaut auf dem Mond neben der Landeausrüstung", + "language": "de", + "expected": [ + "clip04" + ], + "category": "video-scene", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + } + }, + { + "id": "q037", + "text": "the lunar rover driving over grey Moon terrain", + "language": "en", + "expected": [ + "clip04" + ], + "category": "video-scene", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + } + }, + { + "id": "q038", + "text": "der Mondrover fährt über graues Mondgelände", + "language": "de", + "expected": [ + "clip04" + ], + "category": "video-scene", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + } + }, + { + "id": "q039", + "text": "someone saying that we choose to go to the Moon", + "language": "en", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q040", + "text": "jemand sagt, dass wir uns entscheiden, zum Mond zu fliegen", + "language": "de", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q041", + "text": "someone finding orange soil on the Moon", + "language": "en", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q042", + "text": "jemand findet orangefarbenen Boden auf dem Mond", + "language": "de", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q043", + "text": "a request to fund the Artemis program for the first woman on the Moon", + "language": "en", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q044", + "text": "eine Bitte um Finanzierung von Artemis für die erste Frau auf dem Mond", + "language": "de", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q045", + "text": "someone talking about planting a flag on Mars", + "language": "en", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q046", + "text": "jemand spricht davon, eine Flagge auf dem Mars aufzustellen", + "language": "de", + "expected": [ + "clip04" + ], + "category": "video-speech", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "required_modality": "audio" + }, + { + "id": "q047", + "text": "gentle solo piano music without anyone singing", + "language": "en", + "expected": [ + "music01" + ], + "category": "music-memory", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "music02" + ] + }, + { + "id": "q048", + "text": "sanfte Klaviermusik ohne Gesang", + "language": "de", + "expected": [ + "music01" + ], + "category": "music-memory", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "music02" + ] + }, + { + "id": "q049", + "text": "a jazzy violin melody", + "language": "en", + "expected": [ + "music02" + ], + "category": "music-memory", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "music01" + ] + }, + { + "id": "q050", + "text": "eine jazzige Geigenmelodie", + "language": "de", + "expected": [ + "music02" + ], + "category": "music-memory", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "music01" + ] + }, + { + "id": "q051", + "text": "a dog barking nearby", + "language": "en", + "expected": [ + "sound01" + ], + "category": "sound-memory", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "sound02" + ] + }, + { + "id": "q052", + "text": "ein Hund bellt in der Nähe", + "language": "de", + "expected": [ + "sound01" + ], + "category": "sound-memory", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "sound02" + ] + }, + { + "id": "q053", + "text": "a growling roaring creature sound effect", + "language": "en", + "expected": [ + "sound02" + ], + "category": "sound-memory", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "sound01" + ] + }, + { + "id": "q054", + "text": "ein knurrender brüllender Kreatur-Soundeffekt", + "language": "de", + "expected": [ + "sound02" + ], + "category": "sound-memory", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "required_modality": "audio", + "hard_negatives": [ + "sound01" + ] + }, + { + "id": "q055", + "text": "Kimiko Ishizaka", + "language": "en", + "expected": [ + "music01" + ], + "category": "exact-metadata", + "metadata": { + "artist": "Kimiko Ishizaka" + } + }, + { + "id": "q056", + "text": "Jazz Violin Solo", + "language": "en", + "expected": [ + "music02" + ], + "category": "exact-metadata", + "metadata": { + "title": "Jazz Violin Solo" + } + }, + { + "id": "q057", + "text": "Violinist WTD", + "language": "en", + "expected": [ + "music02" + ], + "category": "exact-metadata", + "metadata": { + "artist": "Violinist WTD" + } + }, + { + "id": "q058", + "text": "wooden pier under the moon", + "language": "en", + "expected": [ + "image05" + ], + "category": "exact-filter", + "filters": { + "extension": "jpg" + } + }, + { + "id": "q059", + "text": "the cat jumping beside the handle", + "language": "en", + "expected": [], + "category": "temporal-negative", + "filters": { + "asset": "clip01", + "time_range_s": [ + 7, + 14 + ] + }, + "required_modality": "image" + }, + { + "id": "q060", + "text": "someone mentioning Mars", + "language": "en", + "expected": [], + "category": "filter-no-answer", + "filters": { + "extension": "ogg" + }, + "required_modality": "audio" + }, + { + "id": "q061", + "text": "a purple elephant playing a violin on the beach", + "language": "en", + "expected": [], + "category": "content-no-answer", + "split": "held-out-no-answer" + }, + { + "id": "q062", + "text": "ein violetter Elefant spielt Geige am Strand", + "language": "de", + "expected": [], + "category": "content-no-answer", + "split": "held-out-no-answer" + }, + { + "id": "q063", + "text": "someone explains quantum entanglement", + "language": "en", + "expected": [], + "category": "speech-no-answer", + "required_modality": "audio", + "split": "held-out-no-answer" + }, + { + "id": "q064", + "text": "jemand erklärt Quantenverschränkung", + "language": "de", + "expected": [], + "category": "speech-no-answer", + "required_modality": "audio", + "split": "held-out-no-answer" + }, + { + "id": "q065", + "text": "Adele", + "language": "en", + "expected": [], + "category": "metadata-no-answer", + "metadata": { + "artist": "Adele" + } + } + ] +} \ No newline at end of file diff --git a/fixtures/media/image-budget-results.json b/fixtures/media/image-budget-results.json new file mode 100644 index 0000000..b01ef78 --- /dev/null +++ b/fixtures/media/image-budget-results.json @@ -0,0 +1,7525 @@ +{ + "budgets": [ + { + "encoding_ms": 47612.655699999996, + "images": [ + { + "asset": "image01", + "encoded_height": 288, + "encoded_width": 528, + "token_budget": 70 + }, + { + "asset": "image02", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + }, + { + "asset": "image03", + "encoded_height": 240, + "encoded_width": 576, + "token_budget": 70 + }, + { + "asset": "image04", + "encoded_height": 288, + "encoded_width": 528, + "token_budget": 70 + }, + { + "asset": "image05", + "encoded_height": 336, + "encoded_width": 432, + "token_budget": 70 + }, + { + "asset": "image06", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + }, + { + "asset": "image07", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + }, + { + "asset": "image08", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + }, + { + "asset": "image09", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + }, + { + "asset": "image10", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + }, + { + "asset": "image11", + "encoded_height": 240, + "encoded_width": 624, + "token_budget": 70 + }, + { + "asset": "image12", + "encoded_height": 288, + "encoded_width": 480, + "token_budget": 70 + } + ], + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.7652001221182165 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5896451702057066 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5605971352332674 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5584245131240907 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.552407528878177 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5509182627643417 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5472875080078802 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5469756419753535 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5320400375678894 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.53109746247572 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5204478683879774 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.518202810896961 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q001", + "language": "en", + "text": "the fluffy striped cat resting with its chin on the floor" + }, + "ranking_only_ms": 0.1712, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.7545775662063785 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5859615807773614 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5574431228201632 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5490167712282297 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5424051902389989 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5415533125925897 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5384933292448664 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5361158007505008 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5357099625359822 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5313559768159536 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5307756080157923 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.527774625904693 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q002", + "language": "de", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden" + }, + "ranking_only_ms": 0.1324, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.7670767153301056 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.6526553180985335 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.571513157868529 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5707988033454777 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5524675235807079 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5487635440936287 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5457524882858812 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5370805001758913 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5354857880083879 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5304233186039481 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5205150034665832 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5069502307238531 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q003", + "language": "en", + "text": "the overhead breakfast bowl with berries and diced mango" + }, + "ranking_only_ms": 0.12760000000000002, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.7670366612825783 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.665926819719537 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5733463433511561 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.570640765905394 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5574454397006618 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5550085894482759 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5502196863467664 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5363921728467664 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5237361951508225 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5194254760862111 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5193452420985359 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5140897668484152 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q004", + "language": "de", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben" + }, + "ranking_only_ms": 0.14100000000000001, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.7721161773248434 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6521384958364604 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6016987780002144 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5853537834856315 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5837567854690369 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.560633630466199 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5502503015337987 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5494342187555944 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5462228889285159 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5213322482968672 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5166794866712773 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5113586513648969 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q005", + "language": "en", + "text": "the daytime lake reflecting jagged mountains and pine trees" + }, + "ranking_only_ms": 0.1293, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.7386108983669084 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6679532899304479 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6312824046642788 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6121788555222247 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.6045503685394542 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5990790522207907 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5745034016715553 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5629582976811937 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5497454152804042 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5415700665736792 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5406205043899894 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5342489521323404 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q006", + "language": "de", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen" + }, + "ranking_only_ms": 0.1359, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.7722862595488833 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.646896658065822 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6334577035128833 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6173120631980126 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6159802012562887 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5751003978157176 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5492595822487727 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5464746425696352 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5432581423802145 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5221882528391658 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5137949575969585 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5130991097474599 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q007", + "language": "en", + "text": "the Milky Way over a dark mountain valley" + }, + "ranking_only_ms": 0.1288, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.73341353003989 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6365468406853572 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6353240708129485 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.630405296485311 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.621300505337526 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5775510339316651 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5719470101349583 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5594732336203517 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5575274044258477 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5222974232284863 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5213955181721264 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5126102774032 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q008", + "language": "de", + "text": "die Milchstraße über einem dunklen Bergtal" + }, + "ranking_only_ms": 0.1301, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.8016366847822496 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6050824112490265 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.6042863004469482 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5888372026462666 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5828567551151579 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5487426514919992 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5441189236557954 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5405943571870504 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5395736375511203 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5261446301294755 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5134574127270211 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5126371974010072 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q009", + "language": "en", + "text": "the wooden jetty pointing into a lake under moonlight" + }, + "ranking_only_ms": 0.1311, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.7774734467269292 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6008456307804577 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5946651083722521 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.581346713042303 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5596245621711942 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5564691823457262 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5458508323704834 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5448320774229288 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5407219554094732 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5137942048844897 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5098433649900996 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.499502957218986 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q010", + "language": "de", + "text": "der Holzsteg führt bei Mondlicht in einen See" + }, + "ranking_only_ms": 0.1487, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.7584903976354078 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.657165343287545 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6538554273946622 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6260967705776501 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.581154668976374 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.55436881004712 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5456367488463884 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.540881038292016 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.540597683190802 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5381213929752698 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5373093932613597 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5158780651752036 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q011", + "language": "en", + "text": "the pink layered mountain ridges beneath a golden sunset" + }, + "ranking_only_ms": 0.1308, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.7014496281447805 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6331372253838367 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.6189318658390128 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6148790607763891 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5831927900431279 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5388147992705451 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5326230640645422 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.530165042330712 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5285802615435738 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.526696051400068 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5173422833802179 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5134458384998072 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q012", + "language": "de", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang" + }, + "ranking_only_ms": 0.22599999999999998, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.7877349209996044 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.6149350186381777 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5896748877583343 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5868905316485984 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5755854377986671 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5630604373799305 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5610701700637261 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.552474827900809 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.545415863268474 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5432605381175872 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5356671817558967 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5106860479076422 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q013", + "language": "en", + "text": "the herd of cows on green hills" + }, + "ranking_only_ms": 0.1234, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.7455721588559275 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.6126251714353699 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5963121958082445 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.588669294756918 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5819881390321187 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.566062309654484 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5553468835744354 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.552389887818717 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5503742653670657 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5437473581339233 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5400220298963042 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.532668493807067 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q014", + "language": "de", + "text": "die Kuhherde auf grünen Hügeln" + }, + "ranking_only_ms": 0.1262, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.7924087246990852 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5513073181669851 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5440003208286935 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5325975250176016 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5313078812054711 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5292860293551548 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5277804125317642 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5156749208244283 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5070716286322132 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5041929087848388 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5028342772743601 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.49237688792509265 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q015", + "language": "en", + "text": "the red sports car driving through woods" + }, + "ranking_only_ms": 0.126, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.7580651844779408 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5388916042737024 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5376770618335804 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5308453329048735 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5164978925495354 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5161988524239767 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5141192838831694 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5068312851789807 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5006835285456646 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.4994351375494851 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.49643284350917966 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4861327165055847 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q016", + "language": "de", + "text": "das rote Sportauto fährt durch den Wald" + }, + "ranking_only_ms": 0.17670000000000002, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.7512991966073436 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.6801778957772636 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5810736723854057 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5717219204809059 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5672366654787006 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5668183824911979 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5634043322398521 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5600988581634416 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5515150650156871 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5499437193405633 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5464209630468759 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.544339842310125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q017", + "language": "en", + "text": "the vegetable and grain bowl beside carrot slices" + }, + "ranking_only_ms": 0.1271, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.7138053184379384 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.6610851012170474 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5682852135002175 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5650255644499811 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5619301887106092 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5592831378285996 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5535970182791908 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5524615357032255 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5519933474409934 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5398922819432065 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5358219376598197 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5260684462576444 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q018", + "language": "de", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben" + }, + "ranking_only_ms": 0.1241, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.7776039515999359 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5753228407140849 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5671521490568129 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.566771780088685 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5657672486208284 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5650046189081286 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5531033276716277 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5474866035668093 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5462221891823738 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5460013469085455 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5415695968473434 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5314668884345822 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q019", + "language": "en", + "text": "milk being poured into coffee to make a pattern" + }, + "ranking_only_ms": 0.1275, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.7207696568525191 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5822933370417324 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5773956169229006 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5655837429562283 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5559521859205916 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.552700642729086 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5498937762256643 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5460690929213455 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5421071404157985 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5411506606872366 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5388923136632648 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5297874424413929 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q020", + "language": "de", + "text": "Milch wird für ein Muster in den Kaffee gegossen" + }, + "ranking_only_ms": 0.12310000000000001, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.7493082953489016 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5996679355504702 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5705727462925522 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5681408474579525 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5670560666188297 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.553879160187962 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5521917515819593 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5486860613375979 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5450326575345695 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5446188270974377 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5217027594108182 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.49057208646726586 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q021", + "language": "en", + "text": "the empty tropical beach with turquoise water" + }, + "ranking_only_ms": 0.1206, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.7263103849919782 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6006805370464148 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5892871989793167 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5795539381548656 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5718993140309669 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5632289866396677 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5556502084486259 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5553676362834145 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5506568246541319 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5451732330066593 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5291057163443947 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5231659953969606 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q022", + "language": "de", + "text": "der leere tropische Strand mit türkisfarbenem Wasser" + }, + "ranking_only_ms": 0.126, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.7727399208678246 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5993273777627736 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5758216798826372 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5723045438508139 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5718184506245892 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.570614134603241 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5659346667853447 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5628171554402223 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5589970787457519 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5565811047047523 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5564707251732821 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5492144184577369 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q023", + "language": "en", + "text": "the black and white photo with a hand reaching towards us" + }, + "ranking_only_ms": 0.1265, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.7391251438883871 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5811968459215159 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.577258306038326 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5674250015113338 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5655505559751597 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5629066197015701 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.561819583953752 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5591616586605849 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5588383060923781 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5550003827857956 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5548716184119555 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5463878689109176 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q024", + "language": "de", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift" + }, + "ranking_only_ms": 0.12840000000000001, + "segment_top5": [] + } + ], + "token_budget": 70 + }, + { + "encoding_ms": 199652.08899999998, + "images": [ + { + "asset": "image01", + "encoded_height": 576, + "encoded_width": 1056, + "token_budget": 280 + }, + { + "asset": "image02", + "encoded_height": 624, + "encoded_width": 960, + "token_budget": 280 + }, + { + "asset": "image03", + "encoded_height": 528, + "encoded_width": 1152, + "token_budget": 280 + }, + { + "asset": "image04", + "encoded_height": 576, + "encoded_width": 1056, + "token_budget": 280 + }, + { + "asset": "image05", + "encoded_height": 672, + "encoded_width": 912, + "token_budget": 280 + }, + { + "asset": "image06", + "encoded_height": 624, + "encoded_width": 960, + "token_budget": 280 + }, + { + "asset": "image07", + "encoded_height": 624, + "encoded_width": 960, + "token_budget": 280 + }, + { + "asset": "image08", + "encoded_height": 624, + "encoded_width": 960, + "token_budget": 280 + }, + { + "asset": "image09", + "encoded_height": 624, + "encoded_width": 960, + "token_budget": 280 + }, + { + "asset": "image10", + "encoded_height": 624, + "encoded_width": 960, + "token_budget": 280 + }, + { + "asset": "image11", + "encoded_height": 480, + "encoded_width": 1248, + "token_budget": 280 + }, + { + "asset": "image12", + "encoded_height": 576, + "encoded_width": 1008, + "token_budget": 280 + } + ], + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.7555832865110583 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5747205232415264 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5527772321661512 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.54216604695853 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5407452946573788 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5379162576894027 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5369012694564834 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.535154365610576 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5240792897066963 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5230401927016218 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5080270789209096 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5034717919223043 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q001", + "language": "en", + "text": "the fluffy striped cat resting with its chin on the floor" + }, + "ranking_only_ms": 0.154, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.7467536159965775 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5731424464978286 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5598090916595235 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5448030095534915 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5342563156172918 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5335596248999125 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5310184678102117 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5281667201828036 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.527615524943027 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5273236470554138 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5256341966620238 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5136427888821797 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q002", + "language": "de", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden" + }, + "ranking_only_ms": 0.2326, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.755407245665466 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.629476038547986 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5576776569954541 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5495694374854344 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5448352287918002 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5408903070421401 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5259873341446453 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5244093835917232 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5214152731149708 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5191462571853868 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5190300429295993 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.479777650298032 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q003", + "language": "en", + "text": "the overhead breakfast bowl with berries and diced mango" + }, + "ranking_only_ms": 0.12999999999999998, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.7552211675269437 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.6459044251687732 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5644336741861531 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5553799696126374 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5534713715946519 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.543233850859455 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5356789159488897 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5195470887945602 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5116559262297784 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5114553323267278 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5068560886103898 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5003418424132691 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q004", + "language": "de", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben" + }, + "ranking_only_ms": 0.1305, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.7561503906495672 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6491126646080518 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5781408117735173 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5724464442000087 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5655951018914626 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5411555230207978 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5408290020048866 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5361285342110778 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5281129147927737 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4987623662043649 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4970564017448759 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.49415180484408483 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q005", + "language": "en", + "text": "the daytime lake reflecting jagged mountains and pine trees" + }, + "ranking_only_ms": 0.1344, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.7259985228746909 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6611405745772277 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6126117871453067 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5970090181086422 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5841141189427184 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5788572013646063 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5624849290503291 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5555845339665093 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5434978991894057 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5331155503182581 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5328102404106752 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5174715868657316 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q006", + "language": "de", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen" + }, + "ranking_only_ms": 0.1241, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.759107197890661 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6448677201220715 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6193210079767927 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5965460726181038 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5860751487417521 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5721549220710813 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5300054684131482 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5292163046264482 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5267968331690746 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5041033642101743 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.4986544427939602 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.49389708405793753 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q007", + "language": "en", + "text": "the Milky Way over a dark mountain valley" + }, + "ranking_only_ms": 0.1375, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.7179067834873688 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6321453166891562 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6212681371855796 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6102833509466329 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6084637067856994 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5694240061727707 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5497173766218542 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.545413967009018 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5428236869242069 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5060323507061135 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5043963210941368 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5035701382645736 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q008", + "language": "de", + "text": "die Milchstraße über einem dunklen Bergtal" + }, + "ranking_only_ms": 0.1547, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.7999195536980223 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.6042633388272477 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5936448394674367 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5852862093145577 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5750969146344782 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5315569141763957 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5304098895917245 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5247511470419144 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.518584320942256 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5017463707937179 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4967194752126472 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.48324780698089964 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q009", + "language": "en", + "text": "the wooden jetty pointing into a lake under moonlight" + }, + "ranking_only_ms": 0.1274, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.7852457275640073 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.594384382995457 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5926872611641714 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5662489772396024 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5564019539995605 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5455579062252801 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5422105318591941 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5283969839264206 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.522138983882841 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4988732144872288 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4906610128700479 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.48903370267558866 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q010", + "language": "de", + "text": "der Holzsteg führt bei Mondlicht in einen See" + }, + "ranking_only_ms": 0.1304, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.7390124836410707 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.6384910393224642 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6259045280841677 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5970209930100072 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.578286612259604 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.540802670074643 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5378068496861651 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5310912759662306 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5233533404678243 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5208618649336032 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5199364662015452 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5155007074101607 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q011", + "language": "en", + "text": "the pink layered mountain ridges beneath a golden sunset" + }, + "ranking_only_ms": 0.1521, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6752447194828683 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6059742645424644 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5994780531303554 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5969345390860493 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.584009670716099 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5321823702190475 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5167634397447913 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5154489702903483 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5153646217288628 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5115533110615302 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5107515699674336 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5104313505092308 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q012", + "language": "de", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang" + }, + "ranking_only_ms": 0.13549999999999998, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.7595841873806123 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5887259795536043 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5881072800603884 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5743021146182448 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5710567413480265 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5617410247738988 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5429537466692012 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.528879861908747 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5231614631063726 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5216269561559722 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5212637041877503 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5154495999003444 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q013", + "language": "en", + "text": "the herd of cows on green hills" + }, + "ranking_only_ms": 0.13369999999999999, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.7189387135487436 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5991087055004061 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5927605869029853 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5736434070170675 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5733907977387074 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5630997909967711 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5424326217486081 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5421362183528642 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5350390230359316 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5331585750724896 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5301208840882886 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5255564871315542 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q014", + "language": "de", + "text": "die Kuhherde auf grünen Hügeln" + }, + "ranking_only_ms": 0.1403, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.7775204127868955 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5573902573497131 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.532086595108352 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5268774155529298 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.525381562556109 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5153949660599545 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5019186530963715 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.4963884742537968 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.4911481368933219 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.48730444205065365 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.48202202260887483 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4735668777526466 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q015", + "language": "en", + "text": "the red sports car driving through woods" + }, + "ranking_only_ms": 0.2278, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.7419497843771885 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.543598248328457 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5265858690941481 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5249267507562987 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.506491361383632 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5007353961587587 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.4993579178675716 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.4923317084892269 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.48698089818031787 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.4863521975898506 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.4841540857162436 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4685649560606332 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q016", + "language": "de", + "text": "das rote Sportauto fährt durch den Wald" + }, + "ranking_only_ms": 0.1252, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.7374291807197707 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.6560209118359319 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5644246410167684 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5565240988280187 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5503590700992249 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5502638702468943 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5484819255234576 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5416287805955075 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5392895945463138 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5369480933697739 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5306227617585381 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5228591020946279 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q017", + "language": "en", + "text": "the vegetable and grain bowl beside carrot slices" + }, + "ranking_only_ms": 0.12449999999999999, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.7113346300803234 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.6411375862943132 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5480569704849984 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5435156097000685 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5420994152044378 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5418653276391812 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5413220894143654 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5365133998241277 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.535508127570335 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5343916136658559 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.528283101798273 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5173411629740754 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q018", + "language": "de", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben" + }, + "ranking_only_ms": 0.132, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.7521997200871311 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5689565149490825 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5600572163876983 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5545933943949038 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5479050404135689 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5460243335625821 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5457115412390119 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.542690213012167 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5311215792724896 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5286586197382303 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5259041506463041 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5093908303397287 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q019", + "language": "en", + "text": "milk being poured into coffee to make a pattern" + }, + "ranking_only_ms": 0.1529, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.7084200547306438 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5791605551523759 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5615448585926546 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5600088799473072 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5492006583753528 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5408331215831551 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5406430710519691 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5348979508076501 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5346612004121186 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5344759631771416 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5276313589676886 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5276003571294992 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q020", + "language": "de", + "text": "Milch wird für ein Muster in den Kaffee gegossen" + }, + "ranking_only_ms": 0.1301, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.7332762703928835 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6008127259518634 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5595575055085511 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5594333447066302 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5508595432275571 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5505867017637069 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.536947227691596 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5358540554425455 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5342580042209494 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5282649206633299 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5153068022607611 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4781369525995938 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q021", + "language": "en", + "text": "the empty tropical beach with turquoise water" + }, + "ranking_only_ms": 0.1632, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.7143441301350071 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6011941369824814 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5848755511946564 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5750543153049592 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.562716113298149 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5454760637927306 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5443220083909434 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5417025519941413 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5388725448385111 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5298266626792398 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.518895260053308 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5073359909411005 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q022", + "language": "de", + "text": "der leere tropische Strand mit türkisfarbenem Wasser" + }, + "ranking_only_ms": 0.1372, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.7592562467650629 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5747361096922597 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5745176548161672 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5677719182605817 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5645748354458379 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5540108126586767 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5535962434131239 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5431273323882644 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5422931691214381 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5313415910353333 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5209656078837818 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5065142235969192 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q023", + "language": "en", + "text": "the black and white photo with a hand reaching towards us" + }, + "ranking_only_ms": 0.12380000000000001, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.7179675349885711 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5850221041699462 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5695679939681461 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.561268234866692 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5532027669208373 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5531366744702505 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5436370989506208 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5435200807763098 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5430619807184064 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5316007224365257 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5296319574025146 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.521348207415177 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q024", + "language": "de", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift" + }, + "ranking_only_ms": 0.1224, + "segment_top5": [] + } + ], + "token_budget": 280 + }, + { + "encoding_ms": 1493321.6608, + "images": [ + { + "asset": "image01", + "encoded_height": 1200, + "encoded_width": 2112, + "token_budget": 1120 + }, + { + "asset": "image02", + "encoded_height": 1296, + "encoded_width": 1920, + "token_budget": 1120 + }, + { + "asset": "image03", + "encoded_height": 1104, + "encoded_width": 2304, + "token_budget": 1120 + }, + { + "asset": "image04", + "encoded_height": 1152, + "encoded_width": 2160, + "token_budget": 1120 + }, + { + "asset": "image05", + "encoded_height": 1344, + "encoded_width": 1872, + "token_budget": 1120 + }, + { + "asset": "image06", + "encoded_height": 1248, + "encoded_width": 1968, + "token_budget": 1120 + }, + { + "asset": "image07", + "encoded_height": 1296, + "encoded_width": 1920, + "token_budget": 1120 + }, + { + "asset": "image08", + "encoded_height": 1296, + "encoded_width": 1920, + "token_budget": 1120 + }, + { + "asset": "image09", + "encoded_height": 1296, + "encoded_width": 1920, + "token_budget": 1120 + }, + { + "asset": "image10", + "encoded_height": 1296, + "encoded_width": 1920, + "token_budget": 1120 + }, + { + "asset": "image11", + "encoded_height": 1008, + "encoded_width": 2496, + "token_budget": 1120 + }, + { + "asset": "image12", + "encoded_height": 1200, + "encoded_width": 2064, + "token_budget": 1120 + } + ], + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.7375758584073081 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.554765256984593 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5352702464292477 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5324708137684235 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5275817689695591 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5205854690788287 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5144150422071514 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.513193793419185 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.49775234545962427 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4904530813457191 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.488004419183689 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4778747662239502 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q001", + "language": "en", + "text": "the fluffy striped cat resting with its chin on the floor" + }, + "ranking_only_ms": 0.2343, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.7274755507996834 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5605722657073517 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5354920431778991 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5351023376960656 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5260610599147837 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5252126140577446 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5120440884915421 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5107621969430507 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.504071255583306 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5036977587159324 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5004711797953147 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4956674438691867 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q002", + "language": "de", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden" + }, + "ranking_only_ms": 0.1726, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.7294963797486911 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.6245029286488453 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5464584997562331 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5435894625918203 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.533233411649916 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5163828470239791 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.514660692916302 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5056803391114338 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.49279685155420844 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4853155805689791 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.47960275306094485 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.4748121412352129 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q003", + "language": "en", + "text": "the overhead breakfast bowl with berries and diced mango" + }, + "ranking_only_ms": 0.1691, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.7324811121272624 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.6465138421457081 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5574488348225802 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5519844928742272 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5346676087549006 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.529090218972451 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5256252187001108 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5022017710234269 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.49674568127962593 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.49309454293213784 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.4902781358941167 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.48166527234302614 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q004", + "language": "de", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben" + }, + "ranking_only_ms": 0.1548, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.7212463024798561 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5926244998092751 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5604800012529116 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5576225475745283 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5445227679884356 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5271449826724979 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5046484621234788 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5018150007073889 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4860131496183477 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.47929060275927376 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.47221433287000547 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4671142878232221 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q005", + "language": "en", + "text": "the daytime lake reflecting jagged mountains and pine trees" + }, + "ranking_only_ms": 0.3841, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.7075703668714292 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6253288426476901 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5997583298410434 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5908288284395228 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5708672535427883 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5609040675479945 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5541567344202372 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.535313393494618 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5261852916797207 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5067412363687542 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5061118737378493 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4897097946156641 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q006", + "language": "de", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen" + }, + "ranking_only_ms": 0.145, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.7217915172637983 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6046507967160373 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.6032950513916774 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5876917742079101 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.571337960111018 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5373173147780465 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5186428795851507 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5165285644925418 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4915631569358054 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.4848034414336408 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.4727716477423174 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.46568230181946985 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q007", + "language": "en", + "text": "the Milky Way over a dark mountain valley" + }, + "ranking_only_ms": 0.1328, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.6835754935766608 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.606050966905027 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.6020984794809922 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6010840924095875 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5983518811208353 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5508585951106533 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5449416516324388 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5308845990751485 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5137004413091792 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5031878618575407 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.4853467530427573 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4742378769163365 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q008", + "language": "de", + "text": "die Milchstraße über einem dunklen Bergtal" + }, + "ranking_only_ms": 0.12589999999999998, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.7426267024471341 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5955190825219867 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.589715636243399 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5625496764789483 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5597745866116391 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5200818930341158 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5200396875655457 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5197396195598748 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4926498202791689 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.48280876004154616 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.46035942814998837 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.4517639932443164 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q009", + "language": "en", + "text": "the wooden jetty pointing into a lake under moonlight" + }, + "ranking_only_ms": 0.1255, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.7370084011727027 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5926975575769888 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5852641214823322 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.555488481367725 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5292616338354896 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5274364364420461 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5231881957475948 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5203111000677108 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5030659558921231 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.48631146054405566 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.4637738528119961 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.46206380296145133 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q010", + "language": "de", + "text": "der Holzsteg führt bei Mondlicht in einen See" + }, + "ranking_only_ms": 0.12789999999999999, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.71896375113134 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6168250077117923 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5975830985147523 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5837209409885527 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5450400918560635 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5314348125817744 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5128173273544812 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5112256720204534 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5112045766265413 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5044792182857938 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.501131586455096 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.4819444707057471 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q011", + "language": "en", + "text": "the pink layered mountain ridges beneath a golden sunset" + }, + "ranking_only_ms": 0.12860000000000002, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.6528443997748047 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5902841426520993 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.572048683553981 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5633511084281564 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5447850787347455 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5243904571910138 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5038384354055182 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5004098345263929 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.49669818125664306 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.48447768986091144 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.4801281871925062 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.47684807457145184 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q012", + "language": "de", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang" + }, + "ranking_only_ms": 0.1252, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.7355384394130523 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5770941085983616 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5627938748093704 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5538282715048342 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5477217134205394 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.523337737909504 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5190897168712467 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5048154835248249 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.49791888273822005 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.49209215513989046 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.47688445325951556 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.474579116409108 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q013", + "language": "en", + "text": "the herd of cows on green hills" + }, + "ranking_only_ms": 0.1278, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.6944692116169016 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5785175513568701 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5565651517463088 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5565045193481993 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5521970896995881 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5313231341341366 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5274780562513343 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.51684473684193 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5156326964219974 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.49695388529022294 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4944284813087101 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.4863871414661081 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q014", + "language": "de", + "text": "die Kuhherde auf grünen Hügeln" + }, + "ranking_only_ms": 0.1274, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.7155367372858445 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5178795938941858 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.514333018254304 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.49170182166463694 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.49104384992456535 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.4898114233975714 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.489060639187214 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.48620084801149394 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.4843791704980976 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.46595121192097133 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.4586250214817076 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.45585748946233695 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q015", + "language": "en", + "text": "the red sports car driving through woods" + }, + "ranking_only_ms": 0.12589999999999998, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.6838824664873435 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5130779978914605 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5122567837520591 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.49594336744037504 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.48684918390224025 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.4865796047073469 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.47803096727306965 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.4758530963431924 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.47393010920331424 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.47196904956153213 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.47109960047091065 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.455127519801932 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q016", + "language": "de", + "text": "das rote Sportauto fährt durch den Wald" + }, + "ranking_only_ms": 0.1315, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.7247440618611085 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.6179369604980657 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5398475419670425 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5387684216234399 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5325508699361932 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5293967468459246 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5271249574390022 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5196397087526897 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5191613888515728 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5153646088982705 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.504825742013055 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.48283877249387663 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q017", + "language": "en", + "text": "the vegetable and grain bowl beside carrot slices" + }, + "ranking_only_ms": 0.12940000000000002, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.7041943888327457 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5983995776990387 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5289008174305225 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5265957769002209 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5214688358644644 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5174613735215507 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5139948646896916 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5116746485074366 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5113002754612432 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.49614780887489535 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4956401230513691 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.4946808350535523 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q018", + "language": "de", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben" + }, + "ranking_only_ms": 0.1266, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.7174615083404926 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5571800038027962 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.537192987631996 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5257528440943389 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5217181520622726 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5168573884477745 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5146928047463053 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5125567659567569 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5090043076539378 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5054654714626167 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5018389295611981 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.4878900554392489 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q019", + "language": "en", + "text": "milk being poured into coffee to make a pattern" + }, + "ranking_only_ms": 0.24000000000000002, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.6960663822119538 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5694650350781948 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5516016294302226 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5311341184362028 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5308789244057679 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5255094947851939 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5147845393481661 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5114580546554243 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5074552197123313 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5061444773464208 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5060211186972075 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5025584773753429 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q020", + "language": "de", + "text": "Milch wird für ein Muster in den Kaffee gegossen" + }, + "ranking_only_ms": 0.12940000000000002, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.7225852012548215 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5729629568894549 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5611207809475593 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5482373235484734 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5398496048471192 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5366715523782386 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5336541302335523 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5316624531070395 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.5267105332555917 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5017053130506417 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4895239495529605 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.47920754310218416 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q021", + "language": "en", + "text": "the empty tropical beach with turquoise water" + }, + "ranking_only_ms": 0.1204, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.7127682298857303 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5988901371468249 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5731273714099023 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5596428191764672 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5585628375806684 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5443829401850819 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5344945575127696 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5317128470001431 + }, + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.526338110731553 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5178436595372533 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5070061346455313 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.4933466657229849 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q022", + "language": "de", + "text": "der leere tropische Strand mit türkisfarbenem Wasser" + }, + "ranking_only_ms": 0.1204, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.7472705180389634 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5688641779283221 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5549527780986312 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5465143134388292 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.544876953476089 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.5281701100353081 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.525554461913636 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5245535901476506 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.5227355157989149 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5204755060703137 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5069138234118556 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5001506442975417 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q023", + "language": "en", + "text": "the black and white photo with a hand reaching towards us" + }, + "ranking_only_ms": 0.12769999999999998, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image" + }, + "score": 0.7155341462209681 + }, + { + "candidate": { + "asset": "image03", + "modality": "image" + }, + "score": 0.5695908602809283 + }, + { + "candidate": { + "asset": "image10", + "modality": "image" + }, + "score": 0.5590189907573276 + }, + { + "candidate": { + "asset": "image05", + "modality": "image" + }, + "score": 0.5415526890342265 + }, + { + "candidate": { + "asset": "image06", + "modality": "image" + }, + "score": 0.5390445399771276 + }, + { + "candidate": { + "asset": "image11", + "modality": "image" + }, + "score": 0.5298222178041443 + }, + { + "candidate": { + "asset": "image02", + "modality": "image" + }, + "score": 0.529554816822047 + }, + { + "candidate": { + "asset": "image01", + "modality": "image" + }, + "score": 0.527575229927628 + }, + { + "candidate": { + "asset": "image09", + "modality": "image" + }, + "score": 0.5237787793136579 + }, + { + "candidate": { + "asset": "image07", + "modality": "image" + }, + "score": 0.5230317700150301 + }, + { + "candidate": { + "asset": "image04", + "modality": "image" + }, + "score": 0.5176819451227809 + }, + { + "candidate": { + "asset": "image08", + "modality": "image" + }, + "score": 0.5116207090247806 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q024", + "language": "de", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift" + }, + "ranking_only_ms": 0.1342, + "segment_top5": [] + } + ], + "token_budget": 1120 + } + ], + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "media_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mtmd:mean:l2:rgb-catmullrom48-exif-largejpeg-scaled-v2:pcm16k30s-v1", + "photos": 12, + "queries": 24, + "query_embedding_ms": 2262.7884, + "scope": "12-photo-only token-budget comparison; same 24 independently frozen queries, query embeddings computed once and shared across budgets; ranking_only_ms excludes inference; no retrieval threshold or label tuning. Does not certify production search.", + "worker": { + "device": "cpu", + "dimensions": 768, + "media_supported": true, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + } +} \ No newline at end of file diff --git a/fixtures/media/image-budget-summary.json b/fixtures/media/image-budget-summary.json new file mode 100644 index 0000000..0f372f0 --- /dev/null +++ b/fixtures/media/image-budget-summary.json @@ -0,0 +1,75 @@ +{ + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "worker": { + "device": "cpu", + "dimensions": 768, + "media_supported": true, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + }, + "photos": 12, + "queries": 24, + "query_embedding_ms": 2262.7884, + "budgets": [ + { + "token_budget": 70, + "encoding_ms": 47612.655699999996, + "metrics": { + "positive_queries": 24, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + } + }, + { + "token_budget": 280, + "encoding_ms": 199652.08899999998, + "metrics": { + "positive_queries": 24, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + } + }, + { + "token_budget": 1120, + "encoding_ms": 1493321.6608, + "metrics": { + "positive_queries": 24, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + } + } + ], + "interpretation": "Same frozen 12 photos and 24 correlated EN/DE queries. Query embeddings shared across budgets. Encoding time is CPU batch cost; ranking-only time excludes inference. Equal small-corpus recall does not prove equal quality on larger or more difficult images." +} \ No newline at end of file diff --git a/fixtures/media/labels.lock.json b/fixtures/media/labels.lock.json new file mode 100644 index 0000000..451b28f --- /dev/null +++ b/fixtures/media/labels.lock.json @@ -0,0 +1,7 @@ +{ + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "frozen_before_media_scoring": true, + "document_seed_sha256": "3bab37fc0ec9c2e2e40684962b049172b5078358c6487c9033ed8697b8128dd7", + "query_count": 65, + "asset_count": 20 +} \ No newline at end of file diff --git a/fixtures/media/metadata-results.json b/fixtures/media/metadata-results.json new file mode 100644 index 0000000..3fa6956 --- /dev/null +++ b/fixtures/media/metadata-results.json @@ -0,0 +1,102 @@ +{ + "encoding_failures": [], + "encoding_ms": 1863.0235000000002, + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "match_kind": "media_metadata", + "modality": "metadata" + }, + "score": 2.847686714371868 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music01" + ], + "id": "q055", + "language": "en", + "metadata": { + "artist": "Kimiko Ishizaka" + }, + "text": "Kimiko Ishizaka" + }, + "query_ms": 1.0931, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata" + }, + "score": 4.671020217612865 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q056", + "language": "en", + "metadata": { + "title": "Jazz Violin Solo" + }, + "text": "Jazz Violin Solo" + }, + "query_ms": 0.7408, + "segment_top5": [] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata" + }, + "score": 3.6759070488571206 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q057", + "language": "en", + "metadata": { + "artist": "Violinist WTD" + }, + "text": "Violinist WTD" + }, + "query_ms": 0.6757, + "segment_top5": [] + }, + { + "file_rankings": [], + "query": { + "category": "metadata-no-answer", + "expected": [], + "id": "q065", + "language": "en", + "metadata": { + "artist": "Adele" + }, + "text": "Adele" + }, + "query_ms": 0.4148, + "segment_top5": [] + } + ], + "scope": "Actual FFprobe stream/format metadata + guarded Searchi core FTS; lexical identity queries, no embedding fallback; encoding_ms measures metadata extraction, not model inference", + "worker": null +} \ No newline at end of file diff --git a/fixtures/media/metadata-summary.json b/fixtures/media/metadata-summary.json new file mode 100644 index 0000000..30990f0 --- /dev/null +++ b/fixtures/media/metadata-summary.json @@ -0,0 +1,75 @@ +{ + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "worker": null, + "overall": { + "positive_queries": 3, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 0.0 + }, + "by_category": { + "exact-metadata": { + "positive_queries": 3, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "metadata-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 0.0 + } + }, + "by_language": { + "en": { + "positive_queries": 3, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 0.0 + } + }, + "encoding_failures": [], + "encoding_ms": 1863.0235000000002, + "query_p50_ms": 0.7408, + "query_p95_ms": 1.0931, + "failures": [], + "source_scope": "Actual FFprobe stream/format metadata + guarded Searchi core FTS; lexical identity queries, no embedding fallback; encoding_ms measures metadata extraction, not model inference", + "interpretation": "Small independently labelled public-media diagnostic; source_scope identifies the measured lane. No-answer return rate measures unsuppressed output, not a calibrated confidence policy. Audio interval overlap can pass while the returned start timestamp is too early; point hits expose this. This corpus alone cannot certify production quality." +} \ No newline at end of file diff --git a/fixtures/media/pipeline-10s-results.json b/fixtures/media/pipeline-10s-results.json new file mode 100644 index 0000000..91bb10c --- /dev/null +++ b/fixtures/media/pipeline-10s-results.json @@ -0,0 +1,22540 @@ +{ + "audio_overlap_ms": 2000, + "audio_window_ms": 10000, + "encoding_failures": [], + "encoding_ms": 671510.0948000001, + "filename_index": { + "discovered": 20, + "failures": 0, + "indexed": 20, + "removed": 0, + "skipped": 20, + "unchanged": 0 + }, + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "index_report": { + "chunks": 154, + "failures": [], + "generation": 1, + "media_failures": 0, + "media_files": 20, + "model_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mean:l2:query512:doc2048:windows-overlap128:prompts-v1:byte64k-overlap512-title512-v1:google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mtmd:mean:l2:rgb-catmullrom48-exif-largejpeg-scaled-v2:pcm16k30s-v1:image280-frame70-audio30s-overlap2-distributed240-scene120-v1:custom-240-2000-120-10000-2000-600-14400000-17179869184", + "passages": 0 + }, + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q001", + "language": "en", + "text": "the fluffy striped cat resting with its chin on the floor" + }, + "query_ms": 94.13820000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q002", + "language": "de", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden" + }, + "query_ms": 119.73100000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q003", + "language": "en", + "text": "the overhead breakfast bowl with berries and diced mango" + }, + "query_ms": 90.447, + "segment_top5": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q004", + "language": "de", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben" + }, + "query_ms": 112.2064, + "segment_top5": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q005", + "language": "en", + "text": "the daytime lake reflecting jagged mountains and pine trees" + }, + "query_ms": 86.0642, + "segment_top5": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q006", + "language": "de", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen" + }, + "query_ms": 106.8406, + "segment_top5": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q007", + "language": "en", + "text": "the Milky Way over a dark mountain valley" + }, + "query_ms": 81.38969999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q008", + "language": "de", + "text": "die Milchstraße über einem dunklen Bergtal" + }, + "query_ms": 88.7739, + "segment_top5": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q009", + "language": "en", + "text": "the wooden jetty pointing into a lake under moonlight" + }, + "query_ms": 85.09859999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q010", + "language": "de", + "text": "der Holzsteg führt bei Mondlicht in einen See" + }, + "query_ms": 93.1671, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q011", + "language": "en", + "text": "the pink layered mountain ridges beneath a golden sunset" + }, + "query_ms": 90.7512, + "segment_top5": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 70000 + }, + "start_s": 70.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q012", + "language": "de", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang" + }, + "query_ms": 97.4549, + "segment_top5": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 70000 + }, + "start_s": 70.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q013", + "language": "en", + "text": "the herd of cows on green hills" + }, + "query_ms": 83.59179999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q014", + "language": "de", + "text": "die Kuhherde auf grünen Hügeln" + }, + "query_ms": 100.5504, + "segment_top5": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q015", + "language": "en", + "text": "the red sports car driving through woods" + }, + "query_ms": 77.5883, + "segment_top5": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q016", + "language": "de", + "text": "das rote Sportauto fährt durch den Wald" + }, + "query_ms": 81.0907, + "segment_top5": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "music02", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q017", + "language": "en", + "text": "the vegetable and grain bowl beside carrot slices" + }, + "query_ms": 92.08879999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q018", + "language": "de", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben" + }, + "query_ms": 110.4152, + "segment_top5": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q019", + "language": "en", + "text": "milk being poured into coffee to make a pattern" + }, + "query_ms": 83.9215, + "segment_top5": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q020", + "language": "de", + "text": "Milch wird für ein Muster in den Kaffee gegossen" + }, + "query_ms": 91.7982, + "segment_top5": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 20000 + }, + "start_s": 20.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q021", + "language": "en", + "text": "the empty tropical beach with turquoise water" + }, + "query_ms": 77.24499999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 20000 + }, + "start_s": 20.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q022", + "language": "de", + "text": "der leere tropische Strand mit türkisfarbenem Wasser" + }, + "query_ms": 100.953, + "segment_top5": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q023", + "language": "en", + "text": "the black and white photo with a hand reaching towards us" + }, + "query_ms": 92.7337, + "segment_top5": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10.333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8333 + }, + "start_s": 8.333 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q024", + "language": "de", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift" + }, + "query_ms": 102.18339999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10.333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8333 + }, + "start_s": 8.333 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "hard_negatives": [ + "image01" + ], + "id": "q025", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "text": "the cat jumping up beside a door handle" + }, + "query_ms": 83.2504, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "hard_negatives": [ + "image01" + ], + "id": "q026", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "text": "die Katze springt neben dem Türgriff hoch" + }, + "query_ms": 97.1897, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "id": "q027", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "text": "the cat sitting low by the door after trying to open it" + }, + "query_ms": 102.03750000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "id": "q028", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "text": "die Katze sitzt nach dem Öffnungsversuch unten an der Tür" + }, + "query_ms": 105.6104, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q029", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "text": "the red flower bud before its petals open" + }, + "query_ms": 87.25489999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q030", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "text": "die rote Blütenknospe bevor sich die Blätter öffnen" + }, + "query_ms": 101.0436, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q031", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "text": "the red flower with its petals open wide" + }, + "query_ms": 84.4982, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q032", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "text": "die rote Blume mit weit geöffneten Blütenblättern" + }, + "query_ms": 93.10799999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.2, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6200 + }, + "start_s": 6.2 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip02" + ], + "hard_negatives": [ + "image03", + "image05", + "image11" + ], + "id": "q033", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "language": "en", + "text": "the tall waterfall on a foggy rocky mountain" + }, + "query_ms": 95.84049999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.2, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6200 + }, + "start_s": 6.2 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip02" + ], + "hard_negatives": [ + "image03", + "image05", + "image11" + ], + "id": "q034", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "language": "de", + "text": "der hohe Wasserfall an einem nebligen felsigen Berg" + }, + "query_ms": 101.701, + "segment_top5": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q035", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + }, + "language": "en", + "text": "the astronaut standing on the Moon next to landing equipment" + }, + "query_ms": 92.6443, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q036", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + }, + "language": "de", + "text": "der Astronaut auf dem Mond neben der Landeausrüstung" + }, + "query_ms": 93.829, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q037", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + }, + "language": "en", + "text": "the lunar rover driving over grey Moon terrain" + }, + "query_ms": 86.7595, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q038", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + }, + "language": "de", + "text": "der Mondrover fährt über graues Mondgelände" + }, + "query_ms": 90.6467, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q039", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone saying that we choose to go to the Moon" + }, + "query_ms": 93.28609999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q040", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand sagt, dass wir uns entscheiden, zum Mond zu fliegen" + }, + "query_ms": 101.9786, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q041", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone finding orange soil on the Moon" + }, + "query_ms": 77.0622, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q042", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand findet orangefarbenen Boden auf dem Mond" + }, + "query_ms": 90.16929999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 50.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 40000 + }, + "start_s": 40.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q043", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a request to fund the Artemis program for the first woman on the Moon" + }, + "query_ms": 110.4239, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 50.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 40000 + }, + "start_s": 40.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 48000 + }, + "start_s": 48.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q044", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "eine Bitte um Finanzierung von Artemis für die erste Frau auf dem Mond" + }, + "query_ms": 104.9276, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 48000 + }, + "start_s": 48.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 66.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q045", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone talking about planting a flag on Mars" + }, + "query_ms": 82.19930000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 66.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 66.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q046", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand spricht davon, eine Flagge auf dem Mars aufzustellen" + }, + "query_ms": 97.2805, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 66.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 90.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music01" + ], + "hard_negatives": [ + "music02" + ], + "id": "q047", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "gentle solo piano music without anyone singing" + }, + "query_ms": 84.68, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 90.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 106.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 96000 + }, + "start_s": 96.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music01" + ], + "hard_negatives": [ + "music02" + ], + "id": "q048", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "sanfte Klaviermusik ohne Gesang" + }, + "query_ms": 88.9702, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 106.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 96000 + }, + "start_s": 96.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 162.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 152000 + }, + "start_s": 152.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music02" + ], + "hard_negatives": [ + "music01" + ], + "id": "q049", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a jazzy violin melody" + }, + "query_ms": 78.158, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 162.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 152000 + }, + "start_s": 152.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 162.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 152000 + }, + "start_s": 152.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music02" + ], + "hard_negatives": [ + "music01" + ], + "id": "q050", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "eine jazzige Geigenmelodie" + }, + "query_ms": 91.0936, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 162.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 152000 + }, + "start_s": 152.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound01" + ], + "hard_negatives": [ + "sound02" + ], + "id": "q051", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a dog barking nearby" + }, + "query_ms": 65.364, + "segment_top5": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound01" + ], + "hard_negatives": [ + "sound02" + ], + "id": "q052", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "ein Hund bellt in der Nähe" + }, + "query_ms": 78.8284, + "segment_top5": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 80000 + }, + "start_s": 80.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 50000 + }, + "start_s": 50.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound02" + ], + "hard_negatives": [ + "sound01" + ], + "id": "q053", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a growling roaring creature sound effect" + }, + "query_ms": 77.5705, + "segment_top5": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound02" + ], + "hard_negatives": [ + "sound01" + ], + "id": "q054", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "ein knurrender brüllender Kreatur-Soundeffekt" + }, + "query_ms": 104.4495, + "segment_top5": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.031544957774465976 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18000 + }, + "start_s": 18.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music01" + ], + "id": "q055", + "language": "en", + "metadata": { + "artist": "Kimiko Ishizaka" + }, + "text": "Kimiko Ishizaka" + }, + "query_ms": 72.2521, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.031544957774465976 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18000 + }, + "start_s": 18.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03252247488101534 + }, + { + "candidate": { + "asset": "music01", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 48000 + }, + "start_s": 48.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q056", + "language": "en", + "metadata": { + "title": "Jazz Violin Solo" + }, + "text": "Jazz Violin Solo" + }, + "query_ms": 62.5772, + "segment_top5": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03252247488101534 + }, + { + "candidate": { + "asset": "music01", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 48000 + }, + "start_s": 48.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03278688524590164 + }, + { + "candidate": { + "asset": "music01", + "end_s": 34.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q057", + "language": "en", + "metadata": { + "artist": "Violinist WTD" + }, + "text": "Violinist WTD" + }, + "query_ms": 68.46090000000001, + "segment_top5": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03278688524590164 + }, + { + "candidate": { + "asset": "music01", + "end_s": 34.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + } + ], + "query": { + "category": "exact-filter", + "expected": [ + "image05" + ], + "filters": { + "extension": "jpg" + }, + "id": "q058", + "language": "en", + "text": "wooden pier under the moon" + }, + "query_ms": 70.4285, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "query": { + "category": "temporal-negative", + "expected": [], + "filters": { + "asset": "clip01", + "time_range_s": [ + 7, + 14 + ] + }, + "id": "q059", + "language": "en", + "required_modality": "image", + "text": "the cat jumping beside the handle" + }, + "unsupported": "Production query API has no temporal-range filter yet" + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + } + ], + "query": { + "category": "filter-no-answer", + "expected": [], + "filters": { + "extension": "ogg" + }, + "id": "q060", + "language": "en", + "required_modality": "audio", + "text": "someone mentioning Mars" + }, + "query_ms": 59.4506, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "content-no-answer", + "expected": [], + "id": "q061", + "language": "en", + "split": "held-out-no-answer", + "text": "a purple elephant playing a violin on the beach" + }, + "query_ms": 84.11349999999999, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "content-no-answer", + "expected": [], + "id": "q062", + "language": "de", + "split": "held-out-no-answer", + "text": "ein violetter Elefant spielt Geige am Strand" + }, + "query_ms": 92.2089, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "speech-no-answer", + "expected": [], + "id": "q063", + "language": "en", + "required_modality": "audio", + "split": "held-out-no-answer", + "text": "someone explains quantum entanglement" + }, + "query_ms": 67.82000000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "speech-no-answer", + "expected": [], + "id": "q064", + "language": "de", + "required_modality": "audio", + "split": "held-out-no-answer", + "text": "jemand erklärt Quantenverschränkung" + }, + "query_ms": 76.2701, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 74.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 24000 + }, + "start_s": 24.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "metadata-no-answer", + "expected": [], + "id": "q065", + "language": "en", + "metadata": { + "artist": "Adele" + }, + "text": "Adele" + }, + "query_ms": 52.9589, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 74.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 248000 + }, + "start_s": 248.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + } + ], + "scope": "Actual Searchi hybrid pipeline and native extension filters; temporal-range filter unsupported; segment ends inferred from configured audio/frame policy, exact point timestamps come from actual result API", + "worker": { + "device": "cpu", + "dimensions": 768, + "media_supported": true, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + } +} \ No newline at end of file diff --git a/fixtures/media/pipeline-10s-summary.json b/fixtures/media/pipeline-10s-summary.json new file mode 100644 index 0000000..4a8859a --- /dev/null +++ b/fixtures/media/pipeline-10s-summary.json @@ -0,0 +1,561 @@ +{ + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "worker": { + "device": "cpu", + "dimensions": 768, + "media_supported": true, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + }, + "overall": { + "positive_queries": 58, + "unsupported_queries": 1, + "recall_at1": 0.9655172413793104, + "recall_at5": 1.0, + "mrr": 0.9827586206896551, + "temporal_queries": 22, + "segment_overlap_hit_at1": 0.8181818181818182, + "timestamp_point_hit_at1": 0.5909090909090909, + "segment_overlap_hit_at5": 0.8181818181818182, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 3.777000000000001, + "no_answer_queries": 6, + "no_answer_return_rate": 1.0 + }, + "by_category": { + "content-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "exact-filter": { + "positive_queries": 1, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "exact-metadata": { + "positive_queries": 3, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "filter-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 1.0 + }, + "image-memory": { + "positive_queries": 24, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "metadata-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 1.0 + }, + "music-memory": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 0.5, + "recall_at5": 1.0, + "mrr": 0.75, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "sound-memory": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "speech-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "temporal-negative": { + "positive_queries": 0, + "unsupported_queries": 1, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-action": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 4, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 1.0, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 0, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-scene": { + "positive_queries": 6, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 6, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 1.0, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 0, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-speech": { + "positive_queries": 8, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 8, + "segment_overlap_hit_at1": 0.75, + "timestamp_point_hit_at1": 0.125, + "segment_overlap_hit_at5": 0.75, + "timestamp_distance_median_s": 1.551, + "timestamp_distance_max_s": 3.777000000000001, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-temporal": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 4, + "segment_overlap_hit_at1": 0.5, + "timestamp_point_hit_at1": 0.5, + "segment_overlap_hit_at5": 0.5, + "timestamp_distance_median_s": 1.005, + "timestamp_distance_max_s": 1.005, + "no_answer_queries": 0, + "no_answer_return_rate": null + } + }, + "by_language": { + "de": { + "positive_queries": 27, + "unsupported_queries": 0, + "recall_at1": 0.9629629629629629, + "recall_at5": 1.0, + "mrr": 0.9814814814814815, + "temporal_queries": 11, + "segment_overlap_hit_at1": 0.8181818181818182, + "timestamp_point_hit_at1": 0.6363636363636364, + "segment_overlap_hit_at5": 0.8181818181818182, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 1.551, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "en": { + "positive_queries": 31, + "unsupported_queries": 1, + "recall_at1": 0.967741935483871, + "recall_at5": 1.0, + "mrr": 0.9838709677419355, + "temporal_queries": 11, + "segment_overlap_hit_at1": 0.8181818181818182, + "timestamp_point_hit_at1": 0.5454545454545454, + "segment_overlap_hit_at5": 0.8181818181818182, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 3.777000000000001, + "no_answer_queries": 4, + "no_answer_return_rate": 1.0 + } + }, + "encoding_failures": [], + "encoding_ms": 671510.0948000001, + "query_p50_ms": 90.6467, + "query_p95_ms": 110.4152, + "failures": [ + { + "query": "q029", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "expected_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "timestamp_distance_s": 1.005 + }, + { + "query": "q030", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "expected_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "timestamp_distance_s": 1.005 + }, + { + "query": "q039", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "expected_intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "timestamp_distance_s": 1.551 + }, + { + "query": "q040", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "expected_intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "timestamp_distance_s": 1.551 + }, + { + "query": "q041", + "category": "wrong-media-channel", + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "expected_intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "timestamp_distance_s": null + }, + { + "query": "q042", + "category": "wrong-media-channel", + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "expected_intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "timestamp_distance_s": null + }, + { + "query": "q043", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 50.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 40000 + }, + "start_s": 40.0 + }, + "expected_intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "timestamp_distance_s": 3.777000000000001 + }, + { + "query": "q045", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 66.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "expected_intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "timestamp_distance_s": 0.5390000000000015 + }, + { + "query": "q046", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 66.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "expected_intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "timestamp_distance_s": 0.5390000000000015 + }, + { + "query": "q049", + "category": "hard-negative-confusion", + "winner": "music01", + "expected": [ + "music02" + ] + }, + { + "query": "q050", + "category": "hard-negative-confusion", + "winner": "music01", + "expected": [ + "music02" + ] + }, + { + "query": "q059", + "category": "unsupported-query-capability", + "detail": "Production query API has no temporal-range filter yet" + }, + { + "query": "q060", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.01639344262295082 + }, + { + "query": "q061", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.01639344262295082 + }, + { + "query": "q062", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.01639344262295082 + }, + { + "query": "q063", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.01639344262295082 + }, + { + "query": "q064", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.01639344262295082 + }, + { + "query": "q065", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.01639344262295082 + } + ], + "source_scope": "Actual Searchi hybrid pipeline and native extension filters; temporal-range filter unsupported; segment ends inferred from configured audio/frame policy, exact point timestamps come from actual result API", + "interpretation": "Small independently labelled public-media diagnostic; source_scope identifies the measured lane. No-answer return rate measures unsuppressed output, not a calibrated confidence policy. Audio interval overlap can pass while the returned start timestamp is too early; point hits expose this. This corpus alone cannot certify production quality." +} \ No newline at end of file diff --git a/fixtures/media/pipeline-30s-results.json b/fixtures/media/pipeline-30s-results.json new file mode 100644 index 0000000..bccaec5 --- /dev/null +++ b/fixtures/media/pipeline-30s-results.json @@ -0,0 +1,22531 @@ +{ + "audio_overlap_ms": 2000, + "audio_window_ms": 30000, + "encoding_failures": [], + "encoding_ms": 668040.7295, + "filename_index": { + "discovered": 20, + "failures": 0, + "indexed": 20, + "removed": 0, + "skipped": 20, + "unchanged": 0 + }, + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "index_report": { + "chunks": 118, + "failures": [], + "generation": 1, + "media_failures": 0, + "media_files": 20, + "model_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mean:l2:query512:doc2048:windows-overlap128:prompts-v1:byte64k-overlap512-title512-v1:google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mtmd:mean:l2:rgb-catmullrom48-exif-largejpeg-scaled-v2:pcm16k30s-v1:image280-frame70-audio30s-overlap2-distributed240-scene120-v1", + "passages": 0 + }, + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q001", + "language": "en", + "text": "the fluffy striped cat resting with its chin on the floor" + }, + "query_ms": 109.8749, + "segment_top5": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q002", + "language": "de", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden" + }, + "query_ms": 136.0038, + "segment_top5": [ + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q003", + "language": "en", + "text": "the overhead breakfast bowl with berries and diced mango" + }, + "query_ms": 88.7555, + "segment_top5": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q004", + "language": "de", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben" + }, + "query_ms": 128.9194, + "segment_top5": [ + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q005", + "language": "en", + "text": "the daytime lake reflecting jagged mountains and pine trees" + }, + "query_ms": 95.7296, + "segment_top5": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q006", + "language": "de", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen" + }, + "query_ms": 135.1307, + "segment_top5": [ + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q007", + "language": "en", + "text": "the Milky Way over a dark mountain valley" + }, + "query_ms": 90.6585, + "segment_top5": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q008", + "language": "de", + "text": "die Milchstraße über einem dunklen Bergtal" + }, + "query_ms": 95.8349, + "segment_top5": [ + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q009", + "language": "en", + "text": "the wooden jetty pointing into a lake under moonlight" + }, + "query_ms": 85.13510000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q010", + "language": "de", + "text": "der Holzsteg führt bei Mondlicht in einen See" + }, + "query_ms": 94.0146, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 13320 + }, + "start_s": 13.32 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q011", + "language": "en", + "text": "the pink layered mountain ridges beneath a golden sunset" + }, + "query_ms": 94.0352, + "segment_top5": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 70000 + }, + "start_s": 70.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q012", + "language": "de", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang" + }, + "query_ms": 104.7002, + "segment_top5": [ + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 70000 + }, + "start_s": 70.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q013", + "language": "en", + "text": "the herd of cows on green hills" + }, + "query_ms": 81.0611, + "segment_top5": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q014", + "language": "de", + "text": "die Kuhherde auf grünen Hügeln" + }, + "query_ms": 96.6185, + "segment_top5": [ + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q015", + "language": "en", + "text": "the red sports car driving through woods" + }, + "query_ms": 81.1964, + "segment_top5": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q016", + "language": "de", + "text": "das rote Sportauto fährt durch den Wald" + }, + "query_ms": 88.3808, + "segment_top5": [ + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q017", + "language": "en", + "text": "the vegetable and grain bowl beside carrot slices" + }, + "query_ms": 92.0321, + "segment_top5": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q018", + "language": "de", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben" + }, + "query_ms": 113.3751, + "segment_top5": [ + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q019", + "language": "en", + "text": "milk being poured into coffee to make a pattern" + }, + "query_ms": 85.1486, + "segment_top5": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q020", + "language": "de", + "text": "Milch wird für ein Muster in den Kaffee gegossen" + }, + "query_ms": 98.1881, + "segment_top5": [ + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 20000 + }, + "start_s": 20.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q021", + "language": "en", + "text": "the empty tropical beach with turquoise water" + }, + "query_ms": 84.1069, + "segment_top5": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 20000 + }, + "start_s": 20.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2.003, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 3 + }, + "start_s": 0.003 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q022", + "language": "de", + "text": "der leere tropische Strand mit türkisfarbenem Wasser" + }, + "query_ms": 106.7635, + "segment_top5": [ + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q023", + "language": "en", + "text": "the black and white photo with a hand reaching towards us" + }, + "query_ms": 98.2566, + "segment_top5": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10.333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8333 + }, + "start_s": 8.333 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q024", + "language": "de", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift" + }, + "query_ms": 107.79220000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10.333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8333 + }, + "start_s": 8.333 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "hard_negatives": [ + "image01" + ], + "id": "q025", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "text": "the cat jumping up beside a door handle" + }, + "query_ms": 84.4753, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "hard_negatives": [ + "image01" + ], + "id": "q026", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "text": "die Katze springt neben dem Türgriff hoch" + }, + "query_ms": 93.10740000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "id": "q027", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "text": "the cat sitting low by the door after trying to open it" + }, + "query_ms": 100.0136, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "id": "q028", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "text": "die Katze sitzt nach dem Öffnungsversuch unten an der Tür" + }, + "query_ms": 110.5304, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q029", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "text": "the red flower bud before its petals open" + }, + "query_ms": 83.3329, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q030", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "text": "die rote Blütenknospe bevor sich die Blätter öffnen" + }, + "query_ms": 100.50710000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2000 + }, + "start_s": 2.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q031", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "text": "the red flower with its petals open wide" + }, + "query_ms": 87.1527, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q032", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "text": "die rote Blume mit weit geöffneten Blütenblättern" + }, + "query_ms": 95.01389999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.2, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6200 + }, + "start_s": 6.2 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip02" + ], + "hard_negatives": [ + "image03", + "image05", + "image11" + ], + "id": "q033", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "language": "en", + "text": "the tall waterfall on a foggy rocky mountain" + }, + "query_ms": 84.8113, + "segment_top5": [ + { + "candidate": { + "asset": "clip02", + "end_s": 10.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 8000 + }, + "start_s": 8.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.2, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6200 + }, + "start_s": 6.2 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip02" + ], + "hard_negatives": [ + "image03", + "image05", + "image11" + ], + "id": "q034", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "language": "de", + "text": "der hohe Wasserfall an einem nebligen felsigen Berg" + }, + "query_ms": 99.2324, + "segment_top5": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q035", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + }, + "language": "en", + "text": "the astronaut standing on the Moon next to landing equipment" + }, + "query_ms": 99.6837, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q036", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + }, + "language": "de", + "text": "der Astronaut auf dem Mond neben der Landeausrüstung" + }, + "query_ms": 94.1076, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 14000 + }, + "start_s": 14.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q037", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + }, + "language": "en", + "text": "the lunar rover driving over grey Moon terrain" + }, + "query_ms": 85.79090000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q038", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + }, + "language": "de", + "text": "der Mondrover fährt über graues Mondgelände" + }, + "query_ms": 92.85889999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 26000 + }, + "start_s": 26.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q039", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone saying that we choose to go to the Moon" + }, + "query_ms": 89.29910000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 18.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16000 + }, + "start_s": 16.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q040", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand sagt, dass wir uns entscheiden, zum Mond zu fliegen" + }, + "query_ms": 102.4898, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q041", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone finding orange soil on the Moon" + }, + "query_ms": 77.2794, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q042", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand findet orangefarbenen Boden auf dem Mond" + }, + "query_ms": 92.2329, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4574 + }, + "start_s": 4.574 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 10000 + }, + "start_s": 10.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 28000 + }, + "start_s": 28.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q043", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a request to fund the Artemis program for the first woman on the Moon" + }, + "query_ms": 110.7192, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 28000 + }, + "start_s": 28.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 28000 + }, + "start_s": 28.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q044", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "eine Bitte um Finanzierung von Artemis für die erste Frau auf dem Mond" + }, + "query_ms": 110.7928, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 28000 + }, + "start_s": 28.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q045", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone talking about planting a flag on Mars" + }, + "query_ms": 85.319, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q046", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand spricht davon, eine Flagge auf dem Mars aufzustellen" + }, + "query_ms": 100.7173, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 114.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 84000 + }, + "start_s": 84.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 20000 + }, + "start_s": 20.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music01" + ], + "hard_negatives": [ + "music02" + ], + "id": "q047", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "gentle solo piano music without anyone singing" + }, + "query_ms": 84.7708, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 114.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 84000 + }, + "start_s": 84.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 20000 + }, + "start_s": 20.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 170.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 140000 + }, + "start_s": 140.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music01" + ], + "hard_negatives": [ + "music02" + ], + "id": "q048", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "sanfte Klaviermusik ohne Gesang" + }, + "query_ms": 95.6486, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 170.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 140000 + }, + "start_s": 140.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music02" + ], + "hard_negatives": [ + "music01" + ], + "id": "q049", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a jazzy violin melody" + }, + "query_ms": 76.0271, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music02" + ], + "hard_negatives": [ + "music01" + ], + "id": "q050", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "eine jazzige Geigenmelodie" + }, + "query_ms": 82.891, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound01" + ], + "hard_negatives": [ + "sound02" + ], + "id": "q051", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a dog barking nearby" + }, + "query_ms": 68.28399999999999, + "segment_top5": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 79000 + }, + "start_s": 79.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound01" + ], + "hard_negatives": [ + "sound02" + ], + "id": "q052", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "ein Hund bellt in der Nähe" + }, + "query_ms": 79.4277, + "segment_top5": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 50000 + }, + "start_s": 50.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound02" + ], + "hard_negatives": [ + "sound01" + ], + "id": "q053", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a growling roaring creature sound effect" + }, + "query_ms": 84.5773, + "segment_top5": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 50000 + }, + "start_s": 50.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "music01", + "end_s": 170.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 140000 + }, + "start_s": 140.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound02" + ], + "hard_negatives": [ + "sound01" + ], + "id": "q054", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "ein knurrender brüllender Kreatur-Soundeffekt" + }, + "query_ms": 104.45880000000001, + "segment_top5": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.031544957774465976 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18000 + }, + "start_s": 18.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music01" + ], + "id": "q055", + "language": "en", + "metadata": { + "artist": "Kimiko Ishizaka" + }, + "text": "Kimiko Ishizaka" + }, + "query_ms": 69.65549999999999, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.031544957774465976 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18000 + }, + "start_s": 18.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03252247488101534 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q056", + "language": "en", + "metadata": { + "title": "Jazz Violin Solo" + }, + "text": "Jazz Violin Solo" + }, + "query_ms": 64.1071, + "segment_top5": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03252247488101534 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03278688524590164 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q057", + "language": "en", + "metadata": { + "artist": "Violinist WTD" + }, + "text": "Violinist WTD" + }, + "query_ms": 67.986, + "segment_top5": [ + { + "candidate": { + "asset": "music02", + "match_kind": "media_metadata", + "modality": "metadata", + "source": null + }, + "score": 0.03278688524590164 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + } + ], + "query": { + "category": "exact-filter", + "expected": [ + "image05" + ], + "filters": { + "extension": "jpg" + }, + "id": "q058", + "language": "en", + "text": "wooden pier under the moon" + }, + "query_ms": 70.12480000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015384615384615385 + } + ] + }, + { + "query": { + "category": "temporal-negative", + "expected": [], + "filters": { + "asset": "clip01", + "time_range_s": [ + 7, + 14 + ] + }, + "id": "q059", + "language": "en", + "required_modality": "image", + "text": "the cat jumping beside the handle" + }, + "unsupported": "Production query API has no temporal-range filter yet" + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + } + ], + "query": { + "category": "filter-no-answer", + "expected": [], + "filters": { + "extension": "ogg" + }, + "id": "q060", + "language": "en", + "required_modality": "audio", + "text": "someone mentioning Mars" + }, + "query_ms": 60.6505, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.016129032258064516 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "content-no-answer", + "expected": [], + "id": "q061", + "language": "en", + "split": "held-out-no-answer", + "text": "a purple elephant playing a violin on the beach" + }, + "query_ms": 86.73219999999999, + "segment_top5": [ + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 31.233, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 29233 + }, + "start_s": 29.233 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4007 + }, + "start_s": 4.007 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "content-no-answer", + "expected": [], + "id": "q062", + "language": "de", + "split": "held-out-no-answer", + "text": "ein violetter Elefant spielt Geige am Strand" + }, + "query_ms": 102.3627, + "segment_top5": [ + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 224000 + }, + "start_s": 224.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 20.3, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 18300 + }, + "start_s": 18.3 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 18.367, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16367 + }, + "start_s": 16.367 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "speech-no-answer", + "expected": [], + "id": "q063", + "language": "en", + "required_modality": "audio", + "split": "held-out-no-answer", + "text": "someone explains quantum entanglement" + }, + "query_ms": 70.4986, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 18.367, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 16367 + }, + "start_s": 16.367 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "speech-no-answer", + "expected": [], + "id": "q064", + "language": "de", + "required_modality": "audio", + "split": "held-out-no-answer", + "text": "jemand erklärt Quantenverschränkung" + }, + "query_ms": 80.3281, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 8.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 6000 + }, + "start_s": 6.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 21733 + }, + "start_s": 21.733 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.81, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 74.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.015151515151515152 + }, + { + "candidate": { + "asset": "image12", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014925373134328358 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 4000 + }, + "start_s": 4.0 + }, + "score": 0.014705882352941176 + }, + { + "candidate": { + "asset": "image11", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014492753623188406 + }, + { + "candidate": { + "asset": "image05", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014285714285714285 + }, + { + "candidate": { + "asset": "image06", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.014084507042253521 + }, + { + "candidate": { + "asset": "image01", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013888888888888888 + }, + { + "candidate": { + "asset": "music02", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.0136986301369863 + }, + { + "candidate": { + "asset": "image10", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013513513513513514 + }, + { + "candidate": { + "asset": "image02", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013333333333333334 + }, + { + "candidate": { + "asset": "image04", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.013157894736842105 + }, + { + "candidate": { + "asset": "image03", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012987012987012988 + }, + { + "candidate": { + "asset": "image08", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.01282051282051282 + }, + { + "candidate": { + "asset": "image09", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.012658227848101266 + }, + { + "candidate": { + "asset": "image07", + "match_kind": "semantic_image", + "modality": "image", + "source": { + "kind": "image", + "number": 0 + } + }, + "score": 0.0125 + } + ], + "query": { + "category": "metadata-no-answer", + "expected": [], + "id": "q065", + "language": "en", + "metadata": { + "artist": "Adele" + }, + "text": "Adele" + }, + "query_ms": 57.804300000000005, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 74.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 72000 + }, + "start_s": 72.0 + }, + "score": 0.01639344262295082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 252000 + }, + "start_s": 252.0 + }, + "score": 0.016129032258064516 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.056, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015873015873015872 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015625 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "score": 0.015384615384615385 + } + ] + } + ], + "scope": "Actual Searchi hybrid pipeline and native extension filters; temporal-range filter unsupported; segment ends inferred from configured audio/frame policy, exact point timestamps come from actual result API", + "worker": { + "device": "cpu", + "dimensions": 768, + "media_supported": true, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + } +} \ No newline at end of file diff --git a/fixtures/media/pipeline-30s-summary.json b/fixtures/media/pipeline-30s-summary.json new file mode 100644 index 0000000..a443aed --- /dev/null +++ b/fixtures/media/pipeline-30s-summary.json @@ -0,0 +1,586 @@ +{ + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "worker": { + "device": "cpu", + "dimensions": 768, + "media_supported": true, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + }, + "overall": { + "positive_queries": 58, + "unsupported_queries": 1, + "recall_at1": 0.9655172413793104, + "recall_at5": 1.0, + "mrr": 0.9827586206896551, + "temporal_queries": 22, + "segment_overlap_hit_at1": 0.8181818181818182, + "timestamp_point_hit_at1": 0.5454545454545454, + "segment_overlap_hit_at5": 0.8181818181818182, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 15.777000000000001, + "no_answer_queries": 6, + "no_answer_return_rate": 1.0 + }, + "by_category": { + "content-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "exact-filter": { + "positive_queries": 1, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "exact-metadata": { + "positive_queries": 3, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "filter-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 1.0 + }, + "image-memory": { + "positive_queries": 24, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "metadata-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 1.0 + }, + "music-memory": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 0.5, + "recall_at5": 1.0, + "mrr": 0.75, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "sound-memory": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "speech-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "temporal-negative": { + "positive_queries": 0, + "unsupported_queries": 1, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-action": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 4, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 1.0, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 0, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-scene": { + "positive_queries": 6, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 6, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 1.0, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 0, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-speech": { + "positive_queries": 8, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 8, + "segment_overlap_hit_at1": 0.75, + "timestamp_point_hit_at1": 0.0, + "segment_overlap_hit_at5": 0.75, + "timestamp_distance_median_s": 1.551, + "timestamp_distance_max_s": 15.777000000000001, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-temporal": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 4, + "segment_overlap_hit_at1": 0.5, + "timestamp_point_hit_at1": 0.5, + "segment_overlap_hit_at5": 0.5, + "timestamp_distance_median_s": 1.005, + "timestamp_distance_max_s": 1.005, + "no_answer_queries": 0, + "no_answer_return_rate": null + } + }, + "by_language": { + "de": { + "positive_queries": 27, + "unsupported_queries": 0, + "recall_at1": 0.9629629629629629, + "recall_at5": 1.0, + "mrr": 0.9814814814814815, + "temporal_queries": 11, + "segment_overlap_hit_at1": 0.8181818181818182, + "timestamp_point_hit_at1": 0.5454545454545454, + "segment_overlap_hit_at5": 0.8181818181818182, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 15.777000000000001, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "en": { + "positive_queries": 31, + "unsupported_queries": 1, + "recall_at1": 0.967741935483871, + "recall_at5": 1.0, + "mrr": 0.9838709677419355, + "temporal_queries": 11, + "segment_overlap_hit_at1": 0.8181818181818182, + "timestamp_point_hit_at1": 0.5454545454545454, + "segment_overlap_hit_at5": 0.8181818181818182, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 15.777000000000001, + "no_answer_queries": 4, + "no_answer_return_rate": 1.0 + } + }, + "encoding_failures": [], + "encoding_ms": 668040.7295, + "query_p50_ms": 92.2329, + "query_p95_ms": 113.3751, + "failures": [ + { + "query": "q029", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "expected_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "timestamp_distance_s": 1.005 + }, + { + "query": "q030", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip03", + "end_s": 4.005, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 2005 + }, + "start_s": 2.005 + }, + "expected_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "timestamp_distance_s": 1.005 + }, + { + "query": "q039", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "expected_intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "timestamp_distance_s": 1.551 + }, + { + "query": "q040", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 30.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 0 + }, + "start_s": 0.0 + }, + "expected_intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "timestamp_distance_s": 1.551 + }, + { + "query": "q041", + "category": "wrong-media-channel", + "candidate": { + "asset": "clip04", + "end_s": 26.167, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 24167 + }, + "start_s": 24.167 + }, + "expected_intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "timestamp_distance_s": null + }, + { + "query": "q042", + "category": "wrong-media-channel", + "candidate": { + "asset": "clip04", + "end_s": 14.467, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_video", + "modality": "image", + "source": { + "kind": "timestamp_ms", + "number": 12467 + }, + "start_s": 12.467 + }, + "expected_intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "timestamp_distance_s": null + }, + { + "query": "q043", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 28000 + }, + "start_s": 28.0 + }, + "expected_intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "timestamp_distance_s": 15.777000000000001 + }, + { + "query": "q044", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 58.0, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 28000 + }, + "start_s": 28.0 + }, + "expected_intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "timestamp_distance_s": 15.777000000000001 + }, + { + "query": "q045", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "expected_intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "timestamp_distance_s": 0.5390000000000015 + }, + { + "query": "q046", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 80.63, + "interval_note": "End inferred from configured pipeline window policy, actual API exposes only start timestamp", + "match_kind": "semantic_audio", + "modality": "audio", + "source": { + "kind": "timestamp_ms", + "number": 56000 + }, + "start_s": 56.0 + }, + "expected_intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "timestamp_distance_s": 0.5390000000000015 + }, + { + "query": "q049", + "category": "hard-negative-confusion", + "winner": "music01", + "expected": [ + "music02" + ] + }, + { + "query": "q050", + "category": "hard-negative-confusion", + "winner": "music01", + "expected": [ + "music02" + ] + }, + { + "query": "q059", + "category": "unsupported-query-capability", + "detail": "Production query API has no temporal-range filter yet" + }, + { + "query": "q060", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.01639344262295082 + }, + { + "query": "q061", + "category": "no-answer-nearest-neighbor-return", + "winner": "music02", + "score": 0.01639344262295082 + }, + { + "query": "q062", + "category": "no-answer-nearest-neighbor-return", + "winner": "music02", + "score": 0.01639344262295082 + }, + { + "query": "q063", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.01639344262295082 + }, + { + "query": "q064", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.01639344262295082 + }, + { + "query": "q065", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.01639344262295082 + } + ], + "source_scope": "Actual Searchi hybrid pipeline and native extension filters; temporal-range filter unsupported; segment ends inferred from configured audio/frame policy, exact point timestamps come from actual result API", + "interpretation": "Small independently labelled public-media diagnostic; source_scope identifies the measured lane. No-answer return rate measures unsuppressed output, not a calibrated confidence policy. Audio interval overlap can pass while the returned start timestamp is too early; point hits expose this. This corpus alone cannot certify production quality." +} \ No newline at end of file diff --git a/fixtures/media/reference-results.json b/fixtures/media/reference-results.json new file mode 100644 index 0000000..592f4cd --- /dev/null +++ b/fixtures/media/reference-results.json @@ -0,0 +1,13214 @@ +{ + "encoded_candidates": 94, + "encoding_failures": [ + { + "candidate": { + "asset": "music02", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music02-audio-0000.f32", + "start_s": 0 + }, + "error": "Invalid normalized audio PCM" + } + ], + "encoding_ms": 498657.0532, + "ffmpeg_version": "ffmpeg version n9.0.2-27-g7e93014c5b-20261012 Copyright (c) 2000-2026 the FFmpeg developers", + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "media_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mtmd:mean:l2:rgb-catmullrom48-exif-v1:pcm16k30s-v1", + "policy": "CPU-only dense reference: photos140/video70 tokens, uniform2s frames, mono16kHz30s PCM", + "rows": [ + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.7605359503359338 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6914505121505314 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6000387802540742 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5889540372277283 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5853506294953249 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5846282085610464 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5770316090917846 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5717746231614078 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5676677186648548 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5667273447572145 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5622206752488643 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5572614705336363 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5534843663389245 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5478536620764847 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5430061932156839 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5414059121332547 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5258840533370677 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.520651041403068 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5196109603442204 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q001", + "language": "en", + "text": "the fluffy striped cat resting with its chin on the floor" + }, + "query_ms": 100.41550000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.7605359503359338 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6914505121505314 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.6789371017993904 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.678510041166231 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6715407914870211 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.7538178681038181 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.69804800410274 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6013399852487912 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0028.png", + "start_s": 28, + "token_budget": 70 + }, + "score": 0.5984185938528922 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5914559316103537 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5849889969753721 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5750327428038695 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5686807717689468 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5678729684414582 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5589938689182454 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5588009608882132 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5529075328279189 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5473785838506949 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5453401908375792 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5404958035975614 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5379461303870298 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5376897070804415 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5288401029040793 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5257209324190626 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image01" + ], + "hard_negatives": [], + "id": "q002", + "language": "de", + "text": "die flauschige gestreifte Katze liegt mit dem Kinn auf dem Boden" + }, + "query_ms": 123.0806, + "segment_top5": [ + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.7538178681038181 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.69804800410274 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.6789887269408267 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6774924025407137 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.6773204930362628 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.7710175412850216 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.6521436918722262 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5905091663902722 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.5817631247721886 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5682172363361773 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.5654573985427374 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5653718911075017 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5516977645676859 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5505899802059024 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5483510514720404 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5438752858096004 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.5362931282258405 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5320239005879146 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5287120777972925 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.528321413927002 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5268273096818564 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5245916223587813 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5160887929265482 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.4888020986558745 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q003", + "language": "en", + "text": "the overhead breakfast bowl with berries and diced mango" + }, + "query_ms": 88.92129999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.7710175412850216 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.6521436918722262 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5905091663902722 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.5817631247721886 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5682172363361773 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.7646888268838336 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.6642131351342615 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5820369146589849 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5797016636865081 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5775105413118079 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5681942495122166 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.5672443396587598 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5566421187014141 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5490435139878538 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5401434633303833 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5394513485050191 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5365413094542697 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5316774714796875 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5310516297249549 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5209947523452725 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5159896133244459 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5104831061820707 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5089913379296395 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5061419714076223 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image02" + ], + "hard_negatives": [ + "image09" + ], + "id": "q004", + "language": "de", + "text": "die Frühstücksschüssel mit Beeren und gewürfelter Mango von oben" + }, + "query_ms": 110.2448, + "segment_top5": [ + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.7646888268838336 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.6642131351342615 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5820369146589849 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5797016636865081 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5775105413118079 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.7623427116407293 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.662308602947514 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6162847488349679 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.5874379882289735 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.577852569606612 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.568542378464749 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5634508230026439 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5598584444976623 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5580280754872706 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.557083671292452 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.555025223068175 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5504920813783238 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.544900995756961 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5412193704701055 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5300953352998771 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5298202695243861 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5170153775044287 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5156540558439123 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5111623378757838 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q005", + "language": "en", + "text": "the daytime lake reflecting jagged mountains and pine trees" + }, + "query_ms": 84.63329999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.7623427116407293 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.662308602947514 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6162847488349679 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.5874379882289735 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 54, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0052.png", + "start_s": 52, + "token_budget": 70 + }, + "score": 0.5855570485611895 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.7312939484895192 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6816896220922278 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6476898183277994 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6040720487822666 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5972045508032645 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5905020599489719 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5883189500625805 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5850236380336026 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5782935524375052 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5708382794085048 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5698096029205947 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5691332345470477 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.563791524924817 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5607598759674971 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5482028758159473 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5471911861877021 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5468701186487881 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5409127013908636 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5260452108877355 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image03" + ], + "hard_negatives": [ + "image05", + "image06", + "image04" + ], + "id": "q006", + "language": "de", + "text": "der See bei Tageslicht spiegelt schroffe Berge und Tannen" + }, + "query_ms": 116.33449999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.7312939484895192 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6816896220922278 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6476898183277994 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6040720487822666 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 54, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0052.png", + "start_s": 52, + "token_budget": 70 + }, + "score": 0.5996947895568899 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.7659434126183756 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.6724800526168597 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6448157756012068 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6447662116672633 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.643200057913194 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.608026017718674 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5946716647150256 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5796246139648342 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5790578110221776 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5784632590201206 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5680754854712253 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5666899905071829 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5545443481022638 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5500482396907467 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5381186335689101 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5342299756573953 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.528257210033174 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.520467464042619 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5027787911820522 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q007", + "language": "en", + "text": "the Milky Way over a dark mountain valley" + }, + "query_ms": 93.8635, + "segment_top5": [ + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.7659434126183756 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.6724800526168597 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 54, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0052.png", + "start_s": 52, + "token_budget": 70 + }, + "score": 0.6584435112559999 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6448157756012068 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6447662116672633 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.7294690661399345 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6481890680605977 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.6470762415924175 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6404969457687976 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.6355914068024985 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.6193054783708699 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.6093061640452591 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5909373448233727 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5845295829814098 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5812366662782759 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5808502105698604 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5793494128612385 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5757367862966845 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5581669711666448 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5579510975330657 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5550743738673231 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5394377975565356 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5234831107731919 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5115406870813693 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image04" + ], + "hard_negatives": [], + "id": "q008", + "language": "de", + "text": "die Milchstraße über einem dunklen Bergtal" + }, + "query_ms": 103.2938, + "segment_top5": [ + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.7294690661399345 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6481890680605977 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.6470762415924175 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6463551093149028 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 24, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0022.png", + "start_s": 22, + "token_budget": 70 + }, + "score": 0.6413343566987572 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.7970170315137438 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6934501407052766 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.6155480211441525 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5946623823370214 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5873079934235054 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5870007650262278 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5841385486524419 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5759761643151797 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5740744640029244 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5666077575092291 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5653532106832271 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5639509981071652 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5518589069506202 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5376796572946845 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5346342229441399 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5339338125667231 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5206771161423475 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5156778544177256 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5099641453648242 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q009", + "language": "en", + "text": "the wooden jetty pointing into a lake under moonlight" + }, + "query_ms": 85.8763, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.7970170315137438 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6934501407052766 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6655504340237832 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0020.png", + "start_s": 20, + "token_budget": 70 + }, + "score": 0.6596047098658663 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 32, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0030.png", + "start_s": 30, + "token_budget": 70 + }, + "score": 0.656462720695168 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.7827500380934167 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6735420812340918 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.597809032917086 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5949681684341337 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5904214965643945 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.586523415559574 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5863660679156335 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5749590128189616 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5732433499999233 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5723556502803566 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5679319852894922 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.563716619887232 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5608562458538598 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5540192414583017 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5380415013173168 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5349937146665519 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5233427417792843 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5231473716132861 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.49923030400340157 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image05" + ], + "hard_negatives": [ + "image03", + "image04" + ], + "id": "q010", + "language": "de", + "text": "der Holzsteg führt bei Mondlicht in einen See" + }, + "query_ms": 92.19149999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.7827500380934167 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6735420812340918 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6673059742228902 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0020.png", + "start_s": 20, + "token_budget": 70 + }, + "score": 0.6418064129770683 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 32, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0030.png", + "start_s": 30, + "token_budget": 70 + }, + "score": 0.6410052587384467 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.7512131534996584 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.6486657759586316 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.6348770720382572 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.6281343771545465 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0070.png", + "start_s": 70, + "token_budget": 70 + }, + "score": 0.626019735935585 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.6096692898441701 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5864393326370361 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5820512302482764 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5810585130050232 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5748439072330372 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.56346679972584 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5551742030167436 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5548062909541942 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.552213900622373 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5445520201324443 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5413155151522175 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5287221325476256 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5250168791614722 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5199512464979191 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q011", + "language": "en", + "text": "the pink layered mountain ridges beneath a golden sunset" + }, + "query_ms": 105.6844, + "segment_top5": [ + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.7512131534996584 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.6486657759586316 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.6348770720382572 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.6281343771545465 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0070.png", + "start_s": 70, + "token_budget": 70 + }, + "score": 0.626019735935585 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6981611524588893 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6155209526759775 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.6127812280598484 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0070.png", + "start_s": 70, + "token_budget": 70 + }, + "score": 0.6124380916884556 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.608883185907273 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.6010836128030387 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5977913445502891 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5757227335935441 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5698829451856418 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5600958297227832 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5572593511126489 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5516895148030765 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5405214242906503 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5380377581657529 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5353283352574021 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5307616253276131 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5206674851884772 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.519987978551167 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5170632141239293 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image06" + ], + "hard_negatives": [], + "id": "q012", + "language": "de", + "text": "die rosa Bergketten unter einem goldenen Sonnenuntergang" + }, + "query_ms": 104.8112, + "segment_top5": [ + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6981611524588893 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6155209526759775 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.6127812280598484 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 72, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0070.png", + "start_s": 70, + "token_budget": 70 + }, + "score": 0.6124380916884556 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.6122760765485127 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.7757859392974206 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6228945591022108 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6043572845042384 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0028.png", + "start_s": 28, + "token_budget": 70 + }, + "score": 0.6039807868814072 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6020198677710826 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.6016512799731691 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6010915634355666 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5928791538996492 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5918008472919005 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5883476117905893 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5819567167237422 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5654036113552369 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5589087528595522 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5577066444072452 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5547843062399807 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5410691831540949 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5397125000216967 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5375160432750782 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5199034842772098 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q013", + "language": "en", + "text": "the herd of cows on green hills" + }, + "query_ms": 89.8277, + "segment_top5": [ + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.7757859392974206 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6228945591022108 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6150573091585259 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.6127596230472312 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6117392177238157 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.7337808730379708 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.6098832281172125 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6087768493043573 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6064193115854893 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.6051650096366163 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.6015317137871635 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6002932712143123 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5953743311339383 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.587916835335103 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5814273201756002 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5798748669060851 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5759061633991269 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.569796351321886 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5676235746365604 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5565244005060244 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5525020337175139 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.547579034611052 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5413372157257581 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5403400599194903 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image07" + ], + "hard_negatives": [], + "id": "q014", + "language": "de", + "text": "die Kuhherde auf grünen Hügeln" + }, + "query_ms": 104.98530000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.7337808730379708 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.6098832281172125 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6087768493043573 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6076446304368619 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6064193115854893 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.7875535186056878 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.6123625859270059 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6072730834327322 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.598800980325568 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.5858056580775085 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5823790454611385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5690041761514885 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5560115576869118 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.543242189417099 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5417282835745795 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5322742976268053 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5305508796573636 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.526616678879168 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5258744485062927 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5163990704683173 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5099272055160293 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5098962283743337 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5093378981152649 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.4888913179094456 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q015", + "language": "en", + "text": "the red sports car driving through woods" + }, + "query_ms": 79.72500000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.7875535186056878 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.6123625859270059 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6072730834327322 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.598800980325568 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.5858056580775085 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.7524549451728172 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6025128285567696 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.5936519882329168 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.585671870283156 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.58290746229507 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5788896966110199 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5777181788500513 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5483180765724983 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5437845888390087 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5346804668753455 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5334423730461748 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5252020242940121 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5211766804792308 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5152098683314263 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5151581363428384 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5068872270430337 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5051501003327342 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5023263521787877 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.4836675734538172 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image08" + ], + "hard_negatives": [], + "id": "q016", + "language": "de", + "text": "das rote Sportauto fährt durch den Wald" + }, + "query_ms": 86.4501, + "segment_top5": [ + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.7524549451728172 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6025128285567696 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.5936519882329168 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.585671870283156 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.58290746229507 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.7452674151288965 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.675342057464735 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6231663550369362 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6071897060698033 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 64, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0062.png", + "start_s": 62, + "token_budget": 70 + }, + "score": 0.6005626697197612 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5847378245584056 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5737181379864414 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5691538620183914 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5686501629750731 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5684112683137412 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5650964574131633 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5639461496567214 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5583654721933015 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5539298268647617 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5536456724192732 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5436065495803032 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5419765610928058 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5418370736586263 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5306785798522258 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q017", + "language": "en", + "text": "the vegetable and grain bowl beside carrot slices" + }, + "query_ms": 88.1209, + "segment_top5": [ + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.7452674151288965 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.675342057464735 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6231663550369362 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6114371240779568 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6071897060698033 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.7152215360838582 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.6574158740020666 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6104815171065472 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6035518244746396 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.5979011830154392 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5851853481662831 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.582893618305908 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5680198403267049 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5582925661699524 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5565894928429453 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5546974820156794 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5535493342657861 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5511426607567806 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5492921128451813 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5471263483921905 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5434317638614649 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5425337587882356 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5369102379353332 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5282341401416373 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image09" + ], + "hard_negatives": [ + "image02" + ], + "id": "q018", + "language": "de", + "text": "die Gemüse-Getreide-Schüssel neben Karottenscheiben" + }, + "query_ms": 122.9277, + "segment_top5": [ + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.7152215360838582 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.6574158740020666 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6104815171065472 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6035518244746396 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5982833324825472 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.7572628526098341 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6202813222533817 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6151862011907199 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6041725235285249 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5846309887551453 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5797854629745353 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5762378496230042 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5725883693622503 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5692679875674224 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5686416598913115 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5595597412721783 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.551930362921604 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5506856827121812 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5490969894540716 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5485703511705482 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5420730748166311 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.54205832097869 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5377249279864874 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5358377742470881 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q019", + "language": "en", + "text": "milk being poured into coffee to make a pattern" + }, + "query_ms": 83.9023, + "segment_top5": [ + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.7572628526098341 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6202813222533817 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6151862011907199 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 32, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0030.png", + "start_s": 30, + "token_budget": 70 + }, + "score": 0.6081245253655962 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 54, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0052.png", + "start_s": 52, + "token_budget": 70 + }, + "score": 0.6060163865253111 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.7171857932910076 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6034001327753189 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.5958961571568152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5903930939101851 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.579912430850867 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5783563806534294 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.578162677179194 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5770479774096584 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5748266454278 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5716860204465454 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5651569839519763 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5608369681731745 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5532831608541011 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.551201407404583 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5465746260830875 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5435385162510429 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5423278953650967 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5420376885634534 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5388860915519335 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image10" + ], + "hard_negatives": [], + "id": "q020", + "language": "de", + "text": "Milch wird für ein Muster in den Kaffee gegossen" + }, + "query_ms": 94.86550000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.7171857932910076 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6034001327753189 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.5958961571568152 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5903930939101851 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 54, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0052.png", + "start_s": 52, + "token_budget": 70 + }, + "score": 0.5883396002289107 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.7378925717865545 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0020.png", + "start_s": 20, + "token_budget": 70 + }, + "score": 0.6173290059473702 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6054304804678929 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5849917239453298 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5810915577408376 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5785592378427651 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.57024324827624 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5673839024562516 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5664585184900877 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5662676376066424 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5636918997136423 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.5626995652213451 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5604197806655731 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5541750471448866 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5507307733711744 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.537238848690865 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.535934813814791 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5223845404772849 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.4877247381808161 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q021", + "language": "en", + "text": "the empty tropical beach with turquoise water" + }, + "query_ms": 80.0698, + "segment_top5": [ + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.7378925717865545 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0020.png", + "start_s": 20, + "token_budget": 70 + }, + "score": 0.6173290059473702 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6054304804678929 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 24, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0022.png", + "start_s": 22, + "token_budget": 70 + }, + "score": 0.5982154621127055 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 26, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0024.png", + "start_s": 24, + "token_budget": 70 + }, + "score": 0.5926164626485672 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.7158271638368432 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0020.png", + "start_s": 20, + "token_budget": 70 + }, + "score": 0.6130666803154774 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6107497238850333 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.6016330318027038 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5974932266965965 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5939405758540083 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5895787283197316 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5893192480295639 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5872473652411491 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5815802388272909 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5791608892940499 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.57282350908655 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5714741518718932 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5515862071950245 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5471541726079286 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5466068085194933 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.543042869284548 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5285237912106853 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5142790665709348 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image11" + ], + "hard_negatives": [], + "id": "q022", + "language": "de", + "text": "der leere tropische Strand mit türkisfarbenem Wasser" + }, + "query_ms": 112.042, + "segment_top5": [ + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.7158271638368432 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 22, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0020.png", + "start_s": 20, + "token_budget": 70 + }, + "score": 0.6130666803154774 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.6107497238850333 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.6016330318027038 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5974932266965965 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.7668430936462611 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6882967180105981 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.617350087112024 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6074723741111281 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5952268374036955 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5900744838716195 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5848308995951277 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5825859959539113 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5792431393175723 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5714600020414774 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5707109886904219 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5655266811443803 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5646116651059316 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.559847834329686 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.551274125901436 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5504256014881275 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5502241892791708 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5500359275162033 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5207531904999829 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q023", + "language": "en", + "text": "the black and white photo with a hand reaching towards us" + }, + "query_ms": 96.68839999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.7668430936462611 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6882967180105981 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6638330481315873 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 52, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0050.png", + "start_s": 50, + "token_budget": 70 + }, + "score": 0.6534883981090127 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 54, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0052.png", + "start_s": 52, + "token_budget": 70 + }, + "score": 0.6521333571096884 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.7304559154817764 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6696436382303605 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6181715069928486 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6057950081094725 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6014475323695028 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6002800901460945 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5907074518526292 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5848450505702192 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5817203745639261 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5793229168411058 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5712559966621049 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.569262124391614 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5620794030385069 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5578545218766403 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5557841710075738 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5535765839890268 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5405385289554456 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5364293915054272 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5300518277490203 + } + ], + "query": { + "category": "image-memory", + "expected": [ + "image12" + ], + "hard_negatives": [], + "id": "q024", + "language": "de", + "text": "das Schwarzweißfoto mit einer Hand, die nach uns greift" + }, + "query_ms": 107.29610000000001, + "segment_top5": [ + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.7304559154817764 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6696436382303605 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.6651634659383987 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.6649240027337638 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.6501262147595083 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0016.png", + "start_s": 16, + "token_budget": 70 + }, + "score": 0.8052183499211903 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6425784787581292 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.6411913188017637 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.616554926584494 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6120875233468107 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.6094834569458953 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5947213077616461 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5796153791942391 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5613374993079371 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5595632765677063 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5582936970918102 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5489234374945909 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5462721427098867 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5451419348575813 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5413997199104078 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5355121039360663 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5282154189049378 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.517294619915198 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.4994976086288535 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "hard_negatives": [ + "image01" + ], + "id": "q025", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "text": "the cat jumping up beside a door handle" + }, + "query_ms": 86.0851, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0016.png", + "start_s": 16, + "token_budget": 70 + }, + "score": 0.8052183499211903 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.8034828577846795 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7956915555291338 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 20, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0018.png", + "start_s": 18, + "token_budget": 70 + }, + "score": 0.7910110844588416 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.7833616545149803 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0016.png", + "start_s": 16, + "token_budget": 70 + }, + "score": 0.7789079099246559 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.654134018501836 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.6454224825247281 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.614339449938407 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.6120504529815483 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6114996103135862 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6013902145523001 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5876915968270897 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5708470362364816 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5685379481643851 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5593199804354961 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5543324160750042 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.547061861612674 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5397262700290747 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5358895494280099 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.531871308755842 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5290070226558843 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5268277792274194 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5069778411840591 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "hard_negatives": [ + "image01" + ], + "id": "q026", + "intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "text": "die Katze springt neben dem Türgriff hoch" + }, + "query_ms": 103.0516, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 18, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0016.png", + "start_s": 16, + "token_budget": 70 + }, + "score": 0.7789079099246559 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7697661171144465 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7609228688710973 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 20, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0018.png", + "start_s": 18, + "token_budget": 70 + }, + "score": 0.7547652072167202 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.7541460140459678 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.8014282880073476 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.6671446328475836 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6391091798155517 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.6119989676323476 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6078224356668849 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.600519171142685 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5988265510300288 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5956909043111593 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5715675821053354 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5472884264684624 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5430226673590627 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5363859877573154 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5337281896475561 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5330427569031926 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5281013805332386 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5260556520695817 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5193731537603324 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5132727790633789 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5052564438252218 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "id": "q027", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "text": "the cat sitting low by the door after trying to open it" + }, + "query_ms": 109.5976, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.8014282880073476 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.794850099411375 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.7923244430166513 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.788256903913285 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.7832398234546214 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.7638567211308721 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.6729608221382062 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6308086867073618 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.6209027100747908 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.6075153867805084 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6019873501061066 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6007206074022139 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5953345663455913 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5711244116131303 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5618835191853775 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5582088121321738 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5479451747436676 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.542969917004125 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5428376791849825 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5425035898381242 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5398176658709496 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5361852058965351 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.52032030595773 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.512665254636137 + } + ], + "query": { + "category": "video-action", + "expected": [ + "clip01" + ], + "id": "q028", + "intervals": { + "clip01": [ + [ + 7, + 14 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip01": [ + [ + 2, + 4.9 + ], + [ + 15.5, + 17.5 + ] + ] + }, + "text": "die Katze sitzt nach dem Öffnungsversuch unten an der Tür" + }, + "query_ms": 111.57169999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.7638567211308721 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.758113610587617 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.7572162164088203 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7565752082595726 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.7512405212147857 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.7744207939559049 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6259951188191728 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6236182331840638 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6106770923581294 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5951981453545379 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5914846599251612 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.589029987542987 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5864330407082199 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5767403221921855 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5762509756891953 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5641724151758993 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5580012625706473 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5530127146205216 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5522128636774866 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5509945410045214 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5329999846540495 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5314278348898137 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5284679874941876 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5259203341539112 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q029", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "text": "the red flower bud before its petals open" + }, + "query_ms": 89.15339999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.7744207939559049 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7735739614354908 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7593806897763516 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6259951188191728 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6236182331840638 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7403937041761509 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6282201514883675 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6243620313503596 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.6138330591662011 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.6107754451864424 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6042602953114127 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5931636169868849 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5894084776787479 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5874809620278548 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.587434860740436 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.578776184223861 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5754010386282805 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5610222427710285 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5547116136390182 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.552385350451028 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5453444197989774 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5391808851320647 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.535230097870043 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5308680451477835 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q030", + "intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "text": "die rote Blütenknospe bevor sich die Blätter öffnen" + }, + "query_ms": 130.85649999999998, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7403937041761509 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.7390137549803142 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7211552016121338 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6282201514883675 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6243620313503596 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7673517164919603 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.638072204354613 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 66, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0064.png", + "start_s": 64, + "token_budget": 70 + }, + "score": 0.6337504289535973 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6237218503551192 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6177568312808659 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6175930140111441 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.616629720529763 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5974671418009627 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5935888863155213 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5834850953002472 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5765954622978203 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.569545583910621 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5668313530757191 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.562897602737468 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5596818365738839 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5534550753875402 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5499036751820147 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5306141484147268 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5252454972090442 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q031", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "language": "en", + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "text": "the red flower with its petals open wide" + }, + "query_ms": 101.562, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7673517164919603 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7497586080605867 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.737877602168443 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.638072204354613 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 66, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0064.png", + "start_s": 64, + "token_budget": 70 + }, + "score": 0.6337504289535973 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7536831504785148 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.6385525651437798 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6213842644034008 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 46, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0044.png", + "start_s": 44, + "token_budget": 70 + }, + "score": 0.6168478521308572 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6077426877734559 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.6055815786377681 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.6054096273739041 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.604938379491875 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.596193379286121 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5902345657773279 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.582860322387423 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5793791595143191 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5785815787750135 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5681482047255721 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5615202881210989 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5604823025087151 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.553775111341511 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5474594016558233 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5388726700470976 + } + ], + "query": { + "category": "video-temporal", + "expected": [ + "clip03" + ], + "id": "q032", + "intervals": { + "clip03": [ + [ + 3.5, + 5.05 + ] + ] + }, + "language": "de", + "negative_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "text": "die rote Blume mit weit geöffneten Blütenblättern" + }, + "query_ms": 111.4944, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7536831504785148 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7444530443671136 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.7317393949477107 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.6385525651437798 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6227660743675753 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7891939985531875 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6339834326988494 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6270371091314606 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.58628989627914 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5790781761738703 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5696795740848426 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5662462098502291 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.563216092905719 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.56148888731911 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5553997977162083 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5390780741928156 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5378761220288647 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5315786968386197 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5300954680688044 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5225114778322204 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5145448211462895 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5120989819422094 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.4999942828929129 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.4978573574897108 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip02" + ], + "hard_negatives": [ + "image03", + "image05", + "image11" + ], + "id": "q033", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "language": "en", + "text": "the tall waterfall on a foggy rocky mountain" + }, + "query_ms": 92.78150000000001, + "segment_top5": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.7891939985531875 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.7880102952371375 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.7810202096179587 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.7795985145774619 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.7795477483097152 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.75518209018855 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.6399581860051491 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6257795763778099 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5999075949383823 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5970575434207863 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5959931931994639 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5893595179156238 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5814573231439402 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5806512081479749 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5750049431372919 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5622693569452234 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5557411364685003 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5463074009020891 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5404351266813174 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5373918003412504 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5309272971774175 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5240255013136152 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5196236576293887 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5137147663475248 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip02" + ], + "hard_negatives": [ + "image03", + "image05", + "image11" + ], + "id": "q034", + "intervals": { + "clip02": [ + [ + 0, + 13.81 + ] + ] + }, + "language": "de", + "text": "der hohe Wasserfall an einem nebligen felsigen Berg" + }, + "query_ms": 108.456, + "segment_top5": [ + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.75518209018855 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 8, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0006.png", + "start_s": 6, + "token_budget": 70 + }, + "score": 0.7480559495290483 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 2, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0000.png", + "start_s": 0, + "token_budget": 70 + }, + "score": 0.7462305416474209 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.7456770595517759 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.7429887193286311 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.7805535792511888 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.6013520036316801 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0022.png", + "start_s": 22, + "token_budget": 70 + }, + "score": 0.5977450231689113 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5834112337760036 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5490864836302839 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5399572211281717 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5376685074801032 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5351754309439731 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5324967372053863 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5309173870758527 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5261590123873605 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5195747236761943 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5132255822023972 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5091803964663599 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5028421683207579 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.4994455748003647 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.49930194506169473 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.4964188370513823 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.47929248925799217 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q035", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + }, + "language": "en", + "text": "the astronaut standing on the Moon next to landing equipment" + }, + "query_ms": 103.1832, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.7805535792511888 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 26, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0024.png", + "start_s": 24, + "token_budget": 70 + }, + "score": 0.7609145088578269 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 18, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0016.png", + "start_s": 16, + "token_budget": 70 + }, + "score": 0.7474678244997937 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.7458880649167786 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 24, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0022.png", + "start_s": 22, + "token_budget": 70 + }, + "score": 0.7449487994176723 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.7608959153044208 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5905909809158346 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5868934354726307 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 6, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-frame-0004.png", + "start_s": 4, + "token_budget": 70 + }, + "score": 0.5842319129660003 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5730946499653925 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5654520202040112 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5631411762842988 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5571881248603323 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5556195426310748 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5546694613767514 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5468030525046019 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5355684591680802 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5303402060012361 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5281380044702141 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5266459274550592 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5213199700485475 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5043082397657472 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5018387227320478 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.4977190009077853 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q036", + "intervals": { + "clip04": [ + [ + 10, + 20 + ] + ] + }, + "language": "de", + "text": "der Astronaut auf dem Mond neben der Landeausrüstung" + }, + "query_ms": 97.9299, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.7608959153044208 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 26, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0024.png", + "start_s": 24, + "token_budget": 70 + }, + "score": 0.7544920306429743 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 24, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0022.png", + "start_s": 22, + "token_budget": 70 + }, + "score": 0.7440579389397566 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 18, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0016.png", + "start_s": 16, + "token_budget": 70 + }, + "score": 0.7439221955844821 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.73896227742811 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.7854531866853761 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6142064802682924 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5985800142684743 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5924406779222771 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5659570427190609 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5620247881851139 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5591845981369965 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5555469253842361 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5538088096099341 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5436187131731754 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5427388646717849 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5394691939765485 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5335054485773975 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5293811224775907 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5208019167499361 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5196777315771973 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5053051788383203 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5006682571716207 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.48309040177539725 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q037", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + }, + "language": "en", + "text": "the lunar rover driving over grey Moon terrain" + }, + "query_ms": 80.1263, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.7854531866853761 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 32, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0030.png", + "start_s": 30, + "token_budget": 70 + }, + "score": 0.7535834567183067 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 26, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0024.png", + "start_s": 24, + "token_budget": 70 + }, + "score": 0.7406011635655813 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.7378382554842551 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0028.png", + "start_s": 28, + "token_budget": 70 + }, + "score": 0.7329374750126744 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.7504926885608634 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6095213938453783 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6025189938477188 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5930947441642674 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5909676242400841 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5877280218210467 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5816516559833289 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.580828652746971 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5764394994939417 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5688055319662738 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5685776022291316 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.566052860351224 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5511272769029003 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5485865237452431 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.545379368276596 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.53599801135446 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5269267872913967 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5059826258968748 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5056165899904258 + } + ], + "query": { + "category": "video-scene", + "expected": [ + "clip04" + ], + "id": "q038", + "intervals": { + "clip04": [ + [ + 24, + 33 + ] + ] + }, + "language": "de", + "text": "der Mondrover fährt über graues Mondgelände" + }, + "query_ms": 100.29899999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 28, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0026.png", + "start_s": 26, + "token_budget": 70 + }, + "score": 0.7504926885608634 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 32, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0030.png", + "start_s": 30, + "token_budget": 70 + }, + "score": 0.7224765061872622 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 26, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0024.png", + "start_s": 24, + "token_budget": 70 + }, + "score": 0.711659860437636 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 24, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0022.png", + "start_s": 22, + "token_budget": 70 + }, + "score": 0.705528488948676 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.702332338601885 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7901515980777452 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6187713783188717 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5946920625107901 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.590637967545511 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.583320788078574 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5762842325512988 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5454365976435306 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q039", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone saying that we choose to go to the Moon" + }, + "query_ms": 85.6434, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7901515980777452 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6993242309646431 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6808429379032339 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6187713783188717 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5946920625107901 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7425227551227882 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6048599046026412 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.602904089276596 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5897757481023908 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5731218729899242 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5712552332331736 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.5673109944981917 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q040", + "intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand sagt, dass wir uns entscheiden, zum Mond zu fliegen" + }, + "query_ms": 102.0331, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7425227551227882 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6513663559978503 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6471014933258865 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6048599046026412 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.602904089276596 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6727538593883859 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6214258667089511 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6021474803542598 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6015993485992666 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5733536110330493 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5623777812267753 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5570010990891604 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q041", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone finding orange soil on the Moon" + }, + "query_ms": 73.9591, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6727538593883859 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6214258667089511 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6072433682493542 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6021474803542598 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6015993485992666 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6300360432756786 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5804027415438564 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5784327502537124 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5665059572580309 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.564158639699235 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5553737313229385 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5461877149812022 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q042", + "intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand findet orangefarbenen Boden auf dem Mond" + }, + "query_ms": 87.9254, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6300360432756786 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5827556776459647 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5804027415438564 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5784327502537124 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.5687011989698612 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6897187870383475 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5745021265857199 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5647525043938945 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5474381027444647 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5370624627789644 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5259093439095828 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5085818232336404 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q043", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a request to fund the Artemis program for the first woman on the Moon" + }, + "query_ms": 110.5391, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6897187870383475 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6684528474171438 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6332358497241163 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5745021265857199 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5647525043938945 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6699251603024644 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.56709478579348 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5535745907377274 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5369246093004648 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5273498290482646 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5247398055526147 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5030945427296046 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q044", + "intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "eine Bitte um Finanzierung von Artemis für die erste Frau auf dem Mond" + }, + "query_ms": 115.2569, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6699251603024644 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6673094849525214 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6242462846199447 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.56709478579348 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5535745907377274 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.742674917022118 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5883848336139968 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5879842905021648 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.58442511533102 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5779334958868215 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.554571829487455 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5297636489339649 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q045", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "someone talking about planting a flag on Mars" + }, + "query_ms": 86.5433, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.742674917022118 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6819953817963775 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.677480265185885 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5883848336139968 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5879842905021648 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.7308022350264065 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5925456372223565 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5914157610044835 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5782997793018003 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5714634734312686 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5656696917132041 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5481466551749008 + } + ], + "query": { + "category": "video-speech", + "expected": [ + "clip04" + ], + "id": "q046", + "intervals": { + "clip04": [ + [ + 56.539, + 63.496 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "jemand spricht davon, eine Flagge auf dem Mars aufzustellen" + }, + "query_ms": 111.8349, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.7308022350264065 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6450681242073149 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6374359203991665 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5925456372223565 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5914157610044835 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.7045379708479776 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6106520981611769 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5686399447856928 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5618468830532731 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5617894859452904 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5481027083517216 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5456754897219598 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music01" + ], + "hard_negatives": [ + "music02" + ], + "id": "q047", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "gentle solo piano music without anyone singing" + }, + "query_ms": 76.7046, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.7045379708479776 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.6981848849152122 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6974537818588914 + }, + { + "candidate": { + "asset": "music01", + "end_s": 150, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0120.f32", + "start_s": 120 + }, + "score": 0.6921087206923564 + }, + { + "candidate": { + "asset": "music01", + "end_s": 120, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0090.f32", + "start_s": 90 + }, + "score": 0.6898593054134957 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.7031127689619723 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6239332372707518 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5906379989267411 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5890243014459475 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5888943918445194 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5749885656669943 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5472128858806845 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music01" + ], + "hard_negatives": [ + "music02" + ], + "id": "q048", + "intervals": { + "music01": [ + [ + 0, + 254.45 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "sanfte Klaviermusik ohne Gesang" + }, + "query_ms": 84.0162, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.7031127689619723 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.6929329642550202 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6921107567479342 + }, + { + "candidate": { + "asset": "music01", + "end_s": 150, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0120.f32", + "start_s": 120 + }, + "score": 0.690836541269264 + }, + { + "candidate": { + "asset": "music01", + "end_s": 120, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0090.f32", + "start_s": 90 + }, + "score": 0.6881240682764667 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6961914659870082 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6006897465165627 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5926517739647345 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5894102301826862 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5837114751325301 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5784400188280467 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5691313464831242 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music02" + ], + "hard_negatives": [ + "music01" + ], + "id": "q049", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a jazzy violin melody" + }, + "query_ms": 67.1693, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6961914659870082 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6891902774627477 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.6885981070139838 + }, + { + "candidate": { + "asset": "music01", + "end_s": 180, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0150.f32", + "start_s": 150 + }, + "score": 0.6776307999591891 + }, + { + "candidate": { + "asset": "music01", + "end_s": 150, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0120.f32", + "start_s": 120 + }, + "score": 0.6773755194832737 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.717574814508979 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.589495077267361 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5879459789575313 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5842773424958488 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5772010334341409 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5758236886269418 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5704598259457991 + } + ], + "query": { + "category": "music-memory", + "expected": [ + "music02" + ], + "hard_negatives": [ + "music01" + ], + "id": "q050", + "intervals": { + "music02": [ + [ + 0, + 30 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "eine jazzige Geigenmelodie" + }, + "query_ms": 89.92890000000001, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.717574814508979 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.7109353398510511 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.7086291640617219 + }, + { + "candidate": { + "asset": "music01", + "end_s": 240, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0210.f32", + "start_s": 210 + }, + "score": 0.7022204803858992 + }, + { + "candidate": { + "asset": "music01", + "end_s": 150, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0120.f32", + "start_s": 120 + }, + "score": 0.7015730690632731 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7534832646036176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7010932177528051 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.694965827475345 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6378043158977766 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6137766971161851 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6104746579085729 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6011669177635538 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound01" + ], + "hard_negatives": [ + "sound02" + ], + "id": "q051", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a dog barking nearby" + }, + "query_ms": 140.7908, + "segment_top5": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7534832646036176 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7010932177528051 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.694965827475345 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6378043158977766 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6137766971161851 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7433217388859692 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6948303012128391 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6758712436508733 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6256993854935307 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6180891060491255 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.608777645765395 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5840156163188536 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound01" + ], + "hard_negatives": [ + "sound02" + ], + "id": "q052", + "intervals": { + "sound01": [ + [ + 0, + 2.039 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "ein Hund bellt in der Nähe" + }, + "query_ms": 88.81179999999999, + "segment_top5": [ + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7433217388859692 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6948303012128391 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6758712436508733 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6256993854935307 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6180891060491255 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.712380597277765 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6784568136520849 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6439310293275697 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6264722203254081 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5934496393119723 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.571128533434628 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5655223335185732 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound02" + ], + "hard_negatives": [ + "sound01" + ], + "id": "q053", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "language": "en", + "required_modality": "audio", + "text": "a growling roaring creature sound effect" + }, + "query_ms": 79.1144, + "segment_top5": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.712380597277765 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6784568136520849 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6439310293275697 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6264722203254081 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5934496393119723 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7039701335786099 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.696329359488199 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.659353556220215 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6217568438157509 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.59150654003713 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5711533379383675 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5617806069625547 + } + ], + "query": { + "category": "sound-memory", + "expected": [ + "sound02" + ], + "hard_negatives": [ + "sound01" + ], + "id": "q054", + "intervals": { + "sound02": [ + [ + 0, + 2.074 + ] + ] + }, + "language": "de", + "required_modality": "audio", + "text": "ein knurrender brüllender Kreatur-Soundeffekt" + }, + "query_ms": 101.16640000000001, + "segment_top5": [ + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.7039701335786099 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.696329359488199 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.659353556220215 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6217568438157509 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.59150654003713 + } + ] + }, + { + "query": { + "category": "exact-metadata", + "expected": [ + "music01" + ], + "id": "q055", + "language": "en", + "metadata": { + "artist": "Kimiko Ishizaka" + }, + "text": "Kimiko Ishizaka" + }, + "unsupported": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + }, + { + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q056", + "language": "en", + "metadata": { + "title": "Jazz Violin Solo" + }, + "text": "Jazz Violin Solo" + }, + "unsupported": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + }, + { + "query": { + "category": "exact-metadata", + "expected": [ + "music02" + ], + "id": "q057", + "language": "en", + "metadata": { + "artist": "Violinist WTD" + }, + "text": "Violinist WTD" + }, + "unsupported": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.7785674182172935 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.6124860659684108 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5801219950346055 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5784511827849287 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5637325960765979 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5636893132088586 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.5535845237005363 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5381423994216683 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5376991308828877 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5369669715727022 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5317749209025551 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.5022043987819141 + } + ], + "query": { + "category": "exact-filter", + "expected": [ + "image05" + ], + "filters": { + "extension": "jpg" + }, + "id": "q058", + "language": "en", + "text": "wooden pier under the moon" + }, + "query_ms": 68.56569999999999, + "segment_top5": [ + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.7785674182172935 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.6124860659684108 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5801219950346055 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.5784511827849287 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5637325960765979 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.750250822387441 + } + ], + "query": { + "category": "temporal-negative", + "expected": [], + "filters": { + "asset": "clip01", + "time_range_s": [ + 7, + 14 + ] + }, + "id": "q059", + "language": "en", + "required_modality": "image", + "text": "the cat jumping beside the handle" + }, + "query_ms": 69.15129999999999, + "segment_top5": [ + { + "candidate": { + "asset": "clip01", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.750250822387441 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 10, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0008.png", + "start_s": 8, + "token_budget": 70 + }, + "score": 0.7391461589239167 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 14, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0012.png", + "start_s": 12, + "token_budget": 70 + }, + "score": 0.7294277860245342 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 16, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-frame-0014.png", + "start_s": 14, + "token_budget": 70 + }, + "score": 0.7227696467688465 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5716409940327322 + } + ], + "query": { + "category": "filter-no-answer", + "expected": [], + "filters": { + "extension": "ogg" + }, + "id": "q060", + "language": "en", + "required_modality": "audio", + "text": "someone mentioning Mars" + }, + "query_ms": 56.4458, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5716409940327322 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.5542207720367063 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.5529154986918597 + }, + { + "candidate": { + "asset": "music01", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5465598595340737 + }, + { + "candidate": { + "asset": "music01", + "end_s": 90, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5458090509954915 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6223961635527826 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 34, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0032.png", + "start_s": 32, + "token_budget": 70 + }, + "score": 0.5936916612892648 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5932309971836774 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.590045272903579 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5847493149812526 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5782966245009209 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.5752527263072048 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5542128939644451 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.545836084756601 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5426598740679144 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5346326737693868 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5311484817684502 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5288843478028931 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5159557318380855 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5132330633265747 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5044535105112803 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.4984460418861959 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.4921881720494494 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.48503902889344924 + } + ], + "query": { + "category": "content-no-answer", + "expected": [], + "id": "q061", + "language": "en", + "split": "held-out-no-answer", + "text": "a purple elephant playing a violin on the beach" + }, + "query_ms": 80.6327, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6223961635527826 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.6071434188194618 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.6006763935629458 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 34, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0032.png", + "start_s": 32, + "token_budget": 70 + }, + "score": 0.5936916612892648 + }, + { + "candidate": { + "asset": "music01", + "end_s": 180, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0150.f32", + "start_s": 150 + }, + "score": 0.5933566789658044 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6181057666050869 + }, + { + "candidate": { + "asset": "image11", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image11.jpg", + "token_budget": 140 + }, + "score": 0.5826697789389608 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.576471038050839 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 12, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-frame-0010.png", + "start_s": 10, + "token_budget": 70 + }, + "score": 0.5758196695731836 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "score": 0.569025523207093 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5689108267233789 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5621506820113945 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5401413930242549 + }, + { + "candidate": { + "asset": "image09", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image09.jpg", + "token_budget": 140 + }, + "score": 0.5328820026680647 + }, + { + "candidate": { + "asset": "image06", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image06.jpg", + "token_budget": 140 + }, + "score": 0.5327117673986254 + }, + { + "candidate": { + "asset": "image05", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image05.jpg", + "token_budget": 140 + }, + "score": 0.5248492001164006 + }, + { + "candidate": { + "asset": "image07", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image07.jpg", + "token_budget": 140 + }, + "score": 0.5192308469447553 + }, + { + "candidate": { + "asset": "image02", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image02.jpg", + "token_budget": 140 + }, + "score": 0.5118883713414079 + }, + { + "candidate": { + "asset": "image12", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image12.jpg", + "token_budget": 140 + }, + "score": 0.5096839901422825 + }, + { + "candidate": { + "asset": "image08", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image08.jpg", + "token_budget": 140 + }, + "score": 0.5042124541703104 + }, + { + "candidate": { + "asset": "image01", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image01.jpg", + "token_budget": 140 + }, + "score": 0.5032875002244219 + }, + { + "candidate": { + "asset": "image03", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image03.jpg", + "token_budget": 140 + }, + "score": 0.4975779128572615 + }, + { + "candidate": { + "asset": "image10", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image10.jpg", + "token_budget": 140 + }, + "score": 0.4843836146289062 + }, + { + "candidate": { + "asset": "image04", + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\assets\\image04.jpg", + "token_budget": 140 + }, + "score": 0.47855329028293536 + } + ], + "query": { + "category": "content-no-answer", + "expected": [], + "id": "q062", + "language": "de", + "split": "held-out-no-answer", + "text": "ein violetter Elefant spielt Geige am Strand" + }, + "query_ms": 89.4455, + "segment_top5": [ + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.6181057666050869 + }, + { + "candidate": { + "asset": "music01", + "end_s": 210, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0180.f32", + "start_s": 180 + }, + "score": 0.6038469970651819 + }, + { + "candidate": { + "asset": "music01", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0030.f32", + "start_s": 30 + }, + "score": 0.5960111918748128 + }, + { + "candidate": { + "asset": "music01", + "end_s": 180, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0150.f32", + "start_s": 150 + }, + "score": 0.5885189807010819 + }, + { + "candidate": { + "asset": "music01", + "end_s": 120, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0090.f32", + "start_s": 90 + }, + "score": 0.5868882079248728 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6229413326862353 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5967661878100181 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.590021272081943 + }, + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5877535494445504 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5851529552755189 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5827835460136183 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.581019886689461 + } + ], + "query": { + "category": "speech-no-answer", + "expected": [], + "id": "q063", + "language": "en", + "required_modality": "audio", + "split": "held-out-no-answer", + "text": "someone explains quantum entanglement" + }, + "query_ms": 65.379, + "segment_top5": [ + { + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "score": 0.6229413326862353 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.6147290029051219 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5967661878100181 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "score": 0.5944343148448707 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.590021272081943 + } + ] + }, + { + "file_rankings": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5715326739972073 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5649773597029027 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5645125832052695 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5641304353095067 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5616857696608897 + }, + { + "candidate": { + "asset": "music01", + "end_s": 254.453333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music01-audio-0240.f32", + "start_s": 240 + }, + "score": 0.5545025834750046 + }, + { + "candidate": { + "asset": "clip01", + "end_s": 22.204, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5457134882101075 + } + ], + "query": { + "category": "speech-no-answer", + "expected": [], + "id": "q064", + "language": "de", + "required_modality": "audio", + "split": "held-out-no-answer", + "text": "jemand erklärt Quantenverschränkung" + }, + "query_ms": 74.8286, + "segment_top5": [ + { + "candidate": { + "asset": "clip03", + "end_s": 5.059, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5715326739972073 + }, + { + "candidate": { + "asset": "sound01", + "end_s": 2.038594, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound01-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5649773597029027 + }, + { + "candidate": { + "asset": "clip02", + "end_s": 13.806, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5645125832052695 + }, + { + "candidate": { + "asset": "clip04", + "end_s": 85.333333, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0060.f32", + "start_s": 60 + }, + "score": 0.5641304353095067 + }, + { + "candidate": { + "asset": "sound02", + "end_s": 2.074218, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\sound02-audio-0000.f32", + "start_s": 0 + }, + "score": 0.5616857696608897 + } + ] + }, + { + "query": { + "category": "metadata-no-answer", + "expected": [], + "id": "q065", + "language": "en", + "metadata": { + "artist": "Adele" + }, + "text": "Adele" + }, + "unsupported": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + } + ], + "scope": "Direct real-model dense reference baseline; candidate filters here are benchmark reference constraints, not production-filter certification; no rejection threshold is tuned", + "text_fingerprint": "google/embeddinggemma-2:bfcd298762cc34d0357ece5ebdd31791a3a374d8:q8_0:llama-b11461-no-logits-v1:mean:l2:query512:doc2048:windows-overlap128:prompts-v1", + "worker": { + "device": "cpu", + "dimensions": 768, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + } +} \ No newline at end of file diff --git a/fixtures/media/reference-summary.json b/fixtures/media/reference-summary.json new file mode 100644 index 0000000..fca4723 --- /dev/null +++ b/fixtures/media/reference-summary.json @@ -0,0 +1,502 @@ +{ + "fixture_sha256": "b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393", + "worker": { + "device": "cpu", + "dimensions": 768, + "model": "google/embeddinggemma-2", + "ready": true, + "runtime": "b11461-no-logits-v1", + "threads": 1 + }, + "overall": { + "positive_queries": 55, + "unsupported_queries": 4, + "recall_at1": 0.9636363636363636, + "recall_at5": 0.9636363636363636, + "mrr": 0.9636363636363636, + "temporal_queries": 22, + "segment_overlap_hit_at1": 0.9545454545454546, + "timestamp_point_hit_at1": 0.6818181818181818, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 13.777000000000001, + "no_answer_queries": 6, + "no_answer_return_rate": 1.0 + }, + "by_category": { + "content-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "exact-filter": { + "positive_queries": 1, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "exact-metadata": { + "positive_queries": 0, + "unsupported_queries": 3, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "filter-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 1.0 + }, + "image-memory": { + "positive_queries": 24, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "metadata-no-answer": { + "positive_queries": 0, + "unsupported_queries": 1, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "music-memory": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 0.5, + "recall_at5": 0.5, + "mrr": 0.5, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "sound-memory": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "speech-no-answer": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "temporal-negative": { + "positive_queries": 0, + "unsupported_queries": 0, + "recall_at1": null, + "recall_at5": null, + "mrr": null, + "temporal_queries": 0, + "segment_overlap_hit_at1": null, + "timestamp_point_hit_at1": null, + "segment_overlap_hit_at5": null, + "timestamp_distance_median_s": null, + "timestamp_distance_max_s": null, + "no_answer_queries": 1, + "no_answer_return_rate": 1.0 + }, + "video-action": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 4, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 1.0, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 0, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-scene": { + "positive_queries": 6, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 6, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 1.0, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 0, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-speech": { + "positive_queries": 8, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 8, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 0.25, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 13.129, + "timestamp_distance_max_s": 13.777000000000001, + "no_answer_queries": 0, + "no_answer_return_rate": null + }, + "video-temporal": { + "positive_queries": 4, + "unsupported_queries": 0, + "recall_at1": 1.0, + "recall_at5": 1.0, + "mrr": 1.0, + "temporal_queries": 4, + "segment_overlap_hit_at1": 0.75, + "timestamp_point_hit_at1": 0.75, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 1.0, + "no_answer_queries": 0, + "no_answer_return_rate": null + } + }, + "by_language": { + "de": { + "positive_queries": 27, + "unsupported_queries": 0, + "recall_at1": 0.9629629629629629, + "recall_at5": 0.9629629629629629, + "mrr": 0.9629629629629629, + "temporal_queries": 11, + "segment_overlap_hit_at1": 0.9090909090909091, + "timestamp_point_hit_at1": 0.6363636363636364, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 13.777000000000001, + "no_answer_queries": 2, + "no_answer_return_rate": 1.0 + }, + "en": { + "positive_queries": 28, + "unsupported_queries": 4, + "recall_at1": 0.9642857142857143, + "recall_at5": 0.9642857142857143, + "mrr": 0.9642857142857143, + "temporal_queries": 11, + "segment_overlap_hit_at1": 1.0, + "timestamp_point_hit_at1": 0.7272727272727273, + "segment_overlap_hit_at5": 1.0, + "timestamp_distance_median_s": 0, + "timestamp_distance_max_s": 13.777000000000001, + "no_answer_queries": 4, + "no_answer_return_rate": 1.0 + } + }, + "encoding_failures": [ + { + "candidate": { + "asset": "music02", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\music02-audio-0000.f32", + "start_s": 0 + }, + "error": "Invalid normalized audio PCM" + } + ], + "encoding_ms": 498657.0532, + "query_p50_ms": 92.78150000000001, + "query_p95_ms": 122.9277, + "failures": [ + { + "query": "q030", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip03", + "end_s": 4, + "modality": "image", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip03-frame-0002.png", + "start_s": 2, + "token_budget": 70 + }, + "expected_intervals": { + "clip03": [ + [ + 0, + 1.0 + ] + ] + }, + "timestamp_distance_s": 1.0 + }, + { + "query": "q039", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "expected_intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "timestamp_distance_s": 1.551 + }, + { + "query": "q040", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "expected_intervals": { + "clip04": [ + [ + 1.551, + 3.603 + ] + ] + }, + "timestamp_distance_s": 1.551 + }, + { + "query": "q041", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "expected_intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "timestamp_distance_s": 13.129 + }, + { + "query": "q042", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 30, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0000.f32", + "start_s": 0 + }, + "expected_intervals": { + "clip04": [ + [ + 13.129, + 16.316 + ] + ] + }, + "timestamp_distance_s": 13.129 + }, + { + "query": "q043", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "expected_intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "timestamp_distance_s": 13.777000000000001 + }, + { + "query": "q044", + "category": "timestamp-localization-miss", + "candidate": { + "asset": "clip04", + "end_s": 60, + "modality": "audio", + "path": "C:\\Users\\karl\\searchi\\fixtures\\media\\derived\\clip04-audio-0030.f32", + "start_s": 30 + }, + "expected_intervals": { + "clip04": [ + [ + 43.777, + 52.419 + ] + ] + }, + "timestamp_distance_s": 13.777000000000001 + }, + { + "query": "q049", + "category": "hard-negative-confusion", + "winner": "music01", + "expected": [ + "music02" + ] + }, + { + "query": "q050", + "category": "hard-negative-confusion", + "winner": "music01", + "expected": [ + "music02" + ] + }, + { + "query": "q055", + "category": "unsupported-query-capability", + "detail": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + }, + { + "query": "q056", + "category": "unsupported-query-capability", + "detail": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + }, + { + "query": "q057", + "category": "unsupported-query-capability", + "detail": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + }, + { + "query": "q059", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip01", + "score": 0.750250822387441 + }, + { + "query": "q060", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.5716409940327322 + }, + { + "query": "q061", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.6223961635527826 + }, + { + "query": "q062", + "category": "no-answer-nearest-neighbor-return", + "winner": "music01", + "score": 0.6181057666050869 + }, + { + "query": "q063", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip04", + "score": 0.6229413326862353 + }, + { + "query": "q064", + "category": "no-answer-nearest-neighbor-return", + "winner": "clip03", + "score": 0.5715326739972073 + }, + { + "query": "q065", + "category": "unsupported-query-capability", + "detail": "Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities" + } + ], + "source_scope": "Direct real-model dense reference baseline; candidate filters here are benchmark reference constraints, not production-filter certification; no rejection threshold is tuned", + "interpretation": "Small independently labelled public-media diagnostic; source_scope identifies the measured lane. No-answer return rate measures unsuppressed output, not a calibrated confidence policy. Audio interval overlap can pass while the returned start timestamp is too early; point hits expose this. This corpus alone cannot certify production quality." +} \ No newline at end of file diff --git a/tools/media-eval/.gitignore b/tools/media-eval/.gitignore new file mode 100644 index 0000000..a0329fd --- /dev/null +++ b/tools/media-eval/.gitignore @@ -0,0 +1,4 @@ +.venv/ +target/ +_*.py +__pycache__/ diff --git a/tools/media-eval/Cargo.lock b/tools/media-eval/Cargo.lock new file mode 100644 index 0000000..d6e6d2e --- /dev/null +++ b/tools/media-eval/Cargo.lock @@ -0,0 +1,1311 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aes" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32" +dependencies = [ + "cipher", + "cpubits", + "cpufeatures 0.3.1", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "block-padding" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "cbc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" +dependencies = [ + "cipher", +] + +[[package]] +name = "cc" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core", +] + +[[package]] +name = "cipher" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" +dependencies = [ + "crypto-common 0.2.2", + "inout", +] + +[[package]] +name = "clap" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" +dependencies = [ + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_lex" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" + +[[package]] +name = "codespan-reporting" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "cxx" +version = "1.0.205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8a02bfeba9074b2bbb39492c9b0908ec854f455a3cccdcde7a1de55e2315e40" +dependencies = [ + "cc", + "cxx-build", + "cxxbridge-cmd", + "cxxbridge-flags", + "cxxbridge-macro", + "foldhash", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc2ac76997619d2d888b58ad79488f1c835de41ca4dd3dd7082acf4ecb0a50f" +dependencies = [ + "cc", + "codespan-reporting", + "indexmap", + "proc-macro2", + "quote", + "scratch", + "syn 3.0.9", +] + +[[package]] +name = "cxxbridge-cmd" +version = "1.0.205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a486ed16a3f2a053fe7f5b98db4c1a59846a23e8cb9e49f9d1bd48830d51a2" +dependencies = [ + "clap", + "codespan-reporting", + "indexmap", + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c72569be94e2283764d334cd285980b747dbe221e27e315484eb6bcd93fa808a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.205" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "423e795284a7f7b3f843c956a5322c4bc497b60c2dd1a6339da10313cb18d575" +dependencies = [ + "indexmap", + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common 0.1.7", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "const-oid", + "crypto-common 0.2.2", +] + +[[package]] +name = "ecb" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26f2a8b3e564eba0877223dc343703ad0385794e882e6d13f3a4dd5c6b1f41ac" +dependencies = [ + "cipher", +] + +[[package]] +name = "encoding_rs" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679" +dependencies = [ + "cfg-if", + "core_detect", + "multiversion_no_op", + "rustversion", + "scopeguard", + "simdutf8", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", + "zlib-rs", +] + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "rand_core", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hybrid-array" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" +dependencies = [ + "typenum", +] + +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "image-webp", + "moxcms", + "num-traits", + "png", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", +] + +[[package]] +name = "inout" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +dependencies = [ + "block-padding", + "hybrid-array", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jpeg-decoder" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" + +[[package]] +name = "libc" +version = "0.2.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" +dependencies = [ + "cc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "lopdf" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfffda0fe1ab0157e1a13c14bebd3f28671f2fccb7922f0722ec53926e6922d3" +dependencies = [ + "aes", + "bitflags", + "brotli-decompressor", + "cbc", + "ecb", + "encoding_rs", + "flate2", + "getrandom", + "indexmap", + "itoa", + "log", + "md-5", + "nom", + "rand", + "rangemap", + "sha2 0.11.0", + "stringprep", + "thiserror", + "weezl", +] + +[[package]] +name = "md-5" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +dependencies = [ + "cfg-if", + "digest 0.11.3", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "multiversion_no_op" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" + +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "numkong" +version = "7.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53bcc7469814b82ddffa194dbf3418fc28fa49015392261926f85c5f1cae0625" +dependencies = [ + "cc", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b1177fdf999d2321d3fb46ff47159d9c1fb9ad66a4879f8c50a0b504615e9b" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" +dependencies = [ + "chacha20", + "getrandom", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rangemap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a611d15b50743feb4c76b7d03edcb0e64f399c26961e4efe6975bc398be6aa3d" + +[[package]] +name = "rusqlite" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +dependencies = [ + "bitflags", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "rustix" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scratch" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" + +[[package]] +name = "searchi-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "lopdf", + "quick-xml", + "rusqlite", + "serde", + "walkdir", + "zip", +] + +[[package]] +name = "searchi-media" +version = "0.1.0" +dependencies = [ + "anyhow", + "image", + "serde", + "serde_json", + "sha2 0.10.9", + "tempfile", +] + +[[package]] +name = "searchi-media-eval" +version = "0.1.0" +dependencies = [ + "anyhow", + "searchi-core", + "searchi-media", + "searchi-semantic", + "searchi-service", + "serde_json", + "sha2 0.10.9", + "tempfile", +] + +[[package]] +name = "searchi-semantic" +version = "0.1.0" +dependencies = [ + "anyhow", + "base64", + "image", + "jpeg-decoder", + "serde", + "serde_json", + "sha2 0.10.9", +] + +[[package]] +name = "searchi-service" +version = "0.1.0" +dependencies = [ + "anyhow", + "fs2", + "rusqlite", + "searchi-core", + "searchi-media", + "searchi-semantic", + "serde", + "sha2 0.10.9", + "usearch", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "digest 0.11.3", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "smallvec" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "tinyvec" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "usearch" +version = "2.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1086fc5e6b4ee87a5bac4fd80fcf66670526ca21b77d5f95b68de01b15329c67" +dependencies = [ + "cxx", + "cxx-build", + "numkong", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "weezl" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ca08e5ef825b65b056d9efbd95c8750683f0a6d0466d02e96dc2e4e360f3d2" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "zerocopy" +version = "0.8.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zip" +version = "8.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" +dependencies = [ + "crc32fast", + "flate2", + "indexmap", + "memchr", + "typed-path", + "zopfli", +] + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + +[[package]] +name = "zopfli" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf7fc5d30c28483d93805c4a5e12b05bbb52407fa67c5f8bd552374cd01fb11" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zune-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core", +] diff --git a/tools/media-eval/Cargo.toml b/tools/media-eval/Cargo.toml new file mode 100644 index 0000000..ad51844 --- /dev/null +++ b/tools/media-eval/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "searchi-media-eval" +version = "0.1.0" +edition = "2021" +publish = false + +[workspace] + +[dependencies] +anyhow = "1" +serde_json = "1" +sha2 = "0.10" +searchi-semantic = { path = "../../crates/searchi-semantic" } +searchi-core = { path = "../../crates/searchi-core" } +searchi-service = { path = "../../crates/searchi-service" } +searchi-media = { path = "../../crates/searchi-media" } +tempfile = "3" diff --git a/tools/media-eval/README.md b/tools/media-eval/README.md new file mode 100644 index 0000000..9b39b1a --- /dev/null +++ b/tools/media-eval/README.md @@ -0,0 +1,35 @@ +# Real-media quality evaluation + +This independent tool owns no production/UI code. It feeds real pixels and decoded PCM to the actual Google CPU worker, keeps frozen source labels outside inference input, and reports ranking/localization failures. + +```powershell +$env:SEARCHI_FORCE_CPU = '1' +python tools/media-eval/download.py +python tools/media-eval/prepare.py --ffmpeg .searchi/media-runtime/bin/ffmpeg.exe --ffprobe .searchi/media-runtime/bin/ffprobe.exe +cargo run --manifest-path tools/media-eval/Cargo.toml --bin searchi-media-eval -- fixtures/media .searchi/models/embeddinggemma2 .searchi/runtime/cpu/Release/searchi-gemma-worker.exe fixtures/media/reference-results.json +python tools/media-eval/score.py fixtures/media/reference-results.json fixtures/media/reference-summary.json +cargo run --manifest-path tools/media-eval/Cargo.toml --bin metadata -- fixtures/media .searchi/media-runtime/bin/ffmpeg.exe .searchi/media-runtime/bin/ffprobe.exe fixtures/media/metadata-results.json +python tools/media-eval/score.py fixtures/media/metadata-results.json fixtures/media/metadata-summary.json +cargo run --manifest-path tools/media-eval/Cargo.toml --bin pipeline -- fixtures/media .searchi/models/embeddinggemma2 .searchi/runtime/cpu/Release/searchi-gemma-worker.exe .searchi/media-runtime/bin/ffmpeg.exe .searchi/media-runtime/bin/ffprobe.exe fixtures/media/pipeline-30s-results.json 30 +cargo run --manifest-path tools/media-eval/Cargo.toml --bin pipeline -- fixtures/media .searchi/models/embeddinggemma2 .searchi/runtime/cpu/Release/searchi-gemma-worker.exe .searchi/media-runtime/bin/ffmpeg.exe .searchi/media-runtime/bin/ffprobe.exe fixtures/media/pipeline-10s-results.json 10 +python tools/media-eval/score.py fixtures/media/pipeline-30s-results.json fixtures/media/pipeline-30s-summary.json +python tools/media-eval/score.py fixtures/media/pipeline-10s-results.json fixtures/media/pipeline-10s-summary.json +cargo run --manifest-path tools/media-eval/Cargo.toml --bin image_budgets -- fixtures/media .searchi/models/embeddinggemma2 .searchi/runtime/cpu/Release/searchi-gemma-worker.exe fixtures/media/image-budget-results.json +python tools/media-eval/score_budgets.py fixtures/media/image-budget-results.json fixtures/media/image-budget-summary.json +python -m unittest discover -s tools/media-eval -p test_*.py +``` + +The standalone Cargo workspace keeps evaluation dependencies separate. Native inference and FFmpeg decoding use CPU only and one thread. No test enables a GPU provider. The model/worker/decoder paths above refer to explicitly provisioned local developer artifacts; they are not end-user setup requirements. + +The dense reference samples video every two seconds and PCM in thirty-second windows. Photos use 140 image tokens and frames 70. The separate comparison fixes the same 12 photos/24 queries and varies only photo token budgets **70, 280, 1120**. It does not change labels or choose a threshold after observing scores. + +## Interpretation + +- Recall@1/@5 and MRR rank distinct source files, choosing each file's best segment. Per-category/per-language metrics remain separate. +- Segment overlap credits a returned segment that actually intersects the labelled event in the correct file. Point hits require the returned start timestamp itself to fall inside the event. A thirty-second speech window may pass overlap while opening far too early; both metrics are required. +- No-answer queries remain separate from positive recall. The tool exposes returned neighbors and scores without inventing an abstention threshold. A reject threshold needs independent calibration and held-out validation. +- Direct model candidate filters are **reference pool constraints**, not evidence that production filters work. Artist/title identity cannot be recovered reliably from a performance embedding; exact metadata rows are explicitly unsupported until evaluated through Searchi's real lexical metadata lane. +- `metadata` tests the actual FFprobe/guarded core FTS lane; `pipeline` tests the actual unified Searchi media generation and hybrid ranking. The optional final argument varies audio window seconds (30 versus 10) while retaining two-second overlap, the same real files, decoder and frozen labels. It does not change production defaults. +- Model agreement with another implementation, synthetic document-seed scores, and this small-media benchmark each answer different questions. None is production quality certification. + +Detailed provenance is in [the fixture README](../../fixtures/media/README.md). The final assessment belongs in [MEDIA-QUALITY.md](../../docs/MEDIA-QUALITY.md). diff --git a/tools/media-eval/download.py b/tools/media-eval/download.py new file mode 100644 index 0000000..4300b72 --- /dev/null +++ b/tools/media-eval/download.py @@ -0,0 +1,32 @@ +"""Reacquire the locked licensed corpus. Updated bytes are never accepted.""" +import argparse +import hashlib +import json +from pathlib import Path +import urllib.request + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--root", type=Path, default=Path("fixtures/media")) + args = parser.parse_args() + root = args.root.resolve() + fixture_path = root / "fixture.json" + lock = json.loads((root / "labels.lock.json").read_text()) + assert hashlib.sha256(fixture_path.read_bytes()).hexdigest() == lock["fixture_sha256"] + for asset in json.loads(fixture_path.read_text(encoding="utf-8"))["assets"]: + destination = (root / asset["path"]).resolve() + assert destination.is_relative_to(root) + if destination.is_file() and hashlib.sha256(destination.read_bytes()).hexdigest() == asset["sha256"]: + continue + request = urllib.request.Request(asset["source_url"], headers={"User-Agent": "SearchiMediaEvaluation/1.0"}) + with urllib.request.urlopen(request, timeout=60) as response: + data = response.read(asset["bytes"] + 1) + assert len(data) == asset["bytes"] and hashlib.sha256(data).hexdigest() == asset["sha256"], f"Publisher changed {asset['id']}; keep frozen corpus, investigate a new version" + destination.parent.mkdir(parents=True, exist_ok=True) + destination.write_bytes(data) + print("Verified", asset["id"]) + + +if __name__ == "__main__": + main() diff --git a/tools/media-eval/prepare.py b/tools/media-eval/prepare.py new file mode 100644 index 0000000..d9d6474 --- /dev/null +++ b/tools/media-eval/prepare.py @@ -0,0 +1,62 @@ +"""Prepare real CPU-decoded media candidates after verifying frozen labels. + +No generated captions, placeholder vectors, or model calls occur in preparation. +""" +import argparse +import hashlib +import json +from pathlib import Path +import subprocess + + +def verify(root): + fixture_path = root / "fixture.json" + lock = json.loads((root / "labels.lock.json").read_text()) + assert hashlib.sha256(fixture_path.read_bytes()).hexdigest() == lock["fixture_sha256"], "Frozen labels changed" + fixture = json.loads(fixture_path.read_text(encoding="utf-8")) + for asset in fixture["assets"]: + path = (root / asset["path"]).resolve() + assert path.is_relative_to(root.resolve()), "Asset escaped corpus root" + assert path.stat().st_size == asset["bytes"], asset["id"] + assert hashlib.sha256(path.read_bytes()).hexdigest() == asset["sha256"], asset["id"] + return fixture + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--root", type=Path, default=Path("fixtures/media")) + parser.add_argument("--ffmpeg", type=Path, required=True) + parser.add_argument("--ffprobe", type=Path, required=True) + args = parser.parse_args() + root = args.root.resolve() + fixture = verify(root) + derived = root / "derived" + derived.mkdir(exist_ok=True) + candidates = [] + for asset in fixture["assets"]: + source = root / asset["path"] + if asset["kind"] == "image": + candidates.append(dict(asset=asset["id"], path=str(source), modality="image", token_budget=140)) + continue + probe = json.loads(subprocess.check_output([str(args.ffprobe), "-v", "error", "-show_format", "-show_streams", "-of", "json", str(source)], text=True)) + duration = float(probe["format"]["duration"]) + if asset["kind"] == "video": + for stamp in range(0, int(duration) + 1, 2): + output = derived / f"{asset['id']}-frame-{stamp:04}.png" + subprocess.run([str(args.ffmpeg), "-hide_banner", "-loglevel", "error", "-hwaccel", "none", "-threads", "1", "-ss", str(stamp), "-i", str(source), "-frames:v", "1", "-vf", "scale=480:-1", "-threads", "1", "-y", str(output)], check=True) + if output.is_file(): + candidates.append(dict(asset=asset["id"], path=str(output), modality="image", token_budget=70, start_s=stamp, end_s=min(stamp + 2, duration))) + if any(stream["codec_type"] == "audio" for stream in probe["streams"]): + for stamp in range(0, int(duration) + 1, 30): + output = derived / f"{asset['id']}-audio-{stamp:04}.f32" + subprocess.run([str(args.ffmpeg), "-hide_banner", "-loglevel", "error", "-hwaccel", "none", "-threads", "1", "-ss", str(stamp), "-i", str(source), "-t", "30", "-vn", "-ac", "1", "-ar", "16000", "-f", "f32le", "-threads", "1", "-y", str(output)], check=True) + if output.stat().st_size: + assert output.stat().st_size <= 480000 * 4, "Audio exceeds worker budget" + candidates.append(dict(asset=asset["id"], path=str(output), modality="audio", start_s=stamp, end_s=min(stamp + 30, duration))) + manifest = dict(fixture_sha256=hashlib.sha256((root / "fixture.json").read_bytes()).hexdigest(), ffmpeg_version=subprocess.check_output([str(args.ffmpeg), "-version"], text=True).splitlines()[0], policy="CPU-only dense reference: photos140/video70 tokens, uniform2s frames, mono16kHz30s PCM", candidates=candidates) + (derived / "candidates.json").write_text(json.dumps(manifest, indent=2), encoding="utf-8") + print(json.dumps(dict(candidates=len(candidates), images=sum(item["modality"] == "image" for item in candidates), audio=sum(item["modality"] == "audio" for item in candidates)))) + + +if __name__ == "__main__": + main() diff --git a/tools/media-eval/score.py b/tools/media-eval/score.py new file mode 100644 index 0000000..3a2101b --- /dev/null +++ b/tools/media-eval/score.py @@ -0,0 +1,114 @@ +"""Score frozen relevance without fitting an abstention threshold.""" +import argparse +from collections import defaultdict +import hashlib +import json +from pathlib import Path + + +def temporal_hit(candidate, query, point=False): + asset = candidate.get("asset") + if asset not in query.get("expected", []): + return False + if query.get("required_modality") and candidate.get("modality") != query["required_modality"]: + return False + ranges = query.get("intervals", {}).get(asset, []) + start = candidate.get("start_s") + end = candidate.get("end_s", start) + if start is None: + return False + if point: + return any(left <= start <= right for left, right in ranges) + return any(min(end, right) > max(start, left) for left, right in ranges) + + +def timestamp_distance(candidate, query): + """Raw seconds from returned start to the nearest labelled event interval.""" + if candidate.get("asset") not in query.get("expected", []) or candidate.get("start_s") is None: + return None + if query.get("required_modality") and candidate.get("modality") != query["required_modality"]: + return None + ranges = query.get("intervals", {}).get(candidate["asset"], []) + stamp = candidate["start_s"] + return min((max(left - stamp, stamp - right, 0) for left, right in ranges), default=None) + + +def metrics(rows): + positive = [row for row in rows if row["query"]["expected"] and not row.get("unsupported")] + negative = [row for row in rows if not row["query"]["expected"] and not row.get("unsupported")] + temporal = [row for row in positive if row["query"]["category"].startswith("video-")] + distances = sorted(distance for row in temporal if row["file_rankings"] and (distance := timestamp_distance(row["file_rankings"][0]["candidate"], row["query"])) is not None) + ranks = [] + for row in positive: + expected = row["query"]["expected"] + ranks.append(next((i + 1 for i, hit in enumerate(row["file_rankings"]) if hit["candidate"]["asset"] in expected), None)) + fraction = lambda count, total: count / total if total else None + return dict( + positive_queries=len(positive), + unsupported_queries=sum(bool(row.get("unsupported")) for row in rows), + recall_at1=fraction(sum(rank == 1 for rank in ranks), len(ranks)), + recall_at5=fraction(sum(rank is not None and rank <= 5 for rank in ranks), len(ranks)), + mrr=fraction(sum(1 / rank if rank else 0 for rank in ranks), len(ranks)), + temporal_queries=len(temporal), + segment_overlap_hit_at1=fraction(sum(bool(row["file_rankings"]) and temporal_hit(row["file_rankings"][0]["candidate"], row["query"]) for row in temporal), len(temporal)), + timestamp_point_hit_at1=fraction(sum(bool(row["file_rankings"]) and temporal_hit(row["file_rankings"][0]["candidate"], row["query"], point=True) for row in temporal), len(temporal)), + segment_overlap_hit_at5=fraction(sum(any(temporal_hit(hit["candidate"], row["query"]) for hit in row["segment_top5"]) for row in temporal), len(temporal)), + timestamp_distance_median_s=distances[len(distances) // 2] if distances else None, + timestamp_distance_max_s=max(distances) if distances else None, + no_answer_queries=len(negative), + no_answer_return_rate=fraction(sum(bool(row["file_rankings"]) for row in negative), len(negative)), + ) + + +def summarize(report): + rows = report["rows"] + by_category = defaultdict(list) + by_language = defaultdict(list) + failures = [] + for row in rows: + query = row["query"] + by_category[query["category"]].append(row) + by_language[query["language"]].append(row) + if row.get("unsupported"): + failures.append(dict(query=query["id"], category="unsupported-query-capability", detail=row["unsupported"])) + continue + hits = row["file_rankings"] + if not query["expected"]: + if hits: + failures.append(dict(query=query["id"], category="no-answer-nearest-neighbor-return", winner=hits[0]["candidate"]["asset"], score=hits[0]["score"])) + elif not hits or hits[0]["candidate"]["asset"] not in query["expected"]: + winner = hits[0]["candidate"]["asset"] if hits else None + failures.append(dict(query=query["id"], category="hard-negative-confusion" if winner in query.get("hard_negatives", []) else "retrieval-top1-miss", winner=winner, expected=query["expected"])) + elif query["category"].startswith("video-") and not temporal_hit(hits[0]["candidate"], query, point=True): + candidate = hits[0]["candidate"] + wrong_channel = query.get("required_modality") and candidate.get("modality") != query["required_modality"] + failures.append(dict(query=query["id"], category="wrong-media-channel" if wrong_channel else "timestamp-localization-miss", candidate=candidate, expected_intervals=query["intervals"], timestamp_distance_s=timestamp_distance(candidate, query))) + durations = sorted(row["query_ms"] for row in rows if "query_ms" in row) + return dict( + fixture_sha256=report["fixture_sha256"], worker=report["worker"], + overall=metrics(rows), by_category={key: metrics(value) for key, value in sorted(by_category.items())}, + by_language={key: metrics(value) for key, value in sorted(by_language.items())}, + encoding_failures=report["encoding_failures"], encoding_ms=report["encoding_ms"], + query_p50_ms=durations[len(durations) // 2] if durations else None, + query_p95_ms=durations[min(len(durations) * 95 // 100, len(durations) - 1)] if durations else None, + failures=failures, + source_scope=report.get("scope", "Direct dense model baseline"), + interpretation="Small independently labelled public-media diagnostic; source_scope identifies the measured lane. No-answer return rate measures unsuppressed output, not a calibrated confidence policy. Audio interval overlap can pass while the returned start timestamp is too early; point hits expose this. This corpus alone cannot certify production quality.", + ) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("report", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + report = json.loads(args.report.read_text(encoding="utf-8")) + fixture = Path("fixtures/media/fixture.json") + assert report["fixture_sha256"] == hashlib.sha256(fixture.read_bytes()).hexdigest() + summary = summarize(report) + args.output.write_text(json.dumps(summary, indent=2), encoding="utf-8") + print(json.dumps(summary["overall"])) + + +if __name__ == "__main__": + main() diff --git a/tools/media-eval/score_budgets.py b/tools/media-eval/score_budgets.py new file mode 100644 index 0000000..6bf88f6 --- /dev/null +++ b/tools/media-eval/score_budgets.py @@ -0,0 +1,38 @@ +"""Summarize predeclared image-budget experiments without fitting thresholds.""" +import argparse +import hashlib +import json +from pathlib import Path + +from score import metrics + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("report", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + report = json.loads(args.report.read_text(encoding="utf-8")) + fixture_hash = hashlib.sha256(Path("fixtures/media/fixture.json").read_bytes()).hexdigest() + if report["fixture_sha256"] != fixture_hash: + raise ValueError("Frozen fixture changed") + if [budget["token_budget"] for budget in report["budgets"]] != [70, 280, 1120]: + raise ValueError("Expected predeclared budgets in order") + summary = { + "fixture_sha256": fixture_hash, + "worker": report["worker"], + "photos": report["photos"], + "queries": report["queries"], + "query_embedding_ms": report["query_embedding_ms"], + "budgets": [dict(token_budget=budget["token_budget"], + encoding_ms=budget["encoding_ms"], + metrics=metrics(budget["rows"])) + for budget in report["budgets"]], + "interpretation": "Same frozen 12 photos and 24 correlated EN/DE queries. Query embeddings shared across budgets. Encoding time is CPU batch cost; ranking-only time excludes inference. Equal small-corpus recall does not prove equal quality on larger or more difficult images.", + } + args.output.write_text(json.dumps(summary, indent=2), encoding="utf-8") + print(json.dumps(summary["budgets"])) + + +if __name__ == "__main__": + main() diff --git a/tools/media-eval/src/bin/image_budgets.rs b/tools/media-eval/src/bin/image_budgets.rs new file mode 100644 index 0000000..74ba737 --- /dev/null +++ b/tools/media-eval/src/bin/image_budgets.rs @@ -0,0 +1,100 @@ +//! Same frozen real photos/queries across predeclared token budgets. +use anyhow::{ensure, Result}; +use searchi_semantic::{Device, GemmaEmbedder, GEMMA_MEDIA_FINGERPRINT}; +use serde_json::{json, Value}; +use sha2::{Digest, Sha256}; +use std::{fs, path::PathBuf, time::Instant}; + +fn main() -> Result<()> { + let args: Vec<_> = std::env::args_os().skip(1).collect(); + ensure!( + args.len() == 4, + "Supply CORPUS_ROOT MODEL_DIR CPU_WORKER OUTPUT_JSON" + ); + ensure!( + std::env::var("SEARCHI_FORCE_CPU").as_deref() == Ok("1"), + "CPU only" + ); + let root = PathBuf::from(&args[0]); + let bytes = fs::read(root.join("fixture.json"))?; + let hash = format!("{:x}", Sha256::digest(&bytes)); + let lock: Value = serde_json::from_slice(&fs::read(root.join("labels.lock.json"))?)?; + ensure!(lock["fixture_sha256"] == hash, "Frozen labels changed"); + let fixture: Value = serde_json::from_slice(&bytes)?; + let photos: Vec<_> = fixture["assets"] + .as_array() + .unwrap() + .iter() + .filter(|asset| asset["kind"] == "image") + .collect(); + let queries: Vec<_> = fixture["queries"] + .as_array() + .unwrap() + .iter() + .filter(|query| query["category"] == "image-memory") + .collect(); + for photo in &photos { + let content = fs::read(root.join(photo["path"].as_str().unwrap()))?; + ensure!( + photo["sha256"] == format!("{:x}", Sha256::digest(content)), + "Frozen photo changed" + ); + } + let mut model = GemmaEmbedder::load_with_device(&args[1], &args[2], 1, Device::Cpu)?; + let mut query_vectors = Vec::new(); + let query_start = Instant::now(); + for query in &queries { + query_vectors.push(model.embed_query(query["text"].as_str().unwrap())?); + } + let query_embedding_ms = query_start.elapsed().as_secs_f64() * 1000.0; + let mut budgets = Vec::new(); + for budget in [70, 280, 1120] { + let start = Instant::now(); + let mut encoded = Vec::new(); + for photo in &photos { + let path = root.join(photo["path"].as_str().unwrap()); + let image = model + .embed_images_with_metadata(&[&path], budget)? + .remove(0); + encoded.push(image); + } + let encoding_ms = start.elapsed().as_secs_f64() * 1000.0; + let mut rows = Vec::new(); + for (query, query_vector) in queries.iter().zip(&query_vectors) { + let rank_start = Instant::now(); + let mut ranked: Vec<_> = photos + .iter() + .zip(&encoded) + .map(|(photo, image)| { + let score: f64 = query_vector + .iter() + .zip(&image.vector) + .map(|(a, b)| f64::from(*a) * f64::from(*b)) + .sum(); + json!({"candidate":{"asset":photo["id"],"modality":"image"},"score":score}) + }) + .collect(); + ranked.sort_by(|a, b| { + b["score"] + .as_f64() + .unwrap() + .total_cmp(&a["score"].as_f64().unwrap()) + }); + rows.push(json!({"query":query,"file_rankings":ranked,"segment_top5":[],"ranking_only_ms":rank_start.elapsed().as_secs_f64()*1000.0})); + } + let resolutions: Vec<_> = photos.iter().zip(&encoded).map(|(photo,image)| json!({"asset":photo["id"],"encoded_width":image.encoded_width,"encoded_height":image.encoded_height,"token_budget":image.token_budget})).collect(); + budgets.push(json!({"token_budget":budget,"encoding_ms":encoding_ms,"images":resolutions,"rows":rows})); + println!( + "Budget {budget}: {} actual photo encodings, {} frozen queries", + photos.len(), + queries.len() + ); + } + fs::write( + &args[3], + serde_json::to_vec_pretty( + &json!({"fixture_sha256":hash,"worker":model.info,"media_fingerprint":GEMMA_MEDIA_FINGERPRINT,"photos":photos.len(),"queries":queries.len(),"query_embedding_ms":query_embedding_ms,"budgets":budgets,"scope":"12-photo-only token-budget comparison; same 24 independently frozen queries, query embeddings computed once and shared across budgets; ranking_only_ms excludes inference; no retrieval threshold or label tuning. Does not certify production search."}), + )?, + )?; + Ok(()) +} diff --git a/tools/media-eval/src/bin/metadata.rs b/tools/media-eval/src/bin/metadata.rs new file mode 100644 index 0000000..61a895d --- /dev/null +++ b/tools/media-eval/src/bin/metadata.rs @@ -0,0 +1,78 @@ +//! Fast actual metadata/keyword check, separate from embedding semantics. +use anyhow::{ensure, Result}; +use searchi_core::SearchIndex; +use searchi_media::{probe, FfmpegTools, MediaIdentity, MediaLimits}; +use serde_json::{json, Value}; +use sha2::{Digest, Sha256}; +use std::{fs, path::PathBuf, time::Instant}; + +fn main() -> Result<()> { + let args: Vec<_> = std::env::args_os().skip(1).collect(); + ensure!(args.len() == 4, "Supply CORPUS FFMPEG FFPROBE OUTPUT"); + let root = PathBuf::from(&args[0]).canonicalize()?; + let bytes = fs::read(root.join("fixture.json"))?; + let hash = format!("{:x}", Sha256::digest(&bytes)); + let lock: Value = serde_json::from_slice(&fs::read(root.join("labels.lock.json"))?)?; + ensure!(lock["fixture_sha256"] == hash, "Frozen labels changed"); + let fixture: Value = serde_json::from_slice(&bytes)?; + let tools = FfmpegTools::new(PathBuf::from(&args[1]), PathBuf::from(&args[2]))?; + let limits = MediaLimits::default(); + let mut index = SearchIndex::open(":memory:")?; + index.index_folder(root.join("assets"))?; + let extraction_start = Instant::now(); + for asset in fixture["assets"] + .as_array() + .unwrap() + .iter() + .filter(|asset| asset["kind"] != "image") + { + let identity = MediaIdentity::read( + &root.join(asset["path"].as_str().unwrap()), + limits.max_file_bytes, + )?; + ensure!( + asset["sha256"] == identity.sha256, + "Frozen source asset changed" + ); + let source = probe(&tools, &identity.path, &limits)?; + let tags = source + .tags + .iter() + .map(|(key, value)| format!("{key}: {value}")) + .collect::>() + .join("\n"); + index.set_media_metadata( + &identity.path.to_string_lossy(), + &tags, + source.duration_ms, + identity.bytes, + identity.modified_ns, + )?; + } + let extraction_ms = extraction_start.elapsed().as_secs_f64() * 1000.0; + let mut rows = Vec::new(); + for query in fixture["queries"] + .as_array() + .unwrap() + .iter() + .filter(|query| query.get("metadata").is_some()) + { + let start = Instant::now(); + let hits = index.search(query["text"].as_str().unwrap(), 20)?; + let query_ms = start.elapsed().as_secs_f64() * 1000.0; + let file_rankings: Vec<_> = hits.iter().map(|hit| { + let asset = fixture["assets"].as_array().unwrap().iter().find(|asset| PathBuf::from(asset["path"].as_str().unwrap()).file_name().unwrap().to_string_lossy()==hit.filename).unwrap(); + json!({"candidate":{"asset":asset["id"],"modality":"metadata","match_kind":hit.match_kind},"score":hit.score}) + }).collect(); + rows.push( + json!({"query":query,"file_rankings":file_rankings,"segment_top5":[],"query_ms":query_ms}), + ); + } + fs::write( + &args[3], + serde_json::to_vec_pretty( + &json!({"fixture_sha256":hash,"worker":null,"encoding_ms":extraction_ms,"encoding_failures":[],"rows":rows,"scope":"Actual FFprobe stream/format metadata + guarded Searchi core FTS; lexical identity queries, no embedding fallback; encoding_ms measures metadata extraction, not model inference"}), + )?, + )?; + Ok(()) +} diff --git a/tools/media-eval/src/bin/pipeline.rs b/tools/media-eval/src/bin/pipeline.rs new file mode 100644 index 0000000..a110e6d --- /dev/null +++ b/tools/media-eval/src/bin/pipeline.rs @@ -0,0 +1,83 @@ +//! End-to-end corpus indexing and querying through actual Searchi APIs. +use anyhow::{ensure, Result}; +use searchi_core::{SearchIndex, SearchOptions}; +use searchi_media::{FfmpegTools, MediaLimits}; +use searchi_service::HybridSearch; +use serde_json::{json, Value}; +use sha2::{Digest, Sha256}; +use std::{fs, path::PathBuf, time::Instant}; + +fn main() -> Result<()> { + let args: Vec<_> = std::env::args_os().skip(1).collect(); + ensure!( + args.len() == 6 || args.len() == 7, + "Supply CORPUS MODEL CPU_WORKER FFMPEG FFPROBE OUTPUT_JSON [AUDIO_WINDOW_SECONDS]" + ); + ensure!( + std::env::var("SEARCHI_FORCE_CPU").as_deref() == Ok("1"), + "CPU only" + ); + let root = PathBuf::from(&args[0]).canonicalize()?; + let bytes = fs::read(root.join("fixture.json"))?; + let hash = format!("{:x}", Sha256::digest(&bytes)); + let lock: Value = serde_json::from_slice(&fs::read(root.join("labels.lock.json"))?)?; + ensure!(lock["fixture_sha256"] == hash, "Frozen labels changed"); + let fixture: Value = serde_json::from_slice(&bytes)?; + for asset in fixture["assets"].as_array().unwrap() { + let content = fs::read(root.join(asset["path"].as_str().unwrap()))?; + ensure!( + asset["sha256"] == format!("{:x}", Sha256::digest(content)), + "Asset changed" + ); + } + let temporary = tempfile::tempdir()?; + let db = temporary.path().join("index.sqlite"); + let mut lexical = SearchIndex::open(&db)?; + let filename_index = lexical.index_folder(root.join("assets"))?; + let mut hybrid = HybridSearch::open(&db, &args[1], &args[2], 1)?; + let tools = FfmpegTools::new(PathBuf::from(&args[3]), PathBuf::from(&args[4]))?; + let start = Instant::now(); + let mut limits = MediaLimits::default(); + if let Some(seconds) = args.get(6) { + let seconds: u32 = seconds.to_string_lossy().parse()?; + ensure!( + (5..=30).contains(&seconds), + "Audio window must be 5–30 seconds" + ); + limits.audio_window_ms = seconds * 1000; + } + let index_report = hybrid.index_embeddings_with_media(&tools, &limits)?; + let encoding_ms = start.elapsed().as_secs_f64() * 1000.0; + println!("Actual pipeline indexed {} chunks", index_report.chunks); + hybrid.warmup()?; + let mut rows = Vec::new(); + for query in fixture["queries"].as_array().unwrap() { + if query["filters"].get("time_range_s").is_some() { + rows.push(json!({"query":query,"unsupported":"Production query API has no temporal-range filter yet"})); + continue; + } + let mut options = SearchOptions::default(); + if let Some(extension) = query["filters"]["extension"].as_str() { + options.extension = Some(extension.into()); + } + let start = Instant::now(); + let hits = hybrid.search(query["text"].as_str().unwrap(), 20, &options)?; + let query_ms = start.elapsed().as_secs_f64() * 1000.0; + let file_rankings: Vec<_> = hits.iter().map(|hit| { + let asset = fixture["assets"].as_array().unwrap().iter().find(|asset| PathBuf::from(asset["path"].as_str().unwrap()).file_name().unwrap().to_string_lossy() == hit.filename).unwrap(); + let modality = if hit.match_kind.contains("audio") { "audio" } else if hit.match_kind == "media_metadata" { "metadata" } else { "image" }; + let mut candidate = json!({"asset":asset["id"],"modality":modality,"match_kind":hit.match_kind,"source":hit.source}); + if let Some(source) = &hit.source { if source.kind == "timestamp_ms" { + let stamp = f64::from(source.number)/1000.0; + candidate["start_s"] = json!(stamp); + candidate["end_s"] = json!((stamp + if modality == "audio" {f64::from(limits.audio_window_ms)/1000.0} else {2.0}).min(asset["duration_s"].as_f64().unwrap_or(stamp))); + candidate["interval_note"] = json!("End inferred from configured pipeline window policy, actual API exposes only start timestamp"); + }} + json!({"candidate":candidate,"score":hit.score}) + }).collect(); + rows.push(json!({"query":query,"segment_top5":file_rankings.iter().take(5).cloned().collect::>(),"file_rankings":file_rankings,"query_ms":query_ms})); + } + let report = json!({"fixture_sha256":hash,"worker":hybrid.worker_info(),"index_report":index_report,"filename_index":filename_index,"encoding_ms":encoding_ms,"audio_window_ms":limits.audio_window_ms,"audio_overlap_ms":limits.audio_overlap_ms,"encoding_failures":index_report.failures,"rows":rows,"scope":"Actual Searchi hybrid pipeline and native extension filters; temporal-range filter unsupported; segment ends inferred from configured audio/frame policy, exact point timestamps come from actual result API"}); + fs::write(&args[5], serde_json::to_vec_pretty(&report)?)?; + Ok(()) +} diff --git a/tools/media-eval/src/main.rs b/tools/media-eval/src/main.rs new file mode 100644 index 0000000..926b4a2 --- /dev/null +++ b/tools/media-eval/src/main.rs @@ -0,0 +1,153 @@ +//! Actual CPU Google embeddings only; labels never enter document/image vectors. +use anyhow::{ensure, Context, Result}; +use searchi_semantic::{Device, GemmaEmbedder, GEMMA_FINGERPRINT, GEMMA_MEDIA_FINGERPRINT}; +use serde_json::{json, Value}; +use sha2::{Digest, Sha256}; +use std::{fs, path::PathBuf, time::Instant}; + +fn main() -> Result<()> { + let args: Vec<_> = std::env::args_os().skip(1).collect(); + ensure!( + args.len() == 4, + "Supply CORPUS_ROOT MODEL_DIR CPU_WORKER OUTPUT_JSON" + ); + ensure!( + std::env::var("SEARCHI_FORCE_CPU").as_deref() == Ok("1"), + "CPU-only benchmark requires SEARCHI_FORCE_CPU=1" + ); + let root = PathBuf::from(&args[0]); + let bytes = fs::read(root.join("fixture.json"))?; + let hash = format!("{:x}", Sha256::digest(&bytes)); + let lock: Value = serde_json::from_slice(&fs::read(root.join("labels.lock.json"))?)?; + ensure!( + lock["fixture_sha256"] == hash, + "Independent labels changed after freezing" + ); + let fixture: Value = serde_json::from_slice(&bytes)?; + let candidates: Value = + serde_json::from_slice(&fs::read(root.join("derived/candidates.json"))?)?; + ensure!( + candidates["fixture_sha256"] == hash, + "Prepared media belongs to different labels" + ); + let mut model = GemmaEmbedder::load_with_device(&args[1], &args[2], 1, Device::Cpu)?; + ensure!( + model.info.device.to_lowercase().contains("cpu"), + "Worker did not report CPU" + ); + let start = Instant::now(); + let mut vectors = Vec::new(); + let mut encoded = Vec::new(); + let mut encoding_failures = Vec::new(); + for candidate in candidates["candidates"] + .as_array() + .context("candidates absent")? + { + let path = PathBuf::from(candidate["path"].as_str().context("path absent")?); + let result = if candidate["modality"] == "image" { + model + .embed_images_with_budget( + &[&path], + candidate["token_budget"].as_u64().unwrap() as u32, + ) + .map(|mut rows| rows.remove(0)) + } else { + let bytes = fs::read(&path)?; + ensure!(bytes.len() % 4 == 0, "PCM alignment invalid"); + let samples: Vec = bytes + .as_chunks::<4>() + .0 + .iter() + .map(|chunk| f32::from_le_bytes(*chunk)) + .collect(); + model.embed_audio_pcm(&samples) + }; + match result { + Ok(vector) => { + vectors.push(vector); + encoded.push(candidate.clone()); + } + Err(error) => { + encoding_failures.push(json!({"candidate": candidate, "error": error.to_string()})) + } + } + println!( + "Encoded {}/{} candidates", + encoded.len(), + candidates["candidates"].as_array().unwrap().len() + ); + } + let index_ms = start.elapsed().as_secs_f64() * 1000.0; + let mut rows = Vec::new(); + for query in fixture["queries"].as_array().context("queries absent")? { + if query.get("metadata").is_some() { + rows.push(json!({"query":query,"unsupported":"Exact metadata requires production lexical lane; direct audio embeddings cannot verify artist/title identities"})); + continue; + } + let start = Instant::now(); + let embedding = model.embed_query(query["text"].as_str().context("query text absent")?)?; + let mut ranked = Vec::new(); + for (candidate, vector) in encoded.iter().zip(&vectors) { + if let Some(modality) = query.get("required_modality") { + if candidate["modality"] != *modality { + continue; + } + } + if let Some(filters) = query.get("filters") { + if let Some(asset) = filters.get("asset") { + if candidate["asset"] != *asset { + continue; + } + } + if let Some(extension) = filters.get("extension").and_then(Value::as_str) { + let asset = fixture["assets"] + .as_array() + .unwrap() + .iter() + .find(|asset| asset["id"] == candidate["asset"]) + .unwrap(); + if !asset["path"] + .as_str() + .unwrap() + .ends_with(&format!(".{extension}")) + { + continue; + } + } + if let Some(range) = filters.get("time_range_s") { + let stamp = candidate["start_s"].as_f64().unwrap_or(-1.0); + if stamp < range[0].as_f64().unwrap() || stamp > range[1].as_f64().unwrap() { + continue; + } + } + } + ensure!( + embedding.len() == vector.len(), + "Mixed embedding dimensions" + ); + let score: f64 = embedding + .iter() + .zip(vector) + .map(|(a, b)| f64::from(*a) * f64::from(*b)) + .sum(); + ranked.push(json!({"candidate":candidate,"score":score})); + } + ranked.sort_by(|a, b| { + b["score"] + .as_f64() + .unwrap() + .total_cmp(&a["score"].as_f64().unwrap()) + }); + let mut seen = std::collections::HashSet::new(); + let file_rankings: Vec<_> = ranked + .iter() + .filter(|row| seen.insert(row["candidate"]["asset"].as_str().unwrap())) + .take(20) + .cloned() + .collect(); + rows.push(json!({"query":query,"file_rankings":file_rankings,"segment_top5":ranked.into_iter().take(5).collect::>(),"query_ms":start.elapsed().as_secs_f64()*1000.0})); + } + let report = json!({"fixture_sha256":hash,"worker":model.info,"text_fingerprint":GEMMA_FINGERPRINT,"media_fingerprint":GEMMA_MEDIA_FINGERPRINT,"policy":candidates["policy"],"ffmpeg_version":candidates["ffmpeg_version"],"encoding_ms":index_ms,"encoded_candidates":encoded.len(),"encoding_failures":encoding_failures,"rows":rows,"scope":"Direct real-model dense reference baseline; candidate filters here are benchmark reference constraints, not production-filter certification; no rejection threshold is tuned"}); + fs::write(&args[3], serde_json::to_vec_pretty(&report)?)?; + Ok(()) +} diff --git a/tools/media-eval/test_score.py b/tools/media-eval/test_score.py new file mode 100644 index 0000000..1a137d7 --- /dev/null +++ b/tools/media-eval/test_score.py @@ -0,0 +1,39 @@ +import unittest +from score import metrics, temporal_hit, timestamp_distance + + +class ScoringTests(unittest.TestCase): + def test_wrong_file_cannot_receive_temporal_credit(self): + query = dict(expected=["clip01"], intervals={"clip01": [[3, 5]]}) + self.assertFalse(temporal_hit(dict(asset="clip02", start_s=3, end_s=5), query)) + + def test_coarse_audio_overlap_does_not_count_as_precise_timestamp(self): + query = dict(expected=["speech"], intervals={"speech": [[13, 16]]}) + candidate = dict(asset="speech", start_s=0, end_s=30) + self.assertTrue(temporal_hit(candidate, query)) + self.assertFalse(temporal_hit(candidate, query, point=True)) + self.assertFalse(temporal_hit(dict(asset="speech", start_s=16, end_s=30), query)) + self.assertEqual(timestamp_distance(candidate, query), 13) + self.assertEqual(timestamp_distance(dict(asset="speech", start_s=15), query), 0) + + def test_visual_frame_cannot_receive_credit_for_a_spoken_topic(self): + query = dict(expected=["movie"], intervals={"movie": [[10, 15]]}, required_modality="audio") + candidate = dict(asset="movie", modality="image", start_s=12, end_s=14) + self.assertFalse(temporal_hit(candidate, query)) + self.assertIsNone(timestamp_distance(candidate, query)) + + def test_no_answers_and_unsupported_cases_do_not_inflate_recall(self): + positive = dict(query=dict(expected=["good"], category="image-memory"), file_rankings=[dict(candidate=dict(asset="bad")), dict(candidate=dict(asset="good"))]) + negative = dict(query=dict(expected=[], category="content-no-answer"), file_rankings=[dict(candidate=dict(asset="bad"))]) + unsupported = dict(query=dict(expected=["good"], category="exact-metadata"), unsupported="metadata unavailable") + result = metrics([positive, negative, unsupported]) + self.assertEqual(result["positive_queries"], 1) + self.assertEqual(result["recall_at1"], 0) + self.assertEqual(result["recall_at5"], 1) + self.assertEqual(result["mrr"], .5) + self.assertEqual(result["no_answer_return_rate"], 1) + self.assertEqual(result["unsupported_queries"], 1) + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/media-runtime/README.md b/tools/media-runtime/README.md new file mode 100644 index 0000000..da6949a --- /dev/null +++ b/tools/media-runtime/README.md @@ -0,0 +1,32 @@ +# Standalone media decoder tools + +The desktop distribution must include FFmpeg and FFprobe alongside its Google +worker. End users should not install tools or configure paths. Development and +release preparation use: + +```sh +python tools/media-runtime/provision.py --stage +python -m unittest discover -s tools/media-runtime -p 'test_*.py' +``` + +The manifest pins a dated BtbN release, exact archive size, and published SHA-256. +Provisioning checks the cache or downloads/verifies the archive, extracts only the +two standalone decoder executables and notices, and stages them under the native +resources directory. Executables and archives are ignored by Git. No global +installation occurs. Movie/audio decoding runs in bounded subprocesses. + +Windows x86-64/ARM64 and Linux x86-64/ARM64 have pinned artifacts. Only Windows +x86-64 has been executed here. A vetted macOS decoder build/staging path remains +a release gate; generic media code can accept native tools through explicit paths. +The selected build is FFmpeg 9.0.2 with LGPL configuration. Keep original notices +and corresponding source/build provenance with distribution; installer licensing +and all-platform execution are still open production gates. + +Source/build provenance: +- https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2026-10-12-13-12 +- https://github.com/BtbN/FFmpeg-Builds +- https://ffmpeg.org/legal.html + +FFmpeg capabilities vary by build. An unsupported or corrupt file must report an +error while remaining filename-searchable; it must never freeze search or be +silently reported as fully indexed. diff --git a/tools/media-runtime/manifest.json b/tools/media-runtime/manifest.json new file mode 100644 index 0000000..082dd42 --- /dev/null +++ b/tools/media-runtime/manifest.json @@ -0,0 +1,27 @@ +{ + "provider": "BtbN/FFmpeg-Builds", + "release": "autobuild-2026-10-12-13-12", + "version": "9.0.2-27-g7e93014c5b", + "platforms": { + "windows-x86_64": { + "archive": "ffmpeg-n9.0.2-27-g7e93014c5b-win64-lgpl-9.0.zip", + "bytes": 171476229, + "sha256": "104a019fe34c0747b208bde4842a0bac8b70a307cc2bb33aa4648fc15ddb2e39" + }, + "windows-aarch64": { + "archive": "ffmpeg-n9.0.2-27-g7e93014c5b-winarm64-lgpl-9.0.zip", + "bytes": 118006941, + "sha256": "68d3bac585b80b6f17e459eb4a203ed1f01b7635d4c611f1685de1ae65ca0987" + }, + "linux-x86_64": { + "archive": "ffmpeg-n9.0.2-27-g7e93014c5b-linux64-lgpl-9.0.tar.xz", + "bytes": 137901812, + "sha256": "12445b38a4700ba1ae7c9c7e57062f602c927dc4187555bfadc9f3e2f75f05b0" + }, + "linux-aarch64": { + "archive": "ffmpeg-n9.0.2-27-g7e93014c5b-linuxarm64-lgpl-9.0.tar.xz", + "bytes": 117008524, + "sha256": "c9160ae8440c17c016fb2f6b3fcce4bb9d633a15845e908b2303948a7724f227" + } + } +} diff --git a/tools/media-runtime/provision.py b/tools/media-runtime/provision.py new file mode 100644 index 0000000..f976078 --- /dev/null +++ b/tools/media-runtime/provision.py @@ -0,0 +1,128 @@ +"""Verify and stage standalone FFmpeg tools. No user-wide installation or GPU use.""" +import argparse +import hashlib +import json +import os +from pathlib import Path +import platform +import shutil +import tarfile +import tempfile +import urllib.request +import zipfile + +ROOT = Path(__file__).resolve().parents[2] +MAX_MEMBER = 256 * 1024 * 1024 + + +def verified(path, artifact): + if not path.is_file() or path.stat().st_size != artifact["bytes"]: + return False + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() == artifact["sha256"] + + +def install(stream, target, expected): + if not 0 < expected <= MAX_MEMBER: + raise ValueError("Archive member exceeds size ceiling") + target.parent.mkdir(parents=True, exist_ok=True) + temporary = target.with_suffix(target.suffix + ".partial") + try: + with temporary.open("wb") as output: + copied = 0 + while block := stream.read(65536): + copied += len(block) + if copied > expected: + raise ValueError("Archive member exceeds declared length") + output.write(block) + if copied != expected: + raise ValueError("Archive member is truncated") + if target.name in {"ffmpeg", "ffprobe"}: + temporary.chmod(0o755) + os.replace(temporary, target) + finally: + temporary.unlink(missing_ok=True) + + +def extract(archive, destination, windows): + required = {"ffmpeg.exe", "ffprobe.exe"} if windows else {"ffmpeg", "ffprobe"} + found = set() + def target_for(name): + # Never extract arbitrary paths: selected basenames map to fixed targets. + basename = name.replace("\\", "/").split("/")[-1] + if basename in required: + if basename in found: + raise ValueError("Duplicate decoder executable") + found.add(basename) + return destination / "bin" / basename + if basename.lower().startswith(("license", "copying")) or basename.lower() in {"readme.txt", "readme.md"}: + parts = name.replace("\\", "/").split("/") + if any(part in {".", "..", ""} or ":" in part for part in parts): + raise ValueError("Unsafe notice path") + return destination / "licenses" / Path(*parts) + return None + if archive.suffix == ".zip": + with zipfile.ZipFile(archive) as package: + for member in package.infolist(): + target = target_for(member.filename) + if target is not None and not member.is_dir(): + with package.open(member) as stream: + install(stream, target, member.file_size) + else: + with tarfile.open(archive, "r:xz") as package: + for member in package: + target = target_for(member.name) + if target is not None: + if not member.isfile(): + raise ValueError("Selected archive member is not a regular file") + with package.extractfile(member) as stream: + install(stream, target, member.size) + if found != required: + raise ValueError("Archive is missing required decoder tools") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--stage", action="store_true", help="Copy verified decoder tools and notices into Tauri resources") + args = parser.parse_args() + manifest = json.loads(Path(__file__).with_name("manifest.json").read_text()) + machine = platform.machine().lower() + architecture = "aarch64" if machine in {"arm64", "aarch64"} else "x86_64" if machine in {"amd64", "x86_64"} else machine + system = platform.system().lower() + key = f"{system}-{architecture}" + if key not in manifest["platforms"]: + raise RuntimeError(f"No verified decoder artifact for {key}; macOS packaging remains a release gate") + artifact = manifest["platforms"][key] + directory = ROOT / ".searchi/media-runtime" + directory.mkdir(parents=True, exist_ok=True) + archive = directory / artifact["archive"] + if not verified(archive, artifact): + url = f"https://github.com/{manifest['provider']}/releases/download/{manifest['release']}/{artifact['archive']}" + with tempfile.NamedTemporaryFile(dir=directory, delete=False) as output: + temporary = Path(output.name) + try: + with urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "searchi-runtime-setup"}), timeout=120) as response: + copied = 0 + while block := response.read(65536): + copied += len(block) + if copied > artifact["bytes"]: + raise ValueError("Decoder download exceeds manifest size") + output.write(block) + output.close() + if not verified(temporary, artifact): + raise ValueError("Decoder size/SHA-256 mismatch") + os.replace(temporary, archive) + finally: + output.close() + temporary.unlink(missing_ok=True) + extract(archive, directory, system == "windows") + if args.stage: + destination = ROOT / "apps/desktop/src-tauri/resources/media-runtime" + shutil.copytree(directory / "bin", destination / "bin", dirs_exist_ok=True) + shutil.copytree(directory / "licenses", destination / "licenses", dirs_exist_ok=True) + shutil.copy2(Path(__file__).with_name("manifest.json"), destination / "manifest.json") + print(f"Verified media tools available at {directory / 'bin'}") + + +if __name__ == "__main__": + main() diff --git a/tools/media-runtime/test_provision.py b/tools/media-runtime/test_provision.py new file mode 100644 index 0000000..58dedd5 --- /dev/null +++ b/tools/media-runtime/test_provision.py @@ -0,0 +1,60 @@ +import hashlib +import importlib.util +from pathlib import Path +import tempfile +import unittest +import zipfile + +spec = importlib.util.spec_from_file_location("media_provision", Path(__file__).with_name("provision.py")) +provision = importlib.util.module_from_spec(spec) +spec.loader.exec_module(provision) + + +class ProvisionTests(unittest.TestCase): + def package(self, directory, entries): + archive = directory / "sample.zip" + with zipfile.ZipFile(archive, "w") as package: + for name, data in entries: + package.writestr(name, data) + return archive + + def test_selects_only_tools_and_preserves_distinct_notices(self): + with tempfile.TemporaryDirectory() as temporary: + directory = Path(temporary) + archive = self.package(directory, [("build/bin/ffmpeg.exe", b"tool1"), + ("build/bin/ffprobe.exe", b"tool2"), ("build/README.txt", b"readme"), + ("build/LICENSE", b"first license"), ("build/dependency/LICENSE", b"second license"), + ("../../unselected.exe", b"unselected")]) + target = directory / "out" + provision.extract(archive, target, True) + self.assertEqual((target / "bin/ffmpeg.exe").read_bytes(), b"tool1") + self.assertEqual(len(list((target / "licenses").rglob("LICENSE"))), 2) + self.assertFalse((directory / "unselected.exe").exists()) + + def test_missing_and_duplicate_executables_are_explicit_failures(self): + with tempfile.TemporaryDirectory() as temporary: + directory = Path(temporary) + for entries in [[("bin/ffmpeg.exe", b"tool")], + [("a/ffmpeg.exe", b"tool"), ("b/ffmpeg.exe", b"second"), ("bin/ffprobe.exe", b"probe")]]: + with self.assertRaises(ValueError): + provision.extract(self.package(directory, entries), directory / "out", True) + + def test_same_size_corruption_is_not_a_verified_cache(self): + with tempfile.TemporaryDirectory() as temporary: + path = Path(temporary) / "archive" + path.write_bytes(b"good") + artifact = {"bytes": 4, "sha256": hashlib.sha256(b"good").hexdigest()} + self.assertTrue(provision.verified(path, artifact)) + path.write_bytes(b"evil") + self.assertFalse(provision.verified(path, artifact)) + + def test_notice_traversal_cannot_escape_output(self): + with tempfile.TemporaryDirectory() as temporary: + directory = Path(temporary) + archive = self.package(directory, [("../../LICENSE", b"escape")]) + with self.assertRaises(ValueError): + provision.extract(archive, directory / "out", True) + + +if __name__ == "__main__": + unittest.main()