diff --git a/CHANGELOG.md b/CHANGELOG.md index 16393da09..e507ff70a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. +## [0.65.0](https://github.com/boundaryml/baml/compare/0.64.0..0.65.0) - 2024-10-31 + +### Documentation + +- **New Documentation Structure**: Introduced version 3 of the documentation, enhancing clarity and organization. ([#1118](https://github.com/boundaryml/baml/commit/bab2767414172dd632437a57631c4cee04910518)) + +Co-authored by: Vaibhav Gupta , Antonio Sarosi + +### Bug Fixes + +- **Python Type Handling**: Moved Python Checked and Check types into `baml_client` for better type management. ([#1122](https://github.com/boundaryml/baml/commit/0ccf473fd821d25d431bbf4341c4e837967104bf)) +- **Literal Input Type Checking**: Fixed an issue where literal inputs were not being type-checked correctly. ([#1121](https://github.com/boundaryml/baml/commit/aa5dc85026a175216b5caae6320d09a1fcd35752)) + + ## [0.64.0](https://github.com/boundaryml/baml/compare/0.63.0..0.64.0) - 2024-10-29 ### Bug Fixes diff --git a/engine/Cargo.lock b/engine/Cargo.lock index de16ca17a..38cb8780f 100644 --- a/engine/Cargo.lock +++ b/engine/Cargo.lock @@ -773,7 +773,7 @@ dependencies = [ [[package]] name = "baml-lib" -version = "0.64.0" +version = "0.65.0" dependencies = [ "base64 0.13.1", "dissimilar", @@ -810,7 +810,7 @@ dependencies = [ [[package]] name = "baml-runtime" -version = "0.64.0" +version = "0.65.0" dependencies = [ "ambassador", "anyhow", @@ -900,7 +900,7 @@ dependencies = [ [[package]] name = "baml-schema-build" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "baml-runtime", @@ -936,7 +936,7 @@ dependencies = [ [[package]] name = "baml-types" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "clap", @@ -2334,7 +2334,7 @@ dependencies = [ [[package]] name = "internal-baml-codegen" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "askama", @@ -2359,7 +2359,7 @@ dependencies = [ [[package]] name = "internal-baml-core" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "baml-types", @@ -2394,7 +2394,7 @@ dependencies = [ [[package]] name = "internal-baml-diagnostics" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "colored", @@ -2407,7 +2407,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "askama", @@ -2428,7 +2428,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja-types" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "askama", @@ -2447,7 +2447,7 @@ dependencies = [ [[package]] name = "internal-baml-parser-database" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "baml-types", @@ -2469,7 +2469,7 @@ dependencies = [ [[package]] name = "internal-baml-prompt-parser" -version = "0.64.0" +version = "0.65.0" dependencies = [ "internal-baml-diagnostics", "internal-baml-schema-ast", @@ -2481,7 +2481,7 @@ dependencies = [ [[package]] name = "internal-baml-schema-ast" -version = "0.64.0" +version = "0.65.0" dependencies = [ "baml-types", "either", @@ -2567,7 +2567,7 @@ checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" [[package]] name = "jsonish" -version = "0.64.0" +version = "0.65.0" dependencies = [ "anyhow", "assert-json-diff", diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 1c6aed1a2..a63e45560 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -81,7 +81,7 @@ internal-baml-jinja = { path = "baml-lib/jinja" } internal-baml-schema-ast = { path = "baml-lib/schema-ast" } [workspace.package] -version = "0.64.0" +version = "0.65.0" authors = ["Boundary "] description = "BAML Toolchain" diff --git a/engine/language_client_python/pyproject.toml b/engine/language_client_python/pyproject.toml index e7022f506..8fbc745fc 100644 --- a/engine/language_client_python/pyproject.toml +++ b/engine/language_client_python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "baml-py" -version = "0.64.0" +version = "0.65.0" description = "BAML python bindings (pyproject.toml)" readme = "README.md" authors = [["Boundary", "contact@boundaryml.com"]] diff --git a/engine/language_client_ruby/baml.gemspec b/engine/language_client_ruby/baml.gemspec index 81a62c949..3cf6fa566 100644 --- a/engine/language_client_ruby/baml.gemspec +++ b/engine/language_client_ruby/baml.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |spec| spec.name = "baml" - spec.version = "0.64.0" + spec.version = "0.65.0" spec.authors = ["BoundaryML"] spec.email = ["contact@boundaryml.com"] diff --git a/engine/language_client_typescript/package.json b/engine/language_client_typescript/package.json index f76e83079..7672e0806 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -1,6 +1,6 @@ { "name": "@boundaryml/baml", - "version": "0.64.0", + "version": "0.65.0", "description": "BAML typescript bindings (package.json)", "repository": { "type": "git", diff --git a/integ-tests/baml_src/generators.baml b/integ-tests/baml_src/generators.baml index b13dc20fc..2a769f14b 100644 --- a/integ-tests/baml_src/generators.baml +++ b/integ-tests/baml_src/generators.baml @@ -1,24 +1,24 @@ generator lang_python { output_type python/pydantic output_dir "../python" - version "0.64.0" + version "0.65.0" } generator lang_typescript { output_type typescript output_dir "../typescript" - version "0.64.0" + version "0.65.0" } generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" - version "0.64.0" + version "0.65.0" } // generator openapi { // output_type rest/openapi // output_dir "../openapi" -// version "0.64.0" +// version "0.65.0" // on_generate "rm .gitignore" // } diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index 98674b28e..f1c969991 100644 --- a/integ-tests/python/baml_client/inlinedbaml.py +++ b/integ-tests/python/baml_client/inlinedbaml.py @@ -25,7 +25,7 @@ "fiddle-examples/extract-receipt-info.baml": "class ReceiptItem {\n name string\n description string?\n quantity int\n price float\n}\n\nclass ReceiptInfo {\n items ReceiptItem[]\n total_cost float?\n venue \"barisa\" | \"ox_burger\"\n}\n\nfunction ExtractReceiptInfo(email: string, reason: \"curiosity\" | \"personal_finance\") -> ReceiptInfo {\n client GPT4o\n prompt #\"\n Given the receipt below:\n\n ```\n {{email}}\n ```\n\n {{ ctx.output_format }}\n \"#\n}\n\n", "fiddle-examples/images/image.baml": "function DescribeImage(img: image) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n\n Describe the image below in 20 words:\n {{ img }}\n \"#\n\n}\n\nclass FakeImage {\n url string\n}\n\nclass ClassWithImage {\n myImage image\n param2 string\n fake_image FakeImage\n}\n\n// chat role user present\nfunction DescribeImage2(classWithImage: ClassWithImage, img2: image) -> string { \n client GPT4Turbo\n prompt #\"\n {{ _.role(\"user\") }}\n You should return 2 answers that answer the following commands.\n\n 1. Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n 2. Also tell me what's happening here in one sentence:\n {{ img2 }}\n \"#\n}\n\n// no chat role\nfunction DescribeImage3(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\n\n// system prompt and chat prompt\nfunction DescribeImage4(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n {{ _.role(\"system\")}}\n\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\ntest TestName {\n functions [DescribeImage]\n args {\n img { url \"https://imgs.xkcd.com/comics/standards.png\"}\n }\n}\n", "fiddle-examples/symbol-tuning.baml": "enum Category3 {\n Refund @alias(\"k1\")\n @description(\"Customer wants to refund a product\")\n\n CancelOrder @alias(\"k2\")\n @description(\"Customer wants to cancel an order\")\n\n TechnicalSupport @alias(\"k3\")\n @description(\"Customer needs help with a technical issue unrelated to account creation or login\")\n\n AccountIssue @alias(\"k4\")\n @description(\"Specifically relates to account-login or account-creation\")\n\n Question @alias(\"k5\")\n @description(\"Customer has a question\")\n}\n\nfunction ClassifyMessage3(input: string) -> Category {\n client GPT4\n\n prompt #\"\n Classify the following INPUT into ONE\n of the following categories:\n\n INPUT: {{ input }}\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}", - "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.64.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.64.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.64.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.64.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.65.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.65.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.65.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.65.0\"\n// on_generate \"rm .gitignore\"\n// }\n", "test-files/aliases/aliased-inputs.baml": "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml": "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml": "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", diff --git a/integ-tests/python/report.html b/integ-tests/python/report.html index 03ee50425..e405aa4b1 100644 --- a/integ-tests/python/report.html +++ b/integ-tests/python/report.html @@ -3,11 +3,11 @@
Test Report

Summary

91
91 passed

Tests

tests/test_functions.py 88 0:02:58.988229

PASSED test_env_vars_reset 0:00:01.128474

Setup

Call

Captured stdout call
Context depth is greater than 0!
+    
Test Report

Summary

91
1 failed 90 passed

Tests

tests/test_functions.py 187 0:03:05.211790

PASSED test_env_vars_reset 0:00:01.366683

Setup

Call

Captured stdout call
Context depth is greater than 0!
 Except but ending trace!
 Context depth is greater than 0!
-
Captured stderr call
[2024-10-29T04:40:50Z WARN  baml_events] Function ExtractPeople:
-    Client: GPT4 (<unknown>) - 127ms
+
Captured stderr call
[2024-10-31T01:07:40Z WARN  baml_events] Function ExtractPeople:
+    Client: GPT4 (<unknown>) - 170ms
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -32,8 +32,8 @@
         }
     }
     
-[2024-10-29T04:40:51Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 607ms. StopReason: stop
+[2024-10-31T01:07:41Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 801ms. StopReason: stop
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -60,11 +60,11 @@
         "hair_color": "BLACK"
       }
     ]
-

Teardown

PASSED test_sync 0:00:00.446559

Setup

Call

Captured stdout call
got response key
+

Teardown

PASSED test_sync 0:00:00.494807

Setup

Call

Captured stdout call
got response key
 true
 52
