44
55import com .google .common .base .Ascii ;
66import com .google .common .collect .ImmutableCollection ;
7+ import com .google .common .collect .ImmutableList ;
78import com .google .common .collect .ImmutableSet ;
89import com .google .common .io .Resources ;
910import dev .cel .bundle .Cel ;
2728import dev .cel .runtime .CelFunctionBinding ;
2829import java .io .IOException ;
2930import java .net .URL ;
31+ import java .time .Instant ;
3032import java .util .List ;
3133import java .util .Optional ;
3234
@@ -40,6 +42,7 @@ final class AgenticPolicyEnvironment {
4042 @ SuppressWarnings ("Immutable" )
4143 static Cel newInstance (AgentClassifier classifier ) {
4244 AgenticPolicyClassifiers classifiers = new AgenticPolicyClassifiers (classifier );
45+
4346 CelBuilder builder = CelFactory .standardCelBuilder ()
4447 .setContainer (CelContainer .ofName ("cel.expr.ai" ))
4548 .addFileTypes (Agent .getDescriptor ().getFile ())
@@ -109,11 +112,50 @@ static Cel newInstance(AgentClassifier classifier) {
109112 AgentMessage .class ,
110113 String .class ,
111114 (msg , toolName ) -> AgentMessageSet .of (msg ).filterToolCall (toolName )),
115+ CelFunctionBinding .from (
116+ "AgentMessageSet_messages" ,
117+ Object .class ,
118+ (set ) -> {
119+ AgentMessageSet messageSet = (AgentMessageSet ) set ;
120+ List <AgentMessage > result = messageSet .filteredContext ()
121+ .getExtension (AgentContextExtensions .agentContextMessageHistory );
122+ return ImmutableList .copyOf (result );
123+ }),
124+ CelFunctionBinding .from (
125+ "list(Finding)_hasAll_list(Finding)" ,
126+ List .class ,
127+ List .class ,
128+ (source , required ) -> hasAllFindings (Optional .of ((List <Finding >) source ), (List <Finding >) required )),
112129 CelFunctionBinding .from (
113130 "AgentMessage_role_string" ,
114131 AgentMessage .class ,
115- String .class ,
116- (msg , role ) -> AgentMessageSet .of (msg ).filterRole (role )));
132+ Object .class ,
133+ (msg , role ) -> AgentMessageSet .of (msg ).filterRole (String .valueOf (role ))),
134+ CelFunctionBinding .from (
135+ "AgentMessageSet_role_string" ,
136+ AgentMessageSet .class ,
137+ Object .class ,
138+ (set , role ) -> set .filterRole (String .valueOf (role ))),
139+ CelFunctionBinding .from (
140+ "AgentMessageSet_before_timestamp" ,
141+ AgentMessageSet .class ,
142+ Instant .class ,
143+ AgentMessageSet ::filterBefore ),
144+ CelFunctionBinding .from (
145+ "AgentMessage_before_timestamp" ,
146+ AgentMessage .class ,
147+ Instant .class ,
148+ (msg , ts ) -> AgentMessageSet .of (msg ).filterBefore (ts )),
149+ CelFunctionBinding .from (
150+ "AgentMessageSet_after_timestamp" ,
151+ AgentMessageSet .class ,
152+ Instant .class ,
153+ AgentMessageSet ::filterAfter ),
154+ CelFunctionBinding .from (
155+ "AgentMessage_after_timestamp" ,
156+ AgentMessage .class ,
157+ Instant .class ,
158+ (msg , ts ) -> AgentMessageSet .of (msg ).filterAfter (ts )));
117159
118160 Cel celEnv = builder .build ();
119161 celEnv = extendFromConfig (celEnv , "environment/agent_env.yaml" );
@@ -131,10 +173,6 @@ private static boolean hasAllFindings(Optional<List<Finding>> sourceOpt, List<Fi
131173 act .getConfidence () >= req .getConfidence ()));
132174 }
133175
134- static Cel newInstance () {
135- return newInstance (AgentClassifier .DEFAULT );
136- }
137-
138176 private static Cel extendFromConfig (Cel cel , String yamlConfigPath ) {
139177 String yamlEnv ;
140178 try {
0 commit comments