From 52040dcb4bf292c4acd36a0ffb3c5eff63fa1cc5 Mon Sep 17 00:00:00 2001 From: hellovai Date: Fri, 13 Dec 2024 06:49:19 -0800 Subject: [PATCH] chore: Bump version to 0.70.3 (#1240) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump version to 0.70.3\n\n❌ Typescript integ tests\n❌ Python integ tests\n\nGenerated by bump-version script. --- CHANGELOG.md | 2 +- engine/Cargo.lock | 32 +- engine/Cargo.toml | 2 +- engine/language_client_python/pyproject.toml | 2 +- engine/language_client_ruby/baml.gemspec | 2 +- .../language_client_typescript/package.json | 2 +- integ-tests/baml_src/generators.baml | 8 +- integ-tests/python/baml_client/inlinedbaml.py | 2 +- integ-tests/python/report.html | 824 ++++---- integ-tests/ruby/baml_client/inlined.rb | 2 +- .../typescript/baml_client/inlinedbaml.ts | 2 +- integ-tests/typescript/test-report.html | 1868 ++++++----------- tools/bump-version | 22 +- tools/versions/engine.cfg | 2 +- tools/versions/integ-tests.cfg | 2 +- tools/versions/python.cfg | 2 +- tools/versions/ruby.cfg | 2 +- tools/versions/typescript.cfg | 2 +- tools/versions/vscode.cfg | 2 +- typescript/vscode-ext/packages/package.json | 2 +- 20 files changed, 1095 insertions(+), 1689 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3c2959e1..56053e6d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. -## [0.70.2](https://github.com/boundaryml/baml/compare/0.70.1..0.70.2) - 2024-12-13 +## [0.70.3](https://github.com/boundaryml/baml/compare/0.70.1..0.70.3) - 2024-12-13 ### Bug Fixes diff --git a/engine/Cargo.lock b/engine/Cargo.lock index 7594e2ee8..7fb147b24 100644 --- a/engine/Cargo.lock +++ b/engine/Cargo.lock @@ -785,7 +785,7 @@ dependencies = [ [[package]] name = "baml-cli" -version = "0.70.2" +version = "0.70.3" dependencies = [ "ambassador", "anyhow", @@ -873,7 +873,7 @@ dependencies = [ [[package]] name = "baml-lib" -version = "0.70.2" +version = "0.70.3" dependencies = [ "base64 0.13.1", "dissimilar", @@ -913,7 +913,7 @@ dependencies = [ [[package]] name = "baml-runtime" -version = "0.70.2" +version = "0.70.3" dependencies = [ "ambassador", "anyhow", @@ -1010,7 +1010,7 @@ dependencies = [ [[package]] name = "baml-schema-build" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "baml-runtime", @@ -1048,7 +1048,7 @@ dependencies = [ [[package]] name = "baml-types" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "clap", @@ -1177,7 +1177,7 @@ dependencies = [ [[package]] name = "bstd" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "assert_cmd", @@ -2571,7 +2571,7 @@ dependencies = [ [[package]] name = "internal-baml-codegen" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "askama", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "internal-baml-core" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "baml-types", @@ -2633,7 +2633,7 @@ dependencies = [ [[package]] name = "internal-baml-diagnostics" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "colored", @@ -2646,7 +2646,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "askama", @@ -2667,7 +2667,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja-types" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "askama", @@ -2686,7 +2686,7 @@ dependencies = [ [[package]] name = "internal-baml-parser-database" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "baml-types", @@ -2711,7 +2711,7 @@ dependencies = [ [[package]] name = "internal-baml-prompt-parser" -version = "0.70.2" +version = "0.70.3" dependencies = [ "internal-baml-diagnostics", "internal-baml-schema-ast", @@ -2723,7 +2723,7 @@ dependencies = [ [[package]] name = "internal-baml-schema-ast" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "baml-types", @@ -2742,7 +2742,7 @@ dependencies = [ [[package]] name = "internal-llm-client" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "baml-types", @@ -2840,7 +2840,7 @@ checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" [[package]] name = "jsonish" -version = "0.70.2" +version = "0.70.3" dependencies = [ "anyhow", "assert-json-diff", diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 8dc32a383..0421de70b 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -95,7 +95,7 @@ internal-baml-jinja = { path = "baml-lib/jinja" } internal-baml-schema-ast = { path = "baml-lib/schema-ast" } [workspace.package] -version = "0.70.2" +version = "0.70.3" authors = ["Boundary "] description = "BAML Toolchain" diff --git a/engine/language_client_python/pyproject.toml b/engine/language_client_python/pyproject.toml index 1656c7004..b345ceb19 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.70.2" +version = "0.70.3" 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 b5ca4262f..9c651416d 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.70.2" + spec.version = "0.70.3" 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 1a5870973..379054efc 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -1,6 +1,6 @@ { "name": "@boundaryml/baml", - "version": "0.70.2", + "version": "0.70.3", "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 d666fd8a9..656982e23 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.70.2" + version "0.70.3" } generator lang_typescript { output_type typescript output_dir "../typescript" - version "0.70.2" + version "0.70.3" } generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" - version "0.70.2" + version "0.70.3" } // generator openapi { // output_type rest/openapi // output_dir "../openapi" -// version "0.70.2" +// version "0.70.3" // on_generate "rm .gitignore" // } diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index 0e46ddfcb..b5816bd6d 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.70.2\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.70.2\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.70.2\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.70.2\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.70.3\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.70.3\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.70.3\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.70.3\"\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 c1bd0bb53..a4a427278 100644 --- a/integ-tests/python/report.html +++ b/integ-tests/python/report.html @@ -3,123 +3,115 @@
Test Report

Summary

102
1 failed 101 passed

Tests

tests/test_functions.py 196 0:03:33.568695

PASSED test_env_vars_reset 0:00:01.820627

Setup

Call

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

Summary

102
1 failed 101 passed

Tests

tests/test_functions.py 196 0:03:21.336106

PASSED test_env_vars_reset 0:00:01.639073

Setup

Call

Captured stdout call
Context depth is greater than 0!
 Except but ending trace!
 Context depth is greater than 0!
-

Teardown

PASSED test_sync 0:00:00.472794

Setup

Call

Captured stdout call
got response key
+

Teardown

PASSED test_sync 0:00:00.379372

Setup

Call

Captured stdout call
got response key
 true
 52
-

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.618615

Setup

Call

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.714492

Setup

Call

Teardown

PASSED TestAllInputs::test_return_literal_union 0:00:00.299170

Setup

Call

Teardown

PASSED TestAllInputs::test_constraints 0:00:00.632056

Setup

Call

Teardown

PASSED TestAllInputs::test_constraint_union_variant_checking 0:00:00.716871

Setup

Call

Teardown

PASSED TestAllInputs::test_return_malformed_constraint 0:00:00.684505

Setup

Call

Teardown

PASSED TestAllInputs::test_use_malformed_constraint 0:00:00.001355

Setup

Call

Captured stderr call
[2024-12-13T14:21:47Z ERROR baml_runtime::tracing]   Error: a: Failed to evaluate assert: Error evaluating constraint: unknown method: object has no method named length (in <string>:1)
+

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.357382

Setup

Call

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.402475

Setup

Call

Teardown

PASSED TestAllInputs::test_return_literal_union 0:00:00.295483

Setup

Call

Teardown

PASSED TestAllInputs::test_constraints 0:00:00.888322

Setup

Call

Teardown

PASSED TestAllInputs::test_constraint_union_variant_checking 0:00:00.685340

Setup

Call

Teardown

PASSED TestAllInputs::test_return_malformed_constraint 0:00:00.518604

Setup

Call

Teardown

PASSED TestAllInputs::test_use_malformed_constraint 0:00:00.001351

Setup

Call

Captured stderr call
[2024-12-13T14:43:59Z ERROR baml_runtime::tracing]   Error: a: Failed to evaluate assert: Error evaluating constraint: unknown method: object has no method named length (in <string>:1)
     
-

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.522007

Setup

Call

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.524706

Setup

Call

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.360591

Setup

Call

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.443447

Setup

Call

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.313055

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_int 0:00:00.452723

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_bool 0:00:00.380532

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_string 0:00:00.323265

Setup

Call

Teardown

PASSED TestAllInputs::test_class_with_literal_prop 0:00:00.497995

Setup

Call

Teardown

PASSED TestAllInputs::test_literal_classs_with_literal_union_prop 0:00:00.643937

Setup

Call

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.475970

Setup

Call

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.445885

Setup

Call

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.419887

Setup

Call

Teardown

PASSED TestAllInputs::test_enum_key_in_map 0:00:01.046794

Setup

Call

Teardown

PASSED TestAllInputs::test_literal_string_union_key_in_map 0:00:00.735357

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_string_key_in_map 0:00:00.380765

Setup

Call

Teardown

PASSED test_should_work_for_all_outputs 0:00:04.608649

Setup

Call

Teardown

PASSED test_should_work_with_image_url 0:00:01.381997

Setup

Call

Teardown

PASSED test_should_work_with_image_list 0:00:01.422734

Setup

Call

Teardown

PASSED test_should_work_with_vertex 0:00:09.970103

Setup

Call

Teardown

PASSED test_should_work_with_image_base64 0:00:01.379067

Setup

Call

Teardown

PASSED test_should_work_with_audio_base64 0:00:01.057976

Setup

Call

Teardown

PASSED test_should_work_with_audio_url 0:00:01.101493

Setup

Call

Teardown

PASSED test_works_with_retries2 0:00:02.139693

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: 1734099738, tv_nsec: 399323000 }, latency: 236.591084ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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 }
-

