18
18
DataBlock ,
19
19
EmptyBlock ,
20
20
ErrorBlock ,
21
+ ExpressionType ,
21
22
FunctionBlock ,
22
23
GetBlock ,
23
24
GraniteioModelBlock ,
29
30
LastOfBlock ,
30
31
LitellmModelBlock ,
31
32
LitellmParameters ,
33
+ LocalizedExpression ,
32
34
MatchBlock ,
33
35
MessageBlock ,
34
36
ObjectBlock ,
@@ -112,29 +114,28 @@ def block_to_dict( # noqa: C901
112
114
match block :
113
115
case LitellmModelBlock ():
114
116
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 )
118
119
if block .parameters is not None :
119
120
if isinstance (block .parameters , LitellmParameters ):
120
121
d ["parameters" ] = block .parameters .model_dump (
121
122
exclude_unset = True , exclude_defaults = True
122
123
)
123
124
else :
124
- d ["parameters" ] = block .parameters
125
+ d ["parameters" ] = expr_to_dict ( block .parameters , json_compatible )
125
126
if block .modelResponse is not None :
126
127
d ["modelResponse" ] = block .modelResponse
127
128
if block .pdl__usage is not None :
128
129
d ["pdl__usage" ] = usage_to_dict (block .pdl__usage )
129
130
case GraniteioModelBlock ():
130
- d ["model" ] = block .model
131
+ d ["model" ] = expr_to_dict ( block .model , json_compatible )
131
132
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 )
136
137
if block .parameters is not None :
137
- d ["parameters" ] = block .parameters
138
+ d ["parameters" ] = expr_to_dict ( block .parameters , json_compatible )
138
139
if block .modelResponse is not None :
139
140
d ["modelResponse" ] = block .modelResponse
140
141
if block .pdl__usage is not None :
@@ -147,7 +148,7 @@ def block_to_dict( # noqa: C901
147
148
case GetBlock ():
148
149
d ["get" ] = block .get
149
150
case DataBlock ():
150
- d ["data" ] = data_to_dict (block .data , json_compatible )
151
+ d ["data" ] = expr_to_dict (block .data , json_compatible )
151
152
if block .raw :
152
153
d ["raw" ] = block .raw
153
154
case TextBlock ():
@@ -171,7 +172,7 @@ def block_to_dict( # noqa: C901
171
172
case MessageBlock ():
172
173
d ["content" ] = block_to_dict (block .content , json_compatible )
173
174
case ReadBlock ():
174
- d ["read" ] = block .read
175
+ d ["read" ] = expr_to_dict ( block .read , json_compatible )
175
176
d ["message" ] = block .message
176
177
d ["multiline" ] = block .multiline
177
178
case IncludeBlock ():
@@ -183,18 +184,18 @@ def block_to_dict( # noqa: C901
183
184
if block .pdl__trace :
184
185
d ["pdl__trace" ] = block_to_dict (block .pdl__trace , json_compatible )
185
186
case IfBlock ():
186
- d ["if" ] = block .condition
187
+ d ["if" ] = expr_to_dict ( block .condition , json_compatible )
187
188
d ["then" ] = block_to_dict (block .then , json_compatible )
188
189
if block .else_ is not None :
189
190
d ["else" ] = block_to_dict (block .else_ , json_compatible )
190
191
if block .if_result is not None :
191
192
d ["if_result" ] = block .if_result
192
193
case MatchBlock ():
193
- d ["match" ] = block .match_
194
+ d ["match" ] = expr_to_dict ( block .match_ , json_compatible )
194
195
d ["with" ] = [
195
196
{
196
197
"case" : pattern_to_dict (match_case .case ),
197
- "if" : match_case .if_ ,
198
+ "if" : expr_to_dict ( match_case .if_ , json_compatible ) ,
198
199
"then" : block_to_dict (match_case .then , json_compatible ),
199
200
"pdl__case_result" : match_case .pdl__case_result ,
200
201
"pdl__if_result" : match_case .pdl__if_result ,
@@ -203,11 +204,17 @@ def block_to_dict( # noqa: C901
203
204
for match_case in block .with_
204
205
]
205
206
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 )
208
211
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
+ )
211
218
d ["join" ] = join_to_dict (block .join )
212
219
if block .pdl__trace is not None :
213
220
d ["pdl__trace" ] = [
@@ -219,8 +226,8 @@ def block_to_dict( # noqa: C901
219
226
# if block.scope is not None:
220
227
# d["scope"] = scope_to_dict(block.scope, json_compatible)
221
228
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 )
224
231
if block .pdl__trace is not None :
225
232
d ["pdl__trace" ] = block_to_dict (
226
233
block .pdl__trace , json_compatible
@@ -257,14 +264,24 @@ def block_to_dict( # noqa: C901
257
264
return d
258
265
259
266
260
- def data_to_dict (data : Any , json_compatible ):
267
+ def data_to_dict (data : Any , json_compatible : bool ):
261
268
if json_compatible :
262
269
d = as_json (data )
263
270
else :
264
271
d = data
265
272
return d
266
273
267
274
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
+
268
285
def timing_to_dict (timing : PdlTiming ) -> dict :
269
286
d : dict = {}
270
287
if timing .start_nanos != 0 :
0 commit comments