@@ -52,8 +52,22 @@ fn acl_usize_attr(block: &a3s_acl::Block, keys: &[&str]) -> Option<usize> {
5252 }
5353}
5454
55- fn acl_u32_attr ( block : & a3s_acl:: Block , keys : & [ & str ] ) -> Option < u32 > {
56- acl_usize_attr ( block, keys) . map ( |value| value. min ( u32:: MAX as usize ) as u32 )
55+ fn acl_u32 ( value : & a3s_acl:: Value ) -> Option < u32 > {
56+ match value {
57+ a3s_acl:: Value :: Number ( value) if * value >= 0.0 => {
58+ Some ( ( * value as usize ) . min ( u32:: MAX as usize ) as u32 )
59+ }
60+ _ => None ,
61+ }
62+ }
63+
64+ fn acl_object_u32_attr ( value : & a3s_acl:: Value , key : & str ) -> Option < u32 > {
65+ match value {
66+ a3s_acl:: Value :: Object ( pairs) => pairs
67+ . iter ( )
68+ . find_map ( |( candidate, value) | ( candidate == key) . then ( || acl_u32 ( value) ) . flatten ( ) ) ,
69+ _ => None ,
70+ }
5771}
5872
5973fn acl_path_list_attr ( block : & a3s_acl:: Block , keys : & [ & str ] ) -> Option < Vec < PathBuf > > {
@@ -280,52 +294,38 @@ impl CodeConfig {
280294 model. release_date = Some ( release_date) ;
281295 }
282296 }
283- "maxTokens" | "max_tokens" | "outputTokens"
284- | "output_tokens" => {
285- if let Some ( output) = acl_u32_attr (
286- model_block,
287- & [
288- "maxTokens" ,
289- "max_tokens" ,
290- "outputTokens" ,
291- "output_tokens" ,
292- ] ,
293- ) {
297+ "maxTokens" => {
298+ tracing:: warn!(
299+ provider = %provider. name,
300+ model = %model. id,
301+ field = "maxTokens" ,
302+ "Flat ACL model token limit fields are deprecated; use limit = {{ output = ..., context = ... }}"
303+ ) ;
304+ if let Some ( output) = acl_u32 ( value) {
294305 model. limit . output = output;
295306 }
296307 }
297- "contextTokens" | "context_tokens" | "maxContextTokens"
298- | "max_context_tokens" => {
299- if let Some ( context) = acl_u32_attr (
300- model_block,
301- & [
302- "contextTokens" ,
303- "context_tokens" ,
304- "maxContextTokens" ,
305- "max_context_tokens" ,
306- ] ,
307- ) {
308+ "contextTokens" => {
309+ tracing:: warn!(
310+ provider = %provider. name,
311+ model = %model. id,
312+ field = "contextTokens" ,
313+ "Flat ACL model token limit fields are deprecated; use limit = {{ output = ..., context = ... }}"
314+ ) ;
315+ if let Some ( context) = acl_u32 ( value) {
308316 model. limit . context = context;
309317 }
310318 }
311- _ => { }
312- }
313- }
314-
315- for limit_block in & model_block. blocks {
316- if limit_block. name == "limit" {
317- if let Some ( output) = acl_u32_attr (
318- limit_block,
319- & [ "output" , "max_tokens" , "output_tokens" ] ,
320- ) {
321- model. limit . output = output;
322- }
323- if let Some ( context) = acl_u32_attr (
324- limit_block,
325- & [ "context" , "context_tokens" , "max_context_tokens" ] ,
326- ) {
327- model. limit . context = context;
319+ "limit" => {
320+ if let Some ( output) = acl_object_u32_attr ( value, "output" ) {
321+ model. limit . output = output;
322+ }
323+ if let Some ( context) = acl_object_u32_attr ( value, "context" )
324+ {
325+ model. limit . context = context;
326+ }
328327 }
328+ _ => { }
329329 }
330330 }
331331
0 commit comments