Teardown

PASSED test_works_with_fallbacks 0:00:01.990924

Setup

Call

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.036548

Setup

Call

Teardown

PASSED test_claude 0:00:01.445531

Setup

Call

Teardown

PASSED test_gemini 0:00:09.097367

Setup

Call

Captured stdout call
LLM output from Gemini: Bartholomew "Bart" Pepper was, by all accounts, a strange man. He spoke in riddles, tinkered with contraptions that defied logic, and smelled perpetually of licorice and burnt sugar.  His small shop, nestled in a forgotten corner of a bustling city, was a testament to his eccentricities.  Bells jingled incessantly from the ceiling, gears spun on walls adorned with cryptic diagrams, and the air crackled with a peculiar energy. 
+

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.543946

Setup

Call

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.497059

Setup

Call

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.334611

Setup

Call

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.496148

Setup

Call

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.468120

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_int 0:00:00.359473

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_bool 0:00:00.469610

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_string 0:00:00.384702

Setup

Call

Teardown

PASSED TestAllInputs::test_class_with_literal_prop 0:00:02.507968

Setup

Call

Teardown

PASSED TestAllInputs::test_literal_classs_with_literal_union_prop 0:00:00.842896

Setup

Call

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.430881

Setup

Call

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.520728

Setup

Call

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.645153

Setup

Call

Teardown

PASSED TestAllInputs::test_enum_key_in_map 0:00:00.958619

Setup

Call

Teardown

PASSED TestAllInputs::test_literal_string_union_key_in_map 0:00:00.829144

Setup

Call

Teardown

PASSED TestAllInputs::test_single_literal_string_key_in_map 0:00:00.857554

Setup

Call

Teardown

PASSED test_should_work_for_all_outputs 0:00:04.571512

Setup

Call

Teardown

PASSED test_should_work_with_image_url 0:00:01.207045

Setup

Call

Teardown

PASSED test_should_work_with_image_list 0:00:01.502978

Setup

Call

Teardown

PASSED test_should_work_with_vertex 0:00:09.456202

Setup

Call

Teardown

PASSED test_should_work_with_image_base64 0:00:01.368518

Setup

Call

Teardown

PASSED test_should_work_with_audio_base64 0:00:01.270973

Setup

Call

Teardown

PASSED test_should_work_with_audio_url 0:00:01.240454

Setup

Call

Teardown

PASSED test_works_with_retries2 0:00:02.300726

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: 1734101073, tv_nsec: 153707000 }, latency: 219.235041ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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 }
+

Teardown

PASSED test_works_with_fallbacks 0:00:01.609568

Setup

Call

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.037850

Setup

Call

Teardown

PASSED test_claude 0:00:01.024236

Setup

Call

Teardown

PASSED test_gemini 0:00:07.287290

Setup

Call

Captured stdout call
LLM output from Gemini: Dr. Pete Pepper wasn't a medical doctor, despite what his name tag proclaimed. He was, in fact, a humble, if slightly eccentric, soda jerk at a vintage soda fountain in a town that time seemed to have forgotten. His concoctions, however, were legendary. 
 
-Bart claimed he was a doctor, not of the body, but of the soul.  His medicine? A concoction he called "Dr. Pepper," a bubbling, fizzing elixir brewed in giant copper kettles that hissed and groaned with ancient secrets. 
+One sweltering afternoon, a young woman named Lily slumped onto a stool, her face etched with worry. "Dr. Pete," she sighed, "I think my dream is fading faster than a scoop of ice cream on a summer day."
 
-One dreary afternoon, a young woman named Amelia wandered into his shop. Burdened with grief over a recent loss, she felt drawn to its warmth and the strange, comforting aroma.  Bart, with eyes that held the wisdom of a thousand lifetimes,  simply smiled and handed her a steaming mug of his concoction.
+Dr. Pete, a twinkle in his eye, pulled out a glass taller than usual. "Don't you worry, my dear. Every dream deserves a fighting chance." He poured in a secret blend of syrups – a dash of hope, a splash of courage, a sprinkle of resilience. Then, with a flourish, he added the final touch – a miniature paper umbrella.
 
-Amelia took a tentative sip. The taste was like nothing she'd ever experienced: a kaleidoscope of flavors, sweet and tangy, with a hint of something indescribable.  As she drank, a warmth spread through her, melting away the chill in her heart.  She looked up, eyes wide with wonder.
+Lily took a tentative sip. Her eyes widened. The concoction danced on her tongue, a melody of unexpected flavors, both familiar and surprising. It was sweet, yet spicy, fizzy, yet comforting – an explosion of pure possibility. 
 
-"What is this magic?" she breathed.
+"Wow," she breathed, a smile blooming on her face.  "What is this magical elixir?"
 
-Bart chuckled, his eyes twinkling. "It's not magic, my dear. It's the taste of possibility, of joy, of a thousand tiny sparks of hope, all bottled up for a rainy day."
+Dr. Pete chuckled. "Why, it's a Dream Reviver, of course. One sip, and you'll remember what you're fighting for."
 
-And as Amelia finished her mug, she realized he was right. The world outside might have remained gray, but within her, something had shifted.  A flicker of hope, ignited by the doctor's strange brew, had begun to burn. She left the shop that day, lighter in spirit, carrying with her the sweet, fizzy taste of possibility. 
+And Lily did. With each sip, her worries seemed to shrink, replaced by a renewed sense of purpose. Dr. Pete, watching her, smiled. He knew the truth – the magic wasn't just in the drink, but in the courage to chase a dream, one delicious sip at a time. 
 
-Bart, watching her go, smiled. He knew his concoction couldn't erase her pain, but perhaps, it could help her remember the sweetness life still held. And that, he believed, was a kind of medicine all its own. 
+

Teardown

PASSED test_gemini_streaming 0:00:10.179859

Setup

Call

Captured stdout call
LLM output from Gemini: The old diner was quiet, save for the rhythmic sizzle of the grill and the gentle hum of the ceiling fan, stirring the air thick with the scent of frying onions and coffee. Behind the counter, Millie, with a knowing smile crinkling the corners of her eyes, filled a frosty glass with the beverage gun, the familiar caramel-colored liquid fizzing into the glass.
 
-

Teardown

PASSED test_gemini_streaming 0:00:08.035179

Setup

Call

Captured stdout call
LLM output from Gemini: The old diner was quiet, the only sound the gentle whir of the ceiling fan struggling against the Texas heat. Behind the counter, Mabel hummed along to a song only she could hear, polishing a glass until it gleamed. 
+"One Dr. Pepper, just how you like it, hon," she announced, placing the glass on the counter before a young woman with tired eyes and a messy bun. 
 
-Suddenly, the bell above the door chimed, announcing a customer. A young woman, her face hidden by a worn cowboy hat, slumped into a booth by the window. Mabel recognized the look of someone who'd lost their way, a look she'd seen a thousand times reflected in the chrome of the napkin dispenser.
+The woman, Sarah, smiled wearily. "You know me too well, Millie." 
 
-"Howdy," Mabel greeted, setting down the glass. "What can I get you, hon?"
+She took a long sip, the sweet, slightly spicy drink a comforting balm to her exhaustion. Sarah had been working late nights at the library, researching for her thesis, the pressure mounting as her deadline loomed closer.  
 
-The woman sighed, pushing the hat back to reveal tired eyes. "Just coffee, black as my boots."
+"Another all-nighter?" Millie asked, already refilling Sarah's coffee.
 
-Mabel raised an eyebrow. "Now, I don't know about all that. How about a Dr. Pepper instead? It's got just the right amount of pep to chase away any blues."
+Sarah nodded. "I'm so close to finishing, Millie, but I feel like I’m hitting a wall."
 
-The woman hesitated, then a small smile flickered across her lips. "Alright, a Dr. Pepper it is."
+Millie leaned against the counter, her gaze softening. "Sometimes, honey, you just gotta step back, clear your head. Let your thoughts settle like the syrup at the bottom of a Dr. Pepper." 
 
-Mabel returned a moment later with a frosty glass, condensation clinging to its sides like tiny diamonds. The woman took a long sip, her eyes widening in surprise. 
+Sarah chuckled. "That's oddly specific, Millie, but I get your point."
 
-"This is... delicious." She took another gulp. "It tastes like...like hope mixed with a little bit of mischief."
+Taking another sip, Sarah let Millie's words sink in. She needed a break, a moment to breathe. Maybe a walk by the river, watching the sunrise, would clear her head. 
 
-Mabel chuckled. "That's Dr. Pepper for ya. Ain't no problem it can't fix, at least for a little while."
+As if reading her mind, Millie placed a paper bag on the counter. "Here," she said, "a little something for your walk."
 
-And as the woman finished her Dr. Pepper, sharing stories with Mabel and the few other patrons who wandered in, the diner didn't feel quite so quiet anymore. The air was filled with the clinking of glasses, the murmur of conversation, and the sweet, spicy scent of Dr. Pepper, a reminder that even on the loneliest of roads, a little bit of comfort could always be found. 
+Inside, Sarah found a freshly baked muffin and, to her surprise, another Dr. Pepper. 
 
