1818 DataBlock ,
1919 EmptyBlock ,
2020 ErrorBlock ,
21+ ExpressionType ,
2122 FunctionBlock ,
2223 GetBlock ,
2324 GraniteioModelBlock ,
2930 LastOfBlock ,
3031 LitellmModelBlock ,
3132 LitellmParameters ,
33+ LocalizedExpression ,
3234 MatchBlock ,
3335 MessageBlock ,
3436 ObjectBlock ,
@@ -112,29 +114,28 @@ def block_to_dict( # noqa: C901
112114 match block :
113115 case LitellmModelBlock ():
114116 d ["platform" ] = str (block .platform )
115- d ["model" ] = block .model
116- if block .input is not None :
117- d ["input" ] = block_to_dict (block .input , json_compatible )
117+ d ["model" ] = expr_to_dict (block .model , json_compatible )
118+ d ["input" ] = block_to_dict (block .input , json_compatible )
118119 if block .parameters is not None :
119120 if isinstance (block .parameters , LitellmParameters ):
120121 d ["parameters" ] = block .parameters .model_dump (
121122 exclude_unset = True , exclude_defaults = True
122123 )
123124 else :
124- d ["parameters" ] = block .parameters
125+ d ["parameters" ] = expr_to_dict ( block .parameters , json_compatible )
125126 if block .modelResponse is not None :
126127 d ["modelResponse" ] = block .modelResponse
127128 if block .pdl__usage is not None :
128129 d ["pdl__usage" ] = usage_to_dict (block .pdl__usage )
129130 case GraniteioModelBlock ():
130- d ["model" ] = block .model
131+ d ["model" ] = expr_to_dict ( block .model , json_compatible )
131132 d ["platform" ] = str (block .platform )
132- d ["backend" ] = block .backend
133- d [ "processor" ] = block .processor
134- if block . input is not None :
135- d ["input" ] = block_to_dict (block .input , json_compatible )
133+ d ["backend" ] = expr_to_dict ( block .backend , json_compatible )
134+ if block .processor is not None :
135+ d [ "processor" ] = expr_to_dict ( block . processor , json_compatible )
136+ d ["input" ] = block_to_dict (block .input , json_compatible )
136137 if block .parameters is not None :
137- d ["parameters" ] = block .parameters
138+ d ["parameters" ] = expr_to_dict ( block .parameters , json_compatible )
138139 if block .modelResponse is not None :
139140 d ["modelResponse" ] = block .modelResponse
140141 if block .pdl__usage is not None :
@@ -147,7 +148,7 @@ def block_to_dict( # noqa: C901
147148 case GetBlock ():
148149 d ["get" ] = block .get
149150 case DataBlock ():
150- d ["data" ] = data_to_dict (block .data , json_compatible )
151+ d ["data" ] = expr_to_dict (block .data , json_compatible )
151152 if block .raw :
152153 d ["raw" ] = block .raw
153154 case TextBlock ():
@@ -171,7 +172,7 @@ def block_to_dict( # noqa: C901
171172 case MessageBlock ():
172173 d ["content" ] = block_to_dict (block .content , json_compatible )
173174 case ReadBlock ():
174- d ["read" ] = block .read
175+ d ["read" ] = expr_to_dict ( block .read , json_compatible )
175176 d ["message" ] = block .message
176177 d ["multiline" ] = block .multiline
177178 case IncludeBlock ():
@@ -183,18 +184,18 @@ def block_to_dict( # noqa: C901
183184 if block .pdl__trace :
184185 d ["pdl__trace" ] = block_to_dict (block .pdl__trace , json_compatible )
185186 case IfBlock ():
186- d ["if" ] = block .condition
187+ d ["if" ] = expr_to_dict ( block .condition , json_compatible )
187188 d ["then" ] = block_to_dict (block .then , json_compatible )
188189 if block .else_ is not None :
189190 d ["else" ] = block_to_dict (block .else_ , json_compatible )
190191 if block .if_result is not None :
191192 d ["if_result" ] = block .if_result
192193 case MatchBlock ():
193- d ["match" ] = block .match_
194+ d ["match" ] = expr_to_dict ( block .match_ , json_compatible )
194195 d ["with" ] = [
195196 {
196197 "case" : pattern_to_dict (match_case .case ),
197- "if" : match_case .if_ ,
198+ "if" : expr_to_dict ( match_case .if_ , json_compatible ) ,
198199 "then" : block_to_dict (match_case .then , json_compatible ),
199200 "pdl__case_result" : match_case .pdl__case_result ,
200201 "pdl__if_result" : match_case .pdl__if_result ,
@@ -203,11 +204,17 @@ def block_to_dict( # noqa: C901
203204 for match_case in block .with_
204205 ]
205206 case RepeatBlock ():
206- d ["for" ] = block .for_
207- d ["while" ] = block .while_
207+ if block .for_ is not None :
208+ d ["for" ] = expr_to_dict (block .for_ , json_compatible )
209+ if block .while_ is not None :
210+ d ["while" ] = expr_to_dict (block .while_ , json_compatible )
208211 d ["repeat" ] = block_to_dict (block .repeat , json_compatible )
209- d ["until" ] = block .until
210- d ["max_iterations" ] = block .max_iterations
212+ if block .until is not None :
213+ d ["until" ] = expr_to_dict (block .until , json_compatible )
214+ if block .max_iterations is not None :
215+ d ["max_iterations" ] = expr_to_dict (
216+ block .max_iterations , json_compatible
217+ )
211218 d ["join" ] = join_to_dict (block .join )
212219 if block .pdl__trace is not None :
213220 d ["pdl__trace" ] = [
@@ -219,8 +226,8 @@ def block_to_dict( # noqa: C901
219226 # if block.scope is not None:
220227 # d["scope"] = scope_to_dict(block.scope, json_compatible)
221228 case CallBlock ():
222- d ["call" ] = block .call
223- d ["args" ] = data_to_dict (block .args , json_compatible )
229+ d ["call" ] = expr_to_dict ( block .call , json_compatible )
230+ d ["args" ] = expr_to_dict (block .args , json_compatible )
224231 if block .pdl__trace is not None :
225232 d ["pdl__trace" ] = block_to_dict (
226233 block .pdl__trace , json_compatible
@@ -257,14 +264,24 @@ def block_to_dict( # noqa: C901
257264 return d
258265
259266
260- def data_to_dict (data : Any , json_compatible ):
267+ def data_to_dict (data : Any , json_compatible : bool ):
261268 if json_compatible :
262269 d = as_json (data )
263270 else :
264271 d = data
265272 return d
266273
267274
275+ def expr_to_dict (expr : ExpressionType , json_compatible : bool ):
276+ if isinstance (expr , LocalizedExpression ):
277+ d = {"expr" : data_to_dict (expr .expr , json_compatible )}
278+ if expr .pdl__result is not None :
279+ d ["pdl__result" ] = data_to_dict (expr .pdl__result , json_compatible )
280+ else :
281+ d = data_to_dict (expr , json_compatible )
282+ return d
283+
284+
268285def timing_to_dict (timing : PdlTiming ) -> dict :
269286 d : dict = {}
270287 if timing .start_nanos != 0 :
0 commit comments