[
https://issues.apache.org/jira/browse/CAMEL-23344?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Zineb Bendhiba updated CAMEL-23344:
-----------------------------------
Summary: LangChain4j Agent: Support Camel route-based output/input
guardrails via CamelContextAware (was: Title: LangChain4j Agent: Support Camel
route-based output/input guardrails via CamelContextAware)
> LangChain4j Agent: Support Camel route-based output/input guardrails via
> CamelContextAware
> ------------------------------------------------------------------------------------------
>
> Key: CAMEL-23344
> URL: https://issues.apache.org/jira/browse/CAMEL-23344
> Project: Camel
> Issue Type: New Feature
> Components: langchain4j-agent
> Reporter: Zineb Bendhiba
> Assignee: Zineb Bendhiba
> Priority: Major
>
> Problem
> The current AgentConfiguration only supports guardrails by class
> (withOutputGuardrailClasses), which requires guardrails to have a no-arg
> constructor. Guardrails that need parameters at construction time (like
> JsonSchemaFormatGuardrail, which requires a schema string) cannot be
> configured this way.
> Additionally, loading resources (e.g., a JSON schema file from classpath:)
> requires CamelContext, which is not available during agent configuration and
> creation.
> *Proposed Solution*
> Introduce a Camel route-based guardrail pattern using CamelContextAware:
> 1. Add guardrail instance support to AgentConfiguration: new
> withOutputGuardrails(List<OutputGuardrail>) and
> withInputGuardrails(List<InputGuardrail>) methods alongside the existing
> class-based ones.
> 2. Create CamelRouteOutputGuardrail: a guardrail that implements both
> OutputGuardrail and CamelContextAware. It delegates validation to a Camel
> route endpoint, allowing users to leverage any Camel component for validation
> (e.g., json-validator, custom beans).
> 3. Inject CamelContext in the Producer: LangChain4jAgentProducer iterates
> over guardrail instances and injects CamelContext into any that implement
> CamelContextAware.
> 4. Wire instances in AbstractAgent.configureBuilder(): call
> builder.outputGuardrails(list) / builder.inputGuardrails(list) when instances
> are present (LangChain4j 1.13.0 supports this).
>
> +*Usage Example*+
> {code:java}
> // Define a validation route using existing Camel components
> from("direct:validate-person")
> .to("json-validator:classpath:person-schema.json");
>
> // Create a route-based guardrail
> CamelRouteOutputGuardrail guardrail
> = new CamelRouteOutputGuardrail("direct:validate-person");
>
> // Configure the agent with the guardrail instance
> AgentConfiguration config = new AgentConfiguration()
> .withChatModel(chatModel)
> .withOutputGuardrails(List.of(guardrail));
>
> Agent agent = new AgentWithoutMemory(config);
>
> {code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)