[ 
https://issues.apache.org/jira/browse/CAMEL-25049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Luigi De Masi updated CAMEL-25049:
----------------------------------
    Fix Version/s: 4.23.0

> camel-semantic: Support batching multiple named questions
> ---------------------------------------------------------
>
>                 Key: CAMEL-25049
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25049
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-ai
>            Reporter: Luigi De Masi
>            Assignee: Luigi De Masi
>            Priority: Minor
>             Fix For: 4.23.0
>
>
> h2. Motivation
> The semantic language introduced by CAMEL-24977 and [PR 
> #26813|https://github.com/apache/camel/pull/26813] evaluates one named 
> question per invocation. Routes that need several independent judgments about 
> the same message currently require separate evaluations.
> Add explicit batching of existing named questions, returning answers keyed by 
> question name for reuse across ordinary Camel EIPs. TypeSafe AI already 
> supports mixed Boolean, Choice and Score questions in one request with a 
> shared state.
> This is a separate, backward-compatible follow-up to CAMEL-24977.
> h2. Proposed approach
> * Reuse existing named question definitions, decision thresholds and 
> uncertainty policies.
> * Support an explicit batch expression through the existing generic language 
> integration. Illustrative syntax, subject to review:
> {code:java}
> .setProperty("decision")
>     .language("semantic", "refs:urgent,department,priority")
> {code}
> * Return a map of normalized decisions keyed by question name, for example 
> {{urgent -> true}}, {{department -> "billing"}} and {{priority -> 2.4}}. 
> Preserve detailed per-question results, including available probabilities, 
> confidence and provider metadata.
> * Keep Camel's existing model and core Java DSL unchanged. Java, XML and YAML 
> use the same semantic expression text. Define unambiguous reference parsing, 
> including the treatment of delimiters in question names.
> * Preserve {{ref:name}}, its return type and existing single-question result 
> metadata. Preserve {{SemanticAdapter.evaluate(SemanticQuestion, Object)}}.
> * Add a default batch method to {{SemanticAdapter}} that delegates to 
> existing single-question evaluation. Existing adapters continue working 
> without implementing a new abstract method. Override it in 
> {{TypeSafeAiSemanticAdapter}} to send all selected questions in one HTTP 
> request. Document that the default fallback performs sequential calls.
> * Initially require all selected questions to use the same effective state 
> selector. Evaluate that selector once per batch; reject incompatible 
> selectors instead of silently changing a question's input. Questions that 
> depend on an earlier answer remain separate evaluations.
> h2. Correctness and validation
> * Reject empty selections, duplicate or unknown references, unsupported 
> question capabilities and incompatible state selectors before inference where 
> possible.
> * Resolve a consistent set of question definitions for each batch, including 
> after route/resource reload.
> * Validate the complete response and apply each question's existing decision 
> policy before exposing batch results. Missing, extra or invalid answers and 
> provider failures follow Camel error handling; valid negative decisions and 
> configured uncertainty policies retain their existing meaning.
> * Preserve interruption and lifecycle behavior. Do not expose partial or 
> stale batch diagnostics after failure.
> * Batch expressions return maps, with no implicit AND/OR predicate conversion 
> and no implicit caching or batching across exchanges.
> h2. Acceptance criteria
> * Mixed Boolean, Choice and Score questions work in one batch; the TypeSafe 
> adapter makes exactly one HTTP request.
> * Existing single-question routes and adapters continue to work unchanged; 
> the default fallback is covered.
> * Tests cover reference validation, state selection, per-question 
> decision/uncertainty policies, malformed/provider responses, failure cleanup 
> and reload consistency.
> * Document Java and YAML examples, result reuse, provider fallback behavior 
> and the shared-state restriction; regenerate affected catalog 
> documentation/tooling artifacts.
> h2. References
> * CAMEL-24977
> * [Apache Camel PR #26813|https://github.com/apache/camel/pull/26813]
> * [TypeSafe AI: asking multiple questions 
> together|https://docs.typesafe.ai/primitives#ask-multiple-questions-together]
> _AI-generated by Codex on behalf of luigidemasi._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to