-

Teardown

PASSED test_aws 0:00:01.829658

Setup

Call

Teardown

PASSED test_openai_shorthand 0:00:10.503789

Setup

Call

Teardown

PASSED test_openai_shorthand_streaming 0:00:10.879226

Setup

Call

Teardown

PASSED test_anthropic_shorthand 0:00:03.933997

Setup

Call

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:03.735164

Setup

Call

Teardown

PASSED test_fallback_to_shorthand 0:00:00.860333

Setup

Call

Teardown

PASSED test_aws_streaming 0:00:01.449588

Setup

Call

Teardown

PASSED test_streaming 0:00:02.517329

Setup

Call

Teardown

PASSED test_streaming_uniterated 0:00:03.343076

Setup

Call

Teardown

PASSED test_streaming_sync 0:00:03.880195

Setup

Call

Teardown

PASSED test_streaming_uniterated_sync 0:00:05.060981

Setup

Call

Teardown

PASSED test_streaming_claude 0:00:01.059323

Setup

Call

Captured stdout call
msgs:
+"Millie, you're an angel," Sarah said, her heart full. 
+
+Later, sitting by the river, watching the sky turn from indigo to a soft peach, Sarah took a long drink, the familiar taste strangely refreshing, a symbol of comfort and hope. Millie was right; sometimes, all it took was a little break, a change of scenery, and a trusty Dr. Pepper to reset and find your stride again. And as the sun rose, painting the sky with vibrant hues, Sarah felt a renewed sense of energy, ready to tackle her work, and anything else life threw her way, one sip at a time. 
+
+

Teardown

PASSED test_aws 0:00:01.726740

Setup

Call

Teardown

PASSED test_openai_shorthand 0:00:10.360040

Setup

Call

Teardown

PASSED test_openai_shorthand_streaming 0:00:09.784197

Setup

Call

Teardown

PASSED test_anthropic_shorthand 0:00:03.076218

Setup

Call

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:03.144981

Setup

Call

Teardown

PASSED test_fallback_to_shorthand 0:00:00.829804

Setup

Call

Teardown

PASSED test_aws_streaming 0:00:01.520993

Setup

Call

Teardown

PASSED test_streaming 0:00:03.573813

Setup

Call

Teardown

PASSED test_streaming_uniterated 0:00:03.298885

Setup

Call

Teardown

PASSED test_streaming_sync 0:00:04.432857

Setup

Call

Teardown

PASSED test_streaming_uniterated_sync 0:00:02.071824

Setup

Call

Teardown

PASSED test_streaming_claude 0:00:01.047544

Setup

Call

Captured stdout call
msgs:
 Here's a haiku about Mt. Rainier's height:
 
-Rainier stands proud, high
+Rainier towers high
 Fourteen thousand feet of snow
-Pierce the summer sky
+Guardian of sound
 final:
 Here's a haiku about Mt. Rainier's height:
 
-Rainier stands proud, high
+Rainier towers high
 Fourteen thousand feet of snow
-Pierce the summer sky
-

Teardown

PASSED test_streaming_gemini 0:00:09.398223

Setup

Call

Captured stdout call
msgs:
-Barnaby Butterfield, a man of discerning taste and handlebar mustache to match, slammed his newspaper on the table, rattling his wife Agnes' teacup. "Preposterous!" he boomed.
-
-Agnes, a woman unfazed by decades of Barnaby's pronouncements, merely raised an eyebrow. "What is it now, dear?"
-
-"This newfangled soda fountain," Barnaby sputtered, jabbing the newspaper with his index finger. "Claims to have 23 flavors! Twenty-three! Utter poppycock, I say. Why, a man can barely discern five flavors in a lifetime, let alone twenty-three!"
+Guardian of sound
+

Teardown

PASSED test_streaming_gemini 0:00:09.221093

Setup

Call

Captured stdout call
msgs:
+The old diner was quiet, the air thick with the smell of frying onions and yesterday's coffee. Behind the counter, Millie polished glasses with the practiced ease of someone who'd done it a thousand times before. She glanced at the clock – 11:47. Almost time.
 
-Agnes sighed. Barnaby's disdain for anything new was as predictable as the sunrise. 
+Just then, the bell above the door chimed, announcing a customer. In strolled a man unlike any other, radiating an aura of effortless cool. He wore a crisp fedora tilted at a rakish angle, a pinstriped suit that whispered of forgotten speakeasies, and a smile that could charm the chrome off a Cadillac. 
 
-Later that day, curiosity gnawing at him like a persistent squirrel, Barnaby found himself standing before the offending soda fountain. A young man with slicked-back hair and a charming smile greeted him.
+"Afternoon, Millie," he drawled, his voice smooth as melted caramel. "The usual, please."
 
-"Welcome, sir! Care to try a Dr. Pepper? It's got 23 distinct flavors, guaranteed to tantalize your taste buds!"
+Millie grinned, already filling a tall glass with ice. "Coming right up, Dr. Pepper."
 
-Barnaby scoffed. "Twenty-three flavors, you say? Humbug!" But intrigued nonetheless, he relented.
+He always took the stool at the end, a silent guardian of the diner's corner booth. He never ordered anything but Dr Pepper, his namesake, and he always had a story to tell. 
 
-The young man filled a glass with a bubbly, caramel-colored concoction. Barnaby took a tentative sip. His eyes widened. He took another, larger gulp. And another.
+Today's tale was about a high-stakes poker game in a dusty saloon, where a mysterious woman in a red dress held the fate of a gold mine in her hand. As he spoke, his voice painted vivid pictures, transporting Millie and the few other patrons to another time, another world. 
 
-A slow smile spread across his face, his mustache twitching. He tasted licorice, cherry, even a hint of... was that amaretto? The flavors danced on his tongue, a delightful mystery he couldn't quite decipher.
+He spoke of dusty trails and roaring trains, of love found and lost in the blink of an eye. He spoke of adventure, of intrigue, of a life lived on the edge, where every sip of Dr Pepper was a moment savored. 
 
-He finished the glass in stunned silence. 
+As quickly as it began, the story ended. Dr. Pepper drained the last drop from his glass, the ice clinking like a satisfied sigh. He tipped his hat to Millie, a twinkle in his eye.
 
-"Well, sir?" the young man asked, a twinkle in his eye. 
+"Until next time," he said, his voice barely a whisper. 
 
-Barnaby cleared his throat, his previous indignation forgotten. "Young man," he declared, adjusting his hat, "I may have been wrong about the number of flavors in a lifetime. But by Jove, this Dr. Pepper just might prove me wrong about everything else." 
-
-From that day forward, Barnaby Butterfield became Dr. Pepper's most enthusiastic convert, his handlebar mustache perpetually adorned with a telltale fizz. He never did figure out all 23 flavors, but the joy, he discovered, was in the delicious mystery of it all. 
+And with a wink, he was gone, leaving behind the faint scent of spice and the echo of a life well-lived. Millie watched him go, a small smile playing on her lips.  In her little corner of the world, for a fleeting moment, the ordinary had become extraordinary, all thanks to the man called Dr. Pepper. 
 
 final:
-Barnaby Butterfield, a man of discerning taste and handlebar mustache to match, slammed his newspaper on the table, rattling his wife Agnes' teacup. "Preposterous!" he boomed.
-
-Agnes, a woman unfazed by decades of Barnaby's pronouncements, merely raised an eyebrow. "What is it now, dear?"
-
-"This newfangled soda fountain," Barnaby sputtered, jabbing the newspaper with his index finger. "Claims to have 23 flavors! Twenty-three! Utter poppycock, I say. Why, a man can barely discern five flavors in a lifetime, let alone twenty-three!"
-
-Agnes sighed. Barnaby's disdain for anything new was as predictable as the sunrise. 
+The old diner was quiet, the air thick with the smell of frying onions and yesterday's coffee. Behind the counter, Millie polished glasses with the practiced ease of someone who'd done it a thousand times before. She glanced at the clock – 11:47. Almost time.
 
-Later that day, curiosity gnawing at him like a persistent squirrel, Barnaby found himself standing before the offending soda fountain. A young man with slicked-back hair and a charming smile greeted him.
+Just then, the bell above the door chimed, announcing a customer. In strolled a man unlike any other, radiating an aura of effortless cool. He wore a crisp fedora tilted at a rakish angle, a pinstriped suit that whispered of forgotten speakeasies, and a smile that could charm the chrome off a Cadillac. 
 
-"Welcome, sir! Care to try a Dr. Pepper? It's got 23 distinct flavors, guaranteed to tantalize your taste buds!"
+"Afternoon, Millie," he drawled, his voice smooth as melted caramel. "The usual, please."
 
-Barnaby scoffed. "Twenty-three flavors, you say? Humbug!" But intrigued nonetheless, he relented.
+Millie grinned, already filling a tall glass with ice. "Coming right up, Dr. Pepper."
 
-The young man filled a glass with a bubbly, caramel-colored concoction. Barnaby took a tentative sip. His eyes widened. He took another, larger gulp. And another.
+He always took the stool at the end, a silent guardian of the diner's corner booth. He never ordered anything but Dr Pepper, his namesake, and he always had a story to tell. 
 
