diff --git a/CHANGELOG.md b/CHANGELOG.md index 831d3a724..16393da09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,34 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. +## [0.64.0](https://github.com/boundaryml/baml/compare/0.63.0..0.64.0) - 2024-10-29 + +### Bug Fixes +- **Playground Stability:** Prevented crashes in the playground due to malformed vertex credentials ([#1107](https://github.com/boundaryml/baml/commit/e665346fbc84a9b969a979cfdf1c70d530201e93)) - _Samuel Lijin_ +- **Union Handling:** Addressed an issue with union types in the schema ([#1096](https://github.com/boundaryml/baml/commit/cb5ce7623d3e95464fb5e5152c4d2339458caa26)) - _Greg Hale_ +- **WASM Function Signatures:** Resolved stack overflow when computing WASM function signatures ([#1100](https://github.com/boundaryml/baml/commit/aa736ed2d7386cae78421c22d5669c73d8921085)) - _aaronvg_ +- **VSCode Extension:** Fixed crashes in the VSCode extension that caused the output panel to open unexpectedly ([#1103](https://github.com/boundaryml/baml/commit/cb5a266bc68f15483f3ec3fa0f4edbc8d176287a)) - _hellovai_ +- **Static Analysis Improvements:** Enhanced static analysis on Jinja expressions and `regex_match` functions ([#1102](https://github.com/boundaryml/baml/commit/7ca8136ffbc690877091627415941674f6f14b2f), [#1104](https://github.com/boundaryml/baml/commit/83ddb1cfe81c9b5f6ae620c331c4eefe512c78bd)) - _hellovai_ +- **Codegen Enhancements:** Fixed code generation for Python boolean literals and updated integration tests ([#1099](https://github.com/boundaryml/baml/commit/635976238fd9246bfb8764875358a36b4ec6a7f5)) - _Antonio Sarosi_ +- **Enum Handling:** Improved substring alias handling for enums ([#1098](https://github.com/boundaryml/baml/commit/0c5cbd4ae03d2bc836ee4b61a7df638855bb72ca)) - _Miguel Cárdenas_ +- **Syntax Highlighting:** Refined span calculations for Jinja expressions and improved VSCode syntax highlighting with Lezer ([#1110](https://github.com/boundaryml/baml/commit/a53072f5fe9fe83a0accb36e43a06550602a3c65)) - _hellovai_ +- **Ruby Support:** Fixed literal boolean tests for Ruby ([#1109](https://github.com/boundaryml/baml/commit/23e590b0b2fdb51f80e7eced769baabd12b3be22)) - _Antonio Sarosi_ + +### Features +- **Constraint Support:** Added the ability to define constraints using Jinja expressions ([#1006](https://github.com/boundaryml/baml/commit/d794f28b4f8830b1a40cd08043ecdc562938d36e)) - _Greg Hale_ +- **VSCode & Fiddle UI:** Introduced a new "Intro to Checks" UI for easier onboarding ([#1106](https://github.com/boundaryml/baml/commit/11efa5e97f8e9b8f385b7fb0e823f5ff2bc4c314)) - _Samuel Lijin_ +- **Dev Container Configurations:** Added Dev Container configurations for streamlined development environments ([#1112](https://github.com/boundaryml/baml/commit/5790393d7ad320e9e257c09e461c9bc39310a834)) - _Antonio Sarosi_ + +### Documentation +- **Constraints Documentation:** Published new documentation for defining constraints in BAML ([#1113](https://github.com/boundaryml/baml/commit/6332021a59661d3931934adc2afbf4f99f6f4bee)) - _Greg Hale_ +- **Dynamic Types Linking:** Added cross-links to dynamic types documentation for easier navigation ([#1116](https://github.com/boundaryml/baml/commit/8ce0a539d74d05438e8047e4e02022ddd7121e21)) - _Greg Hale_ + +### Miscellaneous +- **Code Quality:** Improved style and fixed typos in the codebase ([#1115](https://github.com/boundaryml/baml/commit/4c3970a6e6ce998a784e682f4c218ba2a69cf86a)) - _Greg Hale_ +- **Parsing Stability:** Added logic to prevent assertions from parsing errors and ensured checks no longer affect parsing ([#1101](https://github.com/boundaryml/baml/commit/5ec89c92ab14622afddc3ce348c5b981b4840492)) - _hellovai_ +- **Version Bump:** Bumped version to 0.64.0 ([#1114](https://github.com/boundaryml/baml/commit/90d3c17ba67bc1467ee5973ff6cf257069e265b9), [#ff7e152](https://github.com/boundaryml/baml/commit/ff7e152510395bab1d38afa60211226070d12cc2)) - _Vaibhav Gupta_ + + ## [0.63.0](https://github.com/boundaryml/baml/compare/0.62.0..0.63.0) - 2024-10-23 ### Bug Fixes diff --git a/engine/Cargo.lock b/engine/Cargo.lock index a91987871..5fc37e21c 100644 --- a/engine/Cargo.lock +++ b/engine/Cargo.lock @@ -773,7 +773,7 @@ dependencies = [ [[package]] name = "baml-lib" -version = "0.63.0" +version = "0.64.0" dependencies = [ "base64 0.13.1", "dissimilar", @@ -810,7 +810,7 @@ dependencies = [ [[package]] name = "baml-runtime" -version = "0.63.0" +version = "0.64.0" dependencies = [ "ambassador", "anyhow", @@ -900,7 +900,7 @@ dependencies = [ [[package]] name = "baml-schema-build" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "baml-runtime", @@ -936,7 +936,7 @@ dependencies = [ [[package]] name = "baml-types" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "clap", @@ -2333,7 +2333,7 @@ dependencies = [ [[package]] name = "internal-baml-codegen" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "askama", @@ -2358,7 +2358,7 @@ dependencies = [ [[package]] name = "internal-baml-core" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "baml-types", @@ -2393,7 +2393,7 @@ dependencies = [ [[package]] name = "internal-baml-diagnostics" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "colored", @@ -2406,7 +2406,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "askama", @@ -2427,7 +2427,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja-types" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "askama", @@ -2446,7 +2446,7 @@ dependencies = [ [[package]] name = "internal-baml-parser-database" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "baml-types", @@ -2468,7 +2468,7 @@ dependencies = [ [[package]] name = "internal-baml-prompt-parser" -version = "0.63.0" +version = "0.64.0" dependencies = [ "internal-baml-diagnostics", "internal-baml-schema-ast", @@ -2480,7 +2480,7 @@ dependencies = [ [[package]] name = "internal-baml-schema-ast" -version = "0.63.0" +version = "0.64.0" dependencies = [ "baml-types", "either", @@ -2566,7 +2566,7 @@ checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" [[package]] name = "jsonish" -version = "0.63.0" +version = "0.64.0" dependencies = [ "anyhow", "assert-json-diff", diff --git a/engine/Cargo.toml b/engine/Cargo.toml index f2d13a720..1c6aed1a2 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.63.0" +version = "0.64.0" authors = ["Boundary "] description = "BAML Toolchain" diff --git a/engine/language_client_python/pyproject.toml b/engine/language_client_python/pyproject.toml index 3bceced52..e7022f506 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.63.0" +version = "0.64.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 8bdf026dc..81a62c949 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.63.0" + spec.version = "0.64.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 2c0e41cbf..f76e83079 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -1,6 +1,6 @@ { "name": "@boundaryml/baml", - "version": "0.63.0", + "version": "0.64.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 ff6a2f2e0..b13dc20fc 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.63.0" + version "0.64.0" } generator lang_typescript { output_type typescript output_dir "../typescript" - version "0.63.0" + version "0.64.0" } generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" - version "0.63.0" + version "0.64.0" } // generator openapi { // output_type rest/openapi // output_dir "../openapi" -// version "0.63.0" +// version "0.64.0" // on_generate "rm .gitignore" // } diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index 548047a43..98674b28e 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.63.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.63.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.63.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.63.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.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", "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 a56f1bad9..03ee50425 100644 --- a/integ-tests/python/report.html +++ b/integ-tests/python/report.html @@ -3,11 +3,11 @@
Test Report

Summary

78
2 failed 76 passed

Tests

tests/test_functions.py 273 0:02:51.448367

PASSED test_env_vars_reset 0:00:01.702021

Setup

Call

Captured stdout call
Context depth is greater than 0!
+    
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!
 Except but ending trace!
 Context depth is greater than 0!
-
Captured stderr call
[2024-10-23T17:50:55Z WARN  baml_events] Function ExtractPeople:
-    Client: GPT4 (<unknown>) - 214ms
+
Captured stderr call
[2024-10-29T04:40:50Z WARN  baml_events] Function ExtractPeople:
+    Client: GPT4 (<unknown>) - 127ms
     ---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-23T17:50:56Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 984ms. StopReason: stop
