@@ -288,12 +288,12 @@ def test_parse_subtype_output(self):
288288STRING 1: s1
289289STRING 2: s2
290290STRING 3: s3
291- ITEM SUBTITLE 1 : subtitle one
292- ITEM DESCRIPTION 1 : description one
293- ITEM ABSTRACT 1 : Just an abstract...
294- ITEM SUBTITLE 2 : subtitle two
295- ITEM DESCRIPTION 2 : Description TWO
296- ITEM ABSTRACT 2 : More abstract...
291+ ITEM 1 SUBTITLE : subtitle one
292+ ITEM 1 DESCRIPTION : description one
293+ ITEM 1 ABSTRACT : Just an abstract...
294+ ITEM 2 SUBTITLE : subtitle two
295+ ITEM 2 DESCRIPTION : Description TWO
296+ ITEM 2 ABSTRACT : More abstract...
297297
298298SUBITEM TITLE: A subitem title (!!)
299299
@@ -343,7 +343,8 @@ class InnerElement(BaseLLMArrayElement):
343343 description : str | None = LLMArrayElementOutput (lambda pos : f"Put the { pos .ordinal } item description here" )
344344 abstract : str = LLMArrayElementOutput (lambda _ : "..." , multiline = True )
345345 inner_item : InnerItem
346- # inner_elements: list[InnerElement] = LLMArrayOutput(2, instruction=lambda _: "...")
346+ inner_elements : list [InnerElement ] = LLMArrayOutput (2 , instruction = lambda _ : "..." )
347+ multiline_text : list [str ] = LLMArrayOutput ((0 , None ), lambda _ : "..." , multiline = True )
347348
348349 class DirectItem (BaseLLMResponse ):
349350 class InnerDirectElement (BaseLLMArrayElement ):
@@ -362,25 +363,38 @@ def test_parse_ultra_subtype_output(self):
362363
363364SUBITEM TITLE: subtitle
364365disregarded!
365- SUBITEM X SUBTITLE 1 : sub1
366+ SUBITEM X 1 SUBTITLE : sub1
366367? also disregarded ?
367- SUBITEM X SUBTITLE 2: sub2
368-
369- ITEM SUBTITLE 1: First item subtitle
370- ITEM DESCRIPTION 1: first descr.
371- ITEM ABSTRACT 1: Jsut some random abstract
372- ITEM INNER ITEM TITLE 1: INNER TITLE 1
373- ITEM INNER ITEM DESCRIPTION 1: DESCription 1
374- ITEM INNER ELEMENT VALUE 1: 1.0
375- ITEM INNER ELEMENT IS ACCURATE 1: yes
376- ITEM INNER ELEMENT VALUE 2: 3.14
377- ITEM INNER ELEMENT IS ACCURATE 2: False
378-
379- ITEM SUBTITLE 2: Second item subtitle
380- ITEM ABSTRACT 2: Another abstract but this time
368+ SUBITEM X 2 SUBTITLE: sub2
369+
370+ ITEM 1 SUBTITLE: First item subtitle
371+ ITEM 1 DESCRIPTION: first descr.
372+ ITEM 1 ABSTRACT: Jsut some random abstract
373+ ITEM 1 INNER ITEM TITLE: INNER TITLE 1
374+ ITEM 1 INNER ITEM DESCRIPTION: DESCription 1
375+ ITEM 1 INNER ELEMENT 1 VALUE: 1.0
376+ ITEM 1 INNER ELEMENT 1 IS ACCURATE: yes
377+ ITEM 1 INNER ELEMENT 2 VALUE: 3.14
378+ ITEM 1 INNER ELEMENT 2 IS ACCURATE: False
379+ ITEM 1 MULTILINE TEXT 1: line 1
380+ line 2
381+ line 3
382+ ITEM 1 MULTILINE TEXT 2: line 4
383+ line 5
384+ line 6
385+ ITEM 1 MULTILINE TEXT 3: line 7
386+ line 8
387+ line 9
388+
389+ ITEM 2 SUBTITLE: Second item subtitle
390+ ITEM 2 ABSTRACT: Another abstract but this time
381391with multiple lines
382- ITEM INNER ITEM TITLE 2: tt2
383- ITEM INNER ITEM DESCRIPTION 2: dd2
392+ ITEM 2 INNER ITEM TITLE: tt2
393+ ITEM 2 INNER ITEM DESCRIPTION: dd2
394+ ITEM 2 INNER ELEMENT 1 VALUE: 2.0
395+ ITEM 2 INNER ELEMENT 1 IS ACCURATE: no
396+ ITEM 2 INNER ELEMENT 2 VALUE: 8.958
397+ ITEM 2 INNER ELEMENT 2 IS ACCURATE: True
384398"""
385399 parsed_output = self .UltraSubtypeTestOutput .parse_response (completion_output )
386400 assert parsed_output .title == "Main head title"
@@ -395,11 +409,22 @@ def test_parse_ultra_subtype_output(self):
395409 assert parsed_output .items [0 ].abstract == "Jsut some random abstract"
396410 assert parsed_output .items [0 ].inner_item .title == "INNER TITLE 1"
397411 assert parsed_output .items [0 ].inner_item .description == "DESCription 1"
412+ assert len (parsed_output .items [0 ].inner_elements ) == 2
413+ assert parsed_output .items [0 ].inner_elements [0 ].value == 1.0
414+ assert parsed_output .items [0 ].inner_elements [0 ].is_accurate == True
415+ assert parsed_output .items [0 ].inner_elements [1 ].value == 3.14
416+ assert parsed_output .items [0 ].inner_elements [1 ].is_accurate == False
417+ assert parsed_output .items [0 ].multiline_text == ["line 1\n line 2\n line 3" , "line 4\n line 5\n line 6" , "line 7\n line 8\n line 9" ]
398418
399419 assert parsed_output .items [1 ].subtitle == "Second item subtitle"
400420 assert parsed_output .items [1 ].description is None
401421 assert parsed_output .items [1 ].abstract == "Another abstract but this time\n with multiple lines"
402422 assert parsed_output .items [1 ].inner_item .title == "tt2"
403423 assert parsed_output .items [1 ].inner_item .description == "dd2"
424+ assert len (parsed_output .items [1 ].inner_elements ) == 2
425+ assert parsed_output .items [1 ].inner_elements [0 ].value == 2.0
426+ assert parsed_output .items [1 ].inner_elements [0 ].is_accurate == False
427+ assert parsed_output .items [1 ].inner_elements [1 ].value == 8.958
428+ assert parsed_output .items [1 ].inner_elements [1 ].is_accurate == True
404429
405430 # endregion
0 commit comments