-A slow smile spread across his face, his mustache twitching. He tasted licorice, cherry, even a hint of... was that amaretto? The flavors danced on his tongue, a delightful mystery he couldn't quite decipher.
+Today's tale was about a high-stakes poker game in a dusty saloon, where a mysterious woman in a red dress held the fate of a gold mine in her hand. As he spoke, his voice painted vivid pictures, transporting Millie and the few other patrons to another time, another world. 
 
-He finished the glass in stunned silence. 
+He spoke of dusty trails and roaring trains, of love found and lost in the blink of an eye. He spoke of adventure, of intrigue, of a life lived on the edge, where every sip of Dr Pepper was a moment savored. 
 
-"Well, sir?" the young man asked, a twinkle in his eye. 
+As quickly as it began, the story ended. Dr. Pepper drained the last drop from his glass, the ice clinking like a satisfied sigh. He tipped his hat to Millie, a twinkle in his eye.
 
-Barnaby cleared his throat, his previous indignation forgotten. "Young man," he declared, adjusting his hat, "I may have been wrong about the number of flavors in a lifetime. But by Jove, this Dr. Pepper just might prove me wrong about everything else." 
+"Until next time," he said, his voice barely a whisper. 
 
-From that day forward, Barnaby Butterfield became Dr. Pepper's most enthusiastic convert, his handlebar mustache perpetually adorned with a telltale fizz. He never did figure out all 23 flavors, but the joy, he discovered, was in the delicious mystery of it all. 
+And with a wink, he was gone, leaving behind the faint scent of spice and the echo of a life well-lived. Millie watched him go, a small smile playing on her lips.  In her little corner of the world, for a fleeting moment, the ordinary had become extraordinary, all thanks to the man called Dr. Pepper. 
 
-

Teardown

PASSED test_tracing_async_only 0:00:04.823691

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
-

Teardown

PASSED test_tracing_sync 0:00:00.000351

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.394251

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:14.024693

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.441707

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.484387

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.525739

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.83, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
-

Teardown

PASSED test_dynamic_class_output 0:00:00.993926

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_tracing_async_only 0:00:06.609080

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
+

Teardown

PASSED test_tracing_sync 0:00:00.000458

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.476836

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:14.193971

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.413140

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.402663

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.125572

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.83, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
+

Teardown

PASSED test_dynamic_class_output 0:00:00.913622

Setup

Call

Captured stdout call
[]
 {"hair_color":"black"}
-

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:00.772107

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
-

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.580021

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
+

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:00.866759

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
+

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.618131

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}
@@ -196,7 +188,7 @@
 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"}
-

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.646184

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_stream_dynamic_class_output 0:00:01.674849

Setup

Call

Captured stdout call
[]
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{\n  "'}
@@ -213,18 +205,21 @@
 final  hair_color='black'
 final  {'hair_color': 'black'}
 final  {"hair_color":"black"}
-

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.215553

Setup

Call

Teardown

PASSED test_dynamic_types_new_enum 0:00:01.613053

Setup

Call

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.541909

Setup

Call

Teardown

PASSED test_dynamic_literals 0:00:00.734552

Setup

Call

Teardown

PASSED test_dynamic_inputs_list 0:00:00.901091

Setup

Call

Teardown

PASSED test_dynamic_output_map 0:00:00.657098

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_inputs_list2 0:00:00.911101

Setup

Call

Teardown

PASSED test_dynamic_types_new_enum 0:00:01.516105

Setup

Call

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.746050

Setup

Call

Teardown

PASSED test_dynamic_literals 0:00:00.823691

Setup

Call

Teardown

PASSED test_dynamic_inputs_list 0:00:01.047489

Setup

Call

Teardown

PASSED test_dynamic_output_map 0:00:00.697238

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

Teardown

PASSED test_dynamic_output_union 0:00:01.769073

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_output_union 0:00:02.013329

Setup

Call

Captured stdout call
[]
 final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'} height={'feet': 6.0, 'inches': None}
 final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}, 'height': {'feet': 6.0, 'inches': None}}
 final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"},"height":{"feet":6.0,"inches":null}}
 final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30'} height={'meters': 1.8}
 final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30'}, 'height': {'meters': 1.8}}
 final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard","age":"30"},"height":{"meters":1.8}}
-

Teardown

PASSED test_nested_class_streaming 0:00:05.007773

Setup

Call

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

Teardown

PASSED test_nested_class_streaming 0:00:03.765765

Setup

Call

Captured stdout call
streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
@@ -276,244 +271,185 @@
 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': 'ag', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': None}}}
-final  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'again', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.760949

Setup

Call

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:01.095419

Setup

Call

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:00.824506

Setup

Call

Teardown

PASSED test_event_log_hook 0:00:01.131149

Setup

Call

Captured stdout call
Event log hook1: 
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'fo', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': None}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': None}}}
+final  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'foobar', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+

Teardown

PASSED test_dynamic_client_with_openai 0:00:02.211510

Setup

Call

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:01.147061

Setup

Call

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:00.963547

Setup

Call

Teardown

PASSED test_event_log_hook 0:00:01.163098

Setup

Call

Captured stdout call
Event log hook1: 
 Event log event  BamlLogEvent {
     metadata: {
-        event_id: "78dc8c9b-f55c-437d-a06c-18928848d89e",
+        event_id: "c13e21d5-f374-4c98-8013-b003aedb8fa3",
         parent_id: None,
-        root_event_id: "78dc8c9b-f55c-437d-a06c-18928848d89e"
+        root_event_id: "c13e21d5-f374-4c98-8013-b003aedb8fa3"
     },
     prompt: "[
   {
@@ -527,13 +463,13 @@
 ]",
     raw_output: "["a", "b", "c"]",
     parsed_output: "["a", "b", "c"]",
-    start_time: "2024-12-13T14:24:20.930Z"
+    start_time: "2024-12-13T14:46:34.169Z"
 }
-

Teardown

PASSED test_aws_bedrock 0:00:03.121428

Setup

Call

Captured stdout call
unstreamed 
+

Teardown

PASSED test_aws_bedrock 0:00:03.126423

Setup

Call

Captured stdout call
unstreamed 
 
-The old geologist, Dr. Maria, had spent her entire career studying the ancient rocks of the Appalachian Mountains. She had seen it all - the twisted granite, the layered sandstone, the glittering quartz. But nothing could have prepared her for what she was about to discover.
+The old geologist, Professor Thompson, had spent his entire career studying the ancient rocks of the Appalachian Mountains. He had seen it all - the fossilized trilobites, the quartz crystals, the veins of gold. But nothing could have prepared him for what he was about to discover.
 
-As she made her way through the dense forest, her eyes scanning the ground for the perfect specimen, she stumbled upon a peculiar rock. It was unlike any she had ever seen before - a deep, rich blue
+As he made his way through the dense forest, his eyes scanned the ground, searching for the perfect specimen. Suddenly, his gaze landed on a peculiar rock, unlike any he had ever seen before.
 streamed  '\n\n'
 streamed  '\n\nIn'
 streamed  '\n\nIn the'
@@ -546,105 +482,105 @@
 streamed  '\n\nIn the heart of the ancient forest, there'
 streamed  '\n\nIn the heart of the ancient forest, there was'
 streamed  '\n\nIn the heart of the ancient forest, there was a'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock formation'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock formation that'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock formation that had'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock formation that had been'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock formation that had been passed'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock formation that had been passed down'
