pub struct ImageAnalysisTask { /* private fields */ }Expand description
The image-analysis task. Construct via ImageAnalysisTask::new.
§Example
use llmtask::{Task, image_analysis::ImageAnalysisTask};
let task = ImageAnalysisTask::new();
assert!(!task.prompt().is_empty());
assert!(task.grammar().is_json_schema());
let raw = r#"{
"scene": "office", "description": "two people talking",
"subjects": ["person"], "objects": [], "actions": [],
"emotion": [], "shot_type": "wide shot", "lighting": [],
"tags": ["office", "meeting"], "categories": ["business"]
}"#;
let analysis = task.parse(raw).expect("parse should succeed");
assert_eq!(analysis.scene(), "office");
assert_eq!(analysis.tags().len(), 2);Implementations§
Source§impl ImageAnalysisTask
impl ImageAnalysisTask
Sourcepub fn new() -> ImageAnalysisTask
pub fn new() -> ImageAnalysisTask
Construct with accept_empty = false (a payload that lacks the
required indexable content — description AND tags both
populated, OR at least one of the substantive detection buckets
subjects / objects / actions non-empty — is treated as a
model regression and rejected; see Self::with_accept_empty
for the full predicate and the opt-in alternative).
Sourcepub const fn accept_empty(&self) -> bool
pub const fn accept_empty(&self) -> bool
Returns whether the parser accepts payloads that lack the
required indexable content (description AND tags both
non-empty). See Self::with_accept_empty for the trade-off.
Sourcepub const fn with_accept_empty(self, val: bool) -> ImageAnalysisTask
pub const fn with_accept_empty(self, val: bool) -> ImageAnalysisTask
Builder-style setter for accept_empty.
When false (default), the parser rejects payloads that lack
the required indexable content as JsonParseError::NoUsableFields.
The composite threshold accepts a payload when either:
descriptionANDtagsare both populated (the prose + keyword path), OR- at least one of the substantive detection buckets —
subjects,objects, oractions— is non-empty (the substantive-detection path; preserves who/what/where search metadata even when the model fails to summarize).
Style/attribute buckets (emotion, lighting, categories)
and single-label fields (scene, shot_type) are intentionally
NOT in the substantive path. A payload like lighting: ["natural light"] or emotion: ["calm"] alone (description and tags
empty, no substantive detections) is more often a regression
than a legitimate weak-but-real scene; rejecting it surfaces the
failure instead of writing a single-attribute stub to the search
index.
When true, the parser bypasses the indexable-content check and
returns whatever round-trips through the schema.
IMAGE_ANALYSIS_PROMPT explicitly tells the model to “Use empty
arrays or empty strings when a field is unknown”, so on truly
low-information frames (blank, fade-to-black, plain color)
compliant model output can legitimately be sparse or
fully-empty. Use this knob if your pipeline distinguishes
“low-information scene” from “no useful content” via something
other than the parser.
Sourcepub const fn set_accept_empty(&mut self, val: bool) -> &mut ImageAnalysisTask
pub const fn set_accept_empty(&mut self, val: bool) -> &mut ImageAnalysisTask
In-place setter for accept_empty. See
Self::with_accept_empty for the trade-off.
Trait Implementations§
Source§impl Clone for ImageAnalysisTask
impl Clone for ImageAnalysisTask
Source§fn clone(&self) -> ImageAnalysisTask
fn clone(&self) -> ImageAnalysisTask
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Default for ImageAnalysisTask
impl Default for ImageAnalysisTask
Source§fn default() -> ImageAnalysisTask
fn default() -> ImageAnalysisTask
Source§impl Task for ImageAnalysisTask
impl Task for ImageAnalysisTask
Source§type Output = ImageAnalysis
type Output = ImageAnalysis
Source§type ParseError = JsonParseError
type ParseError = JsonParseError
Task::parse. JSON-parsing
Tasks typically use crate::JsonParseError (behind the
json feature).Source§fn schema(&self) -> &Value
fn schema(&self) -> &Value
Task::Value to a concrete type. Engines
that need a unified Grammar enum should call
Task::grammar instead. Read moreSource§fn parse(
&self,
raw: &str,
) -> Result<<ImageAnalysisTask as Task>::Output, JsonParseError>
fn parse( &self, raw: &str, ) -> Result<<ImageAnalysisTask as Task>::Output, JsonParseError>
Output.Auto Trait Implementations§
impl Freeze for ImageAnalysisTask
impl RefUnwindSafe for ImageAnalysisTask
impl Send for ImageAnalysisTask
impl Sync for ImageAnalysisTask
impl Unpin for ImageAnalysisTask
impl UnsafeUnpin for ImageAnalysisTask
impl UnwindSafe for ImageAnalysisTask
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more