+[2024-10-29T04:40:51Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 607ms. 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.506908

Setup

Call

Captured stdout call
got response key
+

Teardown

PASSED test_sync 0:00:00.446559

Setup

Call

Captured stdout call
got response key
 true
 52
-
Captured stderr call
[2024-10-23T17:50:57Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 502ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:40:51Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 442ms. 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.314198

Setup

Call

Captured stderr call
[2024-10-23T17:50:57Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 307ms. StopReason: stop
+

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
     ---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:01.075544

Setup

Call

Captured stderr call
[2024-10-23T17:50:58Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1069ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return this value back to me: ["a", "b", "c"]
     
@@ -95,8 +95,114 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.447142

Setup

Call

Captured stderr call
[2024-10-23T17:50:59Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 441ms. StopReason: stop
+

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
+    ---PROMPT---
+    [chat] system: Return one of these values: 
+    Answer in JSON using any of these schemas:
+    1 or true or "string output"
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Using your understanding of the historical popularity
+    of names, predict the age of a person with the name
+    Greg in years. Also predict their genus and
+    species. It's Homo sapiens (with exactly that spelling
+    and capitalization). I'll give you a hint: If the name
+    is "Greg", his age is 41.
+    
+    Answer in JSON using this schema:
+    {
+      planetary_age: {
+        age: int,
+      } or {
+        age: int,
+      },
+      certainty: int,
+      species: string,
+    }
+    
+    ---LLM REPLY---
+    {
+      "planetary_age": {
+        "age": 41
+      },
+      "certainty": 95,
+      "species": "Homo sapiens"
+    }
+    ---Parsed Response (class FooAny)---
+    {
+      "planetary_age": {
+        "age": 41
+      },
+      "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
+    ---PROMPT---
+    [chat] system: Extract a primary contact info, and if possible a secondary contact
+    info, from this document:
+    
+    Reach me at help@boundaryml.com, or 111-222-3333 if needed.
+    
+    Answer in JSON using this schema:
+    {
+      primary: {
+        value: string,
+      } or {
+        value: string,
+      },
+      secondary: {
+        value: string,
+      } or {
+        value: string,
+      } or null,
+    }
+    
+    ---LLM REPLY---
+    {
+      "primary": {
+        "value": "help@boundaryml.com"
+      },
+      "secondary": {
+        "value": "111-222-3333"
+      }
+    }
+    ---Parsed Response (class ContactInfo)---
+    {
+      "primary": {
+        "value": "help@boundaryml.com"
+      },
+      "secondary": {
+        "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
+    ---PROMPT---
+    [chat] system: Return the integer after 1
+    
+    Answer in JSON using this schema:
+    {
+      foo: int,
+    }
+    
+    ---LLM REPLY---
+    {
+      "foo": 2
+    }
+    ---Parsed Response (Error)---
+    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
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -109,8 +215,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.684478

Setup

Call

Captured stderr call
[2024-10-23T17:50:59Z INFO  baml_events] Function TestMulticlassNamedArgs:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 680ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -129,8 +235,8 @@
     64
     ---Parsed Response (string)---
     "key\ntrue\n52\nkey\ntrue\n64"
-

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.359352

Setup

Call

Captured stderr call
[2024-10-23T17:51:00Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 356ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Print these values back to me:
     ["TWO"]
@@ -139,8 +245,8 @@
     ["TWO"]
     ---Parsed Response (string)---
     "[\"TWO\"]"
-

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.357679

Setup

Call

Captured stderr call
[2024-10-23T17:51:00Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 352ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return this value back to me: 3.12
     
@@ -148,8 +254,8 @@
     3.12
     ---Parsed Response (string)---
     "3.12"
-

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.552004

Setup

Call

Captured stderr call
[2024-10-23T17:51:01Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 546ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return this value back to me: 3566
     
@@ -157,8 +263,73 @@
     3566
     ---Parsed Response (string)---
     "3566"
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.668674

Setup

Call

Captured stderr call
[2024-10-23T17:51:01Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 659ms. StopReason: stop
+

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
+    ---PROMPT---
+    [chat] system: Return this value back to me: 1
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Return this value back to me: true
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Return this value back to me: My String
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Return the same object you were given.
+    Answer in JSON using this schema:
+    {
+      prop: "hello",
+    }
+    
+    ---LLM REPLY---
+    {
+      "prop": "hello"
+    }
+    ---Parsed Response (class LiteralClassHello)---
+    {
+      "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
+    ---PROMPT---
+    [chat] system: Return the same object you were given.
+    Answer in JSON using any of these schemas:
+    {
+      prop: "one",
+    } or {
+      prop: "two",
+    }
+    
+    ---LLM REPLY---
+    ```json
+    {
+      "prop": "one"
+    }
+    ```
+    ---Parsed Response (class LiteralClassOne)---
+    {
+      "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
     ---PROMPT---
     [chat] system: Return this value back to me: {"dolor": "sit", "lorem": "ipsum"}
     
@@ -169,8 +340,8 @@
       "dolor": "sit",
       "lorem": "ipsum"
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.682060

Setup

Call

Captured stderr call
[2024-10-23T17:51:02Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 674ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return this value back to me: {"lorem": {
         "word": "ipsum",
@@ -188,25 +359,21 @@
         "word": "ipsum"
       }
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.913485

Setup

Call

Captured stderr call
[2024-10-23T17:51:03Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 906ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return this value back to me: {"lorem": {"word": "ipsum"}}
     
     ---LLM REPLY---
-    {
-        "lorem": {
-            "word": "ipsum"
-        }
-    }
+    {"lorem": {"word": "ipsum"}}
     ---Parsed Response (map<string, map<string, string>>)---
     {
       "lorem": {
         "word": "ipsum"
       }
     }
-

Teardown

PASSED test_should_work_for_all_outputs 0:00:04.215497

Setup

Call

Captured stderr call
[2024-10-23T17:51:03Z INFO  baml_events] Function FnOutputBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 486ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return a true: Answer as a: bool
     
@@ -214,8 +381,47 @@
     True
     ---Parsed Response (bool)---
     true
-[2024-10-23T17:51:04Z INFO  baml_events] Function FnOutputClassList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 789ms. StopReason: stop
+[2024-10-29T04:41:03Z INFO  baml_events] Function FnOutputInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 520ms. StopReason: stop
+    ---PROMPT---
+    [chat] system: Return the integer 5 with no additional context.
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Return an integer: Answer using this specific value:
+    5
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Return a false: Answer using this specific value:
+    false
+    
+    ---LLM REPLY---
+    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
+    ---PROMPT---
+    [chat] system: Return a string: Answer using this specific value:
+    "example output"
+    
+    ---LLM REPLY---
+    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
     ---PROMPT---
     [chat] system: Return a JSON array that follows this schema: 
     Answer with a JSON Array using this schema:
@@ -231,19 +437,19 @@
     ---LLM REPLY---
     [
       {
-        "prop1": "example string",
-        "prop2": 123
+        "prop1": "apple",
+        "prop2": 5
       }
     ]
     ---Parsed Response (list<class TestOutputClass>)---
     [
       {
-        "prop1": "example string",
-        "prop2": 123
+        "prop1": "apple",
+        "prop2": 5
       }
     ]
-[2024-10-23T17:51:05Z INFO  baml_events] Function FnOutputClassWithEnum:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 771ms. StopReason: stop
+[2024-10-29T04:41:05Z INFO  baml_events] Function FnOutputClassWithEnum:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 709ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -257,16 +463,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello World",
-      "prop2": "TWO"
+      "prop1": "hello world",
+      "prop2": "ONE"
     }
     ---Parsed Response (class TestClassWithEnum)---
     {
-      "prop1": "Hello World",
-      "prop2": "TWO"
+      "prop1": "hello world",
+      "prop2": "ONE"
     }
-[2024-10-23T17:51:06Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 701ms. StopReason: stop
+[2024-10-29T04:41:06Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 625ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -281,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-23T17:51:06Z INFO  baml_events] Function FnEnumListOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 572ms. StopReason: stop
+[2024-10-29T04:41:07Z INFO  baml_events] Function FnEnumListOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 540ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print out two of these values randomly selected from the list below in a json array.
     
@@ -304,15 +510,15 @@
     ---LLM REPLY---
     [
       'ONE',
-      'TWO'
+      'THREE'
     ]
     ---Parsed Response (list<enum EnumOutput>)---
     [
       "ONE",
-      "TWO"
+      "THREE"
     ]
-[2024-10-23T17:51:07Z INFO  baml_events] Function FnEnumOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 861ms. StopReason: stop
+[2024-10-29T04:41:07Z INFO  baml_events] Function FnEnumOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 652ms. StopReason: stop
     ---PROMPT---
     [chat] system: Choose one of these values randomly. Before you give the answer, write out an unrelated haiku about the ocean.
     
@@ -323,80 +529,82 @@
     - THREE
     
     ---LLM REPLY---
-    In the vast ocean,
-    Waves crash upon the shorelines,
-    Whispers of the sea.
+    Waves crash on the shore
+    Tide whispers secrets of old
+    Ocean's endless roar
     
     VALUE_ENUM
-    ----
-    - TWO
+    --------
+    TWO
     ---Parsed Response (enum EnumOutput)---
     "TWO"
-

Teardown

PASSED test_should_work_with_image_url 0:00:01.199094

Setup

Call

Captured stderr call
[2024-10-23T17:51:08Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1192ms. StopReason: stop
+

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
     ---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 animated ogre smiling.
+    Green, friendly, animated character.
     ---Parsed Response (string)---
-    "Green animated ogre smiling."
-

Teardown

PASSED test_should_work_with_image_list 0:00:01.245259

Setup

Call

Captured stderr call
[2024-10-23T17:51:10Z INFO  baml_events] Function TestImageListInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1240ms. StopReason: stop
+    "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
     ---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---
-    The colors green and yellow are common between the two images.
+    Both images include the color green.
     ---Parsed Response (string)---
-    "The colors green and yellow are common between the two images."
-

Teardown

PASSED test_should_work_with_vertex 0:00:10.459983

Setup

Call

Captured stderr call
[2024-10-23T17:51:20Z INFO  baml_events] Function TestVertex:
-    Client: Vertex () - 10453ms. StopReason: "STOP"
+    "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"
     ---PROMPT---
     [chat] user: Write a nice short story about donkey kong
     
     ---LLM REPLY---
-    The setting sun painted the jungle canopy in fiery hues. Donkey Kong, perched on his highest platform, watched the sky with a melancholic air. Gone were the days of rambunctious barrel-throwing and playful princess-napping. Now, his fur was speckled with grey, and his banana hoard, while impressive, brought him little joy. 
+    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.
+    
+    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. 
     
-    A shadow flickered across the clearing, and DK's ears twitched.  A small, lanky figure, all elbows and knees, stumbled into view. It was Diddy Kong, his nephew and once his most enthusiastic apprentice in the art of mischief. But Diddy seemed...different. His usual boundless energy was replaced by a drooping weariness.
+    Donkey Kong grunted. "You watchin' them bananas, right?" 
     
-    "Diddy?" Donkey Kong rumbled, his voice echoing through the trees. "What troubles you, little buddy?"
+    Diddy, distracted by the butterfly, gave a distracted thumbs-up. 
     
-    Diddy shuffled closer, his tail dragging in the dust. "The young ones," he mumbled, "they say...they say my banana-hide-and-seek is boring."
+    Donkey Kong sighed, the sound like a rumble in the jungle.  “This is important, Diddy. Remember what those Kremlings did last time?”
     
-    Donkey Kong's heart ached for his nephew. He remembered the sting of being considered "old-fashioned." He lumbered down his platform, the wood creaking familiarly beneath his weight. 
+    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. 
     
-    He stopped before Diddy and lowered himself until they were eye-to-eye. "Diddy," he said, his tone gentle, "the best games are those shared with family." 
+    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's eyes widened. A slow grin spread across his face. "Uncle DK!" he shouted, grabbing Donkey Kong's hand and pulling him toward the jungle. "I have an idea!"
+    “You two look tense,” Cranky croaked, his voice rough as tree bark.  “Need a reminder on how to properly defend a banana hoard?”
     
-    That night, the jungle echoed with laughter.  Donkey Kong, perched high in a tree, watched Diddy teach the young Kongs a new game: banana hide-and-seek with a twist. Instead of hiding individual bananas, they were hiding parts of a map that led to the ultimate prize - Donkey Kong's legendary banana hoard!
+    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 Donkey Kong watched the young ones race through the jungle, their eyes bright with excitement, he felt a familiar warmth bloom in his chest.  The thrill of the chase never faded, especially when shared with those you loved.  His laugh rumbled through the trees, as strong and full of life as ever.  The jungle was alive with the sounds of family, and Donkey Kong wouldn't have it any other way. 
+    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. 
     
     ---Parsed Response (string)---
-    "The setting sun painted the jungle canopy in fiery hues. Donkey Kong, perched on his highest platform, watched the sky with a melancholic air. Gone were the days of rambunctious barrel-throwing and playful princess-napping. Now, his fur was speckled with grey, and his banana hoard, while impressive, brought him little joy. \n\nA shadow flickered across the clearing, and DK's ears twitched.  A small, lanky figure, all elbows and knees, stumbled into view. It was Diddy Kong, his nephew and once his most enthusiastic apprentice in the art of mischief. But Diddy seemed...different. His usual boundless energy was replaced by a drooping weariness.\n\n\"Diddy?\" Donkey Kong rumbled, his voice echoing through the trees. \"What troubles you, little buddy?\"\n\nDiddy shuffled closer, his tail dragging in the dust. \"The young ones,\" he mumbled, \"they say...they say my banana-hide-and-seek is boring.\"\n\nDonkey Kong's heart ached for his nephew. He remembered the sting of being considered \"old-fashioned.\" He lumbered down his platform, the wood creaking familiarly beneath his weight. \n\nHe stopped before Diddy and lowered himself until they were eye-to-eye. \"Diddy,\" he said, his tone gentle, \"the best games are those shared with family.\" \n\nDiddy's eyes widened. A slow grin spread across his face. \"Uncle DK!\" he shouted, grabbing Donkey Kong's hand and pulling him toward the jungle. \"I have an idea!\"\n\nThat night, the jungle echoed with laughter.  Donkey Kong, perched high in a tree, watched Diddy teach the young Kongs a new game: banana hide-and-seek with a twist. Instead of hiding individual bananas, they were hiding parts of a map that led to the ultimate prize - Donkey Kong's legendary banana hoard!\n\nAs Donkey Kong watched the young ones race through the jungle, their eyes bright with excitement, he felt a familiar warmth bloom in his chest.  The thrill of the chase never faded, especially when shared with those you loved.  His laugh rumbled through the trees, as strong and full of life as ever.  The jungle was alive with the sounds of family, and Donkey Kong wouldn't have it any other way. \n"
-

Teardown

PASSED test_should_work_with_image_base64 0:00:01.773493

Setup

Call

Captured stderr call
[2024-10-23T17:51:22Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1750ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder base64>
     
     ---LLM REPLY---
-    Green animated ogre smiling.
+    Green animated ogre character.
     ---Parsed Response (string)---
-    "Green animated ogre smiling."
-

Teardown

PASSED test_should_work_with_audio_base64 0:00:00.996453

Setup

Call

Captured stderr call
[2024-10-23T17:51:23Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 983ms. StopReason: "STOP"
+    "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"
     ---PROMPT---
-    [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<image_placeholder base64>
+    [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
     ---LLM REPLY---
     Yes 
     
     ---Parsed Response (string)---
     "Yes \n"
-

Teardown

PASSED test_should_work_with_audio_url 0:00:01.453691

Setup

Call

Captured stderr call
[2024-10-23T17:51:24Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 1327ms. StopReason: "STOP"
+

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"
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
@@ -405,10 +613,10 @@
     
     ---Parsed Response (string)---
     "No \n"
-

Teardown

PASSED test_works_with_retries2 0:00:02.403037

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: 1729705887, tv_nsec: 25834000 }, latency: 226.189625ms, 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-23T17:51:27Z WARN  baml_events] Function TestRetryExponential:
+

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:
     (3 other previous tries)
-    Client: RetryClientExponential (<unknown>) - 226ms
+    Client: RetryClientExponential (<unknown>) - 181ms
     ---PROMPT---
     [chat] system: Say a haiku
     
@@ -424,319 +632,363 @@
         }
     }
     
-

Teardown

PASSED test_works_with_fallbacks 0:00:02.193783

Setup

Call

Captured stderr call
[2024-10-23T17:51:29Z INFO  baml_events] Function TestFallbackClient:
+

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:
     (5 other previous tries)
-    Client: GPT35 (gpt-3.5-turbo-0125) - 653ms. StopReason: stop
+    Client: GPT35 (gpt-3.5-turbo-0125) - 657ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say a haiku about mexico.
     
     ---LLM REPLY---
-    Land of vibrant hues,
-    Mariachi music sings,
-    Mexico's soul true.
+    Vibrant colors dance,
+    Mariachi music plays,
+    Mexico's heartbeat.
     ---Parsed Response (string)---
-    "Land of vibrant hues,\nMariachi music sings,\nMexico's soul true."
-

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.002590

Setup

Call

Teardown

PASSED test_claude 0:00:00.971554

Setup

Call

Captured stderr call
[2024-10-23T17:51:30Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 960ms. StopReason: "end_turn"
+    "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"
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here's a haiku about Mt. Rainier's height:
+    Here's a haiku about Mt. Rainier:
     
-    Rainier towers high
-    Ancient glacier-crowned giant
-    Piercing northwest skies
+    Rainier stands supreme
+    Fourteen thousand feet skyward
+    Guardian of clouds
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier's height:\n\nRainier towers high\nAncient glacier-crowned giant\nPiercing northwest skies"
-

Teardown

PASSED test_gemini 0:00:12.891945

Setup

Call

Captured stdout call
LLM output from Gemini: Bartholomew "Bart" Pepper, PhD, was a man of routine. Every morning at precisely 8:02, he'd arrive at his cluttered office in the Department of Unusual Flavors, a forgotten annex of the local university. And every morning, he'd brew a pot of intensely aromatic, mysteriously flavored tea, a concoction so unique it could only be described as...well, "Dr. Pepper."
+    "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.
+
+"I… I think I need to be here," he mumbled, holding up the can. "At least, that's what the note said."
 
-Bart had spent years, decades even, trying to recreate the taste of a soda his grandmother used to give him. He could still recall its sweet, slightly tangy fizz, the way it danced on his tongue, a symphony of 23 distinct, yet utterly harmonious flavors. He'd dedicated his life to rediscovering its secret, to bottling that fleeting memory. 
+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:
 
-He wasn't a soda jerk, as some colleagues snickered. He was a flavor historian, an archaeologist of the palate. His office, a testament to his obsession, overflowed with bubbling beakers, ancient cookbooks, and walls plastered with flavor charts that would make a sommelier weep.
+"To whoever finds this, drink the Dr Pepper. It holds the key." 
 
-One rainy Tuesday, while poring over a faded manuscript titled "Elixirs of the Old World," a sentence leapt out: "And lo, the nectar of 23 fruits, when blended under the crimson moon..." His heart hammered in his chest. Could this be it? The long-lost recipe?
+Mildred and the young man stared at each other. The only sound was the gentle ticking of the grandfather clock in the corner. 
 
-He rushed to recreate the process, his hands trembling with anticipation. Hours melted away in a blur of bubbling potions and exotic spices. Finally, as the clock chimed midnight, he held a glass of his creation up to the moon, a single, perfect tear escaping his eye. 
+"Well," Mildred finally said, her sense of adventure outweighing her confusion. "Don't let it get warm!"
 
-He took a sip. The taste...it was close. So close. But something was missing.  Disappointment threatened to engulf him, but then, from the corner of his eye, he spotted it – his grandmother's old music box, gathering dust. He wound it up, and a familiar, whimsical tune filled the air.  
+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.
 
-And in that moment, as the music mingled with the flavors on his tongue, it clicked. The missing ingredient wasn't a fruit, or a spice, but a feeling – the pure, unadulterated joy of a memory rekindled. Dr. Pepper smiled. His search wasn't over, not yet. But for the first time in a long time, he knew he was on the right track. He had a taste of the past, and now, he had the melody to guide him towards the future. His grandmother's soda, he realized, wasn't just about the 23 flavors; it was about the feeling they evoked. It was about love, laughter, and the bittersweet symphony of life itself. And he, Dr. Bartholomew Pepper, would spend the rest of his days trying to bottle that feeling, one delicious drop at a time. 
+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. 
 
-
Captured stderr call
[2024-10-23T17:51:43Z INFO  baml_events] Function TestGemini:
-    Client: Gemini () - 12884ms. StopReason: "STOP"
+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"
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Bartholomew "Bart" Pepper, PhD, was a man of routine. Every morning at precisely 8:02, he'd arrive at his cluttered office in the Department of Unusual Flavors, a forgotten annex of the local university. And every morning, he'd brew a pot of intensely aromatic, mysteriously flavored tea, a concoction so unique it could only be described as...well, "Dr. Pepper."
+    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.
     
-    Bart had spent years, decades even, trying to recreate the taste of a soda his grandmother used to give him. He could still recall its sweet, slightly tangy fizz, the way it danced on his tongue, a symphony of 23 distinct, yet utterly harmonious flavors. He'd dedicated his life to rediscovering its secret, to bottling that fleeting memory. 
+    "I… I think I need to be here," he mumbled, holding up the can. "At least, that's what the note said."
     
-    He wasn't a soda jerk, as some colleagues snickered. He was a flavor historian, an archaeologist of the palate. His office, a testament to his obsession, overflowed with bubbling beakers, ancient cookbooks, and walls plastered with flavor charts that would make a sommelier weep.
+    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:
     
-    One rainy Tuesday, while poring over a faded manuscript titled "Elixirs of the Old World," a sentence leapt out: "And lo, the nectar of 23 fruits, when blended under the crimson moon..." His heart hammered in his chest. Could this be it? The long-lost recipe?
+    "To whoever finds this, drink the Dr Pepper. It holds the key." 
     
-    He rushed to recreate the process, his hands trembling with anticipation. Hours melted away in a blur of bubbling potions and exotic spices. Finally, as the clock chimed midnight, he held a glass of his creation up to the moon, a single, perfect tear escaping his eye. 
+    Mildred and the young man stared at each other. The only sound was the gentle ticking of the grandfather clock in the corner. 
     
-    He took a sip. The taste...it was close. So close. But something was missing.  Disappointment threatened to engulf him, but then, from the corner of his eye, he spotted it – his grandmother's old music box, gathering dust. He wound it up, and a familiar, whimsical tune filled the air.  
+    "Well," Mildred finally said, her sense of adventure outweighing her confusion. "Don't let it get warm!"
     
-    And in that moment, as the music mingled with the flavors on his tongue, it clicked. The missing ingredient wasn't a fruit, or a spice, but a feeling – the pure, unadulterated joy of a memory rekindled. Dr. Pepper smiled. His search wasn't over, not yet. But for the first time in a long time, he knew he was on the right track. He had a taste of the past, and now, he had the melody to guide him towards the future. His grandmother's soda, he realized, wasn't just about the 23 flavors; it was about the feeling they evoked. It was about love, laughter, and the bittersweet symphony of life itself. And he, Dr. Bartholomew Pepper, would spend the rest of his days trying to bottle that feeling, one delicious drop 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. 
     
     ---Parsed Response (string)---
-    "Bartholomew \"Bart\" Pepper, PhD, was a man of routine. Every morning at precisely 8:02, he'd arrive at his cluttered office in the Department of Unusual Flavors, a forgotten annex of the local university. And every morning, he'd brew a pot of intensely aromatic, mysteriously flavored tea, a concoction so unique it could only be described as...well, \"Dr. Pepper.\"\n\nBart had spent years, decades even, trying to recreate the taste of a soda his grandmother used to give him. He could still recall its sweet, slightly tangy fizz, the way it danced on his tongue, a symphony of 23 distinct, yet utterly harmonious flavors. He'd dedicated his life to rediscovering its secret, to bottling that fleeting memory. \n\nHe wasn't a soda jerk, as some colleagues snickered. He was a flavor historian, an archaeologist of the palate. His office, a testament to his obsession, overflowed with bubbling beakers, ancient cookbooks, and walls plastered with flavor charts that would make a sommelier weep.\n\nOne rainy Tuesday, while poring over a faded manuscript titled \"Elixirs of the Old World,\" a sentence leapt out: \"And lo, the nectar of 23 fruits, when blended under the crimson moon...\" His heart hammered in his chest. Could this be it? The long-lost recipe?\n\nHe rushed to recreate the process, his hands trembling with anticipation. Hours melted away in a blur of bubbling potions and exotic spices. Finally, as the clock chimed midnight, he held a glass of his creation up to the moon, a single, perfect tear escaping his eye. \n\nHe took a sip. The taste...it was close. So close. But something was missing.  Disappointment threatened to engulf him, but then, from the corner of his eye, he spotted it – his grandmother's old music box, gathering dust. He wound it up, and a familiar, whimsical tune filled the air.  \n\nAnd in that moment, as the music mingled with the flavors on his tongue, it clicked. The missing ingredient wasn't a fruit, or a spice, but a feeling – the pure, unadulterated joy of a memory rekindled. Dr. Pepper smiled. His search wasn't over, not yet. But for the first time in a long time, he knew he was on the right track. He had a taste of the past, and now, he had the melody to guide him towards the future. His grandmother's soda, he realized, wasn't just about the 23 flavors; it was about the feeling they evoked. It was about love, laughter, and the bittersweet symphony of life itself. And he, Dr. Bartholomew Pepper, would spend the rest of his days trying to bottle that feeling, one delicious drop at a time. \n"
-

Teardown

PASSED test_gemini_streaming 0:00:07.050195

Setup

Call

Captured stdout call
LLM output from Gemini: Dr. Pepper never meant to be a soda. He dreamt of grand adventures, of exploring the Amazon rainforest, of discovering lost cities and ancient artifacts. He devoured books on archaeology and anthropology, filling his head with stories of daring explorers and their thrilling discoveries. 
+    "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. 
+
+"Nope," she sighed. "Mama wants a 'refreshing elixir,' whatever that means."
 
-His father, a simple soda jerk, just shook his head and chuckled. "Adventures are for storybooks," he'd say, wiping down the counter. "You'll find excitement enough right here, mixing up fizzy drinks and serving smiles."
+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."
 
-But Dr. Pepper refused to be bottled up. He experimented with flavors late at night, combining cherry and licorice, amaretto and cola, determined to create a taste that was as bold and adventurous as his dreams. His creations were...unique. Explosively so. One unfortunate concoction involving pineapple and pickle juice nearly blew the roof off the soda fountain. 
+Dottie raised a skeptical eyebrow. "23 flavors?  Sounds like a mess." 
 
-Then, one starlit night, he stumbled upon the perfect blend. 23 flavors, harmonizing in a symphony of sweet, spicy, and mysterious. He took a sip, and it was like drinking liquid adventure. 
+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." 
 
-The soda became a sensation. People lined up for blocks, eager to taste the drink that was rumored to transport you to faraway lands with a single sip. And while Dr. Pepper never did make it to the Amazon, he found his own adventure in every bottle, in the smiles of his customers, and in the knowledge that he had created something truly extraordinary. 
+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. 
 
-Even today, with each sip of Dr. Pepper, you can taste the echoes of his adventurous spirit, a reminder that sometimes, the greatest journeys begin with a single, delicious dream. 
+"Well?" Mr. Henderson asked.
 
-
Captured stderr call
[2024-10-23T17:51:50Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 7006ms. StopReason: Stop
+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. 
+
+
Captured stderr call
[2024-10-29T04:41:45Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 7322ms. StopReason: Stop
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Dr. Pepper never meant to be a soda. He dreamt of grand adventures, of exploring the Amazon rainforest, of discovering lost cities and ancient artifacts. He devoured books on archaeology and anthropology, filling his head with stories of daring explorers and their thrilling discoveries. 
+    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. 
+    
+    "Nope," she sighed. "Mama wants a 'refreshing elixir,' whatever that means."
+    
+    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."
     
-    His father, a simple soda jerk, just shook his head and chuckled. "Adventures are for storybooks," he'd say, wiping down the counter. "You'll find excitement enough right here, mixing up fizzy drinks and serving smiles."
+    Dottie raised a skeptical eyebrow. "23 flavors?  Sounds like a mess." 
     
-    But Dr. Pepper refused to be bottled up. He experimented with flavors late at night, combining cherry and licorice, amaretto and cola, determined to create a taste that was as bold and adventurous as his dreams. His creations were...unique. Explosively so. One unfortunate concoction involving pineapple and pickle juice nearly blew the roof off the soda fountain. 
+    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." 
     
-    Then, one starlit night, he stumbled upon the perfect blend. 23 flavors, harmonizing in a symphony of sweet, spicy, and mysterious. He took a sip, and it was like drinking liquid adventure. 
+    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. 
     
-    The soda became a sensation. People lined up for blocks, eager to taste the drink that was rumored to transport you to faraway lands with a single sip. And while Dr. Pepper never did make it to the Amazon, he found his own adventure in every bottle, in the smiles of his customers, and in the knowledge that he had created something truly extraordinary. 
+    "Well?" Mr. Henderson asked.
     
-    Even today, with each sip of Dr. Pepper, you can taste the echoes of his adventurous spirit, a reminder that sometimes, the greatest journeys begin with a single, delicious dream. 
+    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. 
     
     ---Parsed Response (string)---
-    "Dr. Pepper never meant to be a soda. He dreamt of grand adventures, of exploring the Amazon rainforest, of discovering lost cities and ancient artifacts. He devoured books on archaeology and anthropology, filling his head with stories of daring explorers and their thrilling discoveries. \n\nHis father, a simple soda jerk, just shook his head and chuckled. \"Adventures are for storybooks,\" he'd say, wiping down the counter. \"You'll find excitement enough right here, mixing up fizzy drinks and serving smiles.\"\n\nBut Dr. Pepper refused to be bottled up. He experimented with flavors late at night, combining cherry and licorice, amaretto and cola, determined to create a taste that was as bold and adventurous as his dreams. His creations were...unique. Explosively so. One unfortunate concoction involving pineapple and pickle juice nearly blew the roof off the soda fountain. \n\nThen, one starlit night, he stumbled upon the perfect blend. 23 flavors, harmonizing in a symphony of sweet, spicy, and mysterious. He took a sip, and it was like drinking liquid adventure. \n\nThe soda became a sensation. People lined up for blocks, eager to taste the drink that was rumored to transport you to faraway lands with a single sip. And while Dr. Pepper never did make it to the Amazon, he found his own adventure in every bottle, in the smiles of his customers, and in the knowledge that he had created something truly extraordinary. \n\nEven today, with each sip of Dr. Pepper, you can taste the echoes of his adventurous spirit, a reminder that sometimes, the greatest journeys begin with a single, delicious dream. \n"
-

Teardown

PASSED test_aws 0:00:02.573056

Setup

Call

Captured stderr call
[2024-10-23T17:51:50Z 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-23T17:51:50Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-23T17:51:52Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2401ms. StopReason: max_tokens
+    "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
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here is a short story about Mount Rainier:
-    
-    The Majestic Mountain
+    Here is a short story about the majestic Mount Rainier:
     
-    As the morning sun crept over the distant horizon, its golden rays illuminated the towering presence of Mount Rainier, standing tall and proud against the azure sky. This magnificent stratovolcano, with its glaciers and snow-capped peak, was a sight to behold, commanding the awe and reverence of all who laid eyes upon it.
+    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.
     
-    For the residents of
+    As the sun rises, the mountain's flanks are
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nThe Majestic Mountain\n\nAs the morning sun crept over the distant horizon, its golden rays illuminated the towering presence of Mount Rainier, standing tall and proud against the azure sky. This magnificent stratovolcano, with its glaciers and snow-capped peak, was a sight to behold, commanding the awe and reverence of all who laid eyes upon it.\n\nFor the residents of"
-

Teardown

PASSED test_openai_shorthand 0:00:09.879589

Setup

Call

Captured stderr call
[2024-10-23T17:52:02Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 9867ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] system: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time in the Pacific Northwest, there stood a majestic giant known as Mt. Rainier. Towering at over 14,000 feet, it was not just the tallest peak in Washington State, but a symbol of beauty and strength that inspired everyone around it.
+    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.
     
-    In the small town of Ashford, nestled at the foot of the mountain, lived a young girl named Lily. Since her earliest days, she had been captivated by the sight of Mt. Rainier. Its snow-capped summit sparkled in the sunlight during the day, and at sunset, it donned a cloak of purples and pinks, breathtaking and surreal.
+    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.
     
-    Every summer, Lily would eagerly await the school break when her father took her hiking up the mountain. The trails wound like ribbons through thick forests of lush green trees, and as they ascended, the air turned crisp and clean. Lily’s eyes would widen in wonder at the wildflowers blooming in a riot of colors, while her father's laughter mingled with the song of distant waterfalls.
+    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.
     
-    One warm afternoon, during a hike she'd especially anticipated, they chose a new trail that promised stunning views. With every step they took, the path steepened, and the chorus of nature seemed to grow louder. Birds chirped melodious tunes, and the breeze carried the sweet scent of pine.
+    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.
     
-    When they reached a breathtaking viewpoint, Lily stood in awe. Mt. Rainier loomed before her, its rugged peaks bathed in sunlight. It felt like touching the sky, as if they were standing at the feet of a sleeping giant. "Dad, it’s so tall!" she exclaimed, her eyes sparkling with excitement.
+    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.
     
-    Her father smiled and knelt beside her. "Yes, sweet pea, but remember that height is not just about how tall you can stand. It’s also about how far you can see and how many adventures you can have." 
+    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.
     
-    Lily absorbed his words. As she gazed at the mountain, she felt a sense of connection that ran deeper than she had ever imagined. In its towering presence, she saw not just a peak but a guardian of stories, dreams, and memories. It was a reminder that life was filled with mountains to climb—some steep, some gentle, but all worth the journey.
+    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.
     
-    That evening, as they made their way back down, the sun began to set behind Mt. Rainier, painting the sky in hues of fiery orange and calming indigo. With each step, Lily felt her heart swell with gratitude for the moments spent with her father, for the beauty of the mountain, and for the adventures yet to come.
+    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.
     
-    Years later, long after she had grown into a young woman, Lily returned to Ashford. She stood at the same viewpoint, now alone, but felt her father’s spirit beside her, as strong and comforting as the mountain itself. She smiled, remembering how he had taught her that true height came not only from reaching the summit but also from the love and joy shared along the way.
-    
-    And as the twilight kissed the peak of Mt. Rainier goodnight, Lily whispered a promise to the mountain: "I will continue to climb my own adventures, no matter how steep, as long as I carry your spirit with me." 
-    
-    The mountain stood tall and silent, its presence unwavering, ready to inspire generations to come.
+    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.
     ---Parsed Response (string)---
-    "Once upon a time in the Pacific Northwest, there stood a majestic giant known as Mt. Rainier. Towering at over 14,000 feet, it was not just the tallest peak in Washington State, but a symbol of beauty and strength that inspired everyone around it.\n\nIn the small town of Ashford, nestled at the foot of the mountain, lived a young girl named Lily. Since her earliest days, she had been captivated by the sight of Mt. Rainier. Its snow-capped summit sparkled in the sunlight during the day, and at sunset, it donned a cloak of purples and pinks, breathtaking and surreal.\n\nEvery summer, Lily would eagerly await the school break when her father took her hiking up the mountain. The trails wound like ribbons through thick forests of lush green trees, and as they ascended, the air turned crisp and clean. Lily’s eyes would widen in wonder at the wildflowers blooming in a riot of colors, while her father's laughter mingled with the song of distant waterfalls.\n\nOne warm afternoon, during a hike she'd especially anticipated, they chose a new trail that promised stunning views. With every step they took, the path steepened, and the chorus of nature seemed to grow louder. Birds chirped melodious tunes, and the breeze carried the sweet scent of pine.\n\nWhen they reached a breathtaking viewpoint, Lily stood in awe. Mt. Rainier loomed before her, its rugged peaks bathed in sunlight. It felt like touching the sky, as if they were standing at the feet of a sleeping giant. \"Dad, it’s so tall!\" she exclaimed, her eyes sparkling with excitement.\n\nHer father smiled and knelt beside her. \"Yes, sweet pea, but remember that height is not just about how tall you can stand. It’s also about how far you can see and how many adventures you can have.\" \n\nLily absorbed his words. As she gazed at the mountain, she felt a sense of connection that ran deeper than she had ever imagined. In its towering presence, she saw not just a peak but a guardian of stories, dreams, and memories. It was a reminder that life was filled with mountains to climb—some steep, some gentle, but all worth the journey.\n\nThat evening, as they made their way back down, the sun began to set behind Mt. Rainier, painting the sky in hues of fiery orange and calming indigo. With each step, Lily felt her heart swell with gratitude for the moments spent with her father, for the beauty of the mountain, and for the adventures yet to come.\n\nYears later, long after she had grown into a young woman, Lily returned to Ashford. She stood at the same viewpoint, now alone, but felt her father’s spirit beside her, as strong and comforting as the mountain itself. She smiled, remembering how he had taught her that true height came not only from reaching the summit but also from the love and joy shared along the way.\n\nAnd as the twilight kissed the peak of Mt. Rainier goodnight, Lily whispered a promise to the mountain: \"I will continue to climb my own adventures, no matter how steep, as long as I carry your spirit with me.\" \n\nThe mountain stood tall and silent, its presence unwavering, ready to inspire generations to come."
-

Teardown

PASSED test_openai_shorthand_streaming 0:00:10.982331

Setup

Call

Captured stderr call
[2024-10-23T17:52:13Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 10971ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] system: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time, in the lush and vibrant region of Washington State, there stood a magnificent giant known as Mt. Rainier. Towering at over 14,000 feet, it watched over the valley below like a wise old sentinel. Its snow-capped peak sparkled in the sunlight, casting a shadow that embraced the surrounding forests and meadows.
+    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.
     
-    On a quiet summer morning, a young girl named Elara set off on an adventure with her grandfather, who often spoke of the mountain as if it were a part of their family. They packed a picnic basket full of sandwiches, fresh berries, and her grandmother’s famous apple pie, and set off to a nearby stream, where the view of Mt. Rainier was breathtaking.
+    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.”
     
-    As they reached their destination, the sun shone brightly, illuminating the mountain's majestic beauty. "Look how tall it is, Grandpa!" Elara exclaimed, her eyes wide with awe. The mountain seemed to touch the sky, its rugged cliffs adorned with cascading glaciers like flowing garments.
+    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.
     
-    Her grandfather chuckled. "Many believe Mt. Rainier is a giant spirit, watching over us. Local legends say that every child who admires it will grow taller and stronger in heart, just like the mountain itself."
+    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. 
     
-    Intrigued, Elara decided to climb a small hill nearby to get a better view. As she ascended, she imagined each step was a journey towards a dream. Reaching the top, she stood triumphant, her arms stretched wide. "I feel bigger than the mountain!" she shouted, laughter echoing in the crisp air.
+    “Do you think we can make it to the top?” Mia asked, her voice barely above a whisper.
     
-    Grandpa joined her, brushing away wisps of gray hair from his forehead. "Ah, but remember, Elara, it isn’t only about height. It’s about having the strength to stand tall, even in the storms of life."
+    Clara giggled, brushing her hair out of her face. “Maybe not today, but one day we will.”
     
-    Elara nodded, taking in the lessons entwined with the mountain’s presence. They shared their picnic, each bite sweetened by the laughter and stories they exchanged. As the sun began to dip below the horizon, the mountain shimmered in hues of purple and gold, seemingly thanking them for the visit.
+    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. 
     
-    That day, Elara learned that while Mt. Rainier was indeed tall, standing out among the mountains, the true strength lay in appreciating its grandeur, its resilience, and the love that filled the spaces around it—like the love she felt for her grandfather.
+    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. 
     
-    From that day on, whenever Elara looked up at the mountain, she didn’t just see its peak; she saw the warmth of memories, the stories of her family, and the promise that with each new day, she too would stand tall, ready to embrace life’s adventures.
+    “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.
     ---Parsed Response (string)---
-    "Once upon a time, in the lush and vibrant region of Washington State, there stood a magnificent giant known as Mt. Rainier. Towering at over 14,000 feet, it watched over the valley below like a wise old sentinel. Its snow-capped peak sparkled in the sunlight, casting a shadow that embraced the surrounding forests and meadows.\n\nOn a quiet summer morning, a young girl named Elara set off on an adventure with her grandfather, who often spoke of the mountain as if it were a part of their family. They packed a picnic basket full of sandwiches, fresh berries, and her grandmother’s famous apple pie, and set off to a nearby stream, where the view of Mt. Rainier was breathtaking.\n\nAs they reached their destination, the sun shone brightly, illuminating the mountain's majestic beauty. \"Look how tall it is, Grandpa!\" Elara exclaimed, her eyes wide with awe. The mountain seemed to touch the sky, its rugged cliffs adorned with cascading glaciers like flowing garments.\n\nHer grandfather chuckled. \"Many believe Mt. Rainier is a giant spirit, watching over us. Local legends say that every child who admires it will grow taller and stronger in heart, just like the mountain itself.\"\n\nIntrigued, Elara decided to climb a small hill nearby to get a better view. As she ascended, she imagined each step was a journey towards a dream. Reaching the top, she stood triumphant, her arms stretched wide. \"I feel bigger than the mountain!\" she shouted, laughter echoing in the crisp air.\n\nGrandpa joined her, brushing away wisps of gray hair from his forehead. \"Ah, but remember, Elara, it isn’t only about height. It’s about having the strength to stand tall, even in the storms of life.\"\n\nElara nodded, taking in the lessons entwined with the mountain’s presence. They shared their picnic, each bite sweetened by the laughter and stories they exchanged. As the sun began to dip below the horizon, the mountain shimmered in hues of purple and gold, seemingly thanking them for the visit.\n\nThat day, Elara learned that while Mt. Rainier was indeed tall, standing out among the mountains, the true strength lay in appreciating its grandeur, its resilience, and the love that filled the spaces around it—like the love she felt for her grandfather.\n\nFrom that day on, whenever Elara looked up at the mountain, she didn’t just see its peak; she saw the warmth of memories, the stories of her family, and the promise that with each new day, she too would stand tall, ready to embrace life’s adventures."
-

Teardown

PASSED test_anthropic_shorthand 0:00:03.232734

Setup

Call

Captured stderr call
[2024-10-23T17:52:17Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 3225ms. StopReason: "end_turn"
+    "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"
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mount Rainier:
     
-    Standing tall and majestic, Mount Rainier towers over the Pacific Northwest landscape. At 14,411 feet (4,392 meters), it is the highest mountain in the Cascade Range and one of the most prominent peaks in the contiguous United States.
+    The Majestic Monolith
     
-    From a distance, the snow-capped summit of Rainier glistens in the sunlight, an awe-inspiring sight that has captivated countless visitors over the centuries. The mountain's sheer size and scale are truly breathtaking, evoking a sense of wonder and humility in all who behold it.
+    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.
     
-    For the adventurous hiker or climber, scaling the slopes of Rainier is a challenging but immensely rewarding experience. The journey is filled with stunning vistas, glacial landscapes, and a profound connection to the natural world. Each step brings the summit closer, testing one's physical and mental limits.
+    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.
     
-    Yet, even for those who never venture beyond the mountain's base, Rainier's presence is a constant and comforting reminder of the power and beauty of the natural world. It stands as a symbol of the Pacific Northwest, a guardian over the lush forests, pristine lakes, and vibrant communities that surround it.
+    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.
     
-    In the shadow of this towering giant, one cannot help but feel small, yet also part of something greater. Rainier's majesty inspires awe, reverence, and a deep appreciation for the enduring strength and resilience of the natural world.
+    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.
+    
+    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.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nStanding tall and majestic, Mount Rainier towers over the Pacific Northwest landscape. At 14,411 feet (4,392 meters), it is the highest mountain in the Cascade Range and one of the most prominent peaks in the contiguous United States.\n\nFrom a distance, the snow-capped summit of Rainier glistens in the sunlight, an awe-inspiring sight that has captivated countless visitors over the centuries. The mountain's sheer size and scale are truly breathtaking, evoking a sense of wonder and humility in all who behold it.\n\nFor the adventurous hiker or climber, scaling the slopes of Rainier is a challenging but immensely rewarding experience. The journey is filled with stunning vistas, glacial landscapes, and a profound connection to the natural world. Each step brings the summit closer, testing one's physical and mental limits.\n\nYet, even for those who never venture beyond the mountain's base, Rainier's presence is a constant and comforting reminder of the power and beauty of the natural world. It stands as a symbol of the Pacific Northwest, a guardian over the lush forests, pristine lakes, and vibrant communities that surround it.\n\nIn the shadow of this towering giant, one cannot help but feel small, yet also part of something greater. Rainier's majesty inspires awe, reverence, and a deep appreciation for the enduring strength and resilience of the natural world."
-

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:02.972404

Setup

Call

Captured stderr call
[2024-10-23T17:52:20Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2965ms. StopReason: "end_turn"
+    "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"
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mount Rainier:
     
-    The Majestic Presence of Mount Rainier
+    Reaching for the Heavens
+    
+    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 sun rose over the Pacific Northwest, its golden rays peeked out from behind the towering silhouette of Mount Rainier. Standing tall at 14,411 feet, the dormant volcano cast a powerful presence over the surrounding landscape.
+    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.
     
-    Sarah stood in awe, taking in the breathtaking sight. She had seen pictures of the mountain before, but nothing could have prepared her for the sheer scale and grandeur of seeing it in person. The snow-capped peak seemed to pierce the sky, a testament to the incredible forces that had shaped the land over millions of years.
+    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.
     
-    Capturing the moment with her camera, Sarah felt a sense of humility wash over her. This mountain, with its glaciers, forests, and alpine meadows, had witnessed the passage of time, surviving countless storms and natural upheavals. It was a living, breathing monument to the enduring power of nature.
+    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.
     
-    As she continued her hike, Sarah couldn't help but feel a deep connection to the mountain. Its towering presence served as a reminder of the beauty and wonder that still exists in the world, even in the face of the many challenges we face. It was a humbling and inspiring experience, one that would stay with her long after she had returned home.
+    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.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nThe Majestic Presence of Mount Rainier\n\nAs the sun rose over the Pacific Northwest, its golden rays peeked out from behind the towering silhouette of Mount Rainier. Standing tall at 14,411 feet, the dormant volcano cast a powerful presence over the surrounding landscape.\n\nSarah stood in awe, taking in the breathtaking sight. She had seen pictures of the mountain before, but nothing could have prepared her for the sheer scale and grandeur of seeing it in person. The snow-capped peak seemed to pierce the sky, a testament to the incredible forces that had shaped the land over millions of years.\n\nCapturing the moment with her camera, Sarah felt a sense of humility wash over her. This mountain, with its glaciers, forests, and alpine meadows, had witnessed the passage of time, surviving countless storms and natural upheavals. It was a living, breathing monument to the enduring power of nature.\n\nAs she continued her hike, Sarah couldn't help but feel a deep connection to the mountain. Its towering presence served as a reminder of the beauty and wonder that still exists in the world, even in the face of the many challenges we face. It was a humbling and inspiring experience, one that would stay with her long after she had returned home."
-

Teardown

PASSED test_fallback_to_shorthand 0:00:01.118485

Setup

Call

Captured stderr call
[2024-10-23T17:52:21Z INFO  baml_events] Function TestFallbackToShorthand:
+    "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:
     (1 other previous tries)
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 879ms. StopReason: stop
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 750ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say a haiku about Mt Rainier is tall.
     
     ---LLM REPLY---
-    In the sky so grand,  
-    Snow-capped peaks in silence stand,  
-    Mt. Rainier's proud.
+    Majestic peak stands,  
+    Whispers of the clouds surround,  
+    Nature's strength revealed.
     ---Parsed Response (string)---
-    "In the sky so grand,  \nSnow-capped peaks in silence stand,  \nMt. Rainier's proud."
-

Teardown

PASSED test_aws_streaming 0:00:02.405077

Setup

Call

Captured stderr call
[2024-10-23T17:52: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-23T17:52:21Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-23T17:52:23Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2393ms. StopReason: unknown
+    "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
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here is a short story about Mt. Rainier:
+    Here is a short story about Mount Rainier:
     
-    Towering Majesty
+    The Towering Sentinel
     
-    As the sun rose over the rugged Cascade Range, its golden rays illuminated the majestic peak of Mount Rainier. Standing at an imposing 14,411 feet, the dormant volcano commanded awe and reverence from all who laid eyes 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.
     
-    Emily gazed up at the snow-capped mountain, her breath catching in her throat. She ha
+    Standing at an impressive 14,411 feet, the dormant volcano commanded attention
     ---Parsed Response (string)---
-    "Here is a short story about Mt. Rainier:\n\nTowering Majesty\n\nAs the sun rose over the rugged Cascade Range, its golden rays illuminated the majestic peak of Mount Rainier. Standing at an imposing 14,411 feet, the dormant volcano commanded awe and reverence from all who laid eyes upon it.\n\nEmily gazed up at the snow-capped mountain, her breath catching in her throat. She ha"
-

Teardown

PASSED test_streaming 0:00:04.877348

Setup

Call

Captured stderr call
[2024-10-23T17:52:28Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 4866ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] system: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time, in a land of computer geniuses and coding wizards, there lived a young programmer named Lily. Lily had always been fascinated by the world of programming languages and dreamed of creating her very own one day.
+    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.
     
-    With determination and passion driving her, Lily set out on her journey to create a unique and innovative programming language. She spent countless hours experimenting with different syntaxes, keywords, and features, experimenting and refining her creation every step of the way. Along the way, she encountered challenges and setbacks, but she persevered, fueled by her love for coding and creativity.
+    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.
     
-    After many months of hard work, Lily finally unveiled her masterpiece - a programming language like no other. It was elegant, powerful, and incredibly versatile, allowing programmers to write code in ways they had never imagined before. The language quickly gained popularity and recognition in the programming community, earning Lily a reputation as a programming genius.
+    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.
     
-    But more than the recognition and success, what truly brought joy to Lily's heart was the sheer thrill of creating something new and innovative. Programming languages had always been her passion, and now she had the opportunity to share her love with the world.
+    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 continued to refine and improve her language, Lily knew that the possibilities were endless. With each new feature and update, she pushed the boundaries of what was possible in the world of programming languages, always striving to make coding more accessible, enjoyable, and fun for all.
+    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.
     
-    And so, Lily's journey as a programming language creator had only just begun, with a whole world of exciting possibilities and adventures awaiting her. For her, programming languages were not just a tool, but a canvas on which to paint her dreams and ideas, a world of endless creativity and imagination. And she knew that as long as she had her trusty keyboard and a spark of inspiration, there would be no limit to what she could achieve.
+    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.
     ---Parsed Response (string)---
-    "Once upon a time, in a land of computer geniuses and coding wizards, there lived a young programmer named Lily. Lily had always been fascinated by the world of programming languages and dreamed of creating her very own one day.\n\nWith determination and passion driving her, Lily set out on her journey to create a unique and innovative programming language. She spent countless hours experimenting with different syntaxes, keywords, and features, experimenting and refining her creation every step of the way. Along the way, she encountered challenges and setbacks, but she persevered, fueled by her love for coding and creativity.\n\nAfter many months of hard work, Lily finally unveiled her masterpiece - a programming language like no other. It was elegant, powerful, and incredibly versatile, allowing programmers to write code in ways they had never imagined before. The language quickly gained popularity and recognition in the programming community, earning Lily a reputation as a programming genius.\n\nBut more than the recognition and success, what truly brought joy to Lily's heart was the sheer thrill of creating something new and innovative. Programming languages had always been her passion, and now she had the opportunity to share her love with the world.\n\nAs she continued to refine and improve her language, Lily knew that the possibilities were endless. With each new feature and update, she pushed the boundaries of what was possible in the world of programming languages, always striving to make coding more accessible, enjoyable, and fun for all.\n\nAnd so, Lily's journey as a programming language creator had only just begun, with a whole world of exciting possibilities and adventures awaiting her. For her, programming languages were not just a tool, but a canvas on which to paint her dreams and ideas, a world of endless creativity and imagination. And she knew that as long as she had her trusty keyboard and a spark of inspiration, there would be no limit to what she could achieve."
-

Teardown

PASSED test_streaming_uniterated 0:00:03.721914

Setup

Call

Captured stderr call
[2024-10-23T17:52:32Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 3714ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] system: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Once there was a young girl named Lily who had always been captivated by the color blue. She found solace in the calming hue of the sky and the peaceful depths of the ocean. Blue, to her, represented tranquility and serenity.
+    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.
+    
+    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.
     
-    However, as Lily grew older, she began to associate the color blue with a deep sense of sadness. It all started with a heart-wrenching breakup that left her feeling inconsolable. The blue sky that used to bring her comfort now seemed to mock her with its vastness and emptiness.
+    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.
     
-    Everywhere she looked, she saw shades of blue that reminded her of the pain she felt inside. The color that once brought her joy now only served as a constant reminder of her sorrow. She couldn't escape it, as it seemed to be everywhere she turned.
+    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.
     
-    But as time passed, Lily began to realize that the color blue didn't have to be a symbol of sadness. Instead, she learned to embrace it as a reminder of the strength she gained through her struggles. With each passing day, the color blue began to lose its grip on her, and she found herself feeling lighter and more at peace.
+    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.
     
-    Lily discovered that the color blue was not just a representation of sadness, but also of healing and resilience. And as she moved forward with a renewed sense of hope, she found that the color blue no longer made her sad, but instead inspired her to keep pushing forward, no matter what life threw her way.
+    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.
     ---Parsed Response (string)---
-    "Once there was a young girl named Lily who had always been captivated by the color blue. She found solace in the calming hue of the sky and the peaceful depths of the ocean. Blue, to her, represented tranquility and serenity.\n\nHowever, as Lily grew older, she began to associate the color blue with a deep sense of sadness. It all started with a heart-wrenching breakup that left her feeling inconsolable. The blue sky that used to bring her comfort now seemed to mock her with its vastness and emptiness.\n\nEverywhere she looked, she saw shades of blue that reminded her of the pain she felt inside. The color that once brought her joy now only served as a constant reminder of her sorrow. She couldn't escape it, as it seemed to be everywhere she turned.\n\nBut as time passed, Lily began to realize that the color blue didn't have to be a symbol of sadness. Instead, she learned to embrace it as a reminder of the strength she gained through her struggles. With each passing day, the color blue began to lose its grip on her, and she found herself feeling lighter and more at peace.\n\nLily discovered that the color blue was not just a representation of sadness, but also of healing and resilience. And as she moved forward with a renewed sense of hope, she found that the color blue no longer made her sad, but instead inspired her to keep pushing forward, no matter what life threw her way."
-

Teardown

PASSED test_streaming_sync 0:00:03.709747

Setup

Call

Captured stderr call
[2024-10-23T17:52:35Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 3704ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] system: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time, there was a programmer named Lily who had always dreamed of creating her own programming language. She spent countless nights writing code, debugging, and testing different features.
+    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.
     
-    As she delved deeper into her project, she found the process of designing a new language to be incredibly exciting and rewarding. Each new feature she added felt like solving a complex puzzle, and she was thrilled to see her language come to life.
+    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.
     
-    Lily's language, which she named SparkleScript, had a sleek and user-friendly syntax that made it easy for programmers to quickly write efficient code. She incorporated innovative concepts and unique functionalities, making SparkleScript stand out from other programming languages.
+    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.
     
-    As word spread about SparkleScript, more and more developers began using it in their projects. Lily was amazed by the positive feedback she received from the programming community and was thrilled to see her creation making an impact in the tech world.
+    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.
     
-    Creating SparkleScript had been a labor of love for Lily, but the joy and excitement she felt throughout the process made it all worth it. She realized that programming languages were not just tools for developers, but also a form of creative expression that could bring joy and inspiration to others. From that day on, Lily continued to work on new projects, always eager to explore the endless possibilities of programming languages.
+    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.
     ---Parsed Response (string)---
-    "Once upon a time, there was a programmer named Lily who had always dreamed of creating her own programming language. She spent countless nights writing code, debugging, and testing different features.\n\nAs she delved deeper into her project, she found the process of designing a new language to be incredibly exciting and rewarding. Each new feature she added felt like solving a complex puzzle, and she was thrilled to see her language come to life.\n\nLily's language, which she named SparkleScript, had a sleek and user-friendly syntax that made it easy for programmers to quickly write efficient code. She incorporated innovative concepts and unique functionalities, making SparkleScript stand out from other programming languages.\n\nAs word spread about SparkleScript, more and more developers began using it in their projects. Lily was amazed by the positive feedback she received from the programming community and was thrilled to see her creation making an impact in the tech world.\n\nCreating SparkleScript had been a labor of love for Lily, but the joy and excitement she felt throughout the process made it all worth it. She realized that programming languages were not just tools for developers, but also a form of creative expression that could bring joy and inspiration to others. From that day on, Lily continued to work on new projects, always eager to explore the endless possibilities of programming languages."
-

Teardown

PASSED test_streaming_uniterated_sync 0:00:02.757098

Setup

Call

Captured stderr call
[2024-10-23T17:52:38Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 2751ms. StopReason: stop
+    "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
     ---PROMPT---
     [chat] system: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Once there was a young girl named Lily who had a special connection to the color blue. Every time she saw the color, a wave of sadness washed over her heart, leaving her feeling lost and alone.
+    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.
     
-    Lily tried to avoid anything blue, but it seemed to follow her everywhere. The sky, the ocean, even the clothes people wore all reminded her of the deep sorrow she felt inside.
+    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.
     
-    One day, while taking a walk in the park, Lily came across a beautiful blue butterfly fluttering around a patch of wildflowers. As she watched it dance in the sunlight, a sense of peace washed over 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.
     
-    She realized that the color blue didn't have to be a symbol of sadness. It could also be a reminder of the beauty and wonder in the world around her. From that day on, whenever Lily saw the color blue, she chose to focus on the joy and happiness it brought her, rather than the sadness it once represented.
+    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.
+    
+    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, 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.
     ---Parsed Response (string)---
-    "Once there was a young girl named Lily who had a special connection to the color blue. Every time she saw the color, a wave of sadness washed over her heart, leaving her feeling lost and alone.\n\nLily tried to avoid anything blue, but it seemed to follow her everywhere. The sky, the ocean, even the clothes people wore all reminded her of the deep sorrow she felt inside.\n\nOne day, while taking a walk in the park, Lily came across a beautiful blue butterfly fluttering around a patch of wildflowers. As she watched it dance in the sunlight, a sense of peace washed over her.\n\nShe realized that the color blue didn't have to be a symbol of sadness. It could also be a reminder of the beauty and wonder in the world around her. From that day on, whenever Lily saw the color blue, she chose to focus on the joy and happiness it brought her, rather than the sadness it once represented."
-

Teardown

PASSED test_streaming_claude 0:00:00.964816

Setup

Call

Captured stdout call
msgs:
+    "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:
 
 Rainier stands proud, high
-Glacier crown touches the clouds
-Northwest sentinel
+Ancient glacier-crowned giant
+Pierce the summer sky
 final:
 Here's a haiku about Mt. Rainier:
 
 Rainier stands proud, high
-Glacier crown touches the clouds
-Northwest sentinel
-
Captured stderr call
[2024-10-23T17:52:39Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 942ms. StopReason: "end_turn"
+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"
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
@@ -744,37 +996,95 @@
     Here's a haiku about Mt. Rainier:
     
     Rainier stands proud, high
-    Glacier crown touches the clouds
-    Northwest sentinel
+    Ancient glacier-crowned giant
+    Pierce the summer sky
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier:\n\nRainier stands proud, high\nGlacier crown touches the clouds\nNorthwest sentinel"
-

Teardown

FAILED test_streaming_gemini 0:00:01.190266

baml_py.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 {"threshold": String("BLOCK_LOW_AND_ABOVE"), "category": String("HARM_CATEGORY_HATE_SPEECH")}}, start_time: SystemTime { tv_sec: 1729705959, tv_nsec: 580233000 }, latency: 1.1818055s, message: "Failed to parse event: Error(\"missing field `content`\", line: 1, column: 359)", code: UnsupportedResponse(2) }

Setup

Call

>   ???
+    "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."
+
+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. 
+
+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. 
 
-tests/test_functions.py:464: 
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
-../../engine/language_client_python/python_src/baml_py/stream.py:81: in get_final_response
-    return self.__final_coerce((await asyncio.wrap_future(final)))
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+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. 
 
-x = 
+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.
 
->     lambda x: cast(str, x.cast_to(types, types)),
-      self.__ctx_manager.get(),
-    )
-E   baml_py.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 {"threshold": String("BLOCK_LOW_AND_ABOVE"), "category": String("HARM_CATEGORY_HATE_SPEECH")}}, start_time: SystemTime { tv_sec: 1729705959, tv_nsec: 580233000 }, latency: 1.1818055s, message: "Failed to parse event: Error(\"missing field `content`\", line: 1, column: 359)", code: UnsupportedResponse(2) }
+"Afternoon, ma'am," he drawled, tipping his hat. "Mind if I trouble you for some water? This heat's a killer."
 
-baml_client/async_client.py:4473: BamlClientHttpError
Captured stderr call
[2024-10-23T17:52:40Z WARN  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 1181ms
+"Don't you worry none, son," Dottie said, her voice a rusty hinge after days of silence. "Got plenty to spare."
+
+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. 
+
+
Captured stderr call
[2024-10-29T04:42:41Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 12969ms. StopReason: Stop
     ---PROMPT---
     [chat] user: Write a nice short story about Dr.Pepper
     
-    ---REQUEST OPTIONS---
-    safetySettings: {"threshold":"BLOCK_LOW_AND_ABOVE","category":"HARM_CATEGORY_HATE_SPEECH"}
-    ---ERROR (BadResponse 2)---
-    Failed to parse event: Error("missing field `content`", line: 1, column: 359)
-

Teardown

PASSED test_tracing_async_only 0:00:06.015227

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
-
Captured stderr call
[2024-10-23T17:52:41Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 535ms. StopReason: stop
+    ---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. 
+    
+    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."
+    
+    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. 
+    
+    ---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
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -789,16 +1099,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, JSON!",
+      "prop1": "Hello, I am a JSON blob",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, JSON!",
+      "prop1": "Hello, I am a JSON blob",
       "prop2": 540
     }
-[2024-10-23T17:52:42Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 689ms. StopReason: stop
+[2024-10-29T04:42:44Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 735ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -813,16 +1123,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-23T17:52:44Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 716ms. StopReason: stop
+[2024-10-29T04:42:45Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 623ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -837,16 +1147,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-23T17:52:46Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 789ms. StopReason: stop
+[2024-10-29T04:42:47Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 641ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -861,17 +1171,17 @@
     
     ---LLM REPLY---
     {
-      "prop1": "example",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "example",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
-

Teardown

PASSED test_tracing_sync 0:00:00.001272

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.379530

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:13.874848

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.455782

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.441900

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.275246

Setup

Call

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

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
     ---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.
     
@@ -892,33 +1202,33 @@
     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,
-        "height": 1.8288,
-        "hobbies": ["sports"]
+        "height": 1.83,
+        "hobbies": [
+          "sports"
+        ]
       }
     ]
-    ```
     ---Parsed Response (list<class Person>)---
     [
       {
         "name": "Harrison",
         "hair_color": "BLACK",
         "last_name": [],
-        "height": 1.8288,
+        "height": 1.83,
         "hobbies": [
           "SPORTS"
         ]
       }
     ]
-

Teardown

PASSED test_dynamic_class_output 0:00:00.992172

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_class_output 0:00:01.069244

Setup

Call

Captured stdout call
[]
 {"hair_color":"black"}
-
Captured stderr call
[2024-10-23T17:53:06Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 540ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:07Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 533ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -937,8 +1247,8 @@
     {
       "hair_color": "black"
     }
-[2024-10-23T17:53:07Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 440ms. StopReason: stop
+[2024-10-29T04:43:08Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 522ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -957,9 +1267,9 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:01.194362

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-23T17:53:08Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1185ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -987,7 +1297,7 @@
       },
       "address": null,
       "hairColor": "black",
-      "height": 6.0
+      "height": 6
     }
     ---Parsed Response (class DynamicOutput)---
     {
@@ -1000,7 +1310,7 @@
       "hair_color": "black",
       "height": 6.0
     }
-

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.918159

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
+

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.926012

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}
@@ -1077,8 +1387,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-23T17:53:09Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 909ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:10Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 917ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1109,7 +1419,7 @@
       },
       "hair_color": "black"
     }
-

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.769215

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.538827

Setup

Call

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

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.599661

Setup

Call

Captured stderr call
[2024-10-23T17:53:11Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1592ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Here is some input data:
     ----
     [{
         "new_key": "hi1",
-        "testKey": "myTest",
         "blah": {
             "nestedKey1": "nestedVal",
         },
+        "testKey": "myTest",
     }, {
-        "new_key": "hi",
+        "testKey": "myTest",
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "testKey": "myTest",
+        "new_key": "hi",
     }]
     ----
     
@@ -1214,8 +1524,8 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_types_new_enum 0:00:00.814028

Setup

Call

Captured stderr call
[2024-10-23T17:53:12Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 805ms. StopReason: stop
+

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
     ---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.
     
@@ -1245,8 +1555,8 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.505193

Setup

Call

Captured stderr call
[2024-10-23T17:53:13Z INFO  baml_events] Function ExtractHobby:
-    Client: GPT4 (gpt-4o-2024-08-06) - 497ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Answer with a JSON Array using this schema:
     [
@@ -1255,17 +1565,17 @@
     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"
+    [  
+      "Golfing",  
+      "MUSIC"  
     ]
     ---Parsed Response (list<enum Hobby>)---
     [
       "Golfing",
       "MUSIC"
     ]
-

Teardown

PASSED test_dynamic_literals 0:00:00.944891

Setup

Call

Captured stderr call
[2024-10-23T17:53:14Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 936ms. StopReason: stop
+

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
     ---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.
     
@@ -1280,6 +1590,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",
@@ -1287,6 +1598,7 @@
         "animalLiked": "GIRAFFE"
       }
     ]
+    ```
     ---Parsed Response (list<class Person>)---
     [
       {
@@ -1295,8 +1607,8 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_inputs_list 0:00:01.568338

Setup

Call

Captured stderr call
[2024-10-23T17:53:15Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1557ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Here is some input data:
     ----
@@ -1307,11 +1619,11 @@
             "nestedKey1": "nestedVal",
         },
     }, {
-        "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
         "testKey": "myTest",
+        "new_key": "hi",
     }]
     ----
     
@@ -1361,12 +1673,12 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_output_map 0:00:00.943212

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-23T17:53:16Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 936ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1383,7 +1695,6 @@
     {
       "hair_color": "black",
       "attributes": {
-        "height": "6 feet",
         "eye_color": "blue",
         "facial_hair": "beard"
       }
@@ -1392,20 +1703,19 @@
     {
       "hair_color": "black",
       "attributes": {
-        "height": "6 feet",
         "eye_color": "blue",
         "facial_hair": "beard"
       }
     }
-

Teardown

PASSED test_dynamic_output_union 0:00:02.932192

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}}
+

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-23T17:53:18Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1865ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:18Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1037ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1429,7 +1739,8 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard"
+        "facial_hair": "beard",
+        "age": "30 years old"
       },
       "height": {
         "feet": 6,
@@ -1441,15 +1752,16 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard"
+        "facial_hair": "beard",
+        "age": "30 years old"
       },
       "height": {
         "feet": 6.0,
         "inches": null
       }
     }
-[2024-10-23T17:53:19Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1046ms. StopReason: stop
+[2024-10-29T04:43:18Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 868ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1490,8 +1802,7 @@
         "meters": 1.8
       }
     }
-

Teardown

PASSED test_nested_class_streaming 0:00:03.201873

Setup

Call

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

Teardown

PASSED test_nested_class_streaming 0:00:03.953781

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}
@@ -1517,157 +1828,209 @@
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': '', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': None}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': '', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
-final  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-
Captured stderr call
[2024-10-23T17:53:22Z INFO  baml_events] Function FnOutputClassNested:
-    Client: Ollama (llama2) - 3189ms. StopReason: stop
+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
     ---PROMPT---
     [chat] system: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -1687,35 +2050,44 @@
     JSON:
     
     ---LLM REPLY---
-     Sure! Here is a made-up JSON blob that matches the schema you provided:
+     Sure! Here is a made-up JSON blob that matches the provided schema:
     
     {
-      "prop1": "Hello",
+      "prop1": " Foo ",
       "prop2": {
-        "prop1": "World",
-        "prop2": "JSON",
+        "prop1": "Bar",
+        "prop2": "Baz",
         "inner": {
           "prop2": 42,
-          "prop3": 3.14
-        }
-      }
+          "prop3": 3.14,
+        },
+      },
     }
     
-    Note that the schema specifies a string for `prop1`, an object for `prop2` with two properties `prop1` and `prop2`, and an inner object for `inner` with two properties `prop2` (which is an integer) and `prop3` (which is a floating-point number). I've satisfied these requirements by including the appropriate values in the JSON blob.
+    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.
     ---Parsed Response (class TestClassNested)---
     {
-      "prop1": "Hello",
+      "prop1": " Foo ",
       "prop2": {
-        "prop1": "World",
-        "prop2": "JSON",
+        "prop1": "Bar",
+        "prop2": "Baz",
         "inner": {
           "prop2": 42,
           "prop3": 3.14
         }
       }
     }
-

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.544467

Setup

Call

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

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
     ---PROMPT---
     [chat] system: What is the capital of England?
     
@@ -1723,8 +2095,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:00.970478

Setup

Call

Captured stderr call
[2024-10-23T17:53:24Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 966ms. StopReason: "STOP"
+

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"
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -1733,8 +2105,8 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.362261

Setup

Call

Captured stderr call
[2024-10-23T17:53:25Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 1356ms. StopReason: "STOP"
+

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"
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -1743,12 +2115,12 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_event_log_hook 0:00:01.287641

Setup

Call

Captured stdout call
Event log hook1: 
+

Teardown

PASSED test_event_log_hook 0:00:01.199435

Setup

Call

Captured stdout call
Event log hook1: 
 Event log event  BamlLogEvent {
     metadata: {
-        event_id: "5e70c857-b69e-489c-bd27-141e553260a1",
+        event_id: "b38599f1-ee50-4335-9f36-f49607a03916",
         parent_id: None,
-        root_event_id: "5e70c857-b69e-489c-bd27-141e553260a1"
+        root_event_id: "b38599f1-ee50-4335-9f36-f49607a03916"
     },
     prompt: "[
   {
@@ -1762,10 +2134,10 @@
 ]",
     raw_output: "["a", "b", "c"]",
     parsed_output: "["a", "b", "c"]",
-    start_time: "2024-10-23T17:53:25.869Z"
+    start_time: "2024-10-29T04:43:26.788Z"
 }
-
Captured stderr call
[2024-10-23T17:53:26Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 560ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:27Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 570ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: ["a", "b", "c"]
     
@@ -1773,7 +2145,7 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED test_aws_bedrock 0:00:02.756907

Setup

Call

Captured stdout call
streamed  'Here'
+

Teardown

PASSED test_aws_bedrock 0:00:02.036460

Setup

Call

Captured stdout call
streamed  'Here'
 streamed  'Here is'
 streamed  'Here is a'
 streamed  'Here is a short'
@@ -1784,127 +2156,130 @@
 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\nThe'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny st'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strol'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolle'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky'
-streamed  'e is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path'
-streamed  ' is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path,'
-streamed  'a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her'
-streamed  'rt story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes'
-streamed  'about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning'
-streamed  't lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the'
-streamed  'tning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the groun'
-streamed  ' in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for'
-streamed  '\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting'
-streamed  'park Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds'
-streamed  'ark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds.'
-streamed  'Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She'
-streamed  'n\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She love'
-streamed  'nny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the'
-streamed  'strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the out'
-streamed  'led along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors'
-streamed  ' along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors an'
-streamed  'g the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the'
-streamed  'rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense'
-streamed  'ky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of'
-streamed  'er eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery'
-streamed  'eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it'
-streamed  'nning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought'
-streamed  'ning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought.'
-streamed  'g the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As'
-streamed  'e ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she'
-streamed  'ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she n'
-streamed  'nd for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neare'
-streamed  'r interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the'
-streamed  'eresting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge'
-streamed  'sting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of'
-streamed  'g finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the'
-streamed  's. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods'
-streamed  '. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods,'
-streamed  'She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a'
-streamed  'he outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular'
-streamed  'doors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone'
-streamed  'nd the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught'
-streamed  'he sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her'
-streamed  'ense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye'
-streamed  'nse of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye.'
-streamed  ' of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It'
-streamed  'discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was'
-streamed  'very it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark'
-streamed  'y it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark an'
-streamed  ' brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and ob'
-streamed  'ught. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong'
-streamed  'ght. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong,'
-streamed  'As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with'
-streamed  'she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with ja'
-streamed  ' neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagge'
-streamed  ' the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges'
-streamed  'edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that'
-streamed  'f the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looke'
-streamed  'ods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost'
-streamed  'icular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial'
-streamed  'cular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial.'
-streamed  'one caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious'
-streamed  'ne caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious,'
-streamed  'aught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she'
-streamed  ' her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent'
-streamed  'eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down'
-streamed  '. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down an'
-streamed  's dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picke'
-streamed  'rk and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it'
-streamed  'and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up'
-streamed  'nd oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up,'
-streamed  'g, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning'
-streamed  'with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it'
-streamed  'jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over'
-streamed  'ged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in'
-streamed  'edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her'
-streamed  'that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands'
-streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
-streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
-streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
-streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
+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 final Here is a short story about lightning in a rock:
 
-The Spark Within
+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. 
 
-Jenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.
-
Captured stderr call
[2024-10-23T17:53:26Z 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-23T17:53:26Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-23T17:53:29Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2748ms. StopReason: unknown
+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
     ---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:
     
-    The Spark Within
+    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. 
     
-    Jenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.
+    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
     ---Parsed Response (string)---
-    "Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands."
-

Teardown

PASSED test_serialization_exception 0:00:00.555345

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...g required field: nonce2, raw_output=Hello there! How can I help you today?, prompt=[chat] system: Say "hello there".
+    "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".
 ) tblen=2>
-
Captured stderr call
[2024-10-23T17:53:30Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 548ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:30Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 468ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I help you today?
+    Hello there! How can I assist 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_stream_serialization_exception 0:00:00.661441

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
+

Teardown

PASSED test_stream_serialization_exception 0:00:00.563520

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
@@ -1919,8 +2294,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-23T17:53:30Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 652ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:30Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 556ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -1930,7 +2305,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.582524

Setup

Call

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

Teardown

PASSED test_stream2_serialization_exception 0:00:00.614864

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
@@ -1945,8 +2320,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-23T17:53:31Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 575ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:31Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 607ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -1957,8 +2332,8 @@
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
       - <root>: Missing required field: nonce3
-

Teardown

PASSED test_descriptions 0:00:02.206135

Setup

Call

Captured stderr call
[2024-10-23T17:53:33Z INFO  baml_events] Function SchemaDescriptions:
-    Client: GPT4o (gpt-4o-2024-08-06) - 2189ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Return a schema with this format:
     
@@ -2035,7 +2410,9 @@
         "hi"
       ],
       "blah": "blah",
-      "nested_attrs": "nested",
+      "nested_attrs": [
+        "nested"
+      ],
       "parens": "parens1",
       "other": "other"
     }
@@ -2061,47 +2438,10 @@
       "parens": "parens1",
       "other_group": "other"
     }
-

Teardown

FAILED test_caching 0:00:02.432727

AssertionError: Expected second call to be faster than first by a large margin.
-assert 1.2517509460449219 < 1.178415298461914

Setup

Call

@pytest.mark.asyncio
-    async def test_caching():
-        story_idea = """
-        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.
-    
-        Complications arise when a mysterious government agency takes notice of Alex's unique abilities. They offer Alex a chance to use their gift for "the greater good," hinting at applications in therapy, criminal rehabilitation, and even national security. Simultaneously, an underground resistance movement reaches out, warning Alex about the dangers of dream manipulation and the potential for mass control and exploitation. Caught between these opposing forces, Alex must navigate a complex web of ethical dilemmas. They grapple with questions of free will, the nature of consciousness, and the responsibility that comes with having power over people's minds. As the consequences of their actions spiral outward, affecting the lives of loved ones and strangers alike, Alex is forced to confront the true nature of their ability and decide how—or if—it should be used.
-    
-        The story explores themes of identity, the subconscious mind, the ethics of technology, and the power of imagination. It delves into the potential consequences of a world where our most private thoughts and experiences are no longer truly our own, and examines the fine line between helping others and manipulating them for personal gain or a perceived greater good. The narrative further expands on the societal implications of such abilities, questioning the moral boundaries of altering consciousness and the potential for abuse in a world where dreams can be commodified. It challenges the reader to consider the impact of technology on personal autonomy and the ethical responsibilities of those who wield such power.
-    
-        As Alex's journey unfolds, they encounter various individuals whose lives have been touched by their dream manipulations, each presenting a unique perspective on the ethical quandaries at hand. From a classmate who gains newfound confidence to a wealthy client who becomes addicted to the dreamscapes, the ripple effects of Alex's actions are profound and far-reaching. The government agency's interest in Alex's abilities raises questions about the potential for state control and surveillance, while the resistance movement highlights the dangers of unchecked power and the importance of safeguarding individual freedoms.
-    
-        Ultimately, Alex's story is one of self-discovery and moral reckoning, as they must decide whether to embrace their abilities for personal gain, align with the government's vision of a controlled utopia, or join the resistance in their fight for freedom and autonomy. The narrative invites readers to reflect on the nature of reality, the boundaries of human experience, and the ethical implications of a world where dreams are no longer private sanctuaries but shared and manipulated commodities. It also explores the psychological impact on Alex, who must deal with the burden of knowing the intimate fears and desires of others, and the isolation that comes from being unable to share their own dreams without altering them.
-    
-        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.
-    """
-        rand = random.randint(0, 26)
-        story_idea += " " + rand * "a"
-        start = time.time()
-        _ = await b.TestCaching(story_idea, "be funny")
-        duration = time.time() - start
-    
-        start = time.time()
-        _ = await b.TestCaching(story_idea, "be real")
-        duration2 = time.time() - start
-    
-        print("Duration no caching: ", duration)
-        print("Duration with caching: ", duration2)
-    
->       assert (
-            duration2 < duration
-        ), "Expected second call to be faster than first by a large margin."
-E       AssertionError: Expected second call to be faster than first by a large margin.
-E       assert 1.2517509460449219 < 1.178415298461914
-
-tests/test_functions.py:1148: AssertionError
Captured stdout call
Duration no caching:  1.178415298461914
-Duration with caching:  1.2517509460449219
-
Captured stderr call
[2024-10-23T17:53:34Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 1172ms. StopReason: "end_turn"
+

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"
     ---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.
@@ -2117,17 +2457,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.
-     aaaaaaaaaaaaaaaaa
+     aa
     user: be funny
     
     ---LLM REPLY---
-    Here's a 5-word summary with some humor:
+    Here's a silly 5-word summary:
     
-    Dream control: teenager's trippy nightmare.
+    Dreams for sale - what a steal!
     ---Parsed Response (string)---
-    "Here's a 5-word summary with some humor:\n\nDream control: teenager's trippy nightmare."
-[2024-10-23T17:53:36Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 1244ms. StopReason: "end_turn"
+    "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"
     ---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.
@@ -2143,17 +2483,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.
-     aaaaaaaaaaaaaaaaa
+     aa
     user: be real
     
     ---LLM REPLY---
-    Here are 5 words to describe the story concept:
+    Okay, let me try to summarize this in a more direct way:
     
-    Dreamscape commodification, ethical dilemmas, personal responsibility
+    Teenager with power to manipulate dreams struggles with ethics and consequences.
     ---Parsed Response (string)---
-    "Here are 5 words to describe the story concept:\n\nDreamscape commodification, ethical dilemmas, personal responsibility"
-

Teardown

PASSED test_arg_exceptions 0:00:01.053728

Setup

Call

Captured stderr call
[2024-10-23T17:53:36Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 175ms
+    "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
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -2175,8 +2515,8 @@
         }
     }
     
-[2024-10-23T17:53:36Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 197ms
+[2024-10-29T04:43:35Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 175ms
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -2198,34 +2538,34 @@
         }
     }
     
-[2024-10-23T17:53:37Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 661ms. StopReason: stop
+[2024-10-29T04:43:35Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 602ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I help you today?
+    Hello there! How can I assist 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.002795

Setup

Call

Teardown

PASSED test_baml_validation_error_format 0:00:00.493436

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.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
   - <root>: Missing required field: nonce
-  - <root>: Missing required field: nonce2, raw_output=Hello there! How can I help you today?, prompt=[chat] system: Say "hello there".
+  - <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-23T17:53:37Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 485ms. StopReason: stop
+
Captured stderr call
[2024-10-29T04:43:36Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 820ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I help you today?
+    Hello there! How can I assist 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_no_stream_big_integer 0:00:00.521592

Setup

Call

Captured stderr call
[2024-10-23T17:53:38Z INFO  baml_events] Function StreamOneBigNumber:
-    Client: GPT4 (gpt-4o-2024-08-06) - 516ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Respond with only an integer, no affirmations or prefixes or anything.
     The response should be parsable as a JSON number.
@@ -2235,11 +2575,11 @@
     Answer as a: int
     
     ---LLM REPLY---
-    202110102023
+    404404404404
     ---Parsed Response (int)---
-    202110102023
-

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.578772

Setup

Call

Captured stderr call
[2024-10-23T17:53:38Z INFO  baml_events] Function StreamBigNumbers:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 571ms. StopReason: stop
+    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
     ---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,
@@ -2254,15 +2594,15 @@
     ---LLM REPLY---
     {
       "a": 123456789012,
-      "b": 987654.321,
+      "b": 9876.54321
     }
     ---Parsed Response (class BigNumbers)---
     {
       "a": 123456789012,
-      "b": 987654.321
+      "b": 9876.54321
     }
-

Teardown

PASSED test_no_stream_compound_object 0:00:03.469311

Setup

Call

Captured stderr call
[2024-10-23T17:53:42Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 3460ms. StopReason: stop
+

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
     ---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.
@@ -2294,55 +2634,55 @@
     ---LLM REPLY---
     {
       "big": {
-        "a": 123456789012,
-        "b": 9876543210.123456789
+        "a": 100000000001,
+        "b": 1234567890.123456
       },
       "big_nums": [
         {
-          "a": 234567890123,
-          "b": 1234567890.12345
+          "a": 200000000002,
+          "b": 9876543210.9876543
         },
         {
-          "a": 345678901234,
-          "b": 98765.123456789
+          "a": 300000000003,
+          "b": 5432109876.5432109876
         },
         {
-          "a": 456789012345,
-          "b": 6789012345.12
+          "a": 400000000004,
+          "b": 9876543.76543219876
         }
       ],
       "another": {
-        "a": 567890123456,
-        "b": 123.1234
+        "a": 500000000005,
+        "b": 6789.0987654321
       }
     }
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
-        "a": 123456789012,
-        "b": 9876543210.123457
+        "a": 100000000001,
+        "b": 1234567890.123456
       },
       "big_nums": [
         {
-          "a": 234567890123,
-          "b": 1234567890.12345
+          "a": 200000000002,
+          "b": 9876543210.987654
         },
         {
-          "a": 345678901234,
-          "b": 98765.123456789
+          "a": 300000000003,
+          "b": 5432109876.543211
         },
         {
-          "a": 456789012345,
-          "b": 6789012345.12
+          "a": 400000000004,
+          "b": 9876543.7654322
         }
       ],
       "another": {
-        "a": 567890123456,
-        "b": 123.1234
+        "a": 500000000005,
+        "b": 6789.0987654321
       }
     }
-

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:02.656053

Setup

Call

Captured stderr call
[2024-10-23T17:53:44Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 2645ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system:     Please give me a friendly response before outputting json. And put the JSON
         into a fenced code block.
@@ -2370,31 +2710,31 @@
     }
     
     ---LLM REPLY---
-    Hey there! Sure, I can create that JSON for you with the specified constraints. Here it goes:
+    Hello! I'd be happy to help. Here is your JSON with properly formatted numbers:
     
     ```json
     {
       "big": {
         "a": 123456789012,
-        "b": 9876543210.123456789
+        "b": 12345.6789012345
       },
       "big_nums": [
         {
-          "a": 234567890123,
-          "b": 8765432109.12345678
+          "a": 210987654321,
+          "b": 98765.43210987654
         },
         {
           "a": 345678901234,
-          "b": 7654321012345.1234567
+          "b": 54321.0123456789
         },
         {
           "a": 456789012345,
-          "b": 654321012345678.123456
+          "b": 6789.123456789012
         }
       ],
       "another": {
         "a": 567890123456,
-        "b": 5432101234567890.12345
+        "b": 1234567890.0
       }
     }
     ```
@@ -2402,29 +2742,29 @@
     {
       "big": {
         "a": 123456789012,
-        "b": 9876543210.123457
+        "b": 12345.6789012345
       },
       "big_nums": [
         {
-          "a": 234567890123,
-          "b": 8765432109.123457
+          "a": 210987654321,
+          "b": 98765.43210987654
         },
         {
           "a": 345678901234,
-          "b": 7654321012345.123
+          "b": 54321.0123456789
         },
         {
           "a": 456789012345,
-          "b": 654321012345678.1
+          "b": 6789.123456789012
         }
       ],
       "another": {
         "a": 567890123456,
-        "b": 5432101234567890.0
+        "b": 1234567890.0
       }
     }
-

Teardown

PASSED test_differing_unions 0:00:01.980671

Setup

Call

Captured stderr call
[2024-10-23T17:53:46Z INFO  baml_events] Function DifferentiateUnions:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1971ms. StopReason: stop
+

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
     ---PROMPT---
     [chat] system: Create a data model that represents the latter of the two classes.
     
@@ -2437,7 +2777,7 @@
     }
     
     ---LLM REPLY---
-    Here is a JSON representation of a data model that fits the criteria you've provided. I'll use the second schema with the additional string value:
+    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:
     
     ```json
     {
@@ -2446,10 +2786,641 @@
     }
     ```
     
-    You can replace the `42` and `"example string"` with actual data that fits your context.
+    Feel free to modify the values to fit your specific use case!
     ---Parsed Response (class OriginalB)---
     {
       "value": 42,
       "value2": "example string"
     }
-

Teardown

tests/test_pydantic.py 3 0:00:00.002231

PASSED test_model_validate_success 0:00:00.001203

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000578

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000450

Setup

Call

Teardown

\ No newline at end of file +

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
+    ---PROMPT---
+    [chat] system: Return the next integer after 1.
+    
+    Answer as a: int
+    
+    ---LLM REPLY---
+    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
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+None
+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
+    ---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.
+    Answer in JSON using this schema:
+    {
+      title: string,
+      story_a: string,
+      story_b: string,
+    }
+    
+    ---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." 
+    }
+    ---Parsed Response (Error)---
+    Failed to coerce value: <root>: Failed while parsing required fields: missing=0, unparsed=2
+      - <root>: Failed to parse field story_a: <root>: Assertions failed.
+        - <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 diff --git a/integ-tests/ruby/baml_client/inlined.rb b/integ-tests/ruby/baml_client/inlined.rb index 8baffd86a..f157622a6 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.63.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.63.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.63.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.63.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.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", "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 73837cd53..3a8ddb6d3 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.63.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.63.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.63.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.63.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.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", "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 bacd22cb5..13b1013a1 100644 --- a/integ-tests/typescript/test-report.html +++ b/integ-tests/typescript/test-report.html @@ -257,4 +257,1718 @@ font-size: 1rem; padding: 0 0.5rem; } -

Test Report

Started: 2024-10-28 13:33:41
Suites (1)
1 passed
0 failed
0 pending
Tests (59)
1 passed
0 failed
58 pending
Integ tests > should work for all inputs
single bool
pending
0s
Integ tests > should work for all inputs
single string list
pending
0s
Integ tests > should work for all inputs
return literal union
pending
0s
Integ tests > should work for all inputs
single class
pending
0s
Integ tests > should work for all inputs
multiple classes
pending
0s
Integ tests > should work for all inputs
single enum list
pending
0s
Integ tests > should work for all inputs
single float
pending
0s
Integ tests > should work for all inputs
single int
pending
0s
Integ tests > should work for all inputs
single literal int
pending
0s
Integ tests > should work for all inputs
single literal bool
pending
0s
Integ tests > should work for all inputs
single literal string
pending
0s
Integ tests > should work for all inputs
single class with literal prop
pending
0s
Integ tests > should work for all inputs
single class with literal union prop
pending
0s
Integ tests > should work for all inputs
single optional string
pending
0s
Integ tests > should work for all inputs
single map string to string
pending
0s
Integ tests > should work for all inputs
single map string to class
pending
0s
Integ tests > should work for all inputs
single map string to map
pending
0s
Integ tests
should work for all outputs
pending
0s
Integ tests
works with retries1
pending
0s
Integ tests
works with retries2
pending
0s
Integ tests
works with fallbacks
pending
0s
Integ tests
should work with image from url
pending
0s
Integ tests
should work with image from base 64
pending
0s
Integ tests
should work with audio base 64
pending
0s
Integ tests
should work with audio from url
pending
0s
Integ tests
should support streaming in OpenAI
pending
0s
Integ tests
should support streaming in Gemini
pending
0s
Integ tests
should support AWS
pending
0s
Integ tests
should support streaming in AWS
pending
0s
Integ tests
should support OpenAI shorthand
pending
0s
Integ tests
should support OpenAI shorthand streaming
pending
0s
Integ tests
should support anthropic shorthand
pending
0s
Integ tests
should support anthropic shorthand streaming
pending
0s
Integ tests
should support streaming without iterating
pending
0s
Integ tests
should support streaming in Claude
pending
0s
Integ tests
should support vertex
pending
0s
Integ tests
supports tracing sync
pending
0s
Integ tests
supports tracing async
pending
0s
Integ tests
should work with dynamic types single
pending
0s
Integ tests
should work with dynamic types enum
pending
0s
Integ tests
should work with dynamic literals
pending
0s
Integ tests
should work with dynamic types class
pending
0s
Integ tests
should work with dynamic inputs class
pending
0s
Integ tests
should work with dynamic inputs list
pending
0s
Integ tests
should work with dynamic output map
pending
0s
Integ tests
should work with dynamic output union
pending
0s
Integ tests
should work with nested classes
pending
0s
Integ tests
should work with dynamic client
pending
0s
Integ tests
should work with 'onLogEvent'
pending
0s
Integ tests
should work with a sync client
pending
0s
Integ tests
should raise an error when appropriate
pending
0s
Integ tests
should raise a BAMLValidationError
pending
0s
Integ tests
should reset environment variables correctly
pending
0s
Integ tests
should use aliases when serializing input objects - classes
pending
0s
Integ tests
should use aliases when serializing, but still have original keys in jinja
pending
0s
Integ tests
should use aliases when serializing input objects - enums
pending
0s
Integ tests
should use aliases when serializing input objects - lists
pending
0s
Integ tests
constraints: should handle checks in return types
pending
0s
Integ tests
constraints: should handle checks in returned unions
passed
1.05s
\ No newline at end of file +

Test Report

Started: 2024-10-28 21:38:54
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.353s
Integ tests > should work for all inputs
single string list
passed
0.878s
Integ tests > should work for all inputs
return literal union
passed
0.474s
Integ tests > should work for all inputs
single class
passed
0.428s
Integ tests > should work for all inputs
multiple classes
passed
0.572s
Integ tests > should work for all inputs
single enum list
passed
0.479s
Integ tests > should work for all inputs
single float
passed
0.523s
Integ tests > should work for all inputs
single int
passed
0.522s
Integ tests > should work for all inputs
single literal int
passed
0.338s
Integ tests > should work for all inputs
single literal bool
passed
1.445s
Integ tests > should work for all inputs
single literal string
passed
0.559s
Integ tests > should work for all inputs
single class with literal prop
passed
0.447s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.37s
Integ tests > should work for all inputs
single optional string
passed
0.504s
Integ tests > should work for all inputs
single map string to string
passed
0.564s
Integ tests > should work for all inputs
single map string to class
passed
0.738s
Integ tests > should work for all inputs
single map string to map
passed
0.858s
Integ tests
should work for all outputs
passed
6.242s
Integ tests
works with retries1
passed
1.078s
Integ tests
works with retries2
passed
2.214s
Integ tests
works with fallbacks
passed
2.033s
Integ tests
should work with image from url
passed
1.097s
Integ tests
should work with image from base 64
passed
1.071s
Integ tests
should work with audio base 64
passed
1.035s
Integ tests
should work with audio from url
passed
1.304s
Integ tests
should support streaming in OpenAI
passed
3.351s
Integ tests
should support streaming in Gemini
passed
8.58s
Integ tests
should support AWS
passed
2.024s
Integ tests
should support streaming in AWS
passed
2.234s
Integ tests
should support OpenAI shorthand
passed
8.647s
Integ tests
should support OpenAI shorthand streaming
passed
7.154s
Integ tests
should support anthropic shorthand
passed
3.428s
Integ tests
should support anthropic shorthand streaming
passed
2.289s
Integ tests
should support streaming without iterating
passed
2.336s
Integ tests
should support streaming in Claude
passed
0.917s
Integ tests
should support vertex
passed
9.162s
Integ tests
supports tracing sync
passed
0.022s
Integ tests
supports tracing async
passed
4.422s
Integ tests
should work with dynamic types single
passed
1.125s
Integ tests
should work with dynamic types enum
passed
1.274s
Integ tests
should work with dynamic literals
passed
0.969s
Integ tests
should work with dynamic types class
passed
0.908s
Integ tests
should work with dynamic inputs class
passed
0.569s
Integ tests
should work with dynamic inputs list
passed
0.988s
Integ tests
should work with dynamic output map
passed
0.861s
Integ tests
should work with dynamic output union
passed
2.332s
Integ tests
should work with nested classes
failed
10.5s
Error: expect(received).toEqual(expected) // deep equality
+
+- Expected  - 1
++ Received  + 1
+
+  Object {
+    "prop1": "value_of_prop1",
+    "prop2": Object {
+      "inner": Object {
+        "prop2": 42,
+-       "prop3": 3.14,
++       "prop3": null,
+      },
+      "prop1": "value_of_prop1",
+      "prop2": "value_of_prop2",
+    },
+  }
+    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.471s
Integ tests
should work with 'onLogEvent'
passed
2.152s
Integ tests
should work with a sync client
passed
0.546s
Integ tests
should raise an error when appropriate
passed
0.855s
Integ tests
should raise a BAMLValidationError
passed
0.689s
Integ tests
should reset environment variables correctly
passed
1.123s
Integ tests
should use aliases when serializing input objects - classes
passed
1.228s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
1.402s
Integ tests
should use aliases when serializing input objects - enums
passed
0.688s
Integ tests
should use aliases when serializing input objects - lists
passed
0.468s
Integ tests
constraints: should handle checks in return types
passed
0.811s
Integ tests
constraints: should handle checks in returned unions
passed
0.799s
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: 1730176751, tv_nsec: 818171000 }, latency: 167.411583ms, 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: 1730176753, tv_nsec: 988612000 }, latency: 246.62625ms, 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 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 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 /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 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: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":0,"started":30,"finalized":30,"submitted":30,"sent":30,"done":30}
    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: { height: '6 feet', 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' },
+  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: 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: 'value_', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg { prop1: 'value_of_prop1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  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: 'value_of_prop1',
+  prop2: { prop1: 'value_of', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_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: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: '', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: { prop1: 'value_of_prop1', prop2: 'value_of_prop2', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:574:15)
msg {
+  prop1: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: 'value_of_prop1',
+  prop2: {
+    prop1: 'value_of_prop1',
+    prop2: 'value_of_prop2',
+    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: '5557acee-3985-4c90-b138-f2a9f804f204',
+    rootEventId: '5557acee-3985-4c90-b138-f2a9f804f204'
+  },
+  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-29T04:40:35.699Z'
+}
    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: 'e4ec9ab5-421c-4bc8-8e28-c8e856bd6063',
+    rootEventId: 'e4ec9ab5-421c-4bc8-8e28-c8e856bd6063'
+  },
+  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-29T04:40:36.243Z'
+}
    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: 1730176838, tv_nsec: 240750000 }, latency: 147.296792ms, 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 03bd2c17c..55f611781 100644 --- a/tools/versions/engine.cfg +++ b/tools/versions/engine.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.63.0 +current_version = 0.64.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 9875eb0fa..78ccc4df8 100644 --- a/tools/versions/integ-tests.cfg +++ b/tools/versions/integ-tests.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.63.0 +current_version = 0.64.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 1279db970..0fa3c9f6a 100644 --- a/tools/versions/python.cfg +++ b/tools/versions/python.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.63.0 +current_version = 0.64.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 782dcb661..278826ac4 100644 --- a/tools/versions/ruby.cfg +++ b/tools/versions/ruby.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.63.0 +current_version = 0.64.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 e34647f1a..e6ee25c7a 100644 --- a/tools/versions/typescript.cfg +++ b/tools/versions/typescript.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.63.0 +current_version = 0.64.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 2c7268382..e9323d571 100644 --- a/tools/versions/vscode.cfg +++ b/tools/versions/vscode.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.63.0 +current_version = 0.64.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 ddf7ca608..a790459c7 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.63.0", + "version": "0.64.0", "publisher": "Boundary", "repository": "https://github.com/BoundaryML/baml", "homepage": "https://www.boundaryml.com",