-streamed  'e heart of the ancient forest, there was a peculiar rock formation that had been passed down through'
-streamed  'he ancient forest, there was a peculiar rock formation that had been passed down through generations'
-streamed  'ancient forest, there was a peculiar rock formation that had been passed down through generations of'
-streamed  't forest, there was a peculiar rock formation that had been passed down through generations of local'
-streamed  't, there was a peculiar rock formation that had been passed down through generations of local legend'
-streamed  ', there was a peculiar rock formation that had been passed down through generations of local legend.'
-streamed  'here was a peculiar rock formation that had been passed down through generations of local legend. It'
-streamed  ' was a peculiar rock formation that had been passed down through generations of local legend. It was'
-streamed  'a peculiar rock formation that had been passed down through generations of local legend. It was said'
-streamed  'uliar rock formation that had been passed down through generations of local legend. It was said that'
-streamed  'iar rock formation that had been passed down through generations of local legend. It was said that a'
-streamed  'ock formation that had been passed down through generations of local legend. It was said that a bolt'
-streamed  ' formation that had been passed down through generations of local legend. It was said that a bolt of'
-streamed  ' that had been passed down through generations of local legend. It was said that a bolt of lightning'
-streamed  't had been passed down through generations of local legend. It was said that a bolt of lightning had'
-streamed  'een passed down through generations of local legend. It was said that a bolt of lightning had struck'
-streamed  'passed down through generations of local legend. It was said that a bolt of lightning had struck the'
-streamed  'd down through generations of local legend. It was said that a bolt of lightning had struck the rock'
-streamed  'ough generations of local legend. It was said that a bolt of lightning had struck the rock centuries'
-streamed  ' generations of local legend. It was said that a bolt of lightning had struck the rock centuries ago'
-streamed  'generations of local legend. It was said that a bolt of lightning had struck the rock centuries ago,'
-streamed  'rations of local legend. It was said that a bolt of lightning had struck the rock centuries ago, imb'
-streamed  'ons of local legend. It was said that a bolt of lightning had struck the rock centuries ago, imbuing'
-streamed  ' of local legend. It was said that a bolt of lightning had struck the rock centuries ago, imbuing it'
-streamed  'ocal legend. It was said that a bolt of lightning had struck the rock centuries ago, imbuing it with'
-streamed  'al legend. It was said that a bolt of lightning had struck the rock centuries ago, imbuing it with a'
-streamed  'd. It was said that a bolt of lightning had struck the rock centuries ago, imbuing it with a strange'
-streamed  't was said that a bolt of lightning had struck the rock centuries ago, imbuing it with a strange and'
-streamed  'was said that a bolt of lightning had struck the rock centuries ago, imbuing it with a strange and w'
-streamed  'd that a bolt of lightning had struck the rock centuries ago, imbuing it with a strange and wondrous'
-streamed  ' a bolt of lightning had struck the rock centuries ago, imbuing it with a strange and wondrous power'
-streamed  'bolt of lightning had struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\n'
-streamed  't of lightning had struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe'
-streamed  'lightning had struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock'
-streamed  'ightning had struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock,'
-streamed  'ng had struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known'
-streamed  'had struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as'
-streamed  'd struck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "'
-streamed  'truck the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The'
-streamed  'the rock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heart'
-streamed  'ock centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone'
-streamed  'k centuries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone,"'
-streamed  'nturies ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was'
-streamed  'uries ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a'
-streamed  ' ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep'
-streamed  'ago, imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep,'
-streamed  'imbuing it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich'
-streamed  'g it with a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown'
-streamed  'ith a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color'
-streamed  'th a strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color,'
-streamed  'strange and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color, with'
-streamed  'e and wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color, with veins'
-streamed  'nd wondrous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color, with veins of'
-streamed  'ous power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color, with veins of glitter'
-streamed  ' power.\n\nThe rock, known as "The Heartstone," was a deep, rich brown color, with veins of glittering'
-streamed  '\n\nThe rock, known as "The Heartstone," was a deep, rich brown color, with veins of glittering quartz'
-streamed  ' rock, known as "The Heartstone," was a deep, rich brown color, with veins of glittering quartz that'
-streamed  'known as "The Heartstone," was a deep, rich brown color, with veins of glittering quartz that seemed'
-streamed  'wn as "The Heartstone," was a deep, rich brown color, with veins of glittering quartz that seemed to'
-streamed  '"The Heartstone," was a deep, rich brown color, with veins of glittering quartz that seemed to pulse'
-streamed  'Heartstone," was a deep, rich brown color, with veins of glittering quartz that seemed to pulse with'
-streamed  'rtstone," was a deep, rich brown color, with veins of glittering quartz that seemed to pulse with an'
-streamed  'e," was a deep, rich brown color, with veins of glittering quartz that seemed to pulse with an inner'
-streamed  's a deep, rich brown color, with veins of glittering quartz that seemed to pulse with an inner light'
-streamed  ' a deep, rich brown color, with veins of glittering quartz that seemed to pulse with an inner light.'
-streamed  'deep, rich brown color, with veins of glittering quartz that seemed to pulse with an inner light. It'
-streamed  'rich brown color, with veins of glittering quartz that seemed to pulse with an inner light. It stood'
-streamed  'brown color, with veins of glittering quartz that seemed to pulse with an inner light. It stood tall'
-streamed  'n color, with veins of glittering quartz that seemed to pulse with an inner light. It stood tall and'
-streamed  'r, with veins of glittering quartz that seemed to pulse with an inner light. It stood tall and proud'
-streamed  ', with veins of glittering quartz that seemed to pulse with an inner light. It stood tall and proud,'
-streamed  'with veins of glittering quartz that seemed to pulse with an inner light. It stood tall and proud, a'
-streamed  's of glittering quartz that seemed to pulse with an inner light. It stood tall and proud, a sentinel'
-streamed  'f glittering quartz that seemed to pulse with an inner light. It stood tall and proud, a sentinel of'
-streamed  'ittering quartz that seemed to pulse with an inner light. It stood tall and proud, a sentinel of the'
-streamed  'g quartz that seemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest'
-streamed  'tz that seemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor'
-streamed  'z that seemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor,'
-streamed  'at seemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor, and'
-streamed  'eemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor, and was'
-streamed  'eemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor, and was'
-streamed  'eemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor, and was'
-streamed  'eemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor, and was'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other.'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other. Its'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other. Its surface'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other. Its surface was'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other. Its surface was worn'
+streamed  '\n\nIn the heart of the ancient forest, there was a rock unlike any other. Its surface was worn smooth'
+streamed  'n the heart of the ancient forest, there was a rock unlike any other. Its surface was worn smooth by'
+streamed  'e heart of the ancient forest, there was a rock unlike any other. Its surface was worn smooth by the'
+streamed  'of the ancient forest, there was a rock unlike any other. Its surface was worn smooth by the passing'
+streamed  'the ancient forest, there was a rock unlike any other. Its surface was worn smooth by the passing of'
+streamed  'ncient forest, there was a rock unlike any other. Its surface was worn smooth by the passing of time'
+streamed  'cient forest, there was a rock unlike any other. Its surface was worn smooth by the passing of time,'
+streamed  't forest, there was a rock unlike any other. Its surface was worn smooth by the passing of time, and'
+streamed  'rest, there was a rock unlike any other. Its surface was worn smooth by the passing of time, and its'
+streamed  'there was a rock unlike any other. Its surface was worn smooth by the passing of time, and its color'
+streamed  'e was a rock unlike any other. Its surface was worn smooth by the passing of time, and its color was'
+streamed  'was a rock unlike any other. Its surface was worn smooth by the passing of time, and its color was a'
+streamed  ' rock unlike any other. Its surface was worn smooth by the passing of time, and its color was a deep'
+streamed  'rock unlike any other. Its surface was worn smooth by the passing of time, and its color was a deep,'
+streamed  'unlike any other. Its surface was worn smooth by the passing of time, and its color was a deep, rich'
+streamed  ' any other. Its surface was worn smooth by the passing of time, and its color was a deep, rich brown'
+streamed  'any other. Its surface was worn smooth by the passing of time, and its color was a deep, rich brown.'
+streamed  'other. Its surface was worn smooth by the passing of time, and its color was a deep, rich brown. But'
+streamed  '. Its surface was worn smooth by the passing of time, and its color was a deep, rich brown. But what'
+streamed  ' surface was worn smooth by the passing of time, and its color was a deep, rich brown. But what made'
+streamed  'ace was worn smooth by the passing of time, and its color was a deep, rich brown. But what made this'
+streamed  'as worn smooth by the passing of time, and its color was a deep, rich brown. But what made this rock'
+streamed  'n smooth by the passing of time, and its color was a deep, rich brown. But what made this rock truly'
+streamed  ' by the passing of time, and its color was a deep, rich brown. But what made this rock truly special'
+streamed  'the passing of time, and its color was a deep, rich brown. But what made this rock truly special was'
+streamed  'passing of time, and its color was a deep, rich brown. But what made this rock truly special was the'
+streamed  'of time, and its color was a deep, rich brown. But what made this rock truly special was the strange'
+streamed  'f time, and its color was a deep, rich brown. But what made this rock truly special was the strange,'
+streamed  'and its color was a deep, rich brown. But what made this rock truly special was the strange, glowing'
+streamed  'ts color was a deep, rich brown. But what made this rock truly special was the strange, glowing vein'
+streamed  'lor was a deep, rich brown. But what made this rock truly special was the strange, glowing vein that'
+streamed  'was a deep, rich brown. But what made this rock truly special was the strange, glowing vein that ran'
+streamed  'ep, rich brown. But what made this rock truly special was the strange, glowing vein that ran through'
+streamed  'rich brown. But what made this rock truly special was the strange, glowing vein that ran through its'
+streamed  'own. But what made this rock truly special was the strange, glowing vein that ran through its center'
+streamed  '. But what made this rock truly special was the strange, glowing vein that ran through its center.\n\n'
+streamed  'ut what made this rock truly special was the strange, glowing vein that ran through its center.\n\nThe'
+streamed  'at made this rock truly special was the strange, glowing vein that ran through its center.\n\nThe vein'
+streamed  'ade this rock truly special was the strange, glowing vein that ran through its center.\n\nThe vein was'
+streamed  'e this rock truly special was the strange, glowing vein that ran through its center.\n\nThe vein was a'
+streamed  's rock truly special was the strange, glowing vein that ran through its center.\n\nThe vein was a deep'
+streamed  ' rock truly special was the strange, glowing vein that ran through its center.\n\nThe vein was a deep,'
+streamed  'ly special was the strange, glowing vein that ran through its center.\n\nThe vein was a deep, electric'
+streamed  'ecial was the strange, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue'
+streamed  'cial was the strange, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue,'
+streamed  ' was the strange, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue, and'
+streamed  's the strange, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue, and it'
+streamed  'e strange, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue, and it pul'
+streamed  'trange, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed'
+streamed  'e, glowing vein that ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed with'
+streamed  ' glowing vein that ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed with a'
+streamed  'g vein that ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle'
+streamed  ' vein that ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle,'
+streamed  'that ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhyth'
+streamed  't ran through its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic'
+streamed  'hrough its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy'
+streamed  'rough its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy.'
+streamed  'gh its center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It'
+streamed  'ts center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was'
+streamed  'center.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as'
+streamed  'ter.\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if'
+streamed  '\n\nThe vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the'
+streamed  ' vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock'
+streamed  'n was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was'
+streamed  'a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive'
+streamed  ' deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive,'
+streamed  'p, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and'
+streamed  'lectric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and the'
+streamed  'ic blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein'
+streamed  'lue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was'
+streamed  ' and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was its'
+streamed  'it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was its life'
+streamed  'lsed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was its lifeblood'
+streamed  'sed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was its lifeblood.'
+streamed  'with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was its lifeblood. The'
+streamed  'gentle, rhythmic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals'
+streamed  'le, rhythmic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had'
+streamed  'ythmic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had named'
+streamed  'ic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had named the'
+streamed  'ic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had named the'
+streamed  'ic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had named the'
+streamed  'ic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had named the'
 streamed final 
 
