Skip to main content

siglip2_naflex/
lib.rs

1#![doc = include_str!("../README.md")]
2#![cfg_attr(docsrs, feature(doc_cfg))]
3#![deny(rust_2018_idioms, single_use_lifetimes, missing_docs)]
4
5pub mod calibration;
6pub mod embedding;
7pub mod error;
8#[cfg(feature = "inference")]
9#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
10pub mod image_enc;
11pub mod image_view;
12pub mod options;
13pub mod preproc;
14#[cfg(feature = "inference")]
15#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
16pub(crate) mod session;
17#[cfg(feature = "inference")]
18#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
19pub mod siglip2;
20pub(crate) mod simd;
21#[cfg(feature = "inference")]
22#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
23pub mod text_enc;
24
25pub use calibration::Calibration;
26pub use embedding::{Embedding, LabeledScore, LabeledScoreOwned};
27pub use error::{Error, Result};
28#[cfg(feature = "inference")]
29#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
30pub use image_enc::ImageEncoder;
31pub use image_view::ImageView;
32#[cfg(feature = "inference")]
33#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
34pub use options::GraphOptimizationLevel;
35pub use options::{BatchOptions, Options, ThreadOptions};
36pub use preproc::{PreprocessedBatch, Preprocessor};
37#[cfg(feature = "inference")]
38#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
39pub use siglip2::Siglip2;
40#[cfg(feature = "inference")]
41#[cfg_attr(docsrs, doc(cfg(feature = "inference")))]
42pub use text_enc::TextEncoder;
43
44/// Raw bytes of the bundled `google/siglip2-base-patch16-naflex`
45/// `tokenizer.json`, embedded via `include_bytes!`. Used internally
46/// by the `bundled` constructors on `TextEncoder` and `Siglip2`;
47/// exposed publicly so callers who need to assemble a `Tokenizer`
48/// off the bundled JSON (for example, ahead of `from_ort_session`)
49/// can do so without round-tripping through disk.
50#[cfg(feature = "bundled")]
51pub const BUNDLED_TOKENIZER: &[u8] = include_bytes!("../models/tokenizer.json");
52
53/// **Hidden, unstable bench/test helpers — not part of the public API.**
54///
55/// Exposes the SIMD dispatcher and its scalar fallback by direct name
56/// so `benches/bench_dot_768.rs` (and any in-crate microbench) can
57/// measure the two paths side-by-side. No semver guarantees on this
58/// module — it can change or disappear in any release.
59#[doc(hidden)]
60pub mod __bench_internal {
61  pub fn dot_768_scalar(a: &[f32], b: &[f32]) -> f32 {
62    crate::simd::scalar::dot_768(a, b)
63  }
64
65  pub fn dot_768_dispatch(a: &[f32], b: &[f32]) -> f32 {
66    crate::simd::dot_768(a, b)
67  }
68
69  pub fn normalize_patchify_row_scalar(src: &[u8], dst: &mut [f32]) {
70    crate::simd::scalar::normalize_patchify_row(src, dst);
71  }
72
73  pub fn normalize_patchify_row_dispatch(src: &[u8], dst: &mut [f32]) {
74    crate::simd::normalize_patchify_row(src, dst);
75  }
76
77  pub fn scale_768_inplace_scalar(v: &mut [f32], factor: f32) {
78    crate::simd::scalar::scale_768_inplace(v, factor);
79  }
80
81  pub fn scale_768_inplace_dispatch(v: &mut [f32], factor: f32) {
82    crate::simd::scale_768_inplace(v, factor);
83  }
84}