-
Captured stderr call
[2024-10-29T04:40:51Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 442ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:07:42Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 490ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -77,8 +77,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.528353

Setup

Call

Captured stderr call
[2024-10-29T04:40:52Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 519ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.480382

Setup

Call

Captured stderr call
[2024-10-31T01:07:42Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 473ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: true
     
@@ -86,8 +86,8 @@
     true
     ---Parsed Response (string)---
     "true"
-

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.402837

Setup

Call

Captured stderr call
[2024-10-29T04:40:52Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 395ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.600075

Setup

Call

Captured stderr call
[2024-10-31T01:07:43Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 594ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: ["a", "b", "c"]
     
@@ -95,8 +95,8 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED TestAllInputs::test_return_literal_union 0:00:00.409481

Setup

Call

Captured stderr call
[2024-10-29T04:40:52Z INFO  baml_events] Function LiteralUnionsTest:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 405ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_return_literal_union 0:00:00.535051

Setup

Call

Captured stderr call
[2024-10-31T01:07:43Z INFO  baml_events] Function LiteralUnionsTest:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 529ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return one of these values: 
     Answer in JSON using any of these schemas:
@@ -106,8 +106,8 @@
     1
     ---Parsed Response (int)---
     1
-

Teardown

PASSED TestAllInputs::test_constraints 0:00:00.762048

Setup

Call

Captured stderr call
[2024-10-29T04:40:53Z INFO  baml_events] Function PredictAge:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 749ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_constraints 0:00:01.309052

Setup

Call

Captured stderr call
[2024-10-31T01:07:45Z INFO  baml_events] Function PredictAge:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1295ms. StopReason: stop
     ---PROMPT---
     [chat] system: Using your understanding of the historical popularity
     of names, predict the age of a person with the name
@@ -143,8 +143,8 @@
       "certainty": 95,
       "species": "Homo sapiens"
     }
-

Teardown

PASSED TestAllInputs::test_constraint_union_variant_checking 0:00:00.748649

Setup

Call

Captured stderr call
[2024-10-29T04:40:54Z INFO  baml_events] Function ExtractContactInfo:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 725ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_constraint_union_variant_checking 0:00:01.724387

Setup

Call

Captured stderr call
[2024-10-31T01:07:46Z INFO  baml_events] Function ExtractContactInfo:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1702ms. StopReason: stop
     ---PROMPT---
     [chat] system: Extract a primary contact info, and if possible a secondary contact
     info, from this document:
@@ -183,8 +183,8 @@
         "value": "111-222-3333"
       }
     }
-

Teardown

PASSED TestAllInputs::test_return_malformed_constraint 0:00:00.666992

Setup

Call

Captured stderr call
[2024-10-29T04:40:55Z WARN  baml_events] Function ReturnMalformedConstraints:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 662ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_return_malformed_constraint 0:00:00.644740

Setup

Call

Captured stderr call
[2024-10-31T01:07:47Z WARN  baml_events] Function ReturnMalformedConstraints:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 638ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return the integer after 1
     
@@ -201,8 +201,8 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=0, unparsed=1
       - <root>: Failed to parse field foo: foo: Failed to evaluate constraints: unknown method: object has no method named length (in <string>:1)
         - foo: Failed to evaluate constraints: unknown method: object has no method named length (in <string>:1)
-

Teardown

PASSED TestAllInputs::test_use_malformed_constraint 0:00:00.002457

Setup

Call

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.667005

Setup

Call

Captured stderr call
[2024-10-29T04:40:55Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 661ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_use_malformed_constraint 0:00:00.003271

Setup

Call

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.415704

Setup

Call

Captured stderr call
[2024-10-31T01:07:48Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 410ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -215,8 +215,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.628087

Setup

Call

Captured stderr call
[2024-10-29T04:40:56Z INFO  baml_events] Function TestMulticlassNamedArgs:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 620ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.579959

Setup

Call

Captured stderr call
[2024-10-31T01:07:48Z INFO  baml_events] Function TestMulticlassNamedArgs:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 573ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -235,8 +235,8 @@
     64
     ---Parsed Response (string)---
     "key\ntrue\n52\nkey\ntrue\n64"
-

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.472711

Setup

Call

Captured stderr call
[2024-10-29T04:40:56Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 466ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.431302

Setup

Call

Captured stderr call
[2024-10-31T01:07:49Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 424ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     ["TWO"]
@@ -245,8 +245,8 @@
     ["TWO"]
     ---Parsed Response (string)---
     "[\"TWO\"]"
-

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.504072

Setup

Call

Captured stderr call
[2024-10-29T04:40:57Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 497ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.341839

Setup

Call

Captured stderr call
[2024-10-31T01:07:49Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 336ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: 3.12
     
@@ -254,8 +254,8 @@
     3.12
     ---Parsed Response (string)---
     "3.12"
-

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.487319

Setup

Call

Captured stderr call
[2024-10-29T04:40:57Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 481ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.554385

Setup

Call

Captured stderr call
[2024-10-31T01:07:49Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 548ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: 3566
     
@@ -263,8 +263,8 @@
     3566
     ---Parsed Response (string)---
     "3566"
-

Teardown

PASSED TestAllInputs::test_single_literal_int 0:00:00.329306

Setup

Call

Captured stderr call
[2024-10-29T04:40:58Z INFO  baml_events] Function TestNamedArgsLiteralInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 323ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_literal_int 0:00:00.671725

Setup

Call

Captured stderr call
[2024-10-31T01:07:50Z INFO  baml_events] Function TestNamedArgsLiteralInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 665ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: 1
     
@@ -272,8 +272,8 @@
     1
     ---Parsed Response (string)---
     "1"
-

Teardown

PASSED TestAllInputs::test_single_literal_bool 0:00:00.410450

Setup

Call

Captured stderr call
[2024-10-29T04:40:58Z INFO  baml_events] Function TestNamedArgsLiteralBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 404ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_literal_bool 0:00:00.524066

Setup

Call

Captured stderr call
[2024-10-31T01:07:51Z INFO  baml_events] Function TestNamedArgsLiteralBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 517ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: true
     
@@ -281,8 +281,8 @@
     true
     ---Parsed Response (string)---
     "true"
-

Teardown

PASSED TestAllInputs::test_single_literal_string 0:00:00.305843

Setup

Call

Captured stderr call
[2024-10-29T04:40:58Z INFO  baml_events] Function TestNamedArgsLiteralString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 300ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_literal_string 0:00:00.386349

Setup

Call

Captured stderr call
[2024-10-31T01:07:51Z INFO  baml_events] Function TestNamedArgsLiteralString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 380ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: My String
     
@@ -290,8 +290,8 @@
     My String
     ---Parsed Response (string)---
     "My String"
-

Teardown

PASSED TestAllInputs::test_class_with_literal_prop 0:00:00.808497

Setup

Call

Captured stderr call
[2024-10-29T04:40:59Z INFO  baml_events] Function FnLiteralClassInputOutput:
-    Client: GPT4 (gpt-4o-2024-08-06) - 799ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_class_with_literal_prop 0:00:00.565372

Setup

Call

Captured stderr call
[2024-10-31T01:07:52Z INFO  baml_events] Function FnLiteralClassInputOutput:
+    Client: GPT4 (gpt-4o-2024-08-06) - 558ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return the same object you were given.
     Answer in JSON using this schema:
@@ -307,8 +307,8 @@
     {
       "prop": "hello"
     }
-

Teardown

PASSED TestAllInputs::test_literal_classs_with_literal_union_prop 0:00:00.563000

Setup

Call

Captured stderr call
[2024-10-29T04:41:00Z INFO  baml_events] Function FnLiteralUnionClassInputOutput:
-    Client: GPT4 (gpt-4o-2024-08-06) - 555ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_literal_classs_with_literal_union_prop 0:00:00.637794

Setup

Call

Captured stderr call
[2024-10-31T01:07:52Z INFO  baml_events] Function FnLiteralUnionClassInputOutput:
+    Client: GPT4 (gpt-4o-2024-08-06) - 628ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return the same object you were given.
     Answer in JSON using any of these schemas:
@@ -328,8 +328,8 @@
     {
       "prop": "one"
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.615135

Setup

Call

Captured stderr call
[2024-10-29T04:41:00Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 610ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.650911

Setup

Call

Captured stderr call
[2024-10-31T01:07:53Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 644ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: {"dolor": "sit", "lorem": "ipsum"}
     
@@ -340,8 +340,8 @@
       "dolor": "sit",
       "lorem": "ipsum"
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.704818

Setup

Call

Captured stderr call
[2024-10-29T04:41:01Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 699ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.691946

Setup

Call

Captured stderr call
[2024-10-31T01:07:54Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 684ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: {"lorem": {
         "word": "ipsum",
@@ -359,8 +359,8 @@
         "word": "ipsum"
       }
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.515729

Setup

Call

Captured stderr call
[2024-10-29T04:41:02Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 509ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.609274

Setup

Call

Captured stderr call
[2024-10-31T01:07:54Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 602ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: {"lorem": {"word": "ipsum"}}
     
@@ -372,8 +372,8 @@
         "word": "ipsum"
       }
     }
-

Teardown

PASSED test_should_work_for_all_outputs 0:00:05.511855

Setup

Call

Captured stderr call
[2024-10-29T04:41:02Z INFO  baml_events] Function FnOutputBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 451ms. StopReason: stop
+

Teardown

PASSED test_should_work_for_all_outputs 0:00:05.706594

Setup

Call

Captured stderr call
[2024-10-31T01:07:55Z INFO  baml_events] Function FnOutputBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 494ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a true: Answer as a: bool
     
@@ -381,8 +381,8 @@
     True
     ---Parsed Response (bool)---
     true
-[2024-10-29T04:41:03Z INFO  baml_events] Function FnOutputInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 520ms. StopReason: stop
+[2024-10-31T01:07:55Z INFO  baml_events] Function FnOutputInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 569ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return the integer 5 with no additional context.
     
@@ -390,8 +390,8 @@
     5
     ---Parsed Response (int)---
     5
-[2024-10-29T04:41:03Z INFO  baml_events] Function FnOutputLiteralInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 349ms. StopReason: stop
+[2024-10-31T01:07:56Z INFO  baml_events] Function FnOutputLiteralInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 615ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return an integer: Answer using this specific value:
     5
@@ -400,8 +400,8 @@
     5
     ---Parsed Response (int)---
     5
-[2024-10-29T04:41:03Z INFO  baml_events] Function FnOutputLiteralBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 509ms. StopReason: stop
+[2024-10-31T01:07:56Z INFO  baml_events] Function FnOutputLiteralBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 516ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a false: Answer using this specific value:
     false
@@ -410,8 +410,8 @@
     false
     ---Parsed Response (bool)---
     false
-[2024-10-29T04:41:04Z INFO  baml_events] Function FnOutputLiteralString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 452ms. StopReason: stop
+[2024-10-31T01:07:57Z INFO  baml_events] Function FnOutputLiteralString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 526ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a string: Answer using this specific value:
     "example output"
@@ -420,8 +420,8 @@
     example output
     ---Parsed Response (string)---
     "example output"
-[2024-10-29T04:41:05Z INFO  baml_events] Function FnOutputClassList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 652ms. StopReason: stop
+[2024-10-31T01:07:57Z INFO  baml_events] Function FnOutputClassList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 510ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON array that follows this schema: 
     Answer with a JSON Array using this schema:
@@ -436,20 +436,20 @@
     
     ---LLM REPLY---
     [
-      {
-        "prop1": "apple",
-        "prop2": 5
-      }
+        {
+            "prop1": "example",
+            "prop2": 123
+        }
     ]
     ---Parsed Response (list<class TestOutputClass>)---
     [
       {
-        "prop1": "apple",
-        "prop2": 5
+        "prop1": "example",
+        "prop2": 123
       }
     ]
-[2024-10-29T04:41:05Z INFO  baml_events] Function FnOutputClassWithEnum:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 709ms. StopReason: stop
+[2024-10-31T01:07:58Z INFO  baml_events] Function FnOutputClassWithEnum:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 571ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -463,16 +463,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "hello world",
-      "prop2": "ONE"
+      "prop1": "Hello, world!",
+      "prop2": "TWO"
     }
     ---Parsed Response (class TestClassWithEnum)---
     {
-      "prop1": "hello world",
-      "prop2": "ONE"
+      "prop1": "Hello, world!",
+      "prop2": "TWO"
     }
-[2024-10-29T04:41:06Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 625ms. StopReason: stop
+[2024-10-31T01:07:59Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 676ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -487,16 +487,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, World!",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, World!",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
-[2024-10-29T04:41:07Z INFO  baml_events] Function FnEnumListOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 540ms. StopReason: stop
+[2024-10-31T01:07:59Z INFO  baml_events] Function FnEnumListOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 435ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print out two of these values randomly selected from the list below in a json array.
     
@@ -509,16 +509,16 @@
     
     ---LLM REPLY---
     [
-      'ONE',
-      'THREE'
+      "ONE",
+      "THREE"
     ]
     ---Parsed Response (list<enum EnumOutput>)---
     [
       "ONE",
       "THREE"
     ]
-[2024-10-29T04:41:07Z INFO  baml_events] Function FnEnumOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 652ms. StopReason: stop
+[2024-10-31T01:08:00Z INFO  baml_events] Function FnEnumOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 729ms. StopReason: stop
     ---PROMPT---
     [chat] system: Choose one of these values randomly. Before you give the answer, write out an unrelated haiku about the ocean.
     
@@ -529,63 +529,59 @@
     - THREE
     
     ---LLM REPLY---
-    Waves crash on the shore
-    Tide whispers secrets of old
-    Ocean's endless roar
+    A vast blue expanse
+    Whispers secrets to the shore
+    Mystery below
     
-    VALUE_ENUM
-    --------
-    TWO
+    VALUE_ENUM: TWO
     ---Parsed Response (enum EnumOutput)---
     "TWO"
-

Teardown

PASSED test_should_work_with_image_url 0:00:00.926580

Setup

Call

Captured stderr call
[2024-10-29T04:41:08Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 918ms. StopReason: stop
+

Teardown

PASSED test_should_work_with_image_url 0:00:01.594091

Setup

Call

Captured stderr call
[2024-10-31T01:08:01Z INFO  baml_events] Function TestImageInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1586ms. StopReason: stop
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder: https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png>
     
     ---LLM REPLY---
-    Green, friendly, animated character.
+    Green ogre, brown vest.
     ---Parsed Response (string)---
-    "Green, friendly, animated character."
-

Teardown

PASSED test_should_work_with_image_list 0:00:01.359046

Setup

Call

Captured stderr call
[2024-10-29T04:41:09Z INFO  baml_events] Function TestImageListInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1351ms. StopReason: stop
+    "Green ogre, brown vest."
+

Teardown

PASSED test_should_work_with_image_list 0:00:02.480673

Setup

Call

Captured stderr call
[2024-10-31T01:08:04Z INFO  baml_events] Function TestImageListInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 2473ms. StopReason: stop
     ---PROMPT---
     [chat] user: What colors do these have in common? [<image_placeholder: https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png>,<image_placeholder: https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png>]
     
     ---LLM REPLY---
-    Both images include the color green.
+    The common color between Shrek and the Google logo is blue. Shrek primarily features green, while the Google logo includes blue, red, yellow, and green.
     ---Parsed Response (string)---
-    "Both images include the color green."
-

Teardown

PASSED test_should_work_with_vertex 0:00:09.823781

Setup

Call

Captured stderr call
[2024-10-29T04:41:19Z INFO  baml_events] Function TestVertex:
-    Client: Vertex () - 9816ms. StopReason: "STOP"
+    "The common color between Shrek and the Google logo is blue. Shrek primarily features green, while the Google logo includes blue, red, yellow, and green."
+

Teardown

PASSED test_should_work_with_vertex 0:00:08.843600

Setup

Call

Captured stderr call
[2024-10-31T01:08:13Z INFO  baml_events] Function TestVertex:
+    Client: Vertex () - 8834ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Write a nice short story about donkey kong
     
     ---LLM REPLY---
-    The sun dripped through the leafy canopy, dappling the jungle floor in gold. Donkey Kong, larger than life and twice as grumpy, sat hunched on a fallen log, picking at a particularly stubborn knot in his fur. Every so often, he would cast a watchful eye towards the rickety platform where his banana hoard lay, guarded fiercely by a certain mischievous primate.
+    The banana sunset painted the jungle canopy in hues of orange and gold. Donkey Kong, perched on his highest platform, sighed a contented sigh. Another day, another pile of bananas successfully defended from those pesky Kongs in red ties. 
     
-    Little Diddy Kong was practicing his roll. He zipped back and forth, a blur of blue and red, giggling with every successful spin. But even the most dedicated of trainees needs a break. Diddy hopped down, his attention caught by a vibrantly coloured butterfly flitting between the vines. 
+    He scratched his ear with a banana peel, his thoughts drifting to the younger Kongs playing by the river. He was tough on them, sure, but someone had to teach them the importance of banana security. 
     
-    Donkey Kong grunted. "You watchin' them bananas, right?" 
+    Suddenly, a high-pitched squeal pierced through the evening air. It was Diddy, his little nephew, and he sounded scared. Donkey Kong sprang to his feet, his fur bristling. Nobody messed with family.
     
-    Diddy, distracted by the butterfly, gave a distracted thumbs-up. 
+    He followed the sound to a clearing, where he found Diddy cornered by a pack of Kremlings, their beady eyes gleaming menacingly. The little Kong was trembling, clutching a single, bruised banana.
     
-    Donkey Kong sighed, the sound like a rumble in the jungle.  “This is important, Diddy. Remember what those Kremlings did last time?”
+    Anger surged through Donkey Kong. These Kremlings were getting bolder, picking on someone so small. He beat his chest, letting out a roar that shook the trees. The Kremlings flinched, but their numbers gave them courage. They charged. 
     
-    The mention of their nemesis sent a shiver down Diddy's spine. He remembered, alright. Empty peels littered the ground, a painful reminder of their banana-less week.  He quickly resumed his post, eyes glued to the precious fruit. 
+    What followed was a blur of fur, teeth, and banana peels. Donkey Kong fought like a Kong possessed, tossing Kremlings aside like rag dolls. Finally, the last one scampered away, whimpering. 
     
-    Just then, a rustling in the bushes caught Diddy's eye.  He squinted, heart pounding.  Could it be...?  No, it was just Cranky Kong, leaning heavily on his cane. 
+    Diddy rushed to his uncle, his eyes wide with admiration. "You saved me, DK!"
     
-    “You two look tense,” Cranky croaked, his voice rough as tree bark.  “Need a reminder on how to properly defend a banana hoard?”
+    Donkey Kong ruffled the little Kong's fur with a gruff chuckle. "Course I did, little buddy. No one messes with family." 
     
-    Diddy and Donkey Kong exchanged a look. Nobody argued with Cranky. They spent the next hour being put through their paces, dodging imaginary Kremlings and practicing banana-guarding maneuvers. By the time the sun began to set, Diddy was exhausted but proud. He had protected the bananas, just like a true Kong. 
-    
-    As they settled down for the night, Diddy nestled close to his large protector. Donkey Kong may be grumpy, Diddy thought, but he was the best guardian a Kong could ask for. And besides, protecting bananas was a serious business, even in their peaceful jungle paradise. 
+    He handed Diddy his own bunch of bananas, keeping the bruised one for himself. It tasted sweeter than all the others. As the moon replaced the sun, casting long shadows across the jungle, Donkey Kong felt a warmth spread through his chest. It wasn't just the setting sun. It was the feeling of family, a feeling stronger than any barrel throw. 
     
     ---Parsed Response (string)---
-    "The sun dripped through the leafy canopy, dappling the jungle floor in gold. Donkey Kong, larger than life and twice as grumpy, sat hunched on a fallen log, picking at a particularly stubborn knot in his fur. Every so often, he would cast a watchful eye towards the rickety platform where his banana hoard lay, guarded fiercely by a certain mischievous primate.\n\nLittle Diddy Kong was practicing his roll. He zipped back and forth, a blur of blue and red, giggling with every successful spin. But even the most dedicated of trainees needs a break. Diddy hopped down, his attention caught by a vibrantly coloured butterfly flitting between the vines. \n\nDonkey Kong grunted. \"You watchin' them bananas, right?\" \n\nDiddy, distracted by the butterfly, gave a distracted thumbs-up. \n\nDonkey Kong sighed, the sound like a rumble in the jungle.  “This is important, Diddy. Remember what those Kremlings did last time?”\n\nThe mention of their nemesis sent a shiver down Diddy's spine. He remembered, alright. Empty peels littered the ground, a painful reminder of their banana-less week.  He quickly resumed his post, eyes glued to the precious fruit. \n\nJust then, a rustling in the bushes caught Diddy's eye.  He squinted, heart pounding.  Could it be...?  No, it was just Cranky Kong, leaning heavily on his cane. \n\n“You two look tense,” Cranky croaked, his voice rough as tree bark.  “Need a reminder on how to properly defend a banana hoard?”\n\nDiddy and Donkey Kong exchanged a look. Nobody argued with Cranky. They spent the next hour being put through their paces, dodging imaginary Kremlings and practicing banana-guarding maneuvers. By the time the sun began to set, Diddy was exhausted but proud. He had protected the bananas, just like a true Kong. \n\nAs they settled down for the night, Diddy nestled close to his large protector. Donkey Kong may be grumpy, Diddy thought, but he was the best guardian a Kong could ask for. And besides, protecting bananas was a serious business, even in their peaceful jungle paradise. \n"
-

Teardown

PASSED test_should_work_with_image_base64 0:00:01.182007

Setup

Call

Captured stderr call
[2024-10-29T04:41:20Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1162ms. StopReason: stop
+    "The banana sunset painted the jungle canopy in hues of orange and gold. Donkey Kong, perched on his highest platform, sighed a contented sigh. Another day, another pile of bananas successfully defended from those pesky Kongs in red ties. \n\nHe scratched his ear with a banana peel, his thoughts drifting to the younger Kongs playing by the river. He was tough on them, sure, but someone had to teach them the importance of banana security. \n\nSuddenly, a high-pitched squeal pierced through the evening air. It was Diddy, his little nephew, and he sounded scared. Donkey Kong sprang to his feet, his fur bristling. Nobody messed with family.\n\nHe followed the sound to a clearing, where he found Diddy cornered by a pack of Kremlings, their beady eyes gleaming menacingly. The little Kong was trembling, clutching a single, bruised banana.\n\nAnger surged through Donkey Kong. These Kremlings were getting bolder, picking on someone so small. He beat his chest, letting out a roar that shook the trees. The Kremlings flinched, but their numbers gave them courage. They charged. \n\nWhat followed was a blur of fur, teeth, and banana peels. Donkey Kong fought like a Kong possessed, tossing Kremlings aside like rag dolls. Finally, the last one scampered away, whimpering. \n\nDiddy rushed to his uncle, his eyes wide with admiration. \"You saved me, DK!\"\n\nDonkey Kong ruffled the little Kong's fur with a gruff chuckle. \"Course I did, little buddy. No one messes with family.\" \n\nHe handed Diddy his own bunch of bananas, keeping the bruised one for himself. It tasted sweeter than all the others. As the moon replaced the sun, casting long shadows across the jungle, Donkey Kong felt a warmth spread through his chest. It wasn't just the setting sun. It was the feeling of family, a feeling stronger than any barrel throw. \n"
+

Teardown

PASSED test_should_work_with_image_base64 0:00:01.418970

Setup

Call

Captured stderr call
[2024-10-31T01:08:14Z INFO  baml_events] Function TestImageInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1395ms. StopReason: stop
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder base64>
     
@@ -593,8 +589,8 @@
     Green animated ogre character.
     ---Parsed Response (string)---
     "Green animated ogre character."
-

Teardown

PASSED test_should_work_with_audio_base64 0:00:01.049838

Setup

Call

Captured stderr call
[2024-10-29T04:41:22Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 1040ms. StopReason: "STOP"
+

Teardown

PASSED test_should_work_with_audio_base64 0:00:01.046669

Setup

Call

Captured stderr call
[2024-10-31T01:08:15Z INFO  baml_events] Function AudioInput:
+    Client: Gemini () - 1034ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
@@ -603,8 +599,8 @@
     
     ---Parsed Response (string)---
     "Yes \n"
-

Teardown

PASSED test_should_work_with_audio_url 0:00:01.127325

Setup

Call

Captured stderr call
[2024-10-29T04:41:23Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 989ms. StopReason: "STOP"
+

Teardown

PASSED test_should_work_with_audio_url 0:00:01.342192

Setup

Call

Captured stderr call
[2024-10-31T01:08:17Z INFO  baml_events] Function AudioInput:
+    Client: Gemini () - 1208ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
@@ -613,10 +609,10 @@
     
     ---Parsed Response (string)---
     "No \n"
-

Teardown

PASSED test_works_with_retries2 0:00:02.170633

Setup

Call

Captured stdout call
Expected error LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1730176885, tv_nsec: 121807000 }, latency: 181.710875ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
-
Captured stderr call
[2024-10-29T04:41:25Z WARN  baml_events] Function TestRetryExponential:
+

Teardown

PASSED test_works_with_retries2 0:00:02.527812

Setup

Call

Captured stdout call
Expected error LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1730336899, tv_nsec: 391984000 }, latency: 265.737208ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+
Captured stderr call
[2024-10-31T01:08:19Z WARN  baml_events] Function TestRetryExponential:
     (3 other previous tries)
-    Client: RetryClientExponential (<unknown>) - 181ms
+    Client: RetryClientExponential (<unknown>) - 265ms
     ---PROMPT---
     [chat] system: Say a haiku
     
@@ -632,459 +628,379 @@
         }
     }
     
-

Teardown

PASSED test_works_with_fallbacks 0:00:02.236699

Setup

Call

Captured stderr call
[2024-10-29T04:41:27Z INFO  baml_events] Function TestFallbackClient:
+

Teardown

PASSED test_works_with_fallbacks 0:00:02.434539

Setup

Call

Captured stderr call
[2024-10-31T01:08:22Z INFO  baml_events] Function TestFallbackClient:
     (5 other previous tries)
-    Client: GPT35 (gpt-3.5-turbo-0125) - 657ms. StopReason: stop
+    Client: GPT35 (gpt-3.5-turbo-0125) - 837ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say a haiku about mexico.
     
     ---LLM REPLY---
-    Vibrant colors dance,
-    Mariachi music plays,
-    Mexico's heartbeat.
+    Vibrant colors gleam
+    Mariachi serenades
+    Mexico's beauty
     ---Parsed Response (string)---
-    "Vibrant colors dance,\nMariachi music plays,\nMexico's heartbeat."
-

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.000896

Setup

Call

Teardown

PASSED test_claude 0:00:01.125451

Setup

Call

Captured stderr call
[2024-10-29T04:41:28Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 1123ms. StopReason: "end_turn"
+    "Vibrant colors gleam\nMariachi serenades\nMexico's beauty"
+

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.002236

Setup

Call

Teardown

PASSED test_claude 0:00:01.023483

Setup

Call

Captured stderr call
[2024-10-31T01:08:23Z INFO  baml_events] Function PromptTestClaude:
+    Client: Sonnet (claude-3-5-sonnet-20241022) - 1017ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
     Here's a haiku about Mt. Rainier:
     
-    Rainier stands supreme
+    Rainier stands alone
     Fourteen thousand feet skyward
     Guardian of clouds
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier:\n\nRainier stands supreme\nFourteen thousand feet skyward\nGuardian of clouds"
-

Teardown

PASSED test_gemini 0:00:09.064593

Setup

Call

Captured stdout call
LLM output from Gemini: Mildred bustled around her little antique shop, straightening already perfectly aligned doilies and humming along to the radio. The afternoon sun, streaming through the dusty windowpanes, illuminated motes of dust dancing in the air. The bell above the door chimed, announcing a customer. 
-
-Mildred turned, a welcoming smile ready on her lips. It faltered. A young man, clad in a crisp black suit and sunglasses, stood awkwardly holding a can of Dr Pepper. 
-
-"Can I help you, dear?" Mildred asked, her brow furrowed. He looked wildly out of place amongst the antique teacups and vintage hats.
+    "Here's a haiku about Mt. Rainier:\n\nRainier stands alone\nFourteen thousand feet skyward\nGuardian of clouds"
+

Teardown

PASSED test_gemini 0:00:08.479854

Setup

Call

Captured stdout call
LLM output from Gemini: Dr. Pete Pepper, or just Dr. P as the other sodas called him, wasn't like the rest of them. He wasn't content simply being bubbly and sweet. No, Dr. P was a thinker, an explorer, an adventurer trapped in a soda fountain dispenser. He yearned to understand the world beyond the cold, steel walls and the whispered conversations of thirsty customers. 
 
-"I… I think I need to be here," he mumbled, holding up the can. "At least, that's what the note said."
+One day, a young boy, freckled and full of mischief, chose Dr. P from the line-up. The boy, named Sam, didn't gulp him down like the others. He sipped, savoring the unique, 23-flavor profile that made Dr. P so special. 
 
-Mildred, utterly bewildered, noticed a small, folded piece of paper tucked beneath the can's pull tab. She took it with trembling hands, unfolded it, and read aloud:
+As Sam sat by the window, Dr. P felt a strange sensation - a lifting, a lightness. He realized with a jolt that he was seeing the outside world through Sam's eyes. The vibrant green of the park, the bright yellow of the sun, the deep blue of the sky – all exploded in his senses. 
 
-"To whoever finds this, drink the Dr Pepper. It holds the key." 
+Over the next few weeks, Sam and Dr. P became inseparable. Sam, a budding artist, would describe the colors and shapes he saw, and Dr. P, in turn, would tell Sam about his dreams of adventure, his longing to experience the world beyond the soda fountain. 
 
-Mildred and the young man stared at each other. The only sound was the gentle ticking of the grandfather clock in the corner. 
+One day, armed with a pad and some crayons, Sam began to draw. He sketched quickly, a whirlwind of colors and lines, and when he finished, he held up his masterpiece. It was Dr. P, standing on top of a mountain, a compass in one hand, a flag in the other, a huge grin on his fizzy face. 
 
-"Well," Mildred finally said, her sense of adventure outweighing her confusion. "Don't let it get warm!"
+Dr. P felt a warmth spread through him, not the cold sting of ice, but the genuine warmth of friendship and shared dreams. He might have been a soda, but with Sam, he had found a way to explore the world, sip by delicious sip. And in his own unique way, Dr. P knew he was finally living up to his name – a true adventurer, discovering the world one flavor at a time. 
 
-The young man hesitantly popped open the can. As the fizzy drink hit his tongue, the air in the shop shimmered. The grandfather clock chimed, its familiar sound now amplified, echoing like a church bell. Then, just as suddenly, everything was still.
-
-The young man blinked. He was no longer in the antique shop. He stood on a sunny beach, the scent of salt and sunscreen in the air. In his hand, the can of Dr Pepper remained, the note gone. 
-
-He smiled. He didn’t know how or why, but he knew exactly where he was – back at the beach where he'd first met the love of his life, years ago. And this time, he was determined not to let her go. 
-
-Mildred watched the empty shop, a knowing smile on her lips. Dr Pepper, she mused, was indeed a curious and wonderful thing. 
-
-
Captured stderr call
[2024-10-29T04:41:37Z INFO  baml_events] Function TestGemini:
-    Client: Gemini () - 9058ms. StopReason: "STOP"
+
Captured stderr call
[2024-10-31T01:08:31Z INFO  baml_events] Function TestGemini:
+    Client: Gemini () - 8471ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Mildred bustled around her little antique shop, straightening already perfectly aligned doilies and humming along to the radio. The afternoon sun, streaming through the dusty windowpanes, illuminated motes of dust dancing in the air. The bell above the door chimed, announcing a customer. 
-    
-    Mildred turned, a welcoming smile ready on her lips. It faltered. A young man, clad in a crisp black suit and sunglasses, stood awkwardly holding a can of Dr Pepper. 
+    Dr. Pete Pepper, or just Dr. P as the other sodas called him, wasn't like the rest of them. He wasn't content simply being bubbly and sweet. No, Dr. P was a thinker, an explorer, an adventurer trapped in a soda fountain dispenser. He yearned to understand the world beyond the cold, steel walls and the whispered conversations of thirsty customers. 
     
-    "Can I help you, dear?" Mildred asked, her brow furrowed. He looked wildly out of place amongst the antique teacups and vintage hats.
+    One day, a young boy, freckled and full of mischief, chose Dr. P from the line-up. The boy, named Sam, didn't gulp him down like the others. He sipped, savoring the unique, 23-flavor profile that made Dr. P so special. 
     
-    "I… I think I need to be here," he mumbled, holding up the can. "At least, that's what the note said."
+    As Sam sat by the window, Dr. P felt a strange sensation - a lifting, a lightness. He realized with a jolt that he was seeing the outside world through Sam's eyes. The vibrant green of the park, the bright yellow of the sun, the deep blue of the sky – all exploded in his senses. 
     
-    Mildred, utterly bewildered, noticed a small, folded piece of paper tucked beneath the can's pull tab. She took it with trembling hands, unfolded it, and read aloud:
+    Over the next few weeks, Sam and Dr. P became inseparable. Sam, a budding artist, would describe the colors and shapes he saw, and Dr. P, in turn, would tell Sam about his dreams of adventure, his longing to experience the world beyond the soda fountain. 
     
-    "To whoever finds this, drink the Dr Pepper. It holds the key." 
+    One day, armed with a pad and some crayons, Sam began to draw. He sketched quickly, a whirlwind of colors and lines, and when he finished, he held up his masterpiece. It was Dr. P, standing on top of a mountain, a compass in one hand, a flag in the other, a huge grin on his fizzy face. 
     
-    Mildred and the young man stared at each other. The only sound was the gentle ticking of the grandfather clock in the corner. 
-    
-    "Well," Mildred finally said, her sense of adventure outweighing her confusion. "Don't let it get warm!"
-    
-    The young man hesitantly popped open the can. As the fizzy drink hit his tongue, the air in the shop shimmered. The grandfather clock chimed, its familiar sound now amplified, echoing like a church bell. Then, just as suddenly, everything was still.
-    
-    The young man blinked. He was no longer in the antique shop. He stood on a sunny beach, the scent of salt and sunscreen in the air. In his hand, the can of Dr Pepper remained, the note gone. 
-    
-    He smiled. He didn’t know how or why, but he knew exactly where he was – back at the beach where he'd first met the love of his life, years ago. And this time, he was determined not to let her go. 
-    
-    Mildred watched the empty shop, a knowing smile on her lips. Dr Pepper, she mused, was indeed a curious and wonderful thing. 
+    Dr. P felt a warmth spread through him, not the cold sting of ice, but the genuine warmth of friendship and shared dreams. He might have been a soda, but with Sam, he had found a way to explore the world, sip by delicious sip. And in his own unique way, Dr. P knew he was finally living up to his name – a true adventurer, discovering the world one flavor at a time. 
     
     ---Parsed Response (string)---
-    "Mildred bustled around her little antique shop, straightening already perfectly aligned doilies and humming along to the radio. The afternoon sun, streaming through the dusty windowpanes, illuminated motes of dust dancing in the air. The bell above the door chimed, announcing a customer. \n\nMildred turned, a welcoming smile ready on her lips. It faltered. A young man, clad in a crisp black suit and sunglasses, stood awkwardly holding a can of Dr Pepper. \n\n\"Can I help you, dear?\" Mildred asked, her brow furrowed. He looked wildly out of place amongst the antique teacups and vintage hats.\n\n\"I… I think I need to be here,\" he mumbled, holding up the can. \"At least, that's what the note said.\"\n\nMildred, utterly bewildered, noticed a small, folded piece of paper tucked beneath the can's pull tab. She took it with trembling hands, unfolded it, and read aloud:\n\n\"To whoever finds this, drink the Dr Pepper. It holds the key.\" \n\nMildred and the young man stared at each other. The only sound was the gentle ticking of the grandfather clock in the corner. \n\n\"Well,\" Mildred finally said, her sense of adventure outweighing her confusion. \"Don't let it get warm!\"\n\nThe young man hesitantly popped open the can. As the fizzy drink hit his tongue, the air in the shop shimmered. The grandfather clock chimed, its familiar sound now amplified, echoing like a church bell. Then, just as suddenly, everything was still.\n\nThe young man blinked. He was no longer in the antique shop. He stood on a sunny beach, the scent of salt and sunscreen in the air. In his hand, the can of Dr Pepper remained, the note gone. \n\nHe smiled. He didn’t know how or why, but he knew exactly where he was – back at the beach where he'd first met the love of his life, years ago. And this time, he was determined not to let her go. \n\nMildred watched the empty shop, a knowing smile on her lips. Dr Pepper, she mused, was indeed a curious and wonderful thing. \n"
-

Teardown

PASSED test_gemini_streaming 0:00:07.338429

Setup

Call

Captured stdout call
LLM output from Gemini: Dottie Mae peered over her spectacles at the gleaming rows of sodas in the general store. Choosing a treat was serious business, especially on a day when the Texas sun felt close enough to scorch your skin. "Can't decide, huh, Dottie?" chuckled Mr. Henderson, the store owner. 
+    "Dr. Pete Pepper, or just Dr. P as the other sodas called him, wasn't like the rest of them. He wasn't content simply being bubbly and sweet. No, Dr. P was a thinker, an explorer, an adventurer trapped in a soda fountain dispenser. He yearned to understand the world beyond the cold, steel walls and the whispered conversations of thirsty customers. \n\nOne day, a young boy, freckled and full of mischief, chose Dr. P from the line-up. The boy, named Sam, didn't gulp him down like the others. He sipped, savoring the unique, 23-flavor profile that made Dr. P so special. \n\nAs Sam sat by the window, Dr. P felt a strange sensation - a lifting, a lightness. He realized with a jolt that he was seeing the outside world through Sam's eyes. The vibrant green of the park, the bright yellow of the sun, the deep blue of the sky – all exploded in his senses. \n\nOver the next few weeks, Sam and Dr. P became inseparable. Sam, a budding artist, would describe the colors and shapes he saw, and Dr. P, in turn, would tell Sam about his dreams of adventure, his longing to experience the world beyond the soda fountain. \n\nOne day, armed with a pad and some crayons, Sam began to draw. He sketched quickly, a whirlwind of colors and lines, and when he finished, he held up his masterpiece. It was Dr. P, standing on top of a mountain, a compass in one hand, a flag in the other, a huge grin on his fizzy face. \n\nDr. P felt a warmth spread through him, not the cold sting of ice, but the genuine warmth of friendship and shared dreams. He might have been a soda, but with Sam, he had found a way to explore the world, sip by delicious sip. And in his own unique way, Dr. P knew he was finally living up to his name – a true adventurer, discovering the world one flavor at a time. \n"
+

Teardown

PASSED test_gemini_streaming 0:00:09.533650

Setup

Call

Captured stdout call
LLM output from Gemini: The old diner was quiet, save for the gentle hum of the neon sign outside and the rhythmic tick-tock of the clock on the wall. Behind the counter, Millie polished a glass, her face etched with the wisdom of a thousand late-night conversations. A figure, silhouetted against the streetlights, pushed through the door. 
+
+"Dr. Pepper," the man said, his voice roughened by time and hard living. He slumped onto a stool, the weight of the world heavy on his shoulders. 
 
-"Nope," she sighed. "Mama wants a 'refreshing elixir,' whatever that means."
+Millie nodded, knowing better than to pry. Dr. Pepper was all anyone ever ordered here, at least after midnight. It wasn't a drink for idle chatter, but a companion for quiet contemplation. 
 
-Mr. Henderson's eyes twinkled. "Well, I just got somethin' new in. Might fit the bill." He pulled out a bottle unlike any Dottie had ever seen. It was a deep amber color, and instead of a plain label, it had a bright red star. "Dr. Pepper," he announced. "Supposed to be 23 flavors all bottled up in one."
+She placed the frosted mug in front of him, the dark liquid fizzing gently. He took a long sip, the familiar bittersweet taste washing over his tongue. He closed his eyes, a wave of memories crashing over him.
 
-Dottie raised a skeptical eyebrow. "23 flavors?  Sounds like a mess." 
+There was a time when Dr. Pepper had been a celebratory drink. He remembered the first time he tasted it, the crisp, complex flavor a revelation after years of sugary sodas. He was young then, full of dreams and aspirations, each sip bubbling with the promise of a bright future.
 
-Mr. Henderson chuckled. "Only one way to find out. Tell ya what, you try a sip right here, and if you don't think it's the most refreshing thing you've ever tasted, you can choose somethin' else." 
+He'd proposed to his wife with a ring hidden in a Dr. Pepper can. They’d shared countless bottles, their laughter echoing through their tiny apartment. When their daughter was born, he'd celebrated with, what else, a Dr. Pepper. 
 
-He popped the top, and a delightful aroma, sweet and spicy all at once, tickled Dottie's nose. She took a tentative sip, then another, larger one. Her eyes widened. 
+But life, like a half-forgotten bottle left in the sun, had a way of going flat. 
 
-"Well?" Mr. Henderson asked.
+He'd lost his wife too young. The factory had closed down, taking his livelihood with it. His daughter, now a woman, lived a life he couldn't quite understand, miles away. 
 
-Dottie Mae grinned, a wide, gap-toothed smile. "Mama's gonna love this." She marched towards home, clutching the Dr. Pepper like a prized possession, the Texas sun suddenly feeling a lot more bearable. The 23 flavors might have been a mystery, but there was no mystery about how good it tasted. 
+He opened his eyes, the neon sign casting his reflection in the dark window. A stranger stared back, weary and lost. 
 
-
Captured stderr call
[2024-10-29T04:41:45Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 7322ms. StopReason: Stop
+He took another sip. It didn't erase the pain, the regret, the loneliness that clung to him like a shadow. But in that moment, in the familiar comfort of the bittersweet taste, he found a moment of peace. 
+
+He was just a man, sitting in a quiet diner, nursing a Dr. Pepper. And somehow, that was enough. 
+
+
Captured stderr call
[2024-10-31T01:08:41Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 9509ms. StopReason: Stop
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Dottie Mae peered over her spectacles at the gleaming rows of sodas in the general store. Choosing a treat was serious business, especially on a day when the Texas sun felt close enough to scorch your skin. "Can't decide, huh, Dottie?" chuckled Mr. Henderson, the store owner. 
+    The old diner was quiet, save for the gentle hum of the neon sign outside and the rhythmic tick-tock of the clock on the wall. Behind the counter, Millie polished a glass, her face etched with the wisdom of a thousand late-night conversations. A figure, silhouetted against the streetlights, pushed through the door. 
+    
+    "Dr. Pepper," the man said, his voice roughened by time and hard living. He slumped onto a stool, the weight of the world heavy on his shoulders. 
+    
+    Millie nodded, knowing better than to pry. Dr. Pepper was all anyone ever ordered here, at least after midnight. It wasn't a drink for idle chatter, but a companion for quiet contemplation. 
+    
+    She placed the frosted mug in front of him, the dark liquid fizzing gently. He took a long sip, the familiar bittersweet taste washing over his tongue. He closed his eyes, a wave of memories crashing over him.
     
-    "Nope," she sighed. "Mama wants a 'refreshing elixir,' whatever that means."
+    There was a time when Dr. Pepper had been a celebratory drink. He remembered the first time he tasted it, the crisp, complex flavor a revelation after years of sugary sodas. He was young then, full of dreams and aspirations, each sip bubbling with the promise of a bright future.
     
-    Mr. Henderson's eyes twinkled. "Well, I just got somethin' new in. Might fit the bill." He pulled out a bottle unlike any Dottie had ever seen. It was a deep amber color, and instead of a plain label, it had a bright red star. "Dr. Pepper," he announced. "Supposed to be 23 flavors all bottled up in one."
+    He'd proposed to his wife with a ring hidden in a Dr. Pepper can. They’d shared countless bottles, their laughter echoing through their tiny apartment. When their daughter was born, he'd celebrated with, what else, a Dr. Pepper. 
     
-    Dottie raised a skeptical eyebrow. "23 flavors?  Sounds like a mess." 
+    But life, like a half-forgotten bottle left in the sun, had a way of going flat. 
     
-    Mr. Henderson chuckled. "Only one way to find out. Tell ya what, you try a sip right here, and if you don't think it's the most refreshing thing you've ever tasted, you can choose somethin' else." 
+    He'd lost his wife too young. The factory had closed down, taking his livelihood with it. His daughter, now a woman, lived a life he couldn't quite understand, miles away. 
     
-    He popped the top, and a delightful aroma, sweet and spicy all at once, tickled Dottie's nose. She took a tentative sip, then another, larger one. Her eyes widened. 
+    He opened his eyes, the neon sign casting his reflection in the dark window. A stranger stared back, weary and lost. 
     
-    "Well?" Mr. Henderson asked.
+    He took another sip. It didn't erase the pain, the regret, the loneliness that clung to him like a shadow. But in that moment, in the familiar comfort of the bittersweet taste, he found a moment of peace. 
     
-    Dottie Mae grinned, a wide, gap-toothed smile. "Mama's gonna love this." She marched towards home, clutching the Dr. Pepper like a prized possession, the Texas sun suddenly feeling a lot more bearable. The 23 flavors might have been a mystery, but there was no mystery about how good it tasted. 
+    He was just a man, sitting in a quiet diner, nursing a Dr. Pepper. And somehow, that was enough. 
     
     ---Parsed Response (string)---
-    "Dottie Mae peered over her spectacles at the gleaming rows of sodas in the general store. Choosing a treat was serious business, especially on a day when the Texas sun felt close enough to scorch your skin. \"Can't decide, huh, Dottie?\" chuckled Mr. Henderson, the store owner. \n\n\"Nope,\" she sighed. \"Mama wants a 'refreshing elixir,' whatever that means.\"\n\nMr. Henderson's eyes twinkled. \"Well, I just got somethin' new in. Might fit the bill.\" He pulled out a bottle unlike any Dottie had ever seen. It was a deep amber color, and instead of a plain label, it had a bright red star. \"Dr. Pepper,\" he announced. \"Supposed to be 23 flavors all bottled up in one.\"\n\nDottie raised a skeptical eyebrow. \"23 flavors?  Sounds like a mess.\" \n\nMr. Henderson chuckled. \"Only one way to find out. Tell ya what, you try a sip right here, and if you don't think it's the most refreshing thing you've ever tasted, you can choose somethin' else.\" \n\nHe popped the top, and a delightful aroma, sweet and spicy all at once, tickled Dottie's nose. She took a tentative sip, then another, larger one. Her eyes widened. \n\n\"Well?\" Mr. Henderson asked.\n\nDottie Mae grinned, a wide, gap-toothed smile. \"Mama's gonna love this.\" She marched towards home, clutching the Dr. Pepper like a prized possession, the Texas sun suddenly feeling a lot more bearable. The 23 flavors might have been a mystery, but there was no mystery about how good it tasted. \n"
-

Teardown

PASSED test_aws 0:00:02.094682

Setup

Call

Captured stderr call
[2024-10-29T04:41:45Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-10-29T04:41:45Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-29T04:41:47Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 1914ms. StopReason: max_tokens
+    "The old diner was quiet, save for the gentle hum of the neon sign outside and the rhythmic tick-tock of the clock on the wall. Behind the counter, Millie polished a glass, her face etched with the wisdom of a thousand late-night conversations. A figure, silhouetted against the streetlights, pushed through the door. \n\n\"Dr. Pepper,\" the man said, his voice roughened by time and hard living. He slumped onto a stool, the weight of the world heavy on his shoulders. \n\nMillie nodded, knowing better than to pry. Dr. Pepper was all anyone ever ordered here, at least after midnight. It wasn't a drink for idle chatter, but a companion for quiet contemplation. \n\nShe placed the frosted mug in front of him, the dark liquid fizzing gently. He took a long sip, the familiar bittersweet taste washing over his tongue. He closed his eyes, a wave of memories crashing over him.\n\nThere was a time when Dr. Pepper had been a celebratory drink. He remembered the first time he tasted it, the crisp, complex flavor a revelation after years of sugary sodas. He was young then, full of dreams and aspirations, each sip bubbling with the promise of a bright future.\n\nHe'd proposed to his wife with a ring hidden in a Dr. Pepper can. They’d shared countless bottles, their laughter echoing through their tiny apartment. When their daughter was born, he'd celebrated with, what else, a Dr. Pepper. \n\nBut life, like a half-forgotten bottle left in the sun, had a way of going flat. \n\nHe'd lost his wife too young. The factory had closed down, taking his livelihood with it. His daughter, now a woman, lived a life he couldn't quite understand, miles away. \n\nHe opened his eyes, the neon sign casting his reflection in the dark window. A stranger stared back, weary and lost. \n\nHe took another sip. It didn't erase the pain, the regret, the loneliness that clung to him like a shadow. But in that moment, in the familiar comfort of the bittersweet taste, he found a moment of peace. \n\nHe was just a man, sitting in a quiet diner, nursing a Dr. Pepper. And somehow, that was enough. \n"
+

Teardown

PASSED test_aws 0:00:02.058893

Setup

Call

Captured stderr call
[2024-10-31T01:08:41Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-10-31T01:08:41Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
+[2024-10-31T01:08:43Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 1884ms. StopReason: max_tokens
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here is a short story about the majestic Mount Rainier:
+    Here is a short story about Mt. Rainier:
     
-    Towering over the Pacific Northwest, Mount Rainier stands tall and proud, its snow-capped peak piercing the clouds. At 14,411 feet (4,392 meters), it is the tallest mountain in the Cascade Range, a commanding presence that has inspired awe and wonder in all who gaze upon it.
+    The Towering Presence of Mt. Rainier
     
-    As the sun rises, the mountain's flanks are
+    As the sun rose over the Cascade Mountains, its golden rays slowly crept up the towering slopes of Mt. Rainier. Standing 14,411 feet tall, the majestic peak dominated the landscape, a colossal presence that commanded the attention of all who laid eyes upon it.
+    
+    For the residents of the nearby towns and cities,
     ---Parsed Response (string)---
-    "Here is a short story about the majestic Mount Rainier:\n\nTowering over the Pacific Northwest, Mount Rainier stands tall and proud, its snow-capped peak piercing the clouds. At 14,411 feet (4,392 meters), it is the tallest mountain in the Cascade Range, a commanding presence that has inspired awe and wonder in all who gaze upon it.\n\nAs the sun rises, the mountain's flanks are"
-

Teardown

PASSED test_openai_shorthand 0:00:06.295531

Setup

Call

Captured stderr call
[2024-10-29T04:41:53Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 6287ms. StopReason: stop
+    "Here is a short story about Mt. Rainier:\n\nThe Towering Presence of Mt. Rainier\n\nAs the sun rose over the Cascade Mountains, its golden rays slowly crept up the towering slopes of Mt. Rainier. Standing 14,411 feet tall, the majestic peak dominated the landscape, a colossal presence that commanded the attention of all who laid eyes upon it.\n\nFor the residents of the nearby towns and cities,"
+

Teardown

PASSED test_openai_shorthand 0:00:09.297877

Setup

Call

Captured stderr call
[2024-10-31T01:08:52Z INFO  baml_events] Function TestOpenAIShorthand:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 9286ms. StopReason: stop
     ---PROMPT---
     [chat] system: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time, in a small town nestled in the shadow of the majestic Mt. Rainier, there lived a young girl named Lily. Since she was a tiny child, Lily had always been captivated by the towering mountain. Its snow-capped peak glimmered under the sun, and its lush green slopes were alive with the colors of wildflowers in spring.
-    
-    Every day after school, Lily would spend her afternoons exploring the forests and meadows that surrounded her home. But no matter how far she wandered, she always returned to sit beneath the ancient oak tree in her backyard, which offered the perfect view of Mt. Rainier. From this spot, she would gaze up in awe at the mountain's immense stature and dream of climbing it one day.
-    
-    One summer day, fueled by adventure and determination, Lily decided it was time to face the mountain. She laced up her sturdy hiking boots, packed a small bag with snacks, and set off towards the mountain’s trails. As she started her journey, the woodland path wound through towering trees, their branches reaching for the clouds, much like the mountain itself.
+    Once upon a time, in the lush Pacific Northwest, stood a majestic giant—Mount Rainier. With its snow-capped peak soaring 14,411 feet into the sky, it watched over the land with a silent grace that had captivated the hearts of all who beheld it. The mountain was not just tall; it was a symbol of beauty, strength, and an enduring spirit.
     
-    With each step, she felt a mix of excitement and trepidation. The mountain was known for its beauty, but also its challenges. As she hiked, she met fellow adventurers, each sharing stories of their own journeys and igniting her spirit even further. The vibrant chatter of birds accompanied her as the trail began to ascend, and she could feel the cool mountain air brushing against her cheeks.
+    In a small village nestled at the foot of the mountain lived a young girl named Lila. Every morning, she would wake up to the sun casting a golden hue over Rainier’s majestic slopes. The sight filled her with wonder, and her dreams of adventure danced as high as the mountain itself. She often wondered what lay beyond the snow-laden summit, imagining sprawling valleys, shimmering lakes, and vibrant wildflower meadows.
     
-    As she climbed higher, the views became more breathtaking. Rolling hills gave way to valleys adorned with wildflowers dancing in the breeze. With every moment, Lily's heart swelled, realizing just how tall and majestic Mt. Rainier truly was—its grandeur standing sentinel over the land.
+    One bright summer day, Lila decided that she would climb the mountain. With a well-loved backpack filled with essentials—water, snacks, and her favorite sketchbook—she set off, her heart pounding with excitement. As she began her ascent, the air turned crisp, and the scent of pine filled her lungs. Lila marveled at the towering trees and colorful wildflowers that dotted the hiking trails, each step bringing her closer to the peak.
     
-    At last, when she reached a viewpoint, she paused to catch her breath. The sight before her took her breath away. The mountain loomed large in all its glory, clouds swirling at its peak, kissed by the warm glow of the setting sun. Lily felt an overwhelming sense of peace and accomplishment; she had come so far, and she was just a small part of this big, beautiful world.
+    As she climbed higher, the surroundings transformed. The trees thinned, and the air grew cooler. She encountered fellow hikers along the way, each captivated by the mountain’s beauty. They shared stories and laughter, creating memories beneath the watchful eye of Rainier. Lila often paused to sketch the breathtaking views, capturing the beauty of the moment in every stroke of her pencil.
     
-    As the sun dipped below the horizon, she took a moment to sit on a rock, surrounded by the beauty of nature. “You may be tall, Mt. Rainier,” she whispered, “but your spirit is an inspiration to those who dare to dream.” With that thought, she realized that the mountain was not just a giant of stone, but a symbol of persistence, strength, and joy.
+    After hours of climbing, Lila finally reached the summit. Standing at the top of the world, the feeling was indescribable. The panoramic view opened up before her—a patchwork of valleys stretching in every direction, with rivers gleaming like ribbons in the sunlight. Clouds floated beneath her, and for a moment, she understood what it meant to be untethered, free.
     
-    From that day forward, Lily would often return to that special spot, nestled in the embrace of the mountain. With each visit, she would carry stories of her adventures and the new friends she made along the way. And as she looked up at the great height of Mt. Rainier, she knew that while she may be small, her dreams could reach as high as its towering peak.
+    With a sense of accomplishment swelling in her heart, Lila took out her sketchbook and began to draw. She poured her soul onto the page, capturing the essence of the towering giant that had inspired her every step. It wasn’t just about reaching the summit; it was about the journey, the friendships formed along the way, and the awe of nature.
     
-    And so, the girl who believed in her own potential found friendship, adventure, and the tallest lessons in life right beneath the shadow of Mt. Rainier, a place where dreams were free to soar.
+    As the sun began to set, painting the sky in hues of pink and purple, Lila sat at the edge, her heart full. Mount Rainier was indeed tall, but it was also a reminder that dreams could be reached, and that every journey, no matter how daunting, holds its own kind of beauty. Lila closed her sketchbook, knowing that this adventure would stay with her forever—a testament to the spirit of a girl and her love for a mountain that stood tall and proud, a guardian of dreams.
     ---Parsed Response (string)---
-    "Once upon a time, in a small town nestled in the shadow of the majestic Mt. Rainier, there lived a young girl named Lily. Since she was a tiny child, Lily had always been captivated by the towering mountain. Its snow-capped peak glimmered under the sun, and its lush green slopes were alive with the colors of wildflowers in spring.\n\nEvery day after school, Lily would spend her afternoons exploring the forests and meadows that surrounded her home. But no matter how far she wandered, she always returned to sit beneath the ancient oak tree in her backyard, which offered the perfect view of Mt. Rainier. From this spot, she would gaze up in awe at the mountain's immense stature and dream of climbing it one day.\n\nOne summer day, fueled by adventure and determination, Lily decided it was time to face the mountain. She laced up her sturdy hiking boots, packed a small bag with snacks, and set off towards the mountain’s trails. As she started her journey, the woodland path wound through towering trees, their branches reaching for the clouds, much like the mountain itself.\n\nWith each step, she felt a mix of excitement and trepidation. The mountain was known for its beauty, but also its challenges. As she hiked, she met fellow adventurers, each sharing stories of their own journeys and igniting her spirit even further. The vibrant chatter of birds accompanied her as the trail began to ascend, and she could feel the cool mountain air brushing against her cheeks.\n\nAs she climbed higher, the views became more breathtaking. Rolling hills gave way to valleys adorned with wildflowers dancing in the breeze. With every moment, Lily's heart swelled, realizing just how tall and majestic Mt. Rainier truly was—its grandeur standing sentinel over the land.\n\nAt last, when she reached a viewpoint, she paused to catch her breath. The sight before her took her breath away. The mountain loomed large in all its glory, clouds swirling at its peak, kissed by the warm glow of the setting sun. Lily felt an overwhelming sense of peace and accomplishment; she had come so far, and she was just a small part of this big, beautiful world.\n\nAs the sun dipped below the horizon, she took a moment to sit on a rock, surrounded by the beauty of nature. “You may be tall, Mt. Rainier,” she whispered, “but your spirit is an inspiration to those who dare to dream.” With that thought, she realized that the mountain was not just a giant of stone, but a symbol of persistence, strength, and joy.\n\nFrom that day forward, Lily would often return to that special spot, nestled in the embrace of the mountain. With each visit, she would carry stories of her adventures and the new friends she made along the way. And as she looked up at the great height of Mt. Rainier, she knew that while she may be small, her dreams could reach as high as its towering peak.\n\nAnd so, the girl who believed in her own potential found friendship, adventure, and the tallest lessons in life right beneath the shadow of Mt. Rainier, a place where dreams were free to soar."
-

Teardown

PASSED test_openai_shorthand_streaming 0:00:06.818125

Setup

Call

Captured stderr call
[2024-10-29T04:42:00Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 6809ms. StopReason: stop
+    "Once upon a time, in the lush Pacific Northwest, stood a majestic giant—Mount Rainier. With its snow-capped peak soaring 14,411 feet into the sky, it watched over the land with a silent grace that had captivated the hearts of all who beheld it. The mountain was not just tall; it was a symbol of beauty, strength, and an enduring spirit.\n\nIn a small village nestled at the foot of the mountain lived a young girl named Lila. Every morning, she would wake up to the sun casting a golden hue over Rainier’s majestic slopes. The sight filled her with wonder, and her dreams of adventure danced as high as the mountain itself. She often wondered what lay beyond the snow-laden summit, imagining sprawling valleys, shimmering lakes, and vibrant wildflower meadows.\n\nOne bright summer day, Lila decided that she would climb the mountain. With a well-loved backpack filled with essentials—water, snacks, and her favorite sketchbook—she set off, her heart pounding with excitement. As she began her ascent, the air turned crisp, and the scent of pine filled her lungs. Lila marveled at the towering trees and colorful wildflowers that dotted the hiking trails, each step bringing her closer to the peak.\n\nAs she climbed higher, the surroundings transformed. The trees thinned, and the air grew cooler. She encountered fellow hikers along the way, each captivated by the mountain’s beauty. They shared stories and laughter, creating memories beneath the watchful eye of Rainier. Lila often paused to sketch the breathtaking views, capturing the beauty of the moment in every stroke of her pencil.\n\nAfter hours of climbing, Lila finally reached the summit. Standing at the top of the world, the feeling was indescribable. The panoramic view opened up before her—a patchwork of valleys stretching in every direction, with rivers gleaming like ribbons in the sunlight. Clouds floated beneath her, and for a moment, she understood what it meant to be untethered, free.\n\nWith a sense of accomplishment swelling in her heart, Lila took out her sketchbook and began to draw. She poured her soul onto the page, capturing the essence of the towering giant that had inspired her every step. It wasn’t just about reaching the summit; it was about the journey, the friendships formed along the way, and the awe of nature.\n\nAs the sun began to set, painting the sky in hues of pink and purple, Lila sat at the edge, her heart full. Mount Rainier was indeed tall, but it was also a reminder that dreams could be reached, and that every journey, no matter how daunting, holds its own kind of beauty. Lila closed her sketchbook, knowing that this adventure would stay with her forever—a testament to the spirit of a girl and her love for a mountain that stood tall and proud, a guardian of dreams."
+

Teardown

PASSED test_openai_shorthand_streaming 0:00:07.529852

Setup

Call

Captured stderr call
[2024-10-31T01:09:00Z INFO  baml_events] Function TestOpenAIShorthand:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 7518ms. StopReason: stop
     ---PROMPT---
     [chat] system: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    On the edge of a small town in Washington State, everyone knew that Mt. Rainier was tall. It towered over the landscape, its snow-capped peak glimmering like a crown under the sun. The locals would often say that it was so tall, it could hear their whispers on windy days.
-    
-    One crisp morning, a little girl named Clara stood on her porch, gazing up at the majestic mountain. She had heard tales of its grandeur from her grandmother, who would often sit by the fireplace and recount stories of brave adventurers who had tried to climb its slopes. Clara’s imagination danced with the possibility of reaching the top one day.
-    
-    “Why is Mt. Rainier so tall, Grandma?” Clara asked, her eyes wide with wonder.
-    
-    Her grandmother smiled, her eyes sparkling with memories. “Well, my dear, once upon a time, Mt. Rainier was just a great big hill. But as the world changed and the earth shifted and moved, it grew taller and taller until it reached the sky. And now, it stands tall to remind us of our dreams—to reach for the heights and never give up.”
+    Once upon a time, in the verdant Pacific Northwest, there stood a majestic giant known as Mount Rainier. Towering at 14,411 feet, Rainier was more than just a mountain; it was a sentinel, a protector, and a source of inspiration for all who dwelled in its shadow.
     
-    Inspired by her grandmother’s words, Clara decided it was time to embark on her own adventure. With a packed lunch, her favorite teddy bear, and her best friend Mia by her side, they set off toward the base of the mountain. As they walked, they spoke in hushed tones, imagining all the creatures that might live in the forests below and the secrets the mountain held.
+    In the quaint town of Ashford, just a stone’s throw from the mountain's base, lived a young girl named Lily. Every morning, she would look out her bedroom window and gaze at Rainier, its snow-capped peak glistening under the sun. To Lily, the mountain was both beautiful and intimidating, a reminder of nature's grandeur and power.
     
-    When they arrived at the foot of Mt. Rainier, Clara and Mia stared up in awe. The mountain seemed to stretch endlessly into the heavens, its peak surrounded by clouds that looked like soft, cotton candy. Clara felt a flutter in her heart, the thrill of adventure tinged with a hint of fear. 
+    One summer day, emboldened by a restless spirit, Lily decided to climb the trail that led up the mountain. Armed with a small backpack filled with snacks and her trusty water bottle, she set off on her adventure. As she hiked, the world around her flourished with life; vibrant wildflowers danced in the gentle breeze, and the sound of a nearby stream provided a soothing melody.
     
-    “Do you think we can make it to the top?” Mia asked, her voice barely above a whisper.
+    As she ascended, the trees began to thin and the air grew crisper. Each step brought her closer to the peak, but it also made her realize just how tall Mount Rainier truly was. Though she was small and the climb challenging, Lily’s heart swelled with determination. She envisioned the view from the top – the patchwork of forests, valleys, and rivers that painted the landscape below.
     
-    Clara giggled, brushing her hair out of her face. “Maybe not today, but one day we will.”
+    After hours of climbing, she finally reached a rocky overlook that provided a breathtaking view of the world spread out before her. The valleys shimmered in the sun, and the clouds seemed to kiss the mountain's peak. Up there among the clouds, she felt endless possibilities; she was on top of the world—at least a part of it.
     
-    As they began to hike along the trails, the towering trees whispered tales of ancient times, and Clara could almost hear the mountains calling her name, urging her onward. The day unfolded with laughter, slight mischief, and the discovery of sparkling streams and colorful wildflowers. 
+    As she sat on the overlook, enjoying a snack, a fluffy, white mountain goat approached cautiously, its eyes curious and friendly. For a brief moment, they shared a silent connection. This mountain was not just a tall formation of rocks; it was a living, breathing entity filled with stories of those who had climbed before her—and those who would come after.
     
-    Time faded away, lost in the pure magic of exploration. When they finally sat down to enjoy their lunch, they looked at each other, realizing that they didn’t need to reach the peak to feel the height of their own dreams. 
+    With a heart full of magic and a smile on her face, Lily made her way back down. She realized that Mount Rainier was not merely a towering presence, but also a symbol of resilience. It taught her that, regardless of how tall or mighty a challenge may seem, one could always take that first step and make their way up.
     
-    “I know we can’t climb it today,” Mia said, munching on her sandwich, “but just being here, looking up at it… it feels like we’re part of something big.”
-    
-    Clara smiled, her heart swelling with joy. “Yeah, and one day, when we’re ready, we’ll climb to the top together. Mt. Rainier will be waiting for us!”
-    
-    As the sun began to set and painted the sky in hues of orange and pink, Clara felt a sense of peace. She didn’t just see a tall mountain before her; she saw a symbol of hope and the endless possibilities that lay ahead. And as they headed back down the trail, hand in hand, she knew that no matter how tall Mt. Rainier was, their friendship was even taller—reaching for the skies, ready for whatever adventures awaited them.
+    From that day forward, every time she looked at Rainier from her window, it no longer seemed intimidating. Instead, it stood as a beacon of hope and adventure, always reminding her that the dreams that feel the tallest are often just a hike away.
     ---Parsed Response (string)---
-    "On the edge of a small town in Washington State, everyone knew that Mt. Rainier was tall. It towered over the landscape, its snow-capped peak glimmering like a crown under the sun. The locals would often say that it was so tall, it could hear their whispers on windy days.\n\nOne crisp morning, a little girl named Clara stood on her porch, gazing up at the majestic mountain. She had heard tales of its grandeur from her grandmother, who would often sit by the fireplace and recount stories of brave adventurers who had tried to climb its slopes. Clara’s imagination danced with the possibility of reaching the top one day.\n\n“Why is Mt. Rainier so tall, Grandma?” Clara asked, her eyes wide with wonder.\n\nHer grandmother smiled, her eyes sparkling with memories. “Well, my dear, once upon a time, Mt. Rainier was just a great big hill. But as the world changed and the earth shifted and moved, it grew taller and taller until it reached the sky. And now, it stands tall to remind us of our dreams—to reach for the heights and never give up.”\n\nInspired by her grandmother’s words, Clara decided it was time to embark on her own adventure. With a packed lunch, her favorite teddy bear, and her best friend Mia by her side, they set off toward the base of the mountain. As they walked, they spoke in hushed tones, imagining all the creatures that might live in the forests below and the secrets the mountain held.\n\nWhen they arrived at the foot of Mt. Rainier, Clara and Mia stared up in awe. The mountain seemed to stretch endlessly into the heavens, its peak surrounded by clouds that looked like soft, cotton candy. Clara felt a flutter in her heart, the thrill of adventure tinged with a hint of fear. \n\n“Do you think we can make it to the top?” Mia asked, her voice barely above a whisper.\n\nClara giggled, brushing her hair out of her face. “Maybe not today, but one day we will.”\n\nAs they began to hike along the trails, the towering trees whispered tales of ancient times, and Clara could almost hear the mountains calling her name, urging her onward. The day unfolded with laughter, slight mischief, and the discovery of sparkling streams and colorful wildflowers. \n\nTime faded away, lost in the pure magic of exploration. When they finally sat down to enjoy their lunch, they looked at each other, realizing that they didn’t need to reach the peak to feel the height of their own dreams. \n\n“I know we can’t climb it today,” Mia said, munching on her sandwich, “but just being here, looking up at it… it feels like we’re part of something big.”\n\nClara smiled, her heart swelling with joy. “Yeah, and one day, when we’re ready, we’ll climb to the top together. Mt. Rainier will be waiting for us!”\n\nAs the sun began to set and painted the sky in hues of orange and pink, Clara felt a sense of peace. She didn’t just see a tall mountain before her; she saw a symbol of hope and the endless possibilities that lay ahead. And as they headed back down the trail, hand in hand, she knew that no matter how tall Mt. Rainier was, their friendship was even taller—reaching for the skies, ready for whatever adventures awaited them."
-

Teardown

PASSED test_anthropic_shorthand 0:00:02.635145

Setup

Call

Captured stderr call
[2024-10-29T04:42:02Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2628ms. StopReason: "end_turn"
+    "Once upon a time, in the verdant Pacific Northwest, there stood a majestic giant known as Mount Rainier. Towering at 14,411 feet, Rainier was more than just a mountain; it was a sentinel, a protector, and a source of inspiration for all who dwelled in its shadow.\n\nIn the quaint town of Ashford, just a stone’s throw from the mountain's base, lived a young girl named Lily. Every morning, she would look out her bedroom window and gaze at Rainier, its snow-capped peak glistening under the sun. To Lily, the mountain was both beautiful and intimidating, a reminder of nature's grandeur and power.\n\nOne summer day, emboldened by a restless spirit, Lily decided to climb the trail that led up the mountain. Armed with a small backpack filled with snacks and her trusty water bottle, she set off on her adventure. As she hiked, the world around her flourished with life; vibrant wildflowers danced in the gentle breeze, and the sound of a nearby stream provided a soothing melody.\n\nAs she ascended, the trees began to thin and the air grew crisper. Each step brought her closer to the peak, but it also made her realize just how tall Mount Rainier truly was. Though she was small and the climb challenging, Lily’s heart swelled with determination. She envisioned the view from the top – the patchwork of forests, valleys, and rivers that painted the landscape below.\n\nAfter hours of climbing, she finally reached a rocky overlook that provided a breathtaking view of the world spread out before her. The valleys shimmered in the sun, and the clouds seemed to kiss the mountain's peak. Up there among the clouds, she felt endless possibilities; she was on top of the world—at least a part of it.\n\nAs she sat on the overlook, enjoying a snack, a fluffy, white mountain goat approached cautiously, its eyes curious and friendly. For a brief moment, they shared a silent connection. This mountain was not just a tall formation of rocks; it was a living, breathing entity filled with stories of those who had climbed before her—and those who would come after.\n\nWith a heart full of magic and a smile on her face, Lily made her way back down. She realized that Mount Rainier was not merely a towering presence, but also a symbol of resilience. It taught her that, regardless of how tall or mighty a challenge may seem, one could always take that first step and make their way up.\n\nFrom that day forward, every time she looked at Rainier from her window, it no longer seemed intimidating. Instead, it stood as a beacon of hope and adventure, always reminding her that the dreams that feel the tallest are often just a hike away."
+

Teardown

PASSED test_anthropic_shorthand 0:00:03.001465

Setup

Call

Captured stderr call
[2024-10-31T01:09:03Z INFO  baml_events] Function TestAnthropicShorthand:
+    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2993ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here is a short story about Mount Rainier:
+    Here is a short story about Mt. Rainier:
     
-    The Majestic Monolith
+    Towering over the Pacific Northwest, Mt. Rainier stands as a majestic and awe-inspiring natural wonder. At 14,411 feet (4,392 meters) tall, it is the highest mountain in the Cascade Range and the most prominent peak in the contiguous United States.
     
-    As the sun slowly rose over the misty valleys, its golden rays illuminated the towering peak of Mount Rainier. Standing tall and proud at 14,411 feet, the massive stratovolcano dominated the landscape, casting a commanding presence over the surrounding wilderness.
+    As I gazed up at its snow-capped summit, I couldn't help but feel small and humbled by its sheer scale and grandeur. The mountain's presence was overwhelming, a true testament to the raw power and majesty of Mother Nature.
     
-    John had come to this picturesque corner of Washington state to witness the grandeur of this iconic mountain. As he gazed upwards, he was struck by the sheer scale and power of the snowcapped summit, rising majestically above the undulating forests and glacial rivers below.
+    As I hiked through the lush, verdant forests that surround the mountain's base, I couldn't help but marvel at the diversity of life that thrived in the shadow of this giant. Wildflowers dotted the landscape, their vibrant hues a stark contrast to the stark white of the glaciers that clung to the mountain's flanks.
     
-    Pulling out his camera, John framed the perfect shot, capturing the interplay of light and shadow that danced across the mountain's rugged slopes. He marveled at the geologic forces that had shaped this natural wonder over millennia, the volcanic origins that had thrust it skyward, the glaciers that had carved its flanks.
+    The higher I climbed, the more the air grew thin and the scenery became more dramatic. Towering rock formations and deep, crevasse-filled glaciers dominated the landscape, a testament to the immense forces that had shaped this incredible natural wonder over the course of millennia.
     
-    In that moment, John felt a deep sense of awe and humility in the face of such magnificent natural beauty. Mount Rainier stood as a timeless testament to the grandeur of the Earth, a reminder of the raw power and enduring presence of our planet's most iconic landforms.
+    And as I reached the summit, I was rewarded with a breathtaking panoramic view that stretched out in all directions. The world below seemed small and insignificant, dwarfed by the sheer scale and power of the mountain that stood before me.
     
-    As he turned to head back down the trail, John knew that the memory of this majestic monolith would stay with him forever, a vivid reminder of the splendor and wonder that can be found in the great outdoors.
+    In that moment, I felt a deep sense of awe and reverence for the natural world, and a renewed appreciation for the incredible beauty and wonder that exists in every corner of our planet. Mt. Rainier, with its towering presence and awe-inspiring grandeur, had left an indelible mark on my heart and soul.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nThe Majestic Monolith\n\nAs the sun slowly rose over the misty valleys, its golden rays illuminated the towering peak of Mount Rainier. Standing tall and proud at 14,411 feet, the massive stratovolcano dominated the landscape, casting a commanding presence over the surrounding wilderness.\n\nJohn had come to this picturesque corner of Washington state to witness the grandeur of this iconic mountain. As he gazed upwards, he was struck by the sheer scale and power of the snowcapped summit, rising majestically above the undulating forests and glacial rivers below.\n\nPulling out his camera, John framed the perfect shot, capturing the interplay of light and shadow that danced across the mountain's rugged slopes. He marveled at the geologic forces that had shaped this natural wonder over millennia, the volcanic origins that had thrust it skyward, the glaciers that had carved its flanks.\n\nIn that moment, John felt a deep sense of awe and humility in the face of such magnificent natural beauty. Mount Rainier stood as a timeless testament to the grandeur of the Earth, a reminder of the raw power and enduring presence of our planet's most iconic landforms.\n\nAs he turned to head back down the trail, John knew that the memory of this majestic monolith would stay with him forever, a vivid reminder of the splendor and wonder that can be found in the great outdoors."
-

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:03.834991

Setup

Call

Captured stderr call
[2024-10-29T04:42:06Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 3819ms. StopReason: "end_turn"
+    "Here is a short story about Mt. Rainier:\n\nTowering over the Pacific Northwest, Mt. Rainier stands as a majestic and awe-inspiring natural wonder. At 14,411 feet (4,392 meters) tall, it is the highest mountain in the Cascade Range and the most prominent peak in the contiguous United States.\n\nAs I gazed up at its snow-capped summit, I couldn't help but feel small and humbled by its sheer scale and grandeur. The mountain's presence was overwhelming, a true testament to the raw power and majesty of Mother Nature.\n\nAs I hiked through the lush, verdant forests that surround the mountain's base, I couldn't help but marvel at the diversity of life that thrived in the shadow of this giant. Wildflowers dotted the landscape, their vibrant hues a stark contrast to the stark white of the glaciers that clung to the mountain's flanks.\n\nThe higher I climbed, the more the air grew thin and the scenery became more dramatic. Towering rock formations and deep, crevasse-filled glaciers dominated the landscape, a testament to the immense forces that had shaped this incredible natural wonder over the course of millennia.\n\nAnd as I reached the summit, I was rewarded with a breathtaking panoramic view that stretched out in all directions. The world below seemed small and insignificant, dwarfed by the sheer scale and power of the mountain that stood before me.\n\nIn that moment, I felt a deep sense of awe and reverence for the natural world, and a renewed appreciation for the incredible beauty and wonder that exists in every corner of our planet. Mt. Rainier, with its towering presence and awe-inspiring grandeur, had left an indelible mark on my heart and soul."
+

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:02.778240

Setup

Call

Captured stderr call
[2024-10-31T01:09:05Z INFO  baml_events] Function TestAnthropicShorthand:
+    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2757ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mount Rainier:
     
-    Reaching for the Heavens
+    The Towering Sentinel of the Cascades
     
-    Piercing the sky, Mount Rainier stood tall and proud, its snow-capped peak glistening under the warm summer sun. The iconic mountain, also known as Tahoma, had been the centerpiece of the Pacific Northwest landscape for centuries, drawing in visitors from around the world who marveled at its sheer size and grandeur.
+    As the morning sun crested the distant horizon, its golden rays slowly illuminated the majestic peak of Mount Rainier. Standing tall at 14,411 feet, the dormant volcano cast a magnificent silhouette against the clear, azure sky. 
     
-    For Sarah, the sight of Mount Rainier never ceased to amaze her. Growing up in the shadow of the mighty peak, she had always felt a deep connection to the land, a sense of wonder at the raw power and beauty of nature. As she gazed up at the mountain, she couldn't help but feel humbled by its scale, the way it seemed to reach up and touch the heavens.
+    Tom paused on the trail, his gaze transfixed by the sheer scale and beauty of the mountain before him. Even from miles away, the glaciated summit seemed to lord over the surrounding landscape, a true king among the Cascade peaks. He marveled at the sight, his heart swelling with a sense of wonder and humility.
     
-    As Sarah laced up her hiking boots and set out onto the trails, she couldn't wait to get closer to the mountain, to feel its presence all around her. The hike was challenging, the terrain steep and rocky, but with each step, she felt a sense of exhilaration and purpose. She was drawn forward, compelled to explore the rugged landscape and to understand the forces that had shaped this magnificent natural wonder.
+    Over the course of millennia, this ancient giant had witnessed the ebb and flow of time. Native tribes had revered it as a sacred place, a home to powerful spirits. Centuries of snow and ice had sculpted its flanks, leaving behind glittering rivers of frozen water that flowed down towards the forests and rivers below. 
     
-    As she reached the summit, Sarah paused to catch her breath, her eyes fixed on the panoramic view that stretched out before her. From this lofty vantage point, she could see the world laid out in all its glory – the vast, rolling forests, the sparkling lakes, and the distant, snow-capped peaks that seemed to touch the sky.
+    And yet, for all its timeless majesty, Mount Rainier remained a living, dynamic entity. Lurking deep beneath its surface, a massive magma chamber kept the volcano eternally restless, a sleeping giant that could one day awaken with catastrophic force.
     
-    In that moment, Sarah felt a sense of profound connection, a deep understanding that she was a part of something greater than herself. Mount Rainier, with its towering presence and timeless majesty, had become a symbol of her own personal journey, a reminder that even the tallest mountains can be conquered with determination and a thirst for adventure.
-    
-    As she began her descent, Sarah knew that she would always carry the memory of this day, the feeling of standing in the shadow of such a magnificent natural wonder. And she knew that she would return, time and time again, to seek out the peace and inspiration that only the mighty Mount Rainier could provide.
+    As Tom continued along the trail, he couldn't help but feel a profound sense of respect and admiration for this towering sentinel of the Cascades. In its shadows, he was reminded of the raw, unstoppable power of nature - a force that commanded reverence and humility from all who beheld it.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nReaching for the Heavens\n\nPiercing the sky, Mount Rainier stood tall and proud, its snow-capped peak glistening under the warm summer sun. The iconic mountain, also known as Tahoma, had been the centerpiece of the Pacific Northwest landscape for centuries, drawing in visitors from around the world who marveled at its sheer size and grandeur.\n\nFor Sarah, the sight of Mount Rainier never ceased to amaze her. Growing up in the shadow of the mighty peak, she had always felt a deep connection to the land, a sense of wonder at the raw power and beauty of nature. As she gazed up at the mountain, she couldn't help but feel humbled by its scale, the way it seemed to reach up and touch the heavens.\n\nAs Sarah laced up her hiking boots and set out onto the trails, she couldn't wait to get closer to the mountain, to feel its presence all around her. The hike was challenging, the terrain steep and rocky, but with each step, she felt a sense of exhilaration and purpose. She was drawn forward, compelled to explore the rugged landscape and to understand the forces that had shaped this magnificent natural wonder.\n\nAs she reached the summit, Sarah paused to catch her breath, her eyes fixed on the panoramic view that stretched out before her. From this lofty vantage point, she could see the world laid out in all its glory – the vast, rolling forests, the sparkling lakes, and the distant, snow-capped peaks that seemed to touch the sky.\n\nIn that moment, Sarah felt a sense of profound connection, a deep understanding that she was a part of something greater than herself. Mount Rainier, with its towering presence and timeless majesty, had become a symbol of her own personal journey, a reminder that even the tallest mountains can be conquered with determination and a thirst for adventure.\n\nAs she began her descent, Sarah knew that she would always carry the memory of this day, the feeling of standing in the shadow of such a magnificent natural wonder. And she knew that she would return, time and time again, to seek out the peace and inspiration that only the mighty Mount Rainier could provide."
-

Teardown

PASSED test_fallback_to_shorthand 0:00:01.136579

Setup

Call

Captured stderr call
[2024-10-29T04:42:07Z INFO  baml_events] Function TestFallbackToShorthand:
+    "Here is a short story about Mount Rainier:\n\nThe Towering Sentinel of the Cascades\n\nAs the morning sun crested the distant horizon, its golden rays slowly illuminated the majestic peak of Mount Rainier. Standing tall at 14,411 feet, the dormant volcano cast a magnificent silhouette against the clear, azure sky. \n\nTom paused on the trail, his gaze transfixed by the sheer scale and beauty of the mountain before him. Even from miles away, the glaciated summit seemed to lord over the surrounding landscape, a true king among the Cascade peaks. He marveled at the sight, his heart swelling with a sense of wonder and humility.\n\nOver the course of millennia, this ancient giant had witnessed the ebb and flow of time. Native tribes had revered it as a sacred place, a home to powerful spirits. Centuries of snow and ice had sculpted its flanks, leaving behind glittering rivers of frozen water that flowed down towards the forests and rivers below. \n\nAnd yet, for all its timeless majesty, Mount Rainier remained a living, dynamic entity. Lurking deep beneath its surface, a massive magma chamber kept the volcano eternally restless, a sleeping giant that could one day awaken with catastrophic force.\n\nAs Tom continued along the trail, he couldn't help but feel a profound sense of respect and admiration for this towering sentinel of the Cascades. In its shadows, he was reminded of the raw, unstoppable power of nature - a force that commanded reverence and humility from all who beheld it."
+

Teardown

PASSED test_fallback_to_shorthand 0:00:01.024756

Setup

Call

Captured stderr call
[2024-10-31T01:09:06Z INFO  baml_events] Function TestFallbackToShorthand:
     (1 other previous tries)
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 750ms. StopReason: stop
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 722ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say a haiku about Mt Rainier is tall.
     
     ---LLM REPLY---
-    Majestic peak stands,  
-    Whispers of the clouds surround,  
-    Nature's strength revealed.
+    Majestic and grand,  
+    Mt. Rainier greets the sky,  
+    A sentinel bright.
     ---Parsed Response (string)---
-    "Majestic peak stands,  \nWhispers of the clouds surround,  \nNature's strength revealed."
-

Teardown

PASSED test_aws_streaming 0:00:01.820392

Setup

Call

Captured stderr call
[2024-10-29T04:42:07Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-10-29T04:42:07Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-29T04:42:09Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 1809ms. StopReason: unknown
+    "Majestic and grand,  \nMt. Rainier greets the sky,  \nA sentinel bright."
+

Teardown

PASSED test_aws_streaming 0:00:01.901175

Setup

Call

Captured stderr call
[2024-10-31T01:09:06Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-10-31T01:09:06Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
+[2024-10-31T01:09:08Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 1891ms. StopReason: unknown
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here is a short story about Mount Rainier:
+    Here is a short story about Mt. Rainier:
     
-    The Towering Sentinel
+    Towering high above the surrounding landscape, Mount Rainier stood tall and proud. Its snow-capped peak glistened in the sunlight, a majestic sight that inspired awe in all who gazed upon it.
     
-    As the sun crept above the horizon, its golden rays cast a warm glow across the lush, verdant landscape. In the distance, a majestic sight emerged, its snow-capped peak piercing the azure sky - Mount Rainier, the towering sentinel of the Pacific Northwest.
-    
-    Standing at an impressive 14,411 feet, the dormant volcano commanded attention
+    For local resident Emily, the mountain was a constant and comforting presence. She had grown up in the shadow of its grandeur, and its towering form had become as familiar
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nThe Towering Sentinel\n\nAs the sun crept above the horizon, its golden rays cast a warm glow across the lush, verdant landscape. In the distance, a majestic sight emerged, its snow-capped peak piercing the azure sky - Mount Rainier, the towering sentinel of the Pacific Northwest.\n\nStanding at an impressive 14,411 feet, the dormant volcano commanded attention"
-

Teardown

PASSED test_streaming 0:00:04.021890

Setup

Call

Captured stderr call
[2024-10-29T04:42:13Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 4012ms. StopReason: stop
+    "Here is a short story about Mt. Rainier:\n\nTowering high above the surrounding landscape, Mount Rainier stood tall and proud. Its snow-capped peak glistened in the sunlight, a majestic sight that inspired awe in all who gazed upon it.\n\nFor local resident Emily, the mountain was a constant and comforting presence. She had grown up in the shadow of its grandeur, and its towering form had become as familiar"
+

Teardown

PASSED test_streaming 0:00:03.444564

Setup

Call

Captured stderr call
[2024-10-31T01:09:12Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 3434ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time, in a magical land known as Codeville, there lived a young wizard named Alice who had a special gift for creating programming languages. She spent her days in her cozy workshop, surrounded by piles of ancient scrolls and potions bubbling in cauldrons.
-    
-    One day, Alice decided to create a new language called SparkleScript. This language was unlike any other, with shimmering syntax and magical functions that could make even the most complex tasks seem like child's play.
+    Once upon a time, there was a brilliant software engineer named Emma who had a passion for creating programming languages. She loved the challenge of designing syntax, defining functions, and optimizing efficiency. 
     
-    As Alice delved deeper into the creation of SparkleScript, she found that the language took on a life of its own. It began to dance across her computer screen, weaving together lines of code like a beautiful tapestry. With each line she wrote, she felt a surge of excitement and wonder, as if she were summoning a new spell.
+    Emma spent countless hours experimenting with different concepts and prototypes, diving deep into the intricacies of compilation and interpretation. She reveled in the creative process of building something that could be used to create powerful and innovative software solutions. 
     
-    As SparkleScript grew in popularity among the wizards and sorcerers of Codeville, Alice's fame spread far and wide. Soon, she was invited to showcase her creation at the Great Code Festival, where programmers from all corners of the land marveled at the beauty and power of SparkleScript.
+    As she worked tirelessly on her programming languages, Emma found joy in seeing her creations come to life. Each new language she developed represented a new tool in her digital toolbox, ready to be used to solve complex problems and bring ideas to fruition. 
     
-    In the end, Alice realized that creating programming languages was not just a hobby, but a true passion. She had found a way to express her creativity and imagination in a way that enchanted and inspired others. And so, she continued to craft new languages, each one more wondrous and magical than the last.
+    With each new programming language she created, Emma grew more skilled and knowledgeable, constantly pushing the boundaries of what was possible in the world of technology. And through her passion and dedication, she inspired others to explore the exciting world of programming language design. 
     
-    And that, dear reader, is how Alice discovered that programming languages are indeed fun to create. And in the land of Codeville, her legacy lived on, inspiring generations of programmers to dream big and create their own magical languages.
+    In the end, Emma's love for creating programming languages brought her not only personal fulfillment but also a sense of pride in knowing that her creations were making a difference in the ever-evolving landscape of software development. And so, she continued to innovate, always seeking new and exciting ways to harness the power of code.
     ---Parsed Response (string)---
-    "Once upon a time, in a magical land known as Codeville, there lived a young wizard named Alice who had a special gift for creating programming languages. She spent her days in her cozy workshop, surrounded by piles of ancient scrolls and potions bubbling in cauldrons.\n\nOne day, Alice decided to create a new language called SparkleScript. This language was unlike any other, with shimmering syntax and magical functions that could make even the most complex tasks seem like child's play.\n\nAs Alice delved deeper into the creation of SparkleScript, she found that the language took on a life of its own. It began to dance across her computer screen, weaving together lines of code like a beautiful tapestry. With each line she wrote, she felt a surge of excitement and wonder, as if she were summoning a new spell.\n\nAs SparkleScript grew in popularity among the wizards and sorcerers of Codeville, Alice's fame spread far and wide. Soon, she was invited to showcase her creation at the Great Code Festival, where programmers from all corners of the land marveled at the beauty and power of SparkleScript.\n\nIn the end, Alice realized that creating programming languages was not just a hobby, but a true passion. She had found a way to express her creativity and imagination in a way that enchanted and inspired others. And so, she continued to craft new languages, each one more wondrous and magical than the last.\n\nAnd that, dear reader, is how Alice discovered that programming languages are indeed fun to create. And in the land of Codeville, her legacy lived on, inspiring generations of programmers to dream big and create their own magical languages."
-

Teardown

PASSED test_streaming_uniterated 0:00:05.670286

Setup

Call

Captured stderr call
[2024-10-29T04:42:19Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 5659ms. StopReason: stop
+    "Once upon a time, there was a brilliant software engineer named Emma who had a passion for creating programming languages. She loved the challenge of designing syntax, defining functions, and optimizing efficiency. \n\nEmma spent countless hours experimenting with different concepts and prototypes, diving deep into the intricacies of compilation and interpretation. She reveled in the creative process of building something that could be used to create powerful and innovative software solutions. \n\nAs she worked tirelessly on her programming languages, Emma found joy in seeing her creations come to life. Each new language she developed represented a new tool in her digital toolbox, ready to be used to solve complex problems and bring ideas to fruition. \n\nWith each new programming language she created, Emma grew more skilled and knowledgeable, constantly pushing the boundaries of what was possible in the world of technology. And through her passion and dedication, she inspired others to explore the exciting world of programming language design. \n\nIn the end, Emma's love for creating programming languages brought her not only personal fulfillment but also a sense of pride in knowing that her creations were making a difference in the ever-evolving landscape of software development. And so, she continued to innovate, always seeking new and exciting ways to harness the power of code."
+

Teardown

PASSED test_streaming_uniterated 0:00:03.235023

Setup

Call

Captured stderr call
[2024-10-31T01:09:15Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 3225ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Once upon a time, there was a girl named Lily who had always felt a deep connection to the color blue. Every time she looked up at the sky or gazed into the ocean, she felt a sense of peace and tranquility wash over her. Blue was her favorite color, and it filled her heart with joy.
-    
-    But as she grew older, Lily began to notice something peculiar. Whenever she saw the color blue, she couldn't help but feel a sadness creeping into her heart. It was as if the once soothing hue had turned into a reminder of all the sadness and loss she had experienced in her life.
+    Once there was a girl named Lily who had a peculiar relationship with the color blue. Every time she saw something blue, a wave of melancholy would wash over her. It was as if the color had a strange power over her emotions, evoking memories of lost loved ones and heartbreak.
     
-    Lily tried to shake off this feeling, but no matter how hard she tried, the color blue continued to evoke a sense of melancholy within her. She couldn't understand why something that had brought her so much happiness could now bring her so much pain.
+    Lily tried to avoid anything blue as much as she could, but it seemed to be everywhere she turned. The sky, the sea, even the flowers in her garden all carried a tinge of blue that echoed in her heart.
     
-    One day, as she sat by the beach, watching the waves crash against the shore, Lily realized that the sadness she felt when she saw the color blue wasn't because of the color itself. It was because of the memories and emotions that were attached to it. The color blue had become a symbol of the past, of loss and heartbreak.
+    One day, as she was walking through a park, she saw a vibrant blue butterfly flitting from flower to flower. She felt a tug of sadness at the sight, but something about the delicate beauty of the creature made her pause. She watched as it danced in the sunlight, its wings shimmering with an ethereal glow.
     
-    With this realization, Lily made a decision. She didn't want the color blue to hold power over her emotions any longer. She decided to create new memories, new associations with the color blue. She painted vibrant blue canvases, filled her home with blue decorations, and spent time exploring the beauty of the world around her.
+    In that moment, Lily realized that the color blue didn't have to make her sad. It could also be a source of beauty and inspiration, a reminder of the fleeting nature of life and the importance of cherishing every moment.
     
-    Slowly but surely, the sadness began to fade away, replaced by a renewed sense of wonder and appreciation for the color blue. It no longer made her sad; instead, it reminded her of the strength and resilience she had discovered within herself.
-    
-    And so, Lily learned that the color blue doesn't have to make her sad. It can be a source of comfort and inspiration, a reminder that even in the darkest of times, there is always a glimmer of hope shining through.
+    From that day on, whenever she saw the color blue, instead of feeling sad, she would think of the blue butterfly and the lesson it had taught her. And though a trace of melancholy lingered, it was now mingled with hope and gratitude for the beauty that surrounded her.
     ---Parsed Response (string)---
-    "Once upon a time, there was a girl named Lily who had always felt a deep connection to the color blue. Every time she looked up at the sky or gazed into the ocean, she felt a sense of peace and tranquility wash over her. Blue was her favorite color, and it filled her heart with joy.\n\nBut as she grew older, Lily began to notice something peculiar. Whenever she saw the color blue, she couldn't help but feel a sadness creeping into her heart. It was as if the once soothing hue had turned into a reminder of all the sadness and loss she had experienced in her life.\n\nLily tried to shake off this feeling, but no matter how hard she tried, the color blue continued to evoke a sense of melancholy within her. She couldn't understand why something that had brought her so much happiness could now bring her so much pain.\n\nOne day, as she sat by the beach, watching the waves crash against the shore, Lily realized that the sadness she felt when she saw the color blue wasn't because of the color itself. It was because of the memories and emotions that were attached to it. The color blue had become a symbol of the past, of loss and heartbreak.\n\nWith this realization, Lily made a decision. She didn't want the color blue to hold power over her emotions any longer. She decided to create new memories, new associations with the color blue. She painted vibrant blue canvases, filled her home with blue decorations, and spent time exploring the beauty of the world around her.\n\nSlowly but surely, the sadness began to fade away, replaced by a renewed sense of wonder and appreciation for the color blue. It no longer made her sad; instead, it reminded her of the strength and resilience she had discovered within herself.\n\nAnd so, Lily learned that the color blue doesn't have to make her sad. It can be a source of comfort and inspiration, a reminder that even in the darkest of times, there is always a glimmer of hope shining through."
-

Teardown

PASSED test_streaming_sync 0:00:03.839143

Setup

Call

Captured stderr call
[2024-10-29T04:42:23Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 3831ms. StopReason: stop
+    "Once there was a girl named Lily who had a peculiar relationship with the color blue. Every time she saw something blue, a wave of melancholy would wash over her. It was as if the color had a strange power over her emotions, evoking memories of lost loved ones and heartbreak.\n\nLily tried to avoid anything blue as much as she could, but it seemed to be everywhere she turned. The sky, the sea, even the flowers in her garden all carried a tinge of blue that echoed in her heart.\n\nOne day, as she was walking through a park, she saw a vibrant blue butterfly flitting from flower to flower. She felt a tug of sadness at the sight, but something about the delicate beauty of the creature made her pause. She watched as it danced in the sunlight, its wings shimmering with an ethereal glow.\n\nIn that moment, Lily realized that the color blue didn't have to make her sad. It could also be a source of beauty and inspiration, a reminder of the fleeting nature of life and the importance of cherishing every moment.\n\nFrom that day on, whenever she saw the color blue, instead of feeling sad, she would think of the blue butterfly and the lesson it had taught her. And though a trace of melancholy lingered, it was now mingled with hope and gratitude for the beauty that surrounded her."
+

Teardown

PASSED test_streaming_sync 0:00:04.503166

Setup

Call

Captured stderr call
[2024-10-31T01:09:19Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 4495ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time, in a world where imagination and creativity knew no bounds, a group of brilliant minds came together with a shared passion for programming. They were determined to invent a new programming language that was not only functional and efficient but also incredibly fun to use.
+    Once upon a time, in a magical kingdom filled with endless possibilities, there lived a group of brilliant young wizards who were passionate about creating new and innovative things. One day, they decided to embark on a thrilling quest to develop their very own programming language.
     
-    They spent countless hours brainstorming ideas, testing concepts, and refining their creation. They drew inspiration from nature, music, art, and even science fiction. Slowly but surely, their new programming language began to take shape.
+    Their journey began with a spark of inspiration, as ideas flowed freely and creativity knew no bounds. They worked tirelessly, combining their knowledge of logic, syntax, and algorithms to bring their vision to life. As lines of code danced across their screens, they marveled at the power they held in their hands.
     
-    They named their creation "SparkleScript," a language designed to bring a sense of joy and whimsy to the world of coding. With its colorful syntax, playful keywords, and interactive features, SparkleScript quickly captured the hearts of programmers everywhere.
+    The wizards faced many challenges along the way, from debugging pesky errors to refining complex functionalities. But with determination and teamwork, they overcame each obstacle, learning and growing with every step they took.
     
-    Developers fell in love with SparkleScript's user-friendly interface and its ability to make complex tasks feel like a magical adventure. They used it to create stunning graphics, immersive games, and innovative applications that pushed the boundaries of what was thought possible.
+    Finally, after months of hard work and dedication, the wizards unveiled their masterpiece to the world. Their programming language was a work of art, elegant in design and powerful in execution. It brought joy and excitement to all who used it, opening up a world of endless possibilities and creative potential.
     
-    In the end, the creators of SparkleScript knew they had achieved their goal. Their programming language had not only sparked a revolution in the coding community but had also brought a sense of delight and wonder to all who used it. And as they sat back, watching the world embrace their creation, they knew that programming languages could truly be a source of joy and inspiration for all.
+    And so, the wizards basked in the glory of their achievement, proud of what they had accomplished together. For they had discovered that programming languages were not just tools for creating software, but a form of magic that allowed them to shape the world in ways they had never imagined. And they knew that their adventure was far from over, as they continued to explore and invent new languages, each more enchanting than the last.
     ---Parsed Response (string)---
-    "Once upon a time, in a world where imagination and creativity knew no bounds, a group of brilliant minds came together with a shared passion for programming. They were determined to invent a new programming language that was not only functional and efficient but also incredibly fun to use.\n\nThey spent countless hours brainstorming ideas, testing concepts, and refining their creation. They drew inspiration from nature, music, art, and even science fiction. Slowly but surely, their new programming language began to take shape.\n\nThey named their creation \"SparkleScript,\" a language designed to bring a sense of joy and whimsy to the world of coding. With its colorful syntax, playful keywords, and interactive features, SparkleScript quickly captured the hearts of programmers everywhere.\n\nDevelopers fell in love with SparkleScript's user-friendly interface and its ability to make complex tasks feel like a magical adventure. They used it to create stunning graphics, immersive games, and innovative applications that pushed the boundaries of what was thought possible.\n\nIn the end, the creators of SparkleScript knew they had achieved their goal. Their programming language had not only sparked a revolution in the coding community but had also brought a sense of delight and wonder to all who used it. And as they sat back, watching the world embrace their creation, they knew that programming languages could truly be a source of joy and inspiration for all."
-

Teardown

PASSED test_streaming_uniterated_sync 0:00:03.601367

Setup

Call

Captured stderr call
[2024-10-29T04:42:26Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 3594ms. StopReason: stop
+    "Once upon a time, in a magical kingdom filled with endless possibilities, there lived a group of brilliant young wizards who were passionate about creating new and innovative things. One day, they decided to embark on a thrilling quest to develop their very own programming language.\n\nTheir journey began with a spark of inspiration, as ideas flowed freely and creativity knew no bounds. They worked tirelessly, combining their knowledge of logic, syntax, and algorithms to bring their vision to life. As lines of code danced across their screens, they marveled at the power they held in their hands.\n\nThe wizards faced many challenges along the way, from debugging pesky errors to refining complex functionalities. But with determination and teamwork, they overcame each obstacle, learning and growing with every step they took.\n\nFinally, after months of hard work and dedication, the wizards unveiled their masterpiece to the world. Their programming language was a work of art, elegant in design and powerful in execution. It brought joy and excitement to all who used it, opening up a world of endless possibilities and creative potential.\n\nAnd so, the wizards basked in the glory of their achievement, proud of what they had accomplished together. For they had discovered that programming languages were not just tools for creating software, but a form of magic that allowed them to shape the world in ways they had never imagined. And they knew that their adventure was far from over, as they continued to explore and invent new languages, each more enchanting than the last."
+

Teardown

PASSED test_streaming_uniterated_sync 0:00:03.061184

Setup

Call

Captured stderr call
[2024-10-31T01:09:22Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 3055ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Once there was a town where everything was painted in shades of blue. The houses, the streets, the trees - even the sky seemed to be a deeper shade of blue than anywhere else. The townspeople went about their days with a melancholy air, feeling the weight of the color blue pressing down on them.
-    
-    One day, a young girl named Lily moved to the town. She had never seen so much blue in her life and at first, she found it beautiful. But as the days passed, she began to feel the sadness that seemed to permeate everything around her.
-    
-    Lily tried to bring some color into the town, painting bright murals on the walls and planting colorful flowers in the gardens. But no matter how hard she tried, the color blue seemed to always dominate.
+    Once there was a young girl named Emily who had a deep love for the color blue. She believed it represented peace and tranquility, soothing her troubled mind whenever she saw it.
     
-    One evening, as Lily sat on a bench looking out at the sea of blue around her, she felt a tear slide down her cheek. The color blue had seeped into her soul and she couldn't shake the feeling of sadness it brought.
+    However, one day, tragedy struck when Emily's best friend, Sarah, passed away in a car accident. Sarah's favorite color was also blue, and it suddenly took on a new, heartbreaking meaning for Emily.
     
-    But then, a small bird landed on her shoulder, its feathers a bright and vibrant red. It sang a sweet song that seemed to pierce through the gloom of the town. Lily felt a warmth spread through her and she realized that even in a sea of blue, there was still beauty and joy to be found.
+    From that day on, every time Emily saw the color blue, it reminded her of the loss she had endured. The once calming hue now brought tears to her eyes and a heaviness to her heart. She struggled to find solace in something she had once loved so dearly.
     
-    From that day on, Lily embraced the color blue for its depth and complexity, but also sought out the other colors of the world that could bring light and happiness into her life. And as she did, the town seemed to slowly brighten and the people began to smile once more.
+    Despite her sadness, Emily knew she would always cherish the memories of Sarah and the beautiful blue skies they had admired together. And as time passed, she found that the color blue no longer made her sad, but instead brought a bittersweet comfort, reminding her of the precious moments they had shared.
     ---Parsed Response (string)---
-    "Once there was a town where everything was painted in shades of blue. The houses, the streets, the trees - even the sky seemed to be a deeper shade of blue than anywhere else. The townspeople went about their days with a melancholy air, feeling the weight of the color blue pressing down on them.\n\nOne day, a young girl named Lily moved to the town. She had never seen so much blue in her life and at first, she found it beautiful. But as the days passed, she began to feel the sadness that seemed to permeate everything around her.\n\nLily tried to bring some color into the town, painting bright murals on the walls and planting colorful flowers in the gardens. But no matter how hard she tried, the color blue seemed to always dominate.\n\nOne evening, as Lily sat on a bench looking out at the sea of blue around her, she felt a tear slide down her cheek. The color blue had seeped into her soul and she couldn't shake the feeling of sadness it brought.\n\nBut then, a small bird landed on her shoulder, its feathers a bright and vibrant red. It sang a sweet song that seemed to pierce through the gloom of the town. Lily felt a warmth spread through her and she realized that even in a sea of blue, there was still beauty and joy to be found.\n\nFrom that day on, Lily embraced the color blue for its depth and complexity, but also sought out the other colors of the world that could bring light and happiness into her life. And as she did, the town seemed to slowly brighten and the people began to smile once more."
-

Teardown

PASSED test_streaming_claude 0:00:01.212260

Setup

Call

Captured stdout call
msgs:
-Here's a haiku about Mt. Rainier:
+    "Once there was a young girl named Emily who had a deep love for the color blue. She believed it represented peace and tranquility, soothing her troubled mind whenever she saw it.\n\nHowever, one day, tragedy struck when Emily's best friend, Sarah, passed away in a car accident. Sarah's favorite color was also blue, and it suddenly took on a new, heartbreaking meaning for Emily.\n\nFrom that day on, every time Emily saw the color blue, it reminded her of the loss she had endured. The once calming hue now brought tears to her eyes and a heaviness to her heart. She struggled to find solace in something she had once loved so dearly.\n\nDespite her sadness, Emily knew she would always cherish the memories of Sarah and the beautiful blue skies they had admired together. And as time passed, she found that the color blue no longer made her sad, but instead brought a bittersweet comfort, reminding her of the precious moments they had shared."
+

Teardown

PASSED test_streaming_claude 0:00:01.043147

Setup

Call

Captured stdout call
msgs:
+Here's a haiku about Mt. Rainier's height:
 
 Rainier stands proud, high
-Ancient glacier-crowned giant
-Pierce the summer sky
+Fourteen thousand feet of snow
+Above Puget Sound
 final:
-Here's a haiku about Mt. Rainier:
+Here's a haiku about Mt. Rainier's height:
 
 Rainier stands proud, high
-Ancient glacier-crowned giant
-Pierce the summer sky
-
Captured stderr call
[2024-10-29T04:42:28Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 1203ms. StopReason: "end_turn"
+Fourteen thousand feet of snow
+Above Puget Sound
+
Captured stderr call
[2024-10-31T01:09:24Z INFO  baml_events] Function PromptTestClaude:
+    Client: Sonnet (claude-3-5-sonnet-20241022) - 1030ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here's a haiku about Mt. Rainier:
+    Here's a haiku about Mt. Rainier's height:
     
     Rainier stands proud, high
-    Ancient glacier-crowned giant
-    Pierce the summer sky
+    Fourteen thousand feet of snow
+    Above Puget Sound
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier:\n\nRainier stands proud, high\nAncient glacier-crowned giant\nPierce the summer sky"
-

Teardown

PASSED test_streaming_gemini 0:00:12.987664

Setup

Call

Captured stdout call
msgs:
-Dottie Mae sat on the porch swing, its rusty chains groaning a familiar lullaby. The Texas sun beat down, making the world hazy and slow. Her gaze drifted to the dusty road, longing for a speck, a sign of life, anything to break the monotony. 
-
-She took a sip of her Dr Pepper, the icy drink a welcome contrast to the day's heat. It was her daddy's favorite, and hers too, ever since she was a little girl. Back then, Daddy would sit on this very porch, strumming his guitar, a bottle of Dr Pepper sweating beside him. He'd tell Dottie stories about the drink - how it was born in Texas, just like her, how its 23 flavors were a secret treasure. 
-
-A cloud of dust billowed in the distance, growing larger, resolving into the shape of a car. Dottie’s heart leaped. Visitors were rare in these parts, especially on a day like this. The car, a sleek, cherry-red convertible, rolled to a stop in front of her gate. A handsome young man stepped out, a smile flashing white against his tanned face.
-
-"Afternoon, ma'am," he drawled, tipping his hat. "Mind if I trouble you for some water? This heat's a killer."
-
-"Don't you worry none, son," Dottie said, her voice a rusty hinge after days of silence. "Got plenty to spare."
+    "Here's a haiku about Mt. Rainier's height:\n\nRainier stands proud, high\nFourteen thousand feet of snow\nAbove Puget Sound"
+

Teardown

PASSED test_streaming_gemini 0:00:08.008134

Setup

Call

Captured stdout call
msgs:
+Barnaby Butterfield, a man of simple tastes and unwavering routine, sat on his porch swing, the Louisiana sun dipping below the horizon. His day, like all the others, had unfolded predictably: wake, work, supper, swing, sleep. But Barnaby harbored a secret, a small rebellion against the mundane. Each day, as the last sliver of sun kissed the earth, he allowed himself a single indulgence: a frosty, ice-cold Dr Pepper.
 
-She brought him a glass of iced tea and watched as he drank it, his Adam's apple bobbing. He reminded her of her Daddy, a little. Same easy smile, same way of looking at you like you were the only thing that mattered in that moment.
+Today, however, was different. Today, nestled amongst the six-packs at the general store, Barnaby discovered a curious, shimmering bottle, unlike any Dr Pepper he'd seen before. It hummed with a faint energy, the iconic logo swirling like a miniature galaxy. Intrigued, he bought it, his heart, usually as still as his routine, thrumming with a forgotten excitement.
 
-"Thank you, ma'am," he said, handing her the glass. "You wouldn't happen to have a Dr Pepper, would you? That's my grandpappy's favorite, and I promised him I'd bring one back."
+As the sky erupted in hues of orange and purple, Barnaby popped the bottle open. A rush of cool air, smelling of sugared plums and stardust, washed over him. He took a sip. The familiar, comforting taste was infused with something… more. It tasted of crisp mountain air, of laughter echoing through a bustling marketplace, of a thousand whispered secrets.
 
-Dottie's smile spread wide, the wrinkles around her eyes crinkling with delight. "Well, now, ain't that something," she said. "My Daddy, he loved his Dr Pepper too. Said it was the taste of Texas sunshine."
+Suddenly, the porch swing felt less like worn wood and more like a pirate ship sailing on a sea of stars. Barnaby, usually content with the view of his hydrangeas, saw towering waterfalls cascading from emerald cliffs. His world, usually confined to the four corners of his porch, had expanded, vibrant and exhilarating.
 
-She went inside and came back with two bottles, their condensation beads shimmering like tiny diamonds. They sat on the porch swing, sipping their Dr Pepper, the sun painting the sky in hues of orange and purple. 
-
-The young man told her about his grandpappy, how he was a musician too, and how he missed the taste of home. Dottie listened, her heart full, the silence between their words as comfortable as the old swing. 
-
-As the first stars began to prick the darkening sky, the young man stood up to leave. “Thank you, ma’am,” he said. “That Dr Pepper was just what the doctor ordered.”
-
-Dottie laughed, the sound rusty but free. “He always did have a way with words, that Dr Pepper,” she said, watching the young man drive away. The dust settled, leaving her alone again, but the silence no longer felt empty. It tasted of shared stories, Texas sunsets, and the sweet, familiar fizz of Dr Pepper - a taste of home. 
+The taste faded, leaving behind a lingering sweetness and a jolt of joy. As the last drop slid down his throat, Barnaby knew his routine wasn't broken, it was enhanced. He still had his quiet life, but now, he also had a taste of the extraordinary, a reminder that even in the ordinary, magic could be found, one sip of shimmering Dr Pepper at a time. 
 
 final:
-Dottie Mae sat on the porch swing, its rusty chains groaning a familiar lullaby. The Texas sun beat down, making the world hazy and slow. Her gaze drifted to the dusty road, longing for a speck, a sign of life, anything to break the monotony. 
-
-She took a sip of her Dr Pepper, the icy drink a welcome contrast to the day's heat. It was her daddy's favorite, and hers too, ever since she was a little girl. Back then, Daddy would sit on this very porch, strumming his guitar, a bottle of Dr Pepper sweating beside him. He'd tell Dottie stories about the drink - how it was born in Texas, just like her, how its 23 flavors were a secret treasure. 
-
-A cloud of dust billowed in the distance, growing larger, resolving into the shape of a car. Dottie’s heart leaped. Visitors were rare in these parts, especially on a day like this. The car, a sleek, cherry-red convertible, rolled to a stop in front of her gate. A handsome young man stepped out, a smile flashing white against his tanned face.
-
-"Afternoon, ma'am," he drawled, tipping his hat. "Mind if I trouble you for some water? This heat's a killer."
+Barnaby Butterfield, a man of simple tastes and unwavering routine, sat on his porch swing, the Louisiana sun dipping below the horizon. His day, like all the others, had unfolded predictably: wake, work, supper, swing, sleep. But Barnaby harbored a secret, a small rebellion against the mundane. Each day, as the last sliver of sun kissed the earth, he allowed himself a single indulgence: a frosty, ice-cold Dr Pepper.
 
-"Don't you worry none, son," Dottie said, her voice a rusty hinge after days of silence. "Got plenty to spare."
+Today, however, was different. Today, nestled amongst the six-packs at the general store, Barnaby discovered a curious, shimmering bottle, unlike any Dr Pepper he'd seen before. It hummed with a faint energy, the iconic logo swirling like a miniature galaxy. Intrigued, he bought it, his heart, usually as still as his routine, thrumming with a forgotten excitement.
 
-She brought him a glass of iced tea and watched as he drank it, his Adam's apple bobbing. He reminded her of her Daddy, a little. Same easy smile, same way of looking at you like you were the only thing that mattered in that moment.
+As the sky erupted in hues of orange and purple, Barnaby popped the bottle open. A rush of cool air, smelling of sugared plums and stardust, washed over him. He took a sip. The familiar, comforting taste was infused with something… more. It tasted of crisp mountain air, of laughter echoing through a bustling marketplace, of a thousand whispered secrets.
 
-"Thank you, ma'am," he said, handing her the glass. "You wouldn't happen to have a Dr Pepper, would you? That's my grandpappy's favorite, and I promised him I'd bring one back."
+Suddenly, the porch swing felt less like worn wood and more like a pirate ship sailing on a sea of stars. Barnaby, usually content with the view of his hydrangeas, saw towering waterfalls cascading from emerald cliffs. His world, usually confined to the four corners of his porch, had expanded, vibrant and exhilarating.
 
-Dottie's smile spread wide, the wrinkles around her eyes crinkling with delight. "Well, now, ain't that something," she said. "My Daddy, he loved his Dr Pepper too. Said it was the taste of Texas sunshine."
+The taste faded, leaving behind a lingering sweetness and a jolt of joy. As the last drop slid down his throat, Barnaby knew his routine wasn't broken, it was enhanced. He still had his quiet life, but now, he also had a taste of the extraordinary, a reminder that even in the ordinary, magic could be found, one sip of shimmering Dr Pepper at a time. 
 
-She went inside and came back with two bottles, their condensation beads shimmering like tiny diamonds. They sat on the porch swing, sipping their Dr Pepper, the sun painting the sky in hues of orange and purple. 
-
-The young man told her about his grandpappy, how he was a musician too, and how he missed the taste of home. Dottie listened, her heart full, the silence between their words as comfortable as the old swing. 
-
-As the first stars began to prick the darkening sky, the young man stood up to leave. “Thank you, ma’am,” he said. “That Dr Pepper was just what the doctor ordered.”
-
-Dottie laughed, the sound rusty but free. “He always did have a way with words, that Dr Pepper,” she said, watching the young man drive away. The dust settled, leaving her alone again, but the silence no longer felt empty. It tasted of shared stories, Texas sunsets, and the sweet, familiar fizz of Dr Pepper - a taste of home. 
-
-
Captured stderr call
[2024-10-29T04:42:41Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 12969ms. StopReason: Stop
+
Captured stderr call
[2024-10-31T01:09:32Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 7998ms. StopReason: Stop
     ---PROMPT---
     [chat] user: Write a nice short story about Dr.Pepper
     
     ---LLM REPLY---
-    Dottie Mae sat on the porch swing, its rusty chains groaning a familiar lullaby. The Texas sun beat down, making the world hazy and slow. Her gaze drifted to the dusty road, longing for a speck, a sign of life, anything to break the monotony. 
-    
-    She took a sip of her Dr Pepper, the icy drink a welcome contrast to the day's heat. It was her daddy's favorite, and hers too, ever since she was a little girl. Back then, Daddy would sit on this very porch, strumming his guitar, a bottle of Dr Pepper sweating beside him. He'd tell Dottie stories about the drink - how it was born in Texas, just like her, how its 23 flavors were a secret treasure. 
+    Barnaby Butterfield, a man of simple tastes and unwavering routine, sat on his porch swing, the Louisiana sun dipping below the horizon. His day, like all the others, had unfolded predictably: wake, work, supper, swing, sleep. But Barnaby harbored a secret, a small rebellion against the mundane. Each day, as the last sliver of sun kissed the earth, he allowed himself a single indulgence: a frosty, ice-cold Dr Pepper.
     
-    A cloud of dust billowed in the distance, growing larger, resolving into the shape of a car. Dottie’s heart leaped. Visitors were rare in these parts, especially on a day like this. The car, a sleek, cherry-red convertible, rolled to a stop in front of her gate. A handsome young man stepped out, a smile flashing white against his tanned face.
+    Today, however, was different. Today, nestled amongst the six-packs at the general store, Barnaby discovered a curious, shimmering bottle, unlike any Dr Pepper he'd seen before. It hummed with a faint energy, the iconic logo swirling like a miniature galaxy. Intrigued, he bought it, his heart, usually as still as his routine, thrumming with a forgotten excitement.
     
-    "Afternoon, ma'am," he drawled, tipping his hat. "Mind if I trouble you for some water? This heat's a killer."
+    As the sky erupted in hues of orange and purple, Barnaby popped the bottle open. A rush of cool air, smelling of sugared plums and stardust, washed over him. He took a sip. The familiar, comforting taste was infused with something… more. It tasted of crisp mountain air, of laughter echoing through a bustling marketplace, of a thousand whispered secrets.
     
-    "Don't you worry none, son," Dottie said, her voice a rusty hinge after days of silence. "Got plenty to spare."
+    Suddenly, the porch swing felt less like worn wood and more like a pirate ship sailing on a sea of stars. Barnaby, usually content with the view of his hydrangeas, saw towering waterfalls cascading from emerald cliffs. His world, usually confined to the four corners of his porch, had expanded, vibrant and exhilarating.
     
-    She brought him a glass of iced tea and watched as he drank it, his Adam's apple bobbing. He reminded her of her Daddy, a little. Same easy smile, same way of looking at you like you were the only thing that mattered in that moment.
-    
-    "Thank you, ma'am," he said, handing her the glass. "You wouldn't happen to have a Dr Pepper, would you? That's my grandpappy's favorite, and I promised him I'd bring one back."
-    
-    Dottie's smile spread wide, the wrinkles around her eyes crinkling with delight. "Well, now, ain't that something," she said. "My Daddy, he loved his Dr Pepper too. Said it was the taste of Texas sunshine."
-    
-    She went inside and came back with two bottles, their condensation beads shimmering like tiny diamonds. They sat on the porch swing, sipping their Dr Pepper, the sun painting the sky in hues of orange and purple. 
-    
-    The young man told her about his grandpappy, how he was a musician too, and how he missed the taste of home. Dottie listened, her heart full, the silence between their words as comfortable as the old swing. 
-    
-    As the first stars began to prick the darkening sky, the young man stood up to leave. “Thank you, ma’am,” he said. “That Dr Pepper was just what the doctor ordered.”
-    
-    Dottie laughed, the sound rusty but free. “He always did have a way with words, that Dr Pepper,” she said, watching the young man drive away. The dust settled, leaving her alone again, but the silence no longer felt empty. It tasted of shared stories, Texas sunsets, and the sweet, familiar fizz of Dr Pepper - a taste of home. 
+    The taste faded, leaving behind a lingering sweetness and a jolt of joy. As the last drop slid down his throat, Barnaby knew his routine wasn't broken, it was enhanced. He still had his quiet life, but now, he also had a taste of the extraordinary, a reminder that even in the ordinary, magic could be found, one sip of shimmering Dr Pepper at a time. 
     
     ---Parsed Response (string)---
-    "Dottie Mae sat on the porch swing, its rusty chains groaning a familiar lullaby. The Texas sun beat down, making the world hazy and slow. Her gaze drifted to the dusty road, longing for a speck, a sign of life, anything to break the monotony. \n\nShe took a sip of her Dr Pepper, the icy drink a welcome contrast to the day's heat. It was her daddy's favorite, and hers too, ever since she was a little girl. Back then, Daddy would sit on this very porch, strumming his guitar, a bottle of Dr Pepper sweating beside him. He'd tell Dottie stories about the drink - how it was born in Texas, just like her, how its 23 flavors were a secret treasure. \n\nA cloud of dust billowed in the distance, growing larger, resolving into the shape of a car. Dottie’s heart leaped. Visitors were rare in these parts, especially on a day like this. The car, a sleek, cherry-red convertible, rolled to a stop in front of her gate. A handsome young man stepped out, a smile flashing white against his tanned face.\n\n\"Afternoon, ma'am,\" he drawled, tipping his hat. \"Mind if I trouble you for some water? This heat's a killer.\"\n\n\"Don't you worry none, son,\" Dottie said, her voice a rusty hinge after days of silence. \"Got plenty to spare.\"\n\nShe brought him a glass of iced tea and watched as he drank it, his Adam's apple bobbing. He reminded her of her Daddy, a little. Same easy smile, same way of looking at you like you were the only thing that mattered in that moment.\n\n\"Thank you, ma'am,\" he said, handing her the glass. \"You wouldn't happen to have a Dr Pepper, would you? That's my grandpappy's favorite, and I promised him I'd bring one back.\"\n\nDottie's smile spread wide, the wrinkles around her eyes crinkling with delight. \"Well, now, ain't that something,\" she said. \"My Daddy, he loved his Dr Pepper too. Said it was the taste of Texas sunshine.\"\n\nShe went inside and came back with two bottles, their condensation beads shimmering like tiny diamonds. They sat on the porch swing, sipping their Dr Pepper, the sun painting the sky in hues of orange and purple. \n\nThe young man told her about his grandpappy, how he was a musician too, and how he missed the taste of home. Dottie listened, her heart full, the silence between their words as comfortable as the old swing. \n\nAs the first stars began to prick the darkening sky, the young man stood up to leave. “Thank you, ma’am,” he said. “That Dr Pepper was just what the doctor ordered.”\n\nDottie laughed, the sound rusty but free. “He always did have a way with words, that Dr Pepper,” she said, watching the young man drive away. The dust settled, leaving her alone again, but the silence no longer felt empty. It tasted of shared stories, Texas sunsets, and the sweet, familiar fizz of Dr Pepper - a taste of home. \n"
-

Teardown

PASSED test_tracing_async_only 0:00:06.788471

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
-
Captured stderr call
[2024-10-29T04:42:42Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 705ms. StopReason: stop
+    "Barnaby Butterfield, a man of simple tastes and unwavering routine, sat on his porch swing, the Louisiana sun dipping below the horizon. His day, like all the others, had unfolded predictably: wake, work, supper, swing, sleep. But Barnaby harbored a secret, a small rebellion against the mundane. Each day, as the last sliver of sun kissed the earth, he allowed himself a single indulgence: a frosty, ice-cold Dr Pepper.\n\nToday, however, was different. Today, nestled amongst the six-packs at the general store, Barnaby discovered a curious, shimmering bottle, unlike any Dr Pepper he'd seen before. It hummed with a faint energy, the iconic logo swirling like a miniature galaxy. Intrigued, he bought it, his heart, usually as still as his routine, thrumming with a forgotten excitement.\n\nAs the sky erupted in hues of orange and purple, Barnaby popped the bottle open. A rush of cool air, smelling of sugared plums and stardust, washed over him. He took a sip. The familiar, comforting taste was infused with something… more. It tasted of crisp mountain air, of laughter echoing through a bustling marketplace, of a thousand whispered secrets.\n\nSuddenly, the porch swing felt less like worn wood and more like a pirate ship sailing on a sea of stars. Barnaby, usually content with the view of his hydrangeas, saw towering waterfalls cascading from emerald cliffs. His world, usually confined to the four corners of his porch, had expanded, vibrant and exhilarating.\n\nThe taste faded, leaving behind a lingering sweetness and a jolt of joy. As the last drop slid down his throat, Barnaby knew his routine wasn't broken, it was enhanced. He still had his quiet life, but now, he also had a taste of the extraordinary, a reminder that even in the ordinary, magic could be found, one sip of shimmering Dr Pepper at a time. \n"
+

Teardown

PASSED test_tracing_async_only 0:00:05.938576

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
+
Captured stderr call
[2024-10-31T01:09:33Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 696ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1099,16 +1015,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, I am a JSON blob",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, I am a JSON blob",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
-[2024-10-29T04:42:44Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 735ms. StopReason: stop
+[2024-10-31T01:09:34Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 598ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1131,8 +1047,8 @@
       "prop1": "Hello, World!",
       "prop2": 540
     }
-[2024-10-29T04:42:45Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 623ms. StopReason: stop
+[2024-10-31T01:09:35Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 779ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1155,8 +1071,8 @@
       "prop1": "Hello, World!",
       "prop2": 540
     }
-[2024-10-29T04:42:47Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 641ms. StopReason: stop
+[2024-10-31T01:09:37Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 840ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1171,17 +1087,17 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, world!",
+      "prop1": "Sample data",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, world!",
+      "prop1": "Sample data",
       "prop2": 540
     }
-

Teardown

PASSED test_tracing_sync 0:00:00.001044

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.175393

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:14.375720

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.461788

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.392638

Setup

Call

Teardown

PASSED test_dynamic 0:00:00.923116

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.83, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
-
Captured stderr call
[2024-10-29T04:43:07Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 910ms. StopReason: stop
+

Teardown

PASSED test_tracing_sync 0:00:00.001286

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.482646

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:14.207460

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.269674

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.505922

Setup

Call

Teardown

PASSED test_dynamic 0:00:00.948736

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.83, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
+
Captured stderr call
[2024-10-31T01:09:57Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 940ms. StopReason: stop
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -1202,17 +1118,17 @@
     user: My name is Harrison. My hair is black and I'm 6 feet tall. I'm pretty good around the hoop.
     
     ---LLM REPLY---
+    ```json
     [
       {
         "name": "Harrison",
         "hair_color": "BLACK",
-        "last_name": null,
+        "last_name": [],
         "height": 1.83,
-        "hobbies": [
-          "sports"
-        ]
+        "hobbies": ["sports"]
       }
     ]
+    ```
     ---Parsed Response (list<class Person>)---
     [
       {
@@ -1225,10 +1141,10 @@
         ]
       }
     ]
-

Teardown

PASSED test_dynamic_class_output 0:00:01.069244

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_class_output 0:00:01.269460

Setup

Call

Captured stdout call
[]
 {"hair_color":"black"}
-
Captured stderr call
[2024-10-29T04:43:07Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 533ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:09:58Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 693ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1247,8 +1163,8 @@
     {
       "hair_color": "black"
     }
-[2024-10-29T04:43:08Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 522ms. StopReason: stop
+[2024-10-31T01:09:58Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 566ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1267,9 +1183,9 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:01.088381

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
-
Captured stderr call
[2024-10-29T04:43:09Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1075ms. StopReason: stop
+

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:01.321163

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
+
Captured stderr call
[2024-10-31T01:09:59Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1311ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1310,7 +1226,7 @@
       "hair_color": "black",
       "height": 6.0
     }
-

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.926012

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
+

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.903404

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
 streamed  {'name': None, 'hair_color': None}
 streamed  name=None hair_color=None
 streamed  {'name': None, 'hair_color': None}
@@ -1387,8 +1303,8 @@
 streamed  name={'first_name': 'Mark', 'last_name': 'Gonzalez'} hair_color='black'
 streamed  {'name': {'first_name': 'Mark', 'last_name': 'Gonzalez'}, 'hair_color': 'black'}
 {"name":{"first_name":"Mark","last_name":"Gonzalez"},"hair_color":"black"}
-
Captured stderr call
[2024-10-29T04:43:10Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 917ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:00Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 895ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1419,7 +1335,7 @@
       },
       "hair_color": "black"
     }
-

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.538827

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.463804

Setup

Call

Captured stdout call
[]
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{\n  "'}
@@ -1436,8 +1352,8 @@
 final  hair_color='black'
 final  {'hair_color': 'black'}
 final  {"hair_color":"black"}
-
Captured stderr call
[2024-10-29T04:43:10Z INFO  baml_events] Function MyFunc:
-    Client: MyClient (gpt-4o-mini-2024-07-18) - 530ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:01Z INFO  baml_events] Function MyFunc:
+    Client: MyClient (gpt-4o-mini-2024-07-18) - 455ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1458,23 +1374,23 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.196582

Setup

Call

Captured stderr call
[2024-10-29T04:43:11Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1187ms. StopReason: stop
+

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.647980

Setup

Call

Captured stderr call
[2024-10-31T01:10:03Z INFO  baml_events] Function DynamicListInputOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1637ms. StopReason: stop
     ---PROMPT---
     [chat] system: Here is some input data:
     ----
     [{
+        "testKey": "myTest",
         "new_key": "hi1",
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "testKey": "myTest",
     }, {
-        "testKey": "myTest",
+        "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "new_key": "hi",
+        "testKey": "myTest",
     }]
     ----
     
@@ -1492,20 +1408,20 @@
     
     ---LLM REPLY---
     [
-        {
-            "testKey": "myTest",
-            "new_key": "hi1",
-            "blah": {
-                "nestedKey1": "nestedVal"
-            }
-        },
-        {
-            "testKey": "myTest",
-            "new_key": "hi",
-            "blah": {
-                "nestedKey1": "nestedVal"
-            }
+      {
+        "testKey": "myTest",
+        "new_key": "hi1",
+        "blah": {
+          "nestedKey1": "nestedVal"
+        }
+      },
+      {
+        "testKey": "myTest",
+        "new_key": "hi",
+        "blah": {
+          "nestedKey1": "nestedVal"
         }
+      }
     ]
     ---Parsed Response (list<class DynInputOutput>)---
     [
@@ -1524,8 +1440,8 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_types_new_enum 0:00:00.880519

Setup

Call

Captured stderr call
[2024-10-29T04:43:12Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 872ms. StopReason: stop
+

Teardown

PASSED test_dynamic_types_new_enum 0:00:02.412615

Setup

Call

Captured stderr call
[2024-10-31T01:10:05Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 2402ms. StopReason: stop
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -1540,6 +1456,7 @@
     user: My name is Harrison. My hair is black and I'm 6 feet tall. I'm pretty good around the hoop. I like giraffes.
     
     ---LLM REPLY---
+    ```json
     [
       {
         "name": "Harrison",
@@ -1547,6 +1464,7 @@
         "animalLiked": "GIRAFFE"
       }
     ]
+    ```
     ---Parsed Response (list<class Person>)---
     [
       {
@@ -1555,8 +1473,8 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.967091

Setup

Call

Captured stderr call
[2024-10-29T04:43:13Z INFO  baml_events] Function ExtractHobby:
-    Client: GPT4 (gpt-4o-2024-08-06) - 959ms. StopReason: stop
+

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.507572

Setup

Call

Captured stderr call
[2024-10-31T01:10:05Z INFO  baml_events] Function ExtractHobby:
+    Client: GPT4 (gpt-4o-2024-08-06) - 498ms. StopReason: stop
     ---PROMPT---
     [chat] system: Answer with a JSON Array using this schema:
     [
@@ -1565,17 +1483,19 @@
     user: My name is Harrison. My hair is black and I'm 6 feet tall. golf and music are my favorite!.
     
     ---LLM REPLY---
-    [  
-      "Golfing",  
-      "MUSIC"  
+    ```json
+    [
+      "MUSIC",
+      "Golfing"
     ]
+    ```
     ---Parsed Response (list<enum Hobby>)---
     [
-      "Golfing",
-      "MUSIC"
+      "MUSIC",
+      "Golfing"
     ]
-

Teardown

PASSED test_dynamic_literals 0:00:01.222930

Setup

Call

Captured stderr call
[2024-10-29T04:43:15Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1212ms. StopReason: stop
+

Teardown

PASSED test_dynamic_literals 0:00:01.086050

Setup

Call

Captured stderr call
[2024-10-31T01:10:07Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1077ms. StopReason: stop
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -1590,7 +1510,6 @@
     user: My name is Harrison. My hair is black and I'm 6 feet tall. I'm pretty good around the hoop. I like giraffes.
     
     ---LLM REPLY---
-    ```json
     [
       {
         "name": "Harrison",
@@ -1598,7 +1517,6 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-    ```
     ---Parsed Response (list<class Person>)---
     [
       {
@@ -1607,23 +1525,23 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_inputs_list 0:00:01.121842

Setup

Call

Captured stderr call
[2024-10-29T04:43:16Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1111ms. StopReason: stop
+

Teardown

PASSED test_dynamic_inputs_list 0:00:01.488684

Setup

Call

Captured stderr call
[2024-10-31T01:10:08Z INFO  baml_events] Function DynamicListInputOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1478ms. StopReason: stop
     ---PROMPT---
     [chat] system: Here is some input data:
     ----
     [{
-        "testKey": "myTest",
         "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
+        "testKey": "myTest",
     }, {
+        "testKey": "myTest",
+        "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "testKey": "myTest",
-        "new_key": "hi",
     }]
     ----
     
@@ -1673,12 +1591,12 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_output_map 0:00:00.839591

Setup

Call

Captured stdout call
[]
-final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"}}
-
Captured stderr call
[2024-10-29T04:43:17Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 828ms. StopReason: stop
+

Teardown

PASSED test_dynamic_output_map 0:00:01.046204

Setup

Call

Captured stdout call
[]
+final  hair_color='black' attributes={'height': '6 feet', 'eye_color': 'blue', 'facial_hair': 'beard'}
+final  {'hair_color': 'black', 'attributes': {'height': '6 feet', 'eye_color': 'blue', 'facial_hair': 'beard'}}
+final  {"hair_color":"black","attributes":{"height":"6 feet","eye_color":"blue","facial_hair":"beard"}}
+
Captured stderr call
[2024-10-31T01:10:09Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1038ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1695,6 +1613,7 @@
     {
       "hair_color": "black",
       "attributes": {
+        "height": "6 feet",
         "eye_color": "blue",
         "facial_hair": "beard"
       }
@@ -1703,19 +1622,20 @@
     {
       "hair_color": "black",
       "attributes": {
+        "height": "6 feet",
         "eye_color": "blue",
         "facial_hair": "beard"
       }
     }
-

Teardown

PASSED test_dynamic_output_union 0:00:01.924374

Setup

Call

Captured stdout call
[]
-final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30 years old'} height={'feet': 6.0, 'inches': None}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30 years old'}, 'height': {'feet': 6.0, 'inches': None}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard","age":"30 years old"},"height":{"feet":6.0,"inches":null}}
-final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'} height={'meters': 1.8}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}, 'height': {'meters': 1.8}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"},"height":{"meters":1.8}}
-
Captured stderr call
[2024-10-29T04:43:18Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1037ms. StopReason: stop
+

Teardown

PASSED test_dynamic_output_union 0:00:02.633330

Setup

Call

Captured stdout call
[]
+final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'} height={'feet': 6.0, 'inches': None}
+final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}, 'height': {'feet': 6.0, 'inches': None}}
+final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"},"height":{"feet":6.0,"inches":null}}
+final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30'} height={'meters': 1.8}
+final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30'}, 'height': {'meters': 1.8}}
+final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard","age":"30"},"height":{"meters":1.8}}
+
Captured stderr call
[2024-10-31T01:10:10Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1289ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1740,7 +1660,6 @@
       "attributes": {
         "eye_color": "blue",
         "facial_hair": "beard",
-        "age": "30 years old"
       },
       "height": {
         "feet": 6,
@@ -1752,16 +1671,15 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "age": "30 years old"
+        "facial_hair": "beard"
       },
       "height": {
         "feet": 6.0,
         "inches": null
       }
     }
-[2024-10-29T04:43:18Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 868ms. StopReason: stop
+[2024-10-31T01:10:12Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1323ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1785,7 +1703,8 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard"
+        "facial_hair": "beard",
+        "age": "30"
       },
       "height": {
         "meters": 1.8
@@ -1796,13 +1715,18 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard"
+        "facial_hair": "beard",
+        "age": "30"
       },
       "height": {
         "meters": 1.8
       }
     }
-

Teardown

PASSED test_nested_class_streaming 0:00:03.953781

Setup

Call

Captured stdout call
streamed  {'prop1': None, 'prop2': None}
+

Teardown

PASSED test_nested_class_streaming 0:00:02.583748

Setup

Call

Captured stdout call
streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
@@ -1828,209 +1752,120 @@
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': '', 'prop2': None}
-streamed  {'prop1': ' Foo', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': None}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': None, 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': '', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'B', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': None}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': None}}}
-final  {'prop1': ' Foo ', 'prop2': {'prop1': 'Bar', 'prop2': 'Baz', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-
Captured stderr call
[2024-10-29T04:43:22Z INFO  baml_events] Function FnOutputClassNested:
-    Client: Ollama (llama2) - 3937ms. StopReason: stop
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': None}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': '', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': None}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': None}}}
+final  {'prop1': 'example', 'prop2': {'prop1': 'value1', 'prop2': 'value2', 'inner': {'prop2': 42, 'prop3': 3.14159}}}
+
Captured stderr call
[2024-10-31T01:10:14Z INFO  baml_events] Function FnOutputClassNested:
+    Client: Ollama (llama2) - 2575ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -2050,44 +1885,35 @@
     JSON:
     
     ---LLM REPLY---
-     Sure! Here is a made-up JSON blob that matches the provided schema:
-    
+    Of course! Here is a made-up JSON blob that matches the schema you provided:
+    ```json
     {
-      "prop1": " Foo ",
+      "prop1": "example",
       "prop2": {
-        "prop1": "Bar",
-        "prop2": "Baz",
+        "prop1": "value1",
+        "prop2": "value2",
         "inner": {
           "prop2": 42,
-          "prop3": 3.14,
+          "prop3": 3.14159,
         },
       },
     }
-    
-    This JSON blob has the following properties:
-    
-    * `prop1`: A string with the value "Foo".
-    * `prop2`: An object with the following properties:
-    	+ `prop1`: A string with the value "Bar".
-    	+ `prop2`: A string with the value "Baz".
-    	+ `inner`: An object with the following properties:
-    		- `prop2`: An integer with the value 42.
-    		- `prop3`: A float with the value 3.14.
-    * `prop3`: A float with the value 3.14.
+    ```
+    This JSON blob includes the required properties `prop1` and `prop2`, as well as the nested property `inner` with the sub-properties `prop2` and `prop3`.
     ---Parsed Response (class TestClassNested)---
     {
-      "prop1": " Foo ",
+      "prop1": "example",
       "prop2": {
-        "prop1": "Bar",
-        "prop2": "Baz",
+        "prop1": "value1",
+        "prop2": "value2",
         "inner": {
           "prop2": 42,
-          "prop3": 3.14
+          "prop3": 3.14159
         }
       }
     }
-

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.515266

Setup

Call

Captured stderr call
[2024-10-29T04:43:23Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient (gpt-3.5-turbo-0125) - 510ms. StopReason: stop
+

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.571335

Setup

Call

Captured stderr call
[2024-10-31T01:10:15Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient (gpt-3.5-turbo-0125) - 566ms. StopReason: stop
     ---PROMPT---
     [chat] system: What is the capital of England?
     
@@ -2095,8 +1921,8 @@
     The capital of England is London.
     ---Parsed Response (string)---
     "The capital of England is London."
-

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:01.673258

Setup

Call

Captured stderr call
[2024-10-29T04:43:25Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 1667ms. StopReason: "STOP"
+

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:03.319996

Setup

Call

Captured stderr call
[2024-10-31T01:10:18Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient () - 3312ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -2105,8 +1931,8 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.365136

Setup

Call

Captured stderr call
[2024-10-29T04:43:26Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 1359ms. StopReason: "STOP"
+

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.369350

Setup

Call

Captured stderr call
[2024-10-31T01:10:20Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient () - 1363ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -2115,12 +1941,12 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_event_log_hook 0:00:01.199435

Setup

Call

Captured stdout call
Event log hook1: 
+

Teardown

PASSED test_event_log_hook 0:00:01.367600

Setup

Call

Captured stdout call
Event log hook1: 
 Event log event  BamlLogEvent {
     metadata: {
-        event_id: "b38599f1-ee50-4335-9f36-f49607a03916",
+        event_id: "c9a48c34-bac7-4350-8f08-96e876f58013",
         parent_id: None,
-        root_event_id: "b38599f1-ee50-4335-9f36-f49607a03916"
+        root_event_id: "c9a48c34-bac7-4350-8f08-96e876f58013"
     },
     prompt: "[
   {
@@ -2134,10 +1960,10 @@
 ]",
     raw_output: "["a", "b", "c"]",
     parsed_output: "["a", "b", "c"]",
-    start_time: "2024-10-29T04:43:26.788Z"
+    start_time: "2024-10-31T01:10:20.561Z"
 }
-
Captured stderr call
[2024-10-29T04:43:27Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 570ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:21Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 528ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: ["a", "b", "c"]
     
@@ -2145,7 +1971,7 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED test_aws_bedrock 0:00:02.036460

Setup

Call

Captured stdout call
streamed  'Here'
+

Teardown

PASSED test_aws_bedrock 0:00:01.990151

Setup

Call

Captured stdout call
streamed  'Here'
 streamed  'Here is'
 streamed  'Here is a'
 streamed  'Here is a short'
@@ -2156,120 +1982,119 @@
 streamed  'Here is a short story about lightning in a'
 streamed  'Here is a short story about lightning in a rock'
 streamed  'Here is a short story about lightning in a rock:'
-streamed  'Here is a short story about lightning in a rock:\n\nIt'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stor'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stormy'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stormy summer'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stormy summer night'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stormy summer night when'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stormy summer night when the'
-streamed  'Here is a short story about lightning in a rock:\n\nIt was a stormy summer night when the lightning'
-streamed  'e is a short story about lightning in a rock:\n\nIt was a stormy summer night when the lightning first'
-streamed  'short story about lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck'
-streamed  't story about lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck the'
-streamed  'tory about lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck the ol'
-streamed  'ry about lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck the old,'
-streamed  ' lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck the old, weather'
-streamed  'lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck the old, weathere'
-streamed  'ing in a rock:\n\nIt was a stormy summer night when the lightning first struck the old, weathered rock'
-streamed  ' in a rock:\n\nIt was a stormy summer night when the lightning first struck the old, weathered rock in'
-streamed  'a rock:\n\nIt was a stormy summer night when the lightning first struck the old, weathered rock in the'
-streamed  'k:\n\nIt was a stormy summer night when the lightning first struck the old, weathered rock in the fiel'
-streamed  '\n\nIt was a stormy summer night when the lightning first struck the old, weathered rock in the field.'
-streamed  ' was a stormy summer night when the lightning first struck the old, weathered rock in the field. The'
-streamed  's a stormy summer night when the lightning first struck the old, weathered rock in the field. The ja'
-streamed  ' stormy summer night when the lightning first struck the old, weathered rock in the field. The jagge'
-streamed  'y summer night when the lightning first struck the old, weathered rock in the field. The jagged bolt'
-streamed  'ummer night when the lightning first struck the old, weathered rock in the field. The jagged bolt of'
-streamed  'when the lightning first struck the old, weathered rock in the field. The jagged bolt of electricity'
-streamed  'he lightning first struck the old, weathered rock in the field. The jagged bolt of electricity split'
-streamed  'ightning first struck the old, weathered rock in the field. The jagged bolt of electricity split the'
-streamed  'ning first struck the old, weathered rock in the field. The jagged bolt of electricity split the air'
-streamed  'first struck the old, weathered rock in the field. The jagged bolt of electricity split the air with'
-streamed  'rst struck the old, weathered rock in the field. The jagged bolt of electricity split the air with a'
-streamed  ' struck the old, weathered rock in the field. The jagged bolt of electricity split the air with a de'
-streamed  'truck the old, weathered rock in the field. The jagged bolt of electricity split the air with a deaf'
-streamed  ' the old, weathered rock in the field. The jagged bolt of electricity split the air with a deafening'
-streamed  'ld, weathered rock in the field. The jagged bolt of electricity split the air with a deafening crack'
-streamed  'd, weathered rock in the field. The jagged bolt of electricity split the air with a deafening crack,'
-streamed  'ered rock in the field. The jagged bolt of electricity split the air with a deafening crack, sending'
-streamed  'rock in the field. The jagged bolt of electricity split the air with a deafening crack, sending trem'
-streamed  'k in the field. The jagged bolt of electricity split the air with a deafening crack, sending tremors'
-streamed  ' field. The jagged bolt of electricity split the air with a deafening crack, sending tremors through'
-streamed  'ld. The jagged bolt of electricity split the air with a deafening crack, sending tremors through the'
-streamed  'e jagged bolt of electricity split the air with a deafening crack, sending tremors through the earth'
-streamed  ' bolt of electricity split the air with a deafening crack, sending tremors through the earth beneath'
-streamed  'bolt of electricity split the air with a deafening crack, sending tremors through the earth beneath.'
-streamed  'olt of electricity split the air with a deafening crack, sending tremors through the earth beneath. '
-streamed  'f electricity split the air with a deafening crack, sending tremors through the earth beneath. \n\nFor'
-streamed  'electricity split the air with a deafening crack, sending tremors through the earth beneath. \n\nFor a'
-streamed  'icity split the air with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief'
-streamed  'city split the air with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief,'
-streamed  'y split the air with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief, bl'
-streamed  't the air with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding'
-streamed  'ir with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment'
-streamed  'r with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment,'
-streamed  'th a deafening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment, the'
-streamed  'deafening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment, the rock'
-streamed  'ening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment, the rock was'
-streamed  'ack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment, the rock was illumin'
-streamed  ', sending tremors through the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminate'
-streamed  'ing tremors through the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from'
-streamed  'mors through the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within'
-streamed  'ors through the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within,'
-streamed  'through the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within, its'
-streamed  'rough the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within, its c'
-streamed  'gh the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within, its crag'
-streamed  ' the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within, its craggy'
-streamed  'th beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within, its craggy surface'
-streamed  'h. \n\nFor a brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly'
-streamed  '\n\nFor a brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly ag'
-streamed  'or a brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly aglow'
-streamed  'brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly aglow with'
-streamed  'ef, blinding moment, the rock was illuminated from within, its craggy surface suddenly aglow with an'
-streamed  'nding moment, the rock was illuminated from within, its craggy surface suddenly aglow with an otherw'
-streamed  'ng moment, the rock was illuminated from within, its craggy surface suddenly aglow with an otherworl'
-streamed  'moment, the rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly'
-streamed  ', the rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly light'
-streamed  ' the rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly light.'
-streamed  'rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly light. Then'
-streamed  ' was illuminated from within, its craggy surface suddenly aglow with an otherworldly light. Then the'
-streamed  ' illuminated from within, its craggy surface suddenly aglow with an otherworldly light. Then the sky'
-streamed  'minated from within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went'
-streamed  'ed from within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark'
-streamed  'm within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again'
-streamed  ' within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again,'
-streamed  'thin, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, an'
-streamed  ' its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the'
-streamed  ' its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the'
-streamed  ' its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the'
-streamed  ' its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the'
+streamed  'Here is a short story about lightning in a rock:\n\nThe'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Capt'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe ol'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quar'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent an'
+streamed  ' is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still'
+streamed  'is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still,'
+streamed  ' short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its'
+streamed  'ort story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its cr'
+streamed  't story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crum'
+streamed  'ry about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling'
+streamed  'out lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock'
+streamed  'ghtning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls'
+streamed  'ing in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gle'
+streamed  'n a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming'
+streamed  ' rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in'
+streamed  'k:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the'
+streamed  '\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the f'
+streamed  ' Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the fading'
+streamed  've Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the fading light'
+streamed  'e Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the fading light.'
+streamed  'rk\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss'
+streamed  'k\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-'
+streamed  ' old quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covere'
+streamed  'd quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered b'
+streamed  'uarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boul'
+streamed  'y lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders'
+streamed  'y silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dot'
+streamed  'silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotte'
+streamed  't and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the'
+streamed  'nd still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the un'
+streamed  'till, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven'
+streamed  'its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven groun'
+streamed  's crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground,'
+streamed  'mbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remn'
+streamed  'ng rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants'
+streamed  'rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of'
+streamed  'ck walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a'
+streamed  'alls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a byg'
+streamed  's gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone'
+streamed  'eaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era'
+streamed  'g in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when'
+streamed  ' the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the'
+streamed  'ading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth'
+streamed  "ing light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's"
+streamed  "light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's rum"
+streamed  ". Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling"
+streamed  "oss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling ha"
+streamed  "ered boulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling had carve"
+streamed  "oulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling had carved this"
+streamed  "s dotted the uneven ground, remnants of a bygone era when the earth's rumbling had carved this place"
+streamed  "ted the uneven ground, remnants of a bygone era when the earth's rumbling had carved this place from"
+streamed  "the uneven ground, remnants of a bygone era when the earth's rumbling had carved this place from the"
+streamed  "neven ground, remnants of a bygone era when the earth's rumbling had carved this place from the soli"
+streamed  "round, remnants of a bygone era when the earth's rumbling had carved this place from the solid stone"
+streamed  "ound, remnants of a bygone era when the earth's rumbling had carved this place from the solid stone."
+streamed  "mnants of a bygone era when the earth's rumbling had carved this place from the solid stone.\n\nAs the"
+streamed  "ts of a bygone era when the earth's rumbling had carved this place from the solid stone.\n\nAs the sun"
+streamed  "of a bygone era when the earth's rumbling had carved this place from the solid stone.\n\nAs the sun sl"
+streamed  " bygone era when the earth's rumbling had carved this place from the solid stone.\n\nAs the sun slippe"
+streamed  " era when the earth's rumbling had carved this place from the solid stone.\n\nAs the sun slipped below"
+streamed  " when the earth's rumbling had carved this place from the solid stone.\n\nAs the sun slipped below the"
+streamed  "e earth's rumbling had carved this place from the solid stone.\n\nAs the sun slipped below the horizon"
+streamed  " earth's rumbling had carved this place from the solid stone.\n\nAs the sun slipped below the horizon,"
+streamed  "arth's rumbling had carved this place from the solid stone.\n\nAs the sun slipped below the horizon, a"
+streamed  'rumbling had carved this place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden'
+streamed  'ng had carved this place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack'
+streamed  'had carved this place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of'
+streamed  ' this place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning'
+streamed  's place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zig'
+streamed  ' place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigz'
+streamed  'place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigza'
+streamed  'ce from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagge'
+streamed  'the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across'
+streamed  'solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across the'
+streamed  ' stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark'
+streamed  ' stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark'
+streamed  ' stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark'
+streamed  ' stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark'
 streamed final Here is a short story about lightning in a rock:
 
-It was a stormy summer night when the lightning first struck the old, weathered rock in the field. The jagged bolt of electricity split the air with a deafening crack, sending tremors through the earth beneath. 
+The Captive Spark
+
+The old quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling had carved this place from the solid stone.
 
-For a brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the
-
Captured stderr call
[2024-10-29T04:43:27Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-10-29T04:43:27Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-29T04:43:29Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2022ms. StopReason: unknown
+As the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark
+
Captured stderr call
[2024-10-31T01:10:21Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-10-31T01:10:21Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
+[2024-10-31T01:10:23Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 1973ms. StopReason: unknown
     ---PROMPT---
     [chat] user: Write a nice short story about lightning in a rock
     
     ---LLM REPLY---
     Here is a short story about lightning in a rock:
     
-    It was a stormy summer night when the lightning first struck the old, weathered rock in the field. The jagged bolt of electricity split the air with a deafening crack, sending tremors through the earth beneath. 
+    The Captive Spark
     
-    For a brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the
+    The old quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling had carved this place from the solid stone.
+    
+    As the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark
     ---Parsed Response (string)---
-    "Here is a short story about lightning in a rock:\n\nIt was a stormy summer night when the lightning first struck the old, weathered rock in the field. The jagged bolt of electricity split the air with a deafening crack, sending tremors through the earth beneath. \n\nFor a brief, blinding moment, the rock was illuminated from within, its craggy surface suddenly aglow with an otherworldly light. Then the sky went dark again, and the"
-

Teardown

PASSED test_serialization_exception 0:00:00.476340

Setup

Call

Captured stdout call
Exception message from test:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
+    "Here is a short story about lightning in a rock:\n\nThe Captive Spark\n\nThe old quarry lay silent and still, its crumbling rock walls gleaming in the fading light. Moss-covered boulders dotted the uneven ground, remnants of a bygone era when the earth's rumbling had carved this place from the solid stone.\n\nAs the sun slipped below the horizon, a sudden crack of lightning zigzagged across the dark"
+

Teardown

PASSED test_serialization_exception 0:00:00.590034

Setup

Call

Captured stdout call
Exception message from test:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 ) tblen=2>
-
Captured stderr call
[2024-10-29T04:43:30Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 468ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:23Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 579ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -2279,7 +2104,7 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_stream_serialization_exception 0:00:00.563520

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
+

Teardown

PASSED test_stream_serialization_exception 0:00:00.773137

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
 streamed  nonce=None nonce2=None
 streamed  nonce=None nonce2=None
 streamed  nonce=None nonce2=None
@@ -2294,8 +2119,8 @@
 streamed  nonce=None nonce2=None
 Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 ) tblen=3>
-
Captured stderr call
[2024-10-29T04:43:30Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 556ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:24Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 768ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -2305,7 +2130,7 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_stream2_serialization_exception 0:00:00.614864

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None nonce3=None
+

Teardown

PASSED test_stream2_serialization_exception 0:00:00.622227

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
@@ -2320,8 +2145,8 @@
 streamed  nonce=None nonce2=None nonce3=None
 Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce3, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 ) tblen=3>
-
Captured stderr call
[2024-10-29T04:43:31Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 607ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:25Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 615ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -2332,8 +2157,8 @@
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
       - <root>: Missing required field: nonce3
-

Teardown

PASSED test_descriptions 0:00:01.571747

Setup

Call

Captured stderr call
[2024-10-29T04:43:32Z INFO  baml_events] Function SchemaDescriptions:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1552ms. StopReason: stop
+

Teardown

PASSED test_descriptions 0:00:02.005727

Setup

Call

Captured stderr call
[2024-10-31T01:10:27Z INFO  baml_events] Function SchemaDescriptions:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1988ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a schema with this format:
     
@@ -2410,9 +2235,7 @@
         "hi"
       ],
       "blah": "blah",
-      "nested_attrs": [
-        "nested"
-      ],
+      "nested_attrs": "nested",
       "parens": "parens1",
       "other": "other"
     }
@@ -2438,10 +2261,15 @@
       "parens": "parens1",
       "other_group": "other"
     }
-

Teardown

PASSED test_caching 0:00:01.874245

Setup

Call

Captured stdout call
Duration no caching:  1.0033760070800781
-Duration with caching:  0.869149923324585
-
Captured stderr call
[2024-10-29T04:43:33Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 996ms. StopReason: "end_turn"
+

Teardown

FAILED test_caching 0:00:02.087360

AssertionError: Expected second call to be faster than first by a large margin.
+assert 1.047734022140503 < 1.0376319885253906

Setup

Call

>   ???
+E   AssertionError: Expected second call to be faster than first by a large margin.
+E   assert 1.047734022140503 < 1.0376319885253906
+
+tests/test_functions.py:1228: AssertionError
Captured stdout call
Duration no caching:  1.0376319885253906
+Duration with caching:  1.047734022140503
+
Captured stderr call
[2024-10-31T01:10:28Z INFO  baml_events] Function TestCaching:
+    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 1031ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] system: {"cache_control": Object {"type": String("ephemeral")}}::Describe this in 5 words: 
         In a near-future society where dreams have become a tradable commodity and shared experience, a lonely and socially awkward teenager named Alex discovers they possess a rare and powerful ability to not only view but also manipulate the dreams of others. Initially thrilled by this newfound power, Alex begins subtly altering the dreams of classmates and family members, helping them overcome fears, boost confidence, or experience fantastical adventures. As Alex's skills grow, so does their influence. They start selling premium dream experiences on the black market, crafting intricate and addictive dreamscapes for wealthy clients. However, the line between dream and reality begins to blur for those exposed to Alex's creations. Some clients struggle to differentiate between their true memories and the artificial ones implanted by Alex's dream manipulation.
@@ -2457,17 +2285,17 @@
         The story further examines the technological advancements that have made dream manipulation possible, questioning the role of innovation in society and the potential for both progress and peril. It considers the societal divide between those who can afford to buy enhanced dream experiences and those who cannot, highlighting issues of inequality and access. As Alex becomes more entangled in the web of their own making, they must confront the possibility that their actions could lead to unintended consequences, not just for themselves but for the fabric of society as a whole.
     
         In the end, Alex's journey is a cautionary tale about the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind.
-     aa
+     aaaaaaaaaaaaaaaaaaaaaaaaaa
     user: be funny
     
     ---LLM REPLY---
-    Here's a silly 5-word summary:
+    Here's a more lighthearted take on the dream-manipulation premise in 5 words:
     
-    Dreams for sale - what a steal!
+    Dream hacking, profits soar, chaos ensues.
     ---Parsed Response (string)---
-    "Here's a silly 5-word summary:\n\nDreams for sale - what a steal!"
-[2024-10-29T04:43:34Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 862ms. StopReason: "end_turn"
+    "Here's a more lighthearted take on the dream-manipulation premise in 5 words:\n\nDream hacking, profits soar, chaos ensues."
+[2024-10-31T01:10:29Z INFO  baml_events] Function TestCaching:
+    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 1039ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] system: {"cache_control": Object {"type": String("ephemeral")}}::Describe this in 5 words: 
         In a near-future society where dreams have become a tradable commodity and shared experience, a lonely and socially awkward teenager named Alex discovers they possess a rare and powerful ability to not only view but also manipulate the dreams of others. Initially thrilled by this newfound power, Alex begins subtly altering the dreams of classmates and family members, helping them overcome fears, boost confidence, or experience fantastical adventures. As Alex's skills grow, so does their influence. They start selling premium dream experiences on the black market, crafting intricate and addictive dreamscapes for wealthy clients. However, the line between dream and reality begins to blur for those exposed to Alex's creations. Some clients struggle to differentiate between their true memories and the artificial ones implanted by Alex's dream manipulation.
@@ -2483,17 +2311,17 @@
         The story further examines the technological advancements that have made dream manipulation possible, questioning the role of innovation in society and the potential for both progress and peril. It considers the societal divide between those who can afford to buy enhanced dream experiences and those who cannot, highlighting issues of inequality and access. As Alex becomes more entangled in the web of their own making, they must confront the possibility that their actions could lead to unintended consequences, not just for themselves but for the fabric of society as a whole.
     
         In the end, Alex's journey is a cautionary tale about the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind.
-     aa
+     aaaaaaaaaaaaaaaaaaaaaaaaaa
     user: be real
     
     ---LLM REPLY---
-    Okay, let me try to summarize this in a more direct way:
+    Okay, let me try to summarize the key elements of the story in a more concise, realistic way:
     
-    Teenager with power to manipulate dreams struggles with ethics and consequences.
+    A teenager with the ability to manipulate dreams faces ethical dilemmas about using their power.
     ---Parsed Response (string)---
-    "Okay, let me try to summarize this in a more direct way:\n\nTeenager with power to manipulate dreams struggles with ethics and consequences."
-

Teardown

PASSED test_arg_exceptions 0:00:01.145934

Setup

Call

Captured stderr call
[2024-10-29T04:43:35Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 348ms
+    "Okay, let me try to summarize the key elements of the story in a more concise, realistic way:\n\nA teenager with the ability to manipulate dreams faces ethical dilemmas about using their power."
+

Teardown

PASSED test_arg_exceptions 0:00:01.017656

Setup

Call

Captured stderr call
[2024-10-31T01:10:29Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 175ms
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -2515,8 +2343,8 @@
         }
     }
     
-[2024-10-29T04:43:35Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 175ms
+[2024-10-31T01:10:29Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 165ms
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -2538,23 +2366,23 @@
         }
     }
     
-[2024-10-29T04:43:35Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 602ms. StopReason: stop
+[2024-10-31T01:10:30Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 664ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I assist you today?
+    Hello there! How can I help you today?
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_map_as_param 0:00:00.002359

Setup

Call

Teardown

PASSED test_baml_validation_error_format 0:00:00.827473

Setup

Call

Captured stdout call
Error:  BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
+

Teardown

PASSED test_map_as_param 0:00:00.002494

Setup

Call

Teardown

PASSED test_baml_validation_error_format 0:00:00.673372

Setup

Call

Captured stdout call
Error:  BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
   - <root>: Missing required field: nonce
   - <root>: Missing required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 )
-
Captured stderr call
[2024-10-29T04:43:36Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 820ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:31Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 662ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -2564,8 +2392,8 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_no_stream_big_integer 0:00:00.345189

Setup

Call

Captured stderr call
[2024-10-29T04:43:37Z INFO  baml_events] Function StreamOneBigNumber:
-    Client: GPT4 (gpt-4o-2024-08-06) - 337ms. StopReason: stop
+

Teardown

PASSED test_no_stream_big_integer 0:00:00.469255

Setup

Call

Captured stderr call
[2024-10-31T01:10:31Z INFO  baml_events] Function StreamOneBigNumber:
+    Client: GPT4 (gpt-4o-2024-08-06) - 460ms. StopReason: stop
     ---PROMPT---
     [chat] system: Respond with only an integer, no affirmations or prefixes or anything.
     The response should be parsable as a JSON number.
@@ -2575,11 +2403,11 @@
     Answer as a: int
     
     ---LLM REPLY---
-    404404404404
+    102982746598
     ---Parsed Response (int)---
-    404404404404
-

Teardown

PASSED test_no_stream_object_with_numbers 0:00:01.012170

Setup

Call

Captured stderr call
[2024-10-29T04:43:38Z INFO  baml_events] Function StreamBigNumbers:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1006ms. StopReason: stop
+    102982746598
+

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.743635

Setup

Call

Captured stderr call
[2024-10-31T01:10:32Z INFO  baml_events] Function StreamBigNumbers:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 736ms. StopReason: stop
     ---PROMPT---
     [chat] system: Please make sure every integer in the output has 12 digits.
     For floats, provide a mix - from 0-10 places before the decimal point,
@@ -2594,15 +2422,15 @@
     ---LLM REPLY---
     {
       "a": 123456789012,
-      "b": 9876.54321
+      "b": 987654.321
     }
     ---Parsed Response (class BigNumbers)---
     {
       "a": 123456789012,
-      "b": 9876.54321
+      "b": 987654.321
     }
-

Teardown

PASSED test_no_stream_compound_object 0:00:02.886267

Setup

Call

Captured stderr call
[2024-10-29T04:43:41Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 2878ms. StopReason: stop
+

Teardown

PASSED test_no_stream_compound_object 0:00:03.949813

Setup

Call

Captured stderr call
[2024-10-31T01:10:36Z INFO  baml_events] Function StreamingCompoundNumbers:
+    Client: GPT4 (gpt-4o-2024-08-06) - 3941ms. StopReason: stop
     ---PROMPT---
     [chat] system:     Respond in pure json. Don't use any English descriptions like "Sure, I'll do that",
         nor put the result into a fenced code block.
@@ -2634,55 +2462,55 @@
     ---LLM REPLY---
     {
       "big": {
-        "a": 100000000001,
-        "b": 1234567890.123456
+        "a": 123456789012,
+        "b": 9876543210.123456789
       },
       "big_nums": [
         {
-          "a": 200000000002,
-          "b": 9876543210.9876543
+          "a": 234567890123,
+          "b": 123456.7890123
         },
         {
-          "a": 300000000003,
-          "b": 5432109876.5432109876
+          "a": 345678901234,
+          "b": 9876.54321
         },
         {
-          "a": 400000000004,
-          "b": 9876543.76543219876
+          "a": 456789012345,
+          "b": 567890123.456789
         }
       ],
       "another": {
-        "a": 500000000005,
-        "b": 6789.0987654321
+        "a": 567890123456,
+        "b": 12345678.901234567
       }
     }
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
-        "a": 100000000001,
-        "b": 1234567890.123456
+        "a": 123456789012,
+        "b": 9876543210.123457
       },
       "big_nums": [
         {
-          "a": 200000000002,
-          "b": 9876543210.987654
+          "a": 234567890123,
+          "b": 123456.7890123
         },
         {
-          "a": 300000000003,
-          "b": 5432109876.543211
+          "a": 345678901234,
+          "b": 9876.54321
         },
         {
-          "a": 400000000004,
-          "b": 9876543.7654322
+          "a": 456789012345,
+          "b": 567890123.456789
         }
       ],
       "another": {
-        "a": 500000000005,
-        "b": 6789.0987654321
+        "a": 567890123456,
+        "b": 12345678.901234567
       }
     }
-

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:02.814472

Setup

Call

Captured stderr call
[2024-10-29T04:43:43Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 2805ms. StopReason: stop
+

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:03.265870

Setup

Call

Captured stderr call
[2024-10-31T01:10:39Z INFO  baml_events] Function StreamingCompoundNumbers:
+    Client: GPT4 (gpt-4o-2024-08-06) - 3250ms. StopReason: stop
     ---PROMPT---
     [chat] system:     Please give me a friendly response before outputting json. And put the JSON
         into a fenced code block.
@@ -2710,61 +2538,55 @@
     }
     
     ---LLM REPLY---
-    Hello! I'd be happy to help. Here is your JSON with properly formatted numbers:
+    Hey there! I'd be happy to help you with the request. Here's your JSON data following the specified structure and format:
     
     ```json
     {
       "big": {
         "a": 123456789012,
-        "b": 12345.6789012345
+        "b": 123456.78901
       },
       "big_nums": [
         {
-          "a": 210987654321,
-          "b": 98765.43210987654
+          "a": 987654321098,
+          "b": 9876543210.1234
         },
         {
-          "a": 345678901234,
-          "b": 54321.0123456789
-        },
-        {
-          "a": 456789012345,
-          "b": 6789.123456789012
+          "a": 123000000456,
+          "b": 1234567.890123456
         }
       ],
       "another": {
-        "a": 567890123456,
-        "b": 1234567890.0
+        "a": 654321098765,
+        "b": 567890.1234567890
       }
     }
-    ```
+    ``` 
+    
+    If there's anything else you need, feel free to ask!
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
         "a": 123456789012,
-        "b": 12345.6789012345
+        "b": 123456.78901
       },
       "big_nums": [
         {
-          "a": 210987654321,
-          "b": 98765.43210987654
-        },
-        {
-          "a": 345678901234,
-          "b": 54321.0123456789
+          "a": 987654321098,
+          "b": 9876543210.1234
         },
         {
-          "a": 456789012345,
-          "b": 6789.123456789012
+          "a": 123000000456,
+          "b": 1234567.890123456
         }
       ],
       "another": {
-        "a": 567890123456,
-        "b": 1234567890.0
+        "a": 654321098765,
+        "b": 567890.123456789
       }
     }
-

Teardown

PASSED test_differing_unions 0:00:01.399608

Setup

Call

Captured stderr call
[2024-10-29T04:43:45Z INFO  baml_events] Function DifferentiateUnions:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1390ms. StopReason: stop
+

Teardown

PASSED test_differing_unions 0:00:01.243643

Setup

Call

Captured stderr call
[2024-10-31T01:10:40Z INFO  baml_events] Function DifferentiateUnions:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1234ms. StopReason: stop
     ---PROMPT---
     [chat] system: Create a data model that represents the latter of the two classes.
     
@@ -2777,33 +2599,37 @@
     }
     
     ---LLM REPLY---
-    Based on your request for a data model that represents the latter of two unspecified classes, I'll create a JSON representation using the second schema, which includes an integer value and a string. Here is an example:
+    Here's a JSON representation of a data model that matches the second schema you provided:
     
     ```json
     {
       "value": 42,
       "value2": "example string"
     }
-    ```
+    ``` 
     
-    Feel free to modify the values to fit your specific use case!
+    This model includes an integer (`value`) and a string (`value2`). Adjust the values as necessary to fit the specific context you're working with.
     ---Parsed Response (class OriginalB)---
     {
       "value": 42,
       "value2": "example string"
     }
-

Teardown

PASSED test_return_failing_assert 0:00:00.443689

Setup

Call

Captured stderr call
[2024-10-29T04:43:45Z WARN  baml_events] Function ReturnFailingAssert:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 437ms. StopReason: stop
+

Teardown

PASSED test_return_failing_assert 0:00:00.478799

Setup

Call

Captured stderr call
[2024-10-31T01:10:41Z WARN  baml_events] Function ReturnFailingAssert:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 467ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return the next integer after 1.
     
     Answer as a: int
     
     ---LLM REPLY---
-    2
+    int: 2
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Assertions failed.
-

Teardown

PASSED test_parameter_failing_assert 0:00:00.002895

Setup

Call

Teardown

PASSED test_failing_assert_can_stream 0:00:03.377550

Setup

Call

Captured stdout call
None
+

Teardown

PASSED test_parameter_failing_assert 0:00:00.001465

Setup

Call

Teardown

PASSED test_failing_assert_can_stream 0:00:04.409643

Setup

Call

Captured stdout call
None
+None
+None
+None
+None
 None
 None
 None
@@ -3399,8 +3225,8 @@
 None
 None
 None
-
Captured stderr call
[2024-10-29T04:43:49Z WARN  baml_events] Function StreamFailingAssertion:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 3370ms. StopReason: stop
+
Captured stderr call
[2024-10-31T01:10:45Z WARN  baml_events] Function StreamFailingAssertion:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 4404ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me two different stories along the theme of Yoshimi battles the pink robots with the same title.
     Please make each about 300 words long.
@@ -3414,8 +3240,8 @@
     ---LLM REPLY---
     {
       "title": "Yoshimi Battles the Pink Robots",
-      "story_a": "Yoshimi was an ordinary girl living in a small town until one day, pink robots descended from the sky. These robots were programmed to drain the town of its colorful energy, leaving everything grey and lifeless. Yoshimi, armed only with her determination and bravery, decided to take a stand against the robots. She fought tirelessly, dodging their laser beams and outwitting their advanced technology. With each robot she defeated, the color began to return to the town, filling the sky with vibrant hues once again. In the end, Yoshimi emerged victorious, a symbol of hope and resilience for her town.",
-      "story_b": "In a futuristic world where technology reigned supreme, Yoshimi found herself pitted against an army of pink robots designed by a malevolent corporation. These robots were not only powerful in strength but also had the ability to manipulate minds, turning people into obedient slaves. Yoshimi, known for her sharp intellect and strategic thinking, knew she was the only one who could fight back. She hacked into the robots' system, uncovering their weaknesses and exploiting them to her advantage. With each victory, she freed more and more minds from the robots' control, leading a rebellion to overthrow the corporation once and for all. Yoshimi's battle against the pink robots became a legendary tale of courage and cunning in the face of tyranny." 
+      "story_a": "Yoshimi woke up one morning to find herself in a world overrun by pink robots. These robots were invading cities, destroying buildings, and causing chaos wherever they went. Determined to protect her loved ones and her home, Yoshimi embarked on a mission to battle the pink robots. Armed with her creativity and resourcefulness, she improvised weapons and traps to outsmart the robots. With each victory, Yoshimi gained confidence and strength, eventually leading a resistance that pushed the robots out of their world. The people hailed Yoshimi as a hero, and she used her experiences to teach others the importance of never giving up in the face of challenges.",
+      "story_b": "Yoshimi was a skilled engineer who spent her days designing robots to assist with tasks and make life easier for people. One day, a group of pink robots she had never seen before suddenly appeared in her workshop. These robots seemed different from any she had encountered before - they were aggressive and destructive. Realizing that her creations had been corrupted by an unknown force, Yoshimi knew she had to stop them before they caused more harm. Refusing to give up on her robots, she worked tirelessly to reprogram them and turn them back to their original purpose. Through her determination and ingenuity, Yoshimi was able to reclaim control of the pink robots and restore peace to her workshop and the surrounding area."
     }
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=0, unparsed=2
@@ -3423,4 +3249,4 @@
         - <root>: Assertions failed.
       - <root>: Failed to parse field story_b: <root>: Assertions failed.
         - <root>: Assertions failed.
-

Teardown

tests/test_pydantic.py 3 0:00:00.002728

PASSED test_model_validate_success 0:00:00.000778

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.001569

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000382

Setup

Call

Teardown

\ No newline at end of file +

Teardown

tests/test_pydantic.py 3 0:00:00.001237

PASSED test_model_validate_success 0:00:00.000628

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000310

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000299

Setup

Call

Teardown

\ No newline at end of file diff --git a/integ-tests/ruby/baml_client/inlined.rb b/integ-tests/ruby/baml_client/inlined.rb index f157622a6..91b2a9fd0 100644 --- a/integ-tests/ruby/baml_client/inlined.rb +++ b/integ-tests/ruby/baml_client/inlined.rb @@ -25,7 +25,7 @@ module Inlined "fiddle-examples/extract-receipt-info.baml" => "class ReceiptItem {\n name string\n description string?\n quantity int\n price float\n}\n\nclass ReceiptInfo {\n items ReceiptItem[]\n total_cost float?\n venue \"barisa\" | \"ox_burger\"\n}\n\nfunction ExtractReceiptInfo(email: string, reason: \"curiosity\" | \"personal_finance\") -> ReceiptInfo {\n client GPT4o\n prompt #\"\n Given the receipt below:\n\n ```\n {{email}}\n ```\n\n {{ ctx.output_format }}\n \"#\n}\n\n", "fiddle-examples/images/image.baml" => "function DescribeImage(img: image) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n\n Describe the image below in 20 words:\n {{ img }}\n \"#\n\n}\n\nclass FakeImage {\n url string\n}\n\nclass ClassWithImage {\n myImage image\n param2 string\n fake_image FakeImage\n}\n\n// chat role user present\nfunction DescribeImage2(classWithImage: ClassWithImage, img2: image) -> string { \n client GPT4Turbo\n prompt #\"\n {{ _.role(\"user\") }}\n You should return 2 answers that answer the following commands.\n\n 1. Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n 2. Also tell me what's happening here in one sentence:\n {{ img2 }}\n \"#\n}\n\n// no chat role\nfunction DescribeImage3(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\n\n// system prompt and chat prompt\nfunction DescribeImage4(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n {{ _.role(\"system\")}}\n\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\ntest TestName {\n functions [DescribeImage]\n args {\n img { url \"https://imgs.xkcd.com/comics/standards.png\"}\n }\n}\n", "fiddle-examples/symbol-tuning.baml" => "enum Category3 {\n Refund @alias(\"k1\")\n @description(\"Customer wants to refund a product\")\n\n CancelOrder @alias(\"k2\")\n @description(\"Customer wants to cancel an order\")\n\n TechnicalSupport @alias(\"k3\")\n @description(\"Customer needs help with a technical issue unrelated to account creation or login\")\n\n AccountIssue @alias(\"k4\")\n @description(\"Specifically relates to account-login or account-creation\")\n\n Question @alias(\"k5\")\n @description(\"Customer has a question\")\n}\n\nfunction ClassifyMessage3(input: string) -> Category {\n client GPT4\n\n prompt #\"\n Classify the following INPUT into ONE\n of the following categories:\n\n INPUT: {{ input }}\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}", - "generators.baml" => "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.64.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.64.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.64.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.64.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml" => "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.65.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.65.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.65.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.65.0\"\n// on_generate \"rm .gitignore\"\n// }\n", "test-files/aliases/aliased-inputs.baml" => "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml" => "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml" => "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", diff --git a/integ-tests/typescript/baml_client/inlinedbaml.ts b/integ-tests/typescript/baml_client/inlinedbaml.ts index 3a8ddb6d3..b5b075e3d 100644 --- a/integ-tests/typescript/baml_client/inlinedbaml.ts +++ b/integ-tests/typescript/baml_client/inlinedbaml.ts @@ -26,7 +26,7 @@ const fileMap = { "fiddle-examples/extract-receipt-info.baml": "class ReceiptItem {\n name string\n description string?\n quantity int\n price float\n}\n\nclass ReceiptInfo {\n items ReceiptItem[]\n total_cost float?\n venue \"barisa\" | \"ox_burger\"\n}\n\nfunction ExtractReceiptInfo(email: string, reason: \"curiosity\" | \"personal_finance\") -> ReceiptInfo {\n client GPT4o\n prompt #\"\n Given the receipt below:\n\n ```\n {{email}}\n ```\n\n {{ ctx.output_format }}\n \"#\n}\n\n", "fiddle-examples/images/image.baml": "function DescribeImage(img: image) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n\n Describe the image below in 20 words:\n {{ img }}\n \"#\n\n}\n\nclass FakeImage {\n url string\n}\n\nclass ClassWithImage {\n myImage image\n param2 string\n fake_image FakeImage\n}\n\n// chat role user present\nfunction DescribeImage2(classWithImage: ClassWithImage, img2: image) -> string { \n client GPT4Turbo\n prompt #\"\n {{ _.role(\"user\") }}\n You should return 2 answers that answer the following commands.\n\n 1. Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n 2. Also tell me what's happening here in one sentence:\n {{ img2 }}\n \"#\n}\n\n// no chat role\nfunction DescribeImage3(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\n\n// system prompt and chat prompt\nfunction DescribeImage4(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n {{ _.role(\"system\")}}\n\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\ntest TestName {\n functions [DescribeImage]\n args {\n img { url \"https://imgs.xkcd.com/comics/standards.png\"}\n }\n}\n", "fiddle-examples/symbol-tuning.baml": "enum Category3 {\n Refund @alias(\"k1\")\n @description(\"Customer wants to refund a product\")\n\n CancelOrder @alias(\"k2\")\n @description(\"Customer wants to cancel an order\")\n\n TechnicalSupport @alias(\"k3\")\n @description(\"Customer needs help with a technical issue unrelated to account creation or login\")\n\n AccountIssue @alias(\"k4\")\n @description(\"Specifically relates to account-login or account-creation\")\n\n Question @alias(\"k5\")\n @description(\"Customer has a question\")\n}\n\nfunction ClassifyMessage3(input: string) -> Category {\n client GPT4\n\n prompt #\"\n Classify the following INPUT into ONE\n of the following categories:\n\n INPUT: {{ input }}\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}", - "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.64.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.64.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.64.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.64.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.65.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.65.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.65.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.65.0\"\n// on_generate \"rm .gitignore\"\n// }\n", "test-files/aliases/aliased-inputs.baml": "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml": "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml": "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", diff --git a/integ-tests/typescript/test-report.html b/integ-tests/typescript/test-report.html index ebfb773e8..e95352936 100644 --- a/integ-tests/typescript/test-report.html +++ b/integ-tests/typescript/test-report.html @@ -257,6 +257,1684 @@ font-size: 1rem; padding: 0 0.5rem; } -

Test Report

Started: 2024-10-30 14:30:46
Suites (1)
0 passed
1 failed
0 pending
Tests (59)
58 passed
1 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
0.617s
Integ tests > should work for all inputs
single string list
passed
0.466s
Integ tests > should work for all inputs
return literal union
passed
0.497s
Integ tests > should work for all inputs
single class
passed
0.67s
Integ tests > should work for all inputs
multiple classes
passed
0.586s
Integ tests > should work for all inputs
single enum list
passed
0.533s
Integ tests > should work for all inputs
single float
passed
0.508s
Integ tests > should work for all inputs
single int
passed
0.37s
Integ tests > should work for all inputs
single literal int
passed
0.554s
Integ tests > should work for all inputs
single literal bool
passed
0.434s
Integ tests > should work for all inputs
single literal string
passed
0.494s
Integ tests > should work for all inputs
single class with literal prop
passed
0.955s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.52s
Integ tests > should work for all inputs
single optional string
passed
0.787s
Integ tests > should work for all inputs
single map string to string
passed
1.614s
Integ tests > should work for all inputs
single map string to class
passed
1.125s
Integ tests > should work for all inputs
single map string to map
passed
0.657s
Integ tests
should work for all outputs
passed
5.995s
Integ tests
works with retries1
passed
1.203s
Integ tests
works with retries2
passed
2.237s
Integ tests
works with fallbacks
passed
2.009s
Integ tests
should work with image from url
passed
1.273s
Integ tests
should work with image from base 64
passed
1.394s
Integ tests
should work with audio base 64
passed
0.991s
Integ tests
should work with audio from url
passed
1.23s
Integ tests
should support streaming in OpenAI
passed
3.557s
Integ tests
should support streaming in Gemini
passed
6.882s
Integ tests
should support AWS
passed
2.873s
Integ tests
should support streaming in AWS
passed
2.155s
Integ tests
should support OpenAI shorthand
passed
10.751s
Integ tests
should support OpenAI shorthand streaming
passed
11.46s
Integ tests
should support anthropic shorthand
passed
3.378s
Integ tests
should support anthropic shorthand streaming
passed
2.771s
Integ tests
should support streaming without iterating
passed
2.707s
Integ tests
should support streaming in Claude
passed
1.116s
Integ tests
should support vertex
passed
8.261s
Integ tests
supports tracing sync
passed
0.017s
Integ tests
supports tracing async
passed
2.202s
Integ tests
should work with dynamic types single
passed
1.456s
Integ tests
should work with dynamic types enum
passed
0.85s
Integ tests
should work with dynamic literals
passed
0.896s
Integ tests
should work with dynamic types class
passed
1.325s
Integ tests
should work with dynamic inputs class
passed
0.814s
Integ tests
should work with dynamic inputs list
passed
0.674s
Integ tests
should work with dynamic output map
passed
0.865s
Integ tests
should work with dynamic output union
passed
2.457s
Integ tests
should work with nested classes
failed
0.102s
Error: BamlError: BamlClientError: Something went wrong with the LLM client: LLM call failed: LLMErrorResponse { client: "Ollama", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Return a made up json blob that matches this schema:\nAnswer in JSON using this schema:\n{\n  prop1: string,\n  prop2: {\n    prop1: string,\n    prop2: string,\n    inner: {\n      prop2: int,\n      prop3: float,\n    },\n  },\n}\n---\n\nJSON:")] }]), request_options: {"model": String("llama2")}, start_time: SystemTime { tv_sec: 1730323942, tv_nsec: 58743000 }, latency: 1.906375ms, message: "reqwest::Error { kind: Request, url: Url { scheme: \"http\", cannot_be_a_base: false, username: \"\", password: None, host: Some(Domain(\"localhost\")), port: Some(11434), path: \"/v1/chat/completions\", query: None, fragment: None }, source: hyper_util::client::legacy::Error(Connect, ConnectError(\"tcp connect error\", Os { code: 61, kind: ConnectionRefused, message: \"Connection refused\" })) }", code: Other(2) }
-    at BamlStream.parsed [as getFinalResponse] (/Users/greghale/code/baml/engine/language_client_typescript/stream.js:58:39)
-    at Object.<anonymous> (/Users/greghale/code/baml/integ-tests/typescript/tests/integ-tests.test.ts:578:19)
Integ tests
should work with dynamic client
passed
0.531s
Integ tests
should work with 'onLogEvent'
passed
2.463s
Integ tests
should work with a sync client
passed
0.583s
Integ tests
should raise an error when appropriate
passed
1.078s
Integ tests
should raise a BAMLValidationError
passed
0.474s
Integ tests
should reset environment variables correctly
passed
1.003s
Integ tests
should use aliases when serializing input objects - classes
passed
2.363s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
1.11s
Integ tests
should use aliases when serializing input objects - enums
passed
0.519s
Integ tests
should use aliases when serializing input objects - lists
passed
0.432s
Integ tests
constraints: should handle checks in return types
passed
0.898s
Integ tests
constraints: should handle checks in returned unions
passed
0.829s
\ No newline at end of file +

Test Report

Started: 2024-10-30 18:05:38
Suites (1)
0 passed
1 failed
0 pending
Tests (59)
55 passed
4 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
1.16s
Integ tests > should work for all inputs
single string list
passed
0.455s
Integ tests > should work for all inputs
return literal union
failed
0.57s
BamlValidationError: BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Failed to find any (1 | true | "string output") in 3 items
+  - <root>: Expected 1, got Object([("response", String("true"))]).
+  - <root>: Expected true, got Object([("response", String("true"))]).
+  - <root>: Expected "string output", got Object([("response", String("true"))]).
+    at Function.from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:33:28)
+    at from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:58:32)
+    at BamlAsyncClient.LiteralUnionsTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:1361:50)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:42:19)
Integ tests > should work for all inputs
single class
passed
0.394s
Integ tests > should work for all inputs
multiple classes
passed
0.641s
Integ tests > should work for all inputs
single enum list
passed
0.542s
Integ tests > should work for all inputs
single float
passed
0.496s
Integ tests > should work for all inputs
single int
passed
0.443s
Integ tests > should work for all inputs
single literal int
passed
0.48s
Integ tests > should work for all inputs
single literal bool
passed
0.357s
Integ tests > should work for all inputs
single literal string
passed
0.459s
Integ tests > should work for all inputs
single class with literal prop
passed
0.692s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.659s
Integ tests > should work for all inputs
single optional string
passed
0.386s
Integ tests > should work for all inputs
single map string to string
passed
0.644s
Integ tests > should work for all inputs
single map string to class
passed
0.78s
Integ tests > should work for all inputs
single map string to map
passed
0.695s
Integ tests
should work for all outputs
passed
5.913s
Integ tests
works with retries1
passed
1.206s
Integ tests
works with retries2
passed
2.318s
Integ tests
works with fallbacks
passed
2.638s
Integ tests
should work with image from url
passed
1.751s
Integ tests
should work with image from base 64
passed
1.431s
Integ tests
should work with audio base 64
passed
1.039s
Integ tests
should work with audio from url
passed
1.083s
Integ tests
should support streaming in OpenAI
passed
2.851s
Integ tests
should support streaming in Gemini
failed
1.82s
Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "Gemini", model: Some("gemini-1.5-pro-001"), prompt: Chat([RenderedChatMessage { role: "user", allow_duplicate_role: false, parts: [Text("Write a nice short story about Dr. Pepper")] }]), request_options: {"safetySettings": Object {"category": String("HARM_CATEGORY_HATE_SPEECH"), "threshold": String("BLOCK_LOW_AND_ABOVE")}}, start_time: SystemTime { tv_sec: 1730336768, tv_nsec: 715426000 }, latency: 1.757292958s, message: "Failed to parse event: Error(\"missing field `content`\", line: 1, column: 359)", code: UnsupportedResponse(2) }
+    at BamlStream.parsed [as getFinalResponse] (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/stream.js:58:39)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:253:19)
Integ tests
should support AWS
passed
2.103s
Integ tests
should support streaming in AWS
passed
2.137s
Integ tests
should support OpenAI shorthand
passed
8.493s
Integ tests
should support OpenAI shorthand streaming
passed
9.091s
Integ tests
should support anthropic shorthand
passed
3.297s
Integ tests
should support anthropic shorthand streaming
passed
2.857s
Integ tests
should support streaming without iterating
passed
5.102s
Integ tests
should support streaming in Claude
passed
1.016s
Integ tests
should support vertex
passed
11.441s
Integ tests
supports tracing sync
passed
0.008s
Integ tests
supports tracing async
failed
11.651s
Error: expect(received).toEqual(expected) // deep equality
+
+Expected: 30
+Received: 29
+    at Object.toEqual (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:418:24)
Integ tests
should work with dynamic types single
passed
0.924s
Integ tests
should work with dynamic types enum
passed
0.919s
Integ tests
should work with dynamic literals
passed
0.904s
Integ tests
should work with dynamic types class
passed
0.881s
Integ tests
should work with dynamic inputs class
passed
0.59s
Integ tests
should work with dynamic inputs list
passed
0.612s
Integ tests
should work with dynamic output map
passed
0.915s
Integ tests
should work with dynamic output union
passed
2.34s
Integ tests
should work with nested classes
failed
10.05s
Error: expect(received).toEqual(expected) // deep equality
+
+- Expected  - 1
++ Received  + 1
+
+  Object {
+    "prop1": "value1",
+    "prop2": Object {
+      "inner": Object {
+        "prop2": 42,
+-       "prop3": 3.14,
++       "prop3": null,
+      },
+      "prop1": "value2",
+      "prop2": "value3",
+    },
+  }
+    at Object.toEqual (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:580:25)
Integ tests
should work with dynamic client
passed
0.5s
Integ tests
should work with 'onLogEvent'
passed
2.102s
Integ tests
should work with a sync client
passed
0.619s
Integ tests
should raise an error when appropriate
passed
1.098s
Integ tests
should raise a BAMLValidationError
passed
0.512s
Integ tests
should reset environment variables correctly
passed
1.098s
Integ tests
should use aliases when serializing input objects - classes
passed
0.955s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
0.958s
Integ tests
should use aliases when serializing input objects - enums
passed
0.417s
Integ tests
should use aliases when serializing input objects - lists
passed
0.522s
Integ tests
constraints: should handle checks in return types
passed
0.946s
Integ tests
constraints: should handle checks in returned unions
passed
0.885s
Console Log
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:47:15)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
calling with class
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:53:15)
got response key
+true
+52
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:176:15)
Expected error Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "RetryClientConstant", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1730336755, tv_nsec: 372750000 }, latency: 188.1645ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blah. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+    at BamlAsyncClient.parsed [as TestRetryConstant] (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:2584:18)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:173:7) {
+  code: 'GenericFailure'
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:185:15)
Expected error Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1730336757, tv_nsec: 705143000 }, latency: 209.715416ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+    at BamlAsyncClient.parsed [as TestRetryExponential] (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:2609:18)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:182:7) {
+  code: 'GenericFailure'
+}
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:338:15)
+    at func (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:83:38)
+    at AsyncLocalStorage.run (node:async_hooks:338:14)
+    at run (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:81:22)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:347:5)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
hello world
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:341:15)
+    at func (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:83:38)
+    at AsyncLocalStorage.run (node:async_hooks:338:14)
+    at run (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:81:22)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:347:5)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
dummyFunc returned
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:344:15)
+    at func (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:83:38)
+    at AsyncLocalStorage.run (node:async_hooks:338:14)
+    at run (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:81:22)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:347:5)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
dummyFunc2 returned
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:370:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
dummy hi1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:370:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
dummy hi2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:370:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:377:5)
dummy hi3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:384:15)
+    at func (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:44)
+    at AsyncLocalStorage.run (node:async_hooks:338:14)
+    at run (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:28)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:400:5)
hello world
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
samDummyNested nested1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:370:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
dummy firstDummyFuncArg
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:389:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
samDummyNested nested1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:389:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:389:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:370:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:389:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
dummy secondDummyFuncArg
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 0)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:397:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
samDummyNested nested1
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 1)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:397:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:359:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at async Promise.all (index 2)
+    at dummyFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:365:22)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:397:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:370:15)
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:397:20
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
+    at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:17)
dummy thirdDummyFuncArg
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:403:15)
+    at func (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:44)
+    at AsyncLocalStorage.run (node:async_hooks:338:14)
+    at run (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:28)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:409:5)
hello world
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:413:13)
stats {"failed":1,"started":30,"finalized":30,"submitted":30,"sent":30,"done":29}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:437:13)
[
+  {
+    name: 'Harrison',
+    hair_color: 'BLACK',
+    last_name: null,
+    height: 1.83,
+    hobbies: [ 'SPORTS' ]
+  }
+]
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:506:13)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
[
+  [
+    'hair_color',
+    ClassPropertyBuilder { bldr: ClassPropertyBuilder {} }
+  ],
+  [
+    'attributes',
+    ClassPropertyBuilder { bldr: ClassPropertyBuilder {} }
+  ]
+]
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:508:15)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
Property: hair_color
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:508:15)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
Property: attributes
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:516:13)
final  {
+  hair_color: 'black',
+  attributes: { eye_color: 'blue', facial_hair: 'beard' }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:540:13)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
[
+  [
+    'hair_color',
+    ClassPropertyBuilder { bldr: ClassPropertyBuilder {} }
+  ],
+  [
+    'attributes',
+    ClassPropertyBuilder { bldr: ClassPropertyBuilder {} }
+  ],
+  [ 'height', ClassPropertyBuilder { bldr: ClassPropertyBuilder {} } ]
+]
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:542:15)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
Property: hair_color
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:542:15)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
Property: attributes
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:542:15)
+    at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
+    at new Promise (<anonymous>)
+    at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
+    at _callCircusTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:316:40)
+    at _runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:252:3)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:126:9)
+    at _runTestsForDescribeBlock (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:121:9)
+    at run (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/run.js:71:3)
+    at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
+    at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
+    at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
+    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
Property: height
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:550:13)
final  {
+  hair_color: 'black',
+  attributes: { eye_color: 'blue', facial_hair: 'beard', age: '30' },
+  height: { feet: 6, inches: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:561:13)
final  {
+  hair_color: 'black',
+  attributes: { eye_color: 'blue', facial_hair: 'beard', age: '30' },
+  height: { meters: 1.8 }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: '', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: '', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value1', prop2: { prop1: 'value2', prop2: '', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: null, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value1',
+  prop2: {
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
+  }
+}
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:599:15)
+    at callback (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:70:17)
onLogEvent {
+  metadata: {
+    eventId: 'c7061648-fbde-492e-86bc-95d36938d217',
+    rootEventId: 'c7061648-fbde-492e-86bc-95d36938d217'
+  },
+  prompt: '[\n' +
+    '  {\n' +
+    '    "role": "system",\n' +
+    '    "content": [\n' +
+    '      {\n' +
+    '        "text": "Return this value back to me: [\\"a\\", \\"b\\", \\"c\\"]"\n' +
+    '      }\n' +
+    '    ]\n' +
+    '  }\n' +
+    ']',
+  rawOutput: '["a", "b", "c"]',
+  parsedOutput: '["a", "b", "c"]',
+  startTime: '2024-10-31T01:07:26.809Z'
+}
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:599:15)
+    at callback (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:70:17)
onLogEvent {
+  metadata: {
+    eventId: 'ab924921-5f42-4c11-b428-133f26a98300',
+    rootEventId: 'ab924921-5f42-4c11-b428-133f26a98300'
+  },
+  prompt: '[\n' +
+    '  {\n' +
+    '    "role": "system",\n' +
+    '    "content": [\n' +
+    '      {\n' +
+    '        "text": "Return this value back to me: [\\"d\\", \\"e\\", \\"f\\"]"\n' +
+    '      }\n' +
+    '    ]\n' +
+    '  }\n' +
+    ']',
+  rawOutput: '["d", "e", "f"]',
+  parsedOutput: '["d", "e", "f"]',
+  startTime: '2024-10-31T01:07:27.345Z'
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:633:15)
Error: Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "MyClient", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Given a string, extract info using the schema:\n\nMy name is Harrison. My hair is black and I'm 6 feet tall.\n\nAnswer in JSON using this schema:\n{\n}")] }]), request_options: {"model": String("gpt-4o-mini")}, start_time: SystemTime { tv_sec: 1730336849, tv_nsec: 305778000 }, latency: 206.536791ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: INVALID_KEY. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+    at BamlAsyncClient.parsed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:1384:18)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:630:7) {
+  code: 'GenericFailure'
+}
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:641:17)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:637:5)
BamlValidationError: BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
+  - <root>: Missing required field: nonce
+  - <root>: Missing required field: nonce2
+    at Function.from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:33:28)
+    at from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:58:32)
+    at BamlAsyncClient.DummyOutputFunction (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:486:50)
+    at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:639:9
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:637:5) {
+  prompt: '[\x1B[2mchat\x1B[0m] \x1B[43msystem: \x1B[0mSay "hello there".\n',
+  raw_output: 'Hello there! How can I assist you today?'
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:653:17)
error BamlValidationError: BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
+  - <root>: Missing required field: nonce
+  - <root>: Missing required field: nonce2
+    at Function.from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:33:28)
+    at from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:58:32)
+    at BamlAsyncClient.DummyOutputFunction (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:486:50)
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:649:7) {
+  prompt: '[\x1B[2mchat\x1B[0m] \x1B[43msystem: \x1B[0mSay "hello there".\n',
+  raw_output: 'Hello there! How can I assist you today?'
+}
\ No newline at end of file diff --git a/tools/versions/engine.cfg b/tools/versions/engine.cfg index 55f611781..f6714fd78 100644 --- a/tools/versions/engine.cfg +++ b/tools/versions/engine.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/integ-tests.cfg b/tools/versions/integ-tests.cfg index 78ccc4df8..982f64608 100644 --- a/tools/versions/integ-tests.cfg +++ b/tools/versions/integ-tests.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/python.cfg b/tools/versions/python.cfg index 0fa3c9f6a..62267942c 100644 --- a/tools/versions/python.cfg +++ b/tools/versions/python.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/ruby.cfg b/tools/versions/ruby.cfg index 278826ac4..632f08b40 100644 --- a/tools/versions/ruby.cfg +++ b/tools/versions/ruby.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/typescript.cfg b/tools/versions/typescript.cfg index e6ee25c7a..da7e8ff11 100644 --- a/tools/versions/typescript.cfg +++ b/tools/versions/typescript.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/vscode.cfg b/tools/versions/vscode.cfg index e9323d571..6646cda72 100644 --- a/tools/versions/vscode.cfg +++ b/tools/versions/vscode.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/typescript/vscode-ext/packages/package.json b/typescript/vscode-ext/packages/package.json index a790459c7..83e8173e1 100644 --- a/typescript/vscode-ext/packages/package.json +++ b/typescript/vscode-ext/packages/package.json @@ -2,7 +2,7 @@ "name": "baml-extension", "displayName": "Baml", "description": "BAML is a DSL for AI applications.", - "version": "0.64.0", + "version": "0.65.0", "publisher": "Boundary", "repository": "https://github.com/BoundaryML/baml", "homepage": "https://www.boundaryml.com",