-In the heart of the ancient forest, there was a peculiar rock formation that had been passed down through generations of local legend. It was said that a bolt of lightning had struck the rock centuries ago, imbuing it with a strange and wondrous power.
+In the heart of the ancient forest, there was a rock unlike any other. Its surface was worn smooth by the passing of time, and its color was a deep, rich brown. But what made this rock truly special was the strange, glowing vein that ran through its center.
 
-The rock, known as "The Heartstone," was a deep, rich brown color, with veins of glittering quartz that seemed to pulse with an inner light. It stood tall and proud, a sentinel of the forest floor, and was
-

Teardown

PASSED test_aws_bedrock_invalid_region 0:00:00.005544

Setup

Call

Teardown

PASSED test_serialization_exception 0:00:01.364374

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".
+The vein was a deep, electric blue, and it pulsed with a gentle, rhythmic energy. It was as if the rock was alive, and the vein was its lifeblood. The locals had named the
+

Teardown

PASSED test_aws_bedrock_invalid_region 0:00:00.005900

Setup

Call

Teardown

PASSED test_serialization_exception 0:00:00.522414

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

Teardown

PASSED test_stream_serialization_exception 0:00:00.500441

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
+

Teardown

PASSED test_stream_serialization_exception 0:00:00.634719

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
@@ -659,7 +595,7 @@
 streamed  nonce=None nonce2=None
 Exception message:  <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".
 ) tblen=3>
-

Teardown

PASSED test_stream2_serialization_exception 0:00:00.413288

Setup

Call

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

Teardown

PASSED test_stream2_serialization_exception 0:00:00.383816

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
@@ -674,8 +610,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>
-

Teardown

PASSED test_descriptions 0:00:06.557638

Setup

Call

Teardown

FAILED test_caching 0:00:07.004457

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

Setup

Call

@pytest.mark.asyncio
+

Teardown

PASSED test_descriptions 0:00:02.583328

Setup

Call

Teardown

FAILED test_caching 0:00:08.892028

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

Setup

Call

@pytest.mark.asyncio
     async def test_caching():
         story_idea = f"""
     In a futuristic world where dreams are a marketable asset and collective experience, an introverted and socially inept teenager named Alex realizes they have a unique and potent skill to not only observe but also alter the dreams of others. Initially excited by this newfound talent, Alex starts discreetly modifying the dreams of peers and relatives, aiding them in conquering fears, boosting self-esteem, or embarking on fantastical journeys. As Alex's abilities expand, so does their sway. They begin marketing exclusive dream experiences on the underground market, designing complex and captivating dreamscapes for affluent clients. However, the boundary between dream and reality starts to fade for those subjected to Alex's creations. Some clients find it difficult to distinguish between their genuine memories and the fabricated ones inserted by Alex's dream manipulation.
@@ -711,22 +647,72 @@
 >       assert (
             duration2 < duration
         ), f"{duration2} < {duration}. Expected second call to be faster than first by a large margin."
-E       AssertionError: 3.624055862426758 < 3.379484176635742. Expected second call to be faster than first by a large margin.
-E       assert 3.624055862426758 < 3.379484176635742
+E       AssertionError: 4.48455023765564 < 4.406625032424927. Expected second call to be faster than first by a large margin.
+E       assert 4.48455023765564 < 4.406625032424927
 
-tests/test_functions.py:1271: AssertionError
Captured stdout call
Duration no caching:  3.379484176635742
-Duration with caching:  3.624055862426758
-

Teardown

PASSED test_arg_exceptions 0:00:01.166600

Setup

Call

Captured stderr call
[2024-12-13T14:24:40Z ERROR baml_runtime::tracing]   Error: input: Expected type String, got `Number(111)`
+tests/test_functions.py:1271: AssertionError
Captured stdout call
Duration no caching:  4.406625032424927
+Duration with caching:  4.48455023765564
+

Teardown

PASSED test_arg_exceptions 0:00:00.693737

Setup

Call

Captured stderr call
[2024-12-13T14:46:51Z ERROR baml_runtime::tracing]   Error: input: Expected type String, got `Number(111)`
     
-

Teardown

PASSED test_map_as_param 0:00:00.001121

Setup

Call

Captured stderr call
[2024-12-13T14:24:41Z ERROR baml_runtime::tracing]   Error: myMap: a: Expected map, got `String("b")`
+

Teardown

PASSED test_map_as_param 0:00:00.001014

Setup

Call

Captured stderr call
[2024-12-13T14:46:51Z ERROR baml_runtime::tracing]   Error: myMap: a: Expected map, got `String("b")`
     
-

Teardown

PASSED test_baml_validation_error_format 0:00:00.476185

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_baml_validation_error_format 0:00:00.659617

Setup

Call

Captured stdout call
Error:  BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
   - <root>: Missing required field: nonce
   - <root>: Missing required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 )
-

Teardown

PASSED test_no_stream_big_integer 0:00:00.625432

Setup

Call

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.461699

Setup

Call

Teardown

PASSED test_no_stream_compound_object 0:00:04.063495

Setup

Call

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:16.651412

Setup

Call

Teardown

PASSED test_differing_unions 0:00:00.809205

Setup

Call

Teardown

PASSED test_return_failing_assert 0:00:00.351492

Setup

Call

Teardown

PASSED test_parameter_failing_assert 0:00:00.001113

Setup

Call

Captured stderr call
[2024-12-13T14:25:05Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: small_int
+

Teardown

PASSED test_no_stream_big_integer 0:00:00.475766

Setup

Call

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.544767

Setup

Call

Teardown

PASSED test_no_stream_compound_object 0:00:03.736282

Setup

Call

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:06.240334

Setup

Call

Teardown

PASSED test_differing_unions 0:00:01.446055

Setup

Call

Teardown

PASSED test_return_failing_assert 0:00:00.302921

Setup

Call

Teardown

PASSED test_parameter_failing_assert 0:00:00.001126

Setup

Call

Captured stderr call
[2024-12-13T14:47:05Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: small_int
     
-

Teardown

PASSED test_failing_assert_can_stream 0:00:03.925711

Setup

Call

Captured stdout call
None
+

Teardown

PASSED test_failing_assert_can_stream 0:00:03.236497

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
@@ -1352,9 +1338,9 @@
 None
 None
 None
-

Teardown

PASSED test_simple_recursive_type 0:00:02.897785

Setup

Call

Teardown

PASSED test_mutually_recursive_type 0:00:02.089253

Setup

Call

Teardown

PASSED test_block_constraints 0:00:00.576212

Setup

Call

Teardown

PASSED test_nested_block_constraints 0:00:00.518378

Setup

Call

Captured stdout call
nbc=Checked[BlockConstraint, Literal['cross_field']](value=BlockConstraint(foo=1, bar='hello'), checks={'cross_field': Check(name='cross_field', expression='this.bar|length > this.foo', status='succeeded')})
-

Teardown

PASSED test_block_constraint_arguments 0:00:00.001701

Setup

Call

Captured stderr call
[2024-12-13T14:25:15Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
+

Teardown

PASSED test_simple_recursive_type 0:00:03.273222

Setup

Call

Teardown

PASSED test_mutually_recursive_type 0:00:02.808815

Setup

Call

Teardown

PASSED test_block_constraints 0:00:00.480892

Setup

Call

Teardown

PASSED test_nested_block_constraints 0:00:00.523365

Setup

Call

Captured stdout call
nbc=Checked[BlockConstraint, Literal['cross_field']](value=BlockConstraint(foo=1, bar='hello'), checks={'cross_field': Check(name='cross_field', expression='this.bar|length > this.foo', status='succeeded')})
+

Teardown

PASSED test_block_constraint_arguments 0:00:00.001791

Setup

Call

Captured stderr call
[2024-12-13T14:47:15Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
     
-[2024-12-13T14:25:15Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
+[2024-12-13T14:47:15Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
     
-

Teardown

tests/test_pydantic.py 3 0:00:00.001558

PASSED test_model_validate_success 0:00:00.000497

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000529

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000532

Setup

Call

Teardown

tests/test_python.py 2 0:00:00.005403

PASSED test_inspect 0:00:00.005053

Assert that baml_py is compatible with the inspect module.

This is a regression test for a bug where inspect.stack() would implode if the pyo3 code called PyModule::from_code without specifying the file_name arg (i.e. without specifying the source file metadata for the inline Python snippet).

Setup

Call

Teardown

PASSED test_pickle 0:00:00.000351

Setup

Call

Teardown

\ No newline at end of file +

Teardown

tests/test_pydantic.py 3 0:00:00.001514

PASSED test_model_validate_success 0:00:00.000787

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000502

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000225

Setup

Call

Teardown

tests/test_python.py 2 0:00:00.005336

PASSED test_inspect 0:00:00.004967

Assert that baml_py is compatible with the inspect module.

This is a regression test for a bug where inspect.stack() would implode if the pyo3 code called PyModule::from_code without specifying the file_name arg (i.e. without specifying the source file metadata for the inline Python snippet).

Setup

Call

Teardown

PASSED test_pickle 0:00:00.000369

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 993eeb0c1..10f842787 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.70.2\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.70.2\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.70.2\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.70.2\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml" => "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.70.3\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.70.3\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.70.3\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.70.3\"\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 2139e8c6f..0f65cd4fc 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.70.2\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.70.2\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.70.2\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.70.2\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.70.3\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.70.3\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.70.3\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.70.3\"\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 d1d5fad24..37290fbbd 100644 --- a/integ-tests/typescript/test-report.html +++ b/integ-tests/typescript/test-report.html @@ -257,24 +257,24 @@ font-size: 1rem; padding: 0 0.5rem; } -

Test Report

Started: 2024-12-13 06:19:24
Suites (1)
0 passed
1 failed
0 pending
Tests (67)
66 passed
1 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
0.519s
Integ tests > should work for all inputs
single string list
passed
0.413s
Integ tests > should work for all inputs
return literal union
passed
0.491s
Integ tests > should work for all inputs
single class
passed
0.667s
Integ tests > should work for all inputs
multiple classes
passed
0.525s
Integ tests > should work for all inputs
single enum list
passed
0.325s
Integ tests > should work for all inputs
single float
passed
0.364s
Integ tests > should work for all inputs
single int
passed
0.358s
Integ tests > should work for all inputs
single literal int
passed
0.318s
Integ tests > should work for all inputs
single literal bool
passed
0.42s
Integ tests > should work for all inputs
single literal string
passed
0.36s
Integ tests > should work for all inputs
single class with literal prop
passed
0.76s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.592s
Integ tests > should work for all inputs
single optional string
passed
0.273s
Integ tests > should work for all inputs
single map string to string
passed
0.466s
Integ tests > should work for all inputs
single map string to class
passed
0.653s
Integ tests > should work for all inputs
single map string to map
passed
0.542s
Integ tests > should work for all inputs
enum key in map
passed
3.123s
Integ tests > should work for all inputs
literal string union key in map
passed
0.882s
Integ tests > should work for all inputs
single literal string key in map
passed
0.431s
Integ tests
should work for all outputs
passed
5.12s
Integ tests
works with retries1
passed
1.027s
Integ tests
works with retries2
passed
2.329s
Integ tests
works with fallbacks
passed
1.671s
Integ tests
should work with image from url
passed
1.523s
Integ tests
should work with image from base 64
passed
1.843s
Integ tests
should work with audio base 64
passed
1.37s
Integ tests
should work with audio from url
passed
1.114s
Integ tests
should support streaming in OpenAI
passed
2.027s
Integ tests
should support streaming in Gemini
passed
9.788s
Integ tests
should support AWS
passed
1.777s
Integ tests
should support streaming in AWS
passed
1.416s
Integ tests
should allow overriding the region
passed
0.046s
Integ tests
should support OpenAI shorthand
passed
17.821s
Integ tests
should support OpenAI shorthand streaming
passed
9.413s
Integ tests
should support anthropic shorthand
passed
3.275s
Integ tests
should support anthropic shorthand streaming
passed
3.013s
Integ tests
should support streaming without iterating
passed
3.361s
Integ tests
should support streaming in Claude
passed
1.412s
Integ tests
should support vertex
passed
10.957s
Integ tests
supports tracing sync
passed
0.009s
Integ tests
supports tracing async
passed
3.22s
Integ tests
should work with dynamic types single
passed
0.985s
Integ tests
should work with dynamic types enum
passed
1.212s
Integ tests
should work with dynamic literals
passed
1.211s
Integ tests
should work with dynamic types class
passed
1.75s
Integ tests
should work with dynamic inputs class
passed
0.524s
Integ tests
should work with dynamic inputs list
passed
0.597s
Integ tests
should work with dynamic output map
passed
1.157s
Integ tests
should work with dynamic output union
passed
1.951s
Integ tests
should work with nested classes
failed
12.333s
Error: expect(received).toEqual(expected) // deep equality
+

Test Report

Started: 2024-12-13 06:41:50
Suites (1)
0 passed
1 failed
0 pending
Tests (67)
66 passed
1 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
0.443s
Integ tests > should work for all inputs
single string list
passed
0.638s
Integ tests > should work for all inputs
return literal union
passed
0.367s
Integ tests > should work for all inputs
single class
passed
0.716s
Integ tests > should work for all inputs
multiple classes
passed
0.598s
Integ tests > should work for all inputs
single enum list
passed
0.41s
Integ tests > should work for all inputs
single float
passed
0.343s
Integ tests > should work for all inputs
single int
passed
0.374s
Integ tests > should work for all inputs
single literal int
passed
0.386s
Integ tests > should work for all inputs
single literal bool
passed
0.29s
Integ tests > should work for all inputs
single literal string
passed
0.307s
Integ tests > should work for all inputs
single class with literal prop
passed
0.588s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.872s
Integ tests > should work for all inputs
single optional string
passed
0.333s
Integ tests > should work for all inputs
single map string to string
passed
0.487s
Integ tests > should work for all inputs
single map string to class
passed
0.736s
Integ tests > should work for all inputs
single map string to map
passed
0.526s
Integ tests > should work for all inputs
enum key in map
passed
0.649s
Integ tests > should work for all inputs
literal string union key in map
passed
0.78s
Integ tests > should work for all inputs
single literal string key in map
passed
0.518s
Integ tests
should work for all outputs
passed
4.365s
Integ tests
works with retries1
passed
1.046s
Integ tests
works with retries2
passed
2.248s
Integ tests
works with fallbacks
passed
1.711s
Integ tests
should work with image from url
passed
1.386s
Integ tests
should work with image from base 64
passed
1.628s
Integ tests
should work with audio base 64
passed
1.278s
Integ tests
should work with audio from url
passed
1.35s
Integ tests
should support streaming in OpenAI
passed
2.231s
Integ tests
should support streaming in Gemini
passed
9.491s
Integ tests
should support AWS
passed
1.727s
Integ tests
should support streaming in AWS
passed
1.418s
Integ tests
should allow overriding the region
passed
0.048s
Integ tests
should support OpenAI shorthand
passed
8.117s
Integ tests
should support OpenAI shorthand streaming
passed
15.115s
Integ tests
should support anthropic shorthand
passed
3.245s
Integ tests
should support anthropic shorthand streaming
passed
3.132s
Integ tests
should support streaming without iterating
passed
2.515s
Integ tests
should support streaming in Claude
passed
1.011s
Integ tests
should support vertex
passed
8.913s
Integ tests
supports tracing sync
passed
0.009s
Integ tests
supports tracing async
passed
3.722s
Integ tests
should work with dynamic types single
passed
1.217s
Integ tests
should work with dynamic types enum
passed
1.341s
Integ tests
should work with dynamic literals
passed
0.791s
Integ tests
should work with dynamic types class
passed
1.626s
Integ tests
should work with dynamic inputs class
passed
0.725s
Integ tests
should work with dynamic inputs list
passed
0.525s
Integ tests
should work with dynamic output map
passed
0.677s
Integ tests
should work with dynamic output union
passed
1.671s
Integ tests
should work with nested classes
failed
9.811s
Error: expect(received).toEqual(expected) // deep equality
 
 - Expected  - 1
 + Received  + 1
 
   Object {
-    "prop1": "Hello",
+    "prop1": "value1",
     "prop2": Object {
       "inner": Object {
         "prop2": 42,
--       "prop3": 3.14159,
+-       "prop3": 3.14,
 +       "prop3": null,
       },
-      "prop1": "World",
-      "prop2": "JSON is coolest thing ever",
+      "prop1": "value2",
+      "prop2": "value3",
     },
   }
-    at Object.toEqual (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:604:25)
Integ tests
should work with dynamic client
passed
0.404s
Integ tests
should work with 'onLogEvent'
passed
1.754s
Integ tests
should work with a sync client
passed
0.546s
Integ tests
should raise an error when appropriate
passed
1.02s
Integ tests
should raise a BAMLValidationError
passed
0.447s
Integ tests
should reset environment variables correctly
passed
1.274s
Integ tests
should use aliases when serializing input objects - classes
passed
1.22s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
0.752s
Integ tests
should use aliases when serializing input objects - enums
passed
0.511s
Integ tests
should use aliases when serializing input objects - lists
passed
0.461s
Integ tests
constraints: should handle checks in return types
passed
0.894s
Integ tests
constraints: should handle checks in returned unions
passed
0.713s
Integ tests
constraints: should handle block-level checks
passed
0.569s
Integ tests
constraints: should handle nested-block-level checks
passed
0.652s
Integ tests
simple recursive type
passed
2.685s
Integ tests
mutually recursive type
passed
1.828s
Console Log
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:48:15)
+    at Object.toEqual (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:604:25)
Integ tests
should work with dynamic client
passed
0.409s
Integ tests
should work with 'onLogEvent'
passed
1.618s
Integ tests
should work with a sync client
passed
0.48s
Integ tests
should raise an error when appropriate
passed
0.771s
Integ tests
should raise a BAMLValidationError
passed
0.495s
Integ tests
should reset environment variables correctly
passed
1.231s
Integ tests
should use aliases when serializing input objects - classes
passed
1.054s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
0.889s
Integ tests
should use aliases when serializing input objects - enums
passed
0.473s
Integ tests
should use aliases when serializing input objects - lists
passed
0.333s
Integ tests
constraints: should handle checks in return types
passed
0.641s
Integ tests
constraints: should handle checks in returned unions
passed
0.668s
Integ tests
constraints: should handle block-level checks
passed
0.551s
Integ tests
constraints: should handle nested-block-level checks
passed
0.871s
Integ tests
simple recursive type
passed
3.331s
Integ tests
mutually recursive type
passed
2.112s
Console Log
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:48: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)
@@ -289,11 +289,11 @@
     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:54:15)
got response key
 true
-52
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:194: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: 1734099582, tv_nsec: 912302000 }, latency: 167.358ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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 }
+52
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:194: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: 1734100925, tv_nsec: 874319000 }, latency: 170.868917ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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:2810:18)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:191:7) {
   code: 'GenericFailure'
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:203: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: 1734099585, tv_nsec: 226179000 }, latency: 206.093041ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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 Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:203: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: 1734100928, tv_nsec: 5118000 }, latency: 308.137167ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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:2835:18)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:200:7) {
   code: 'GenericFailure'
@@ -630,7 +630,7 @@
     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:540:13)
final  {
   hair_color: 'black',
-  attributes: { eye_color: 'blue', facial_hair: 'beard' }
+  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:564: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>)
@@ -691,1747 +691,1153 @@
     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:574:13)
final  {
   hair_color: 'black',
-  attributes: { eye_color: 'blue', facial_hair: 'beard', age: '30' },
+  attributes: { eye_color: 'blue', facial_hair: 'beard', age: '30 years old' },
   height: { feet: 6, inches: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:585:13)
final  {
   hair_color: 'black',
-  attributes: { eye_color: 'blue', facial_hair: 'beard' },
+  attributes: { eye_color: 'blue', facial_hair: 'beard', age: '30' },
   height: { meters: 1.8 }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: '', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: '', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello', prop2: { prop1: 'World', prop2: '', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: '', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: '', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is cool', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: null, inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'value1', prop2: { prop1: 'value2', prop2: '', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'World', prop2: 'JSON is coolest thing ever', inner: null }
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
+  prop2: { prop1: 'value2', prop2: 'value3', inner: null }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: null, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: null }
+    prop1: 'value2',
+    prop2: 'value3',
+    inner: { prop2: 42, prop3: 3.14 }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
-  prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
-    inner: { prop2: 42, prop3: 3.14159 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello',
+  prop1: 'value1',
   prop2: {
-    prop1: 'World',
-    prop2: 'JSON is coolest thing ever',
+    prop1: 'value2',
+    prop2: 'value3',
     inner: { prop2: 42, prop3: null }
   }
 }
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:623:15)
     at callback (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:70:17)
onLogEvent {
   metadata: {
-    eventId: '698b0f9e-abd8-427b-b30f-7110633ad6cf',
-    rootEventId: '698b0f9e-abd8-427b-b30f-7110633ad6cf'
+    eventId: '46a8e073-221d-4872-bb1d-701758db7488',
+    rootEventId: '46a8e073-221d-4872-bb1d-701758db7488'
   },
   prompt: '[\n' +
     '  {\n' +
@@ -2445,12 +1851,12 @@
     ']',
   rawOutput: '["a", "b", "c"]',
   parsedOutput: '["a", "b", "c"]',
-  startTime: '2024-12-13T14:21:23.051Z'
+  startTime: '2024-12-13T14:43:35.485Z'
 }
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:623:15)
     at callback (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:70:17)
onLogEvent {
   metadata: {
-    eventId: '31cf7c7e-0dac-429d-ad4c-b8bd2e12b83b',
-    rootEventId: '31cf7c7e-0dac-429d-ad4c-b8bd2e12b83b'
+    eventId: '062efcda-762b-4f4d-9a2e-d9c79abf2cae',
+    rootEventId: '062efcda-762b-4f4d-9a2e-d9c79abf2cae'
   },
   prompt: '[\n' +
     '  {\n' +
@@ -2464,8 +1870,8 @@
     ']',
   rawOutput: '["d", "e", "f"]',
   parsedOutput: '["d", "e", "f"]',
-  startTime: '2024-12-13T14:21:23.475Z'
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:657: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: 1734099685, tv_nsec: 155253000 }, latency: 137.060167ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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 }
+  startTime: '2024-12-13T14:43:35.925Z'
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:657: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: 1734101017, tv_nsec: 418733000 }, latency: 144.0895ms, message: "Request failed: https://api.openai.com/v1/chat/completions\n{\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:1585:18)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:654:7) {
   code: 'GenericFailure'
diff --git a/tools/bump-version b/tools/bump-version
index 6c91fbf39..db8996cda 100755
--- a/tools/bump-version
+++ b/tools/bump-version
@@ -22,6 +22,7 @@ Options:
     --ruby         Bump patch for ruby
     --vscode       Bump patch for vscode
     --all          Bump all versions [default]
+    --allow-dirty  Allow dirty git status
 EOF
 }
 
@@ -49,6 +50,7 @@ _python_mode=0
 _ruby_mode=0
 _vscode_mode=0
 _all_mode=0
+_allow_dirty_mode=0
 
 while [ $# -gt 0 ]; do
     case "$1" in
@@ -76,6 +78,10 @@ while [ $# -gt 0 ]; do
             _all_mode=1
             shift
             ;;
+        --allow-dirty)
+            _allow_dirty_mode=1
+            shift
+            ;;
         --) # End of all options
             shift
             break
@@ -112,14 +118,18 @@ git pull --tags
 echo "Checking git diff..."
 # # Ensure clean git status
 if ! git diff --quiet; then
-    echo "Error: Git status is not clean. Please commit or stash your changes."
-    exit 1
+    if [ "$_allow_dirty_mode" -eq 1 ]; then
+        echo "Warning: Git status is not clean. Proceeding due to --allow-dirty flag."
+    else
+        echo "Error: Git status is not clean. Please commit or stash your changes."
+        exit 1
+    fi
 fi
 
 PRE_BUMP_VERSION=$(grep "current_version =" tools/versions/engine.cfg | awk '{print $3}')
 
 echo "Checking for changes from version $PRE_BUMP_VERSION in 'engine/language_client_codegen/src'..."
-GIT_DIFF_OUTPUT=$(git diff ${PRE_BUMP_VERSION} -- 'engine/language_client_codegen/src')
+GIT_DIFF_OUTPUT=$(git diff ${PRE_BUMP_VERSION} -- 'engine/language_client_codegen/src' || true)
 
 if [ -z "$GIT_DIFF_OUTPUT" ]; then
     echo "No changes detected."
@@ -156,7 +166,11 @@ fi
 
 cd "${_repo_root}/tools"
 if [ "$_all_mode" -eq 1 ]; then
-  bump2version --config-file ./versions/engine.cfg $version_bump
+  if [ "$_allow_dirty_mode" -eq 1 ]; then
+    bump2version --config-file ./versions/engine.cfg $version_bump --allow-dirty
+  else
+    bump2version --config-file ./versions/engine.cfg $version_bump
+  fi
   bump2version --config-file ./versions/python.cfg $version_bump --allow-dirty
   bump2version --config-file ./versions/typescript.cfg $version_bump --allow-dirty
   bump2version --config-file ./versions/ruby.cfg $version_bump --allow-dirty
diff --git a/tools/versions/engine.cfg b/tools/versions/engine.cfg
index b885fafbf..838ad4149 100644
--- a/tools/versions/engine.cfg
+++ b/tools/versions/engine.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.70.2
+current_version = 0.70.3
 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 48e067ef0..a8ca71672 100644
--- a/tools/versions/integ-tests.cfg
+++ b/tools/versions/integ-tests.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.70.2
+current_version = 0.70.3
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/python.cfg b/tools/versions/python.cfg
index 060dbfb24..1ad210a55 100644
--- a/tools/versions/python.cfg
+++ b/tools/versions/python.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.70.2
+current_version = 0.70.3
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/ruby.cfg b/tools/versions/ruby.cfg
index 236e2ce41..13305dc99 100644
--- a/tools/versions/ruby.cfg
+++ b/tools/versions/ruby.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.70.2
+current_version = 0.70.3
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/typescript.cfg b/tools/versions/typescript.cfg
index 358d57e8a..d148c9bf0 100644
--- a/tools/versions/typescript.cfg
+++ b/tools/versions/typescript.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.70.2
+current_version = 0.70.3
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/vscode.cfg b/tools/versions/vscode.cfg
index 5b6257586..268252cec 100644
--- a/tools/versions/vscode.cfg
+++ b/tools/versions/vscode.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.70.2
+current_version = 0.70.3
 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 08cd8c3ec..6028b6729 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.70.2",
+  "version": "0.70.3",
   "publisher": "Boundary",
   "repository": "https://github.com/BoundaryML/baml",
   "homepage": "https://www.boundaryml.com",