From 6da1bf8fc7cb8483462b1f5fbe2d606587ae65ec Mon Sep 17 00:00:00 2001 From: hellovai Date: Tue, 26 Nov 2024 10:01:06 -0800 Subject: [PATCH] chore: Bump version to 0.69.0 (#1196) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump version to 0.69.0\n\n❌ Typescript integ tests\n❌ Python integ tests\n\nGenerated by bump-version script. ---- > [!IMPORTANT] > Bump project version to 0.69.0 with updated changelog and note on unrun integration tests. > > - **Version Bump**: > - Update version to `0.69.0` in `Cargo.lock`, `Cargo.toml`, and `baml.gemspec`. > - **Changelog**: > - Add entries for version `0.69.0` with documentation updates, new features, and bug fixes. > - **Integration Tests**: > - Note that TypeScript and Python integration tests were not run. > > This description was created by [Ellipsis](https://www.ellipsis.dev?ref=BoundaryML%2Fbaml&utm_source=github&utm_medium=referral) for 593207aa244e7be7a0b551186bb5a760cb772548. It will automatically update as commits are pushed. --- CHANGELOG.md | 32 + 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 | 1755 ++++++++-------- integ-tests/ruby/baml_client/inlined.rb | 2 +- .../typescript/baml_client/inlinedbaml.ts | 2 +- integ-tests/typescript/test-report.html | 1799 ++++++----------- 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 +- 19 files changed, 1605 insertions(+), 2049 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5d46878e..02db853fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,38 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. +## [0.69.0](https://github.com/boundaryml/baml/compare/0.68.0..0.69.0) - 2024-11-26 + +### Documentation +- Move documentation link higher in README.md for better visibility (#1190) - ([aaa1149](https://github.com/boundaryml/baml/commit/aaa1149acca0b4552b2d84aba6e6ee933a3a6d6b)) - Dex +- Update Vertex docs for different publishers (#1191) - ([66b2274](https://github.com/boundaryml/baml/commit/66b2274f895615f15b5a6edba51444b7d98dcaa5)) - Antonio Sarosi +- Update TypeScript installation docs to use `pnpm exec` instead of deprecated `pnpx` (#1144) - ([56194b8](https://github.com/boundaryml/baml/commit/56194b8084a08447dfb6ca5bf537289cd36022c4)) - Manav Bokinala +- Update LM Studio documentation (#1176) - ([7689ce7](https://github.com/boundaryml/baml/commit/7689ce7c3c42d49a020b81e0bdca16ef8e0209c7)) - Jeff Winkler + +### Features +- Support enums & literals as map keys (#1178) - ([39e0271](https://github.com/boundaryml/baml/commit/39e0271f605234535cc53470a6aedff07aaa0c6c)) - Antonio Sarosi +- Parse triple backtick strings, discarding the info header (#1162) - ([353b21e](https://github.com/boundaryml/baml/commit/353b21e0ba3689420dfea6ff50a9454cf87fa199)) - Samuel Lijin +- Add ability to validate types for template strings (#1161) - ([a578cc2](https://github.com/boundaryml/baml/commit/a578cc287abbd9c23697adc4c83bcf0979916fcf)) - hellovai +- Support single line quoteless JSON parsing (#1170) - ([b1b9cab](https://github.com/boundaryml/baml/commit/b1b9cabcd51f87afef0ef54c7ecd0e2349d97f83)) - hellovai +- Generated code includes docstrings from BAML source docstrings (#1177) - ([170ece9](https://github.com/boundaryml/baml/commit/170ece9e8d72e235a7f5d628739899cd564ee995)) - Greg Hale +- Add ability to parse clients statically whenever possible (#1193) - ([03d9475](https://github.com/boundaryml/baml/commit/03d947581ceb56a3c3498f2746f697ce06a55077)) - hellovai +- Support setting all env vars for AWS-bedrock (#1179) - ([fcdbdfb](https://github.com/boundaryml/baml/commit/fcdbdfbb80e5e7d09411b0e55aa0039b0be998bc)) - hellovai +- Add constraints to test blocks (#1185) - ([cafd2ea](https://github.com/boundaryml/baml/commit/cafd2ea35ac0d3129ddddb7c4fc81561a7316657)) - Greg Hale +- Add sum jinja filter (#1174) - ([2353862](https://github.com/boundaryml/baml/commit/2353862730ed3be9b354a9f6a6c20c4c75a6058f)) - Greg Hale +- Add openrouter key (#1186) - ([28d58c0](https://github.com/boundaryml/baml/commit/28d58c060320154bddfef03bdd6de67d27e26c0f)) - aaronvg + +### Bug Fixes +- Fix image path in README.md (#1190) - ([aaa1149](https://github.com/boundaryml/baml/commit/aaa1149acca0b4552b2d84aba6e6ee933a3a6d6b)) - Dex +- Fix template string highlights (#1182) - ([60c823a](https://github.com/boundaryml/baml/commit/60c823a000507e6667670f96f1607ba2ea160c57)) - aaronvg +- Fix nextjs and TS server hot-reload (#1183) - ([22e6bbb](https://github.com/boundaryml/baml/commit/22e6bbb7dbe125b40f72d37e6fb8a73e603aade8)) - aaronvg +- Fix lang name (#1188) - ([8c3d536](https://github.com/boundaryml/baml/commit/8c3d5363dd36c32a512430f970da8c76788335e3)) - aaronvg +- Make id optional as gemini doesn't include it in openai generic (#1187) - ([97d1cd4](https://github.com/boundaryml/baml/commit/97d1cd48dc80bdfaeb08bf8a27b65c21a48145bd)) - aaronvg +- Correctly compute required_env_vars even for shorthand clients (#1164) - ([8b51b6e](https://github.com/boundaryml/baml/commit/8b51b6eb186b8c2853139e37e87a69a87e893059)) - hellovai +- Report wrong keyword errors in type defs (#1166) - ([3b1d152](https://github.com/boundaryml/baml/commit/3b1d15230c9ba6dae3cb8d9f0f7f7e9b75f8f00e)) - Antonio Sarosi +- Remove win32-arm64 support for now to fix yarn and deno builds (#1173) - ([c0234d7](https://github.com/boundaryml/baml/commit/c0234d730915506097ff17b54afd7316fdc850cd)) - aaronvg +- Validate fieldnames and types when using pydantic codegen (#1189) - ([93b393d](https://github.com/boundaryml/baml/commit/93b393ded048817fdb7ffef65cb698f9edb14764)) - Greg Hale + + ## [0.68.0](https://github.com/boundaryml/baml/compare/0.67.0..0.68.0) - 2024-11-11 ### Documentation diff --git a/engine/Cargo.lock b/engine/Cargo.lock index c9a9327ec..633e6eccf 100644 --- a/engine/Cargo.lock +++ b/engine/Cargo.lock @@ -785,7 +785,7 @@ dependencies = [ [[package]] name = "baml-cli" -version = "0.68.0" +version = "0.69.0" dependencies = [ "ambassador", "anyhow", @@ -872,7 +872,7 @@ dependencies = [ [[package]] name = "baml-lib" -version = "0.68.0" +version = "0.69.0" dependencies = [ "base64 0.13.1", "dissimilar", @@ -912,7 +912,7 @@ dependencies = [ [[package]] name = "baml-runtime" -version = "0.68.0" +version = "0.69.0" dependencies = [ "ambassador", "anyhow", @@ -1008,7 +1008,7 @@ dependencies = [ [[package]] name = "baml-schema-build" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "baml-runtime", @@ -1046,7 +1046,7 @@ dependencies = [ [[package]] name = "baml-types" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "clap", @@ -1175,7 +1175,7 @@ dependencies = [ [[package]] name = "bstd" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "assert_cmd", @@ -2559,7 +2559,7 @@ dependencies = [ [[package]] name = "internal-baml-codegen" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "askama", @@ -2584,7 +2584,7 @@ dependencies = [ [[package]] name = "internal-baml-core" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "baml-types", @@ -2621,7 +2621,7 @@ dependencies = [ [[package]] name = "internal-baml-diagnostics" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "colored", @@ -2634,7 +2634,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "askama", @@ -2655,7 +2655,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja-types" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "askama", @@ -2674,7 +2674,7 @@ dependencies = [ [[package]] name = "internal-baml-parser-database" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "baml-types", @@ -2699,7 +2699,7 @@ dependencies = [ [[package]] name = "internal-baml-prompt-parser" -version = "0.68.0" +version = "0.69.0" dependencies = [ "internal-baml-diagnostics", "internal-baml-schema-ast", @@ -2711,7 +2711,7 @@ dependencies = [ [[package]] name = "internal-baml-schema-ast" -version = "0.68.0" +version = "0.69.0" dependencies = [ "baml-types", "bstd", @@ -2727,7 +2727,7 @@ dependencies = [ [[package]] name = "internal-llm-client" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "baml-types", @@ -2825,7 +2825,7 @@ checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" [[package]] name = "jsonish" -version = "0.68.0" +version = "0.69.0" dependencies = [ "anyhow", "assert-json-diff", diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 041a886f7..a914a70c6 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.68.0" +version = "0.69.0" authors = ["Boundary "] description = "BAML Toolchain" diff --git a/engine/language_client_python/pyproject.toml b/engine/language_client_python/pyproject.toml index 604a29bcb..c45887498 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.68.0" +version = "0.69.0" description = "BAML python bindings (pyproject.toml)" readme = "README.md" authors = [["Boundary", "contact@boundaryml.com"]] diff --git a/engine/language_client_ruby/baml.gemspec b/engine/language_client_ruby/baml.gemspec index f22f06b3a..453c1e388 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.68.0" + spec.version = "0.69.0" spec.authors = ["BoundaryML"] spec.email = ["contact@boundaryml.com"] diff --git a/engine/language_client_typescript/package.json b/engine/language_client_typescript/package.json index 6fe0a726f..49c03f2d6 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -1,6 +1,6 @@ { "name": "@boundaryml/baml", - "version": "0.68.0", + "version": "0.69.0", "description": "BAML typescript bindings (package.json)", "repository": { "type": "git", diff --git a/integ-tests/baml_src/generators.baml b/integ-tests/baml_src/generators.baml index 360bb5a8b..600b98e53 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.68.0" + version "0.69.0" } generator lang_typescript { output_type typescript output_dir "../typescript" - version "0.68.0" + version "0.69.0" } generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" - version "0.68.0" + version "0.69.0" } // generator openapi { // output_type rest/openapi // output_dir "../openapi" -// version "0.68.0" +// version "0.69.0" // on_generate "rm .gitignore" // } diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index c0fb4f46e..77e075a28 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.68.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.68.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.68.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.68.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.69.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.69.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.69.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.69.0\"\n// on_generate \"rm .gitignore\"\n// }\n", "test-files/aliases/aliased-inputs.baml": "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml": "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml": "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", diff --git a/integ-tests/python/report.html b/integ-tests/python/report.html index 61d9ab562..836cd8432 100644 --- a/integ-tests/python/report.html +++ b/integ-tests/python/report.html @@ -3,11 +3,11 @@
Test Report

Summary

100
2 failed 98 passed

Tests

tests/test_functions.py 295 0:03:14.061376

PASSED test_env_vars_reset 0:00:01.749110

Setup

Call

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

Summary

100
2 failed 98 passed

Tests

tests/test_functions.py 295 0:03:17.317594

PASSED test_env_vars_reset 0:00:01.619202

Setup

Call

Captured stdout call
Context depth is greater than 0!
 Except but ending trace!
 Context depth is greater than 0!
-
Captured stderr call
[2024-11-26T00:34:23Z WARN  baml_events] Function ExtractPeople:
-    Client: GPT4 (<unknown>) - 431ms
+
Captured stderr call
[2024-11-26T16:55:45Z WARN  baml_events] Function ExtractPeople:
+    Client: GPT4 (<unknown>) - 164ms
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -33,8 +33,8 @@
         }
     }
     
-[2024-11-26T00:34:24Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 783ms. StopReason: stop. Tokens(in/out): 124/22
+[2024-11-26T16:55:46Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1058ms. StopReason: stop. Tokens(in/out): 124/22
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -61,10 +61,10 @@
         "hair_color": "BLACK"
       }
     ]
-

Teardown

PASSED test_sync 0:00:00.366913

Setup

Call

Captured stdout call
got response key
+

Teardown

PASSED test_sync 0:00:00.365498

Setup

Call

Captured stdout call
got response key
 true
 52
-
Captured stderr call
[2024-11-26T00:34:25Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+
Captured stderr call
[2024-11-26T16:55:46Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
     Client: GPT35 (gpt-3.5-turbo-0125) - 363ms. StopReason: stop. Tokens(in/out): 19/5
     ---PROMPT---
     [chat] user: Print these values back to me:
@@ -78,8 +78,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.406893

Setup

Call

Captured stderr call
[2024-11-26T00:34:25Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 404ms. StopReason: stop. Tokens(in/out): 15/1
+

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.871252

Setup

Call

Captured stderr call
[2024-11-26T16:55:47Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 869ms. StopReason: stop. Tokens(in/out): 15/1
     ---PROMPT---
     [chat] user: Return this value back to me: true
     
@@ -87,8 +87,8 @@
     true
     ---Parsed Response (string)---
     "true"
-

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.357174

Setup

Call

Captured stderr call
[2024-11-26T00:34:25Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 354ms. StopReason: stop. Tokens(in/out): 23/9
+

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.402276

Setup

Call

Captured stderr call
[2024-11-26T16:55:48Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 399ms. StopReason: stop. Tokens(in/out): 23/9
     ---PROMPT---
     [chat] user: Return this value back to me: ["a", "b", "c"]
     
@@ -96,23 +96,23 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

FAILED TestAllInputs::test_return_literal_union 0:00:00.428855

baml_py.internal_monkeypatch.BamlValidationError: BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: : Failed to find any (1 | true | "string output") in 3 items
-  - : Expected 1, got Object([("Answer", Number(Number(1)))]).
-  - : Expected true, got Object([("Answer", Number(Number(1)))]).
-  - : Expected "string output", got Object([("Answer", Number(Number(1)))])., raw_output={
-  "Answer": 1
+

Teardown

FAILED TestAllInputs::test_return_literal_union 0:00:00.504889

baml_py.internal_monkeypatch.BamlValidationError: BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: : Failed to find any (1 | true | "string output") in 3 items
+  - : Expected 1, got Object([("response", Boolean(true))]).
+  - : Expected true, got Object([("response", Boolean(true))]).
+  - : Expected "string output", got Object([("response", Boolean(true))])., raw_output={
+  "response": true
 }, prompt=[chat] user: Return one of these values: 
 Answer in JSON using any of these schemas:
 1 or true or "string output"
-)

Setup

Call

self = 
+)

Setup

Call

self = 
 
 >   ???
 
 tests/test_functions.py:115: 
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
 
-self = , input = 'a'
-baml_options = {}
+self = 
+input = 'a', baml_options = {}
 
     async def LiteralUnionsTest(
         self,
@@ -137,17 +137,17 @@
       )
 >     return cast(Union[Literal[1], Literal[True], Literal["string output"]], raw.cast_to(types, types))
 E     baml_py.internal_monkeypatch.BamlValidationError: BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: : Failed to find any (1 | true | "string output") in 3 items
-E       - : Expected 1, got Object([("Answer", Number(Number(1)))]).
-E       - : Expected true, got Object([("Answer", Number(Number(1)))]).
-E       - : Expected "string output", got Object([("Answer", Number(Number(1)))])., raw_output={
-E       "Answer": 1
+E       - : Expected 1, got Object([("response", Boolean(true))]).
+E       - : Expected true, got Object([("response", Boolean(true))]).
+E       - : Expected "string output", got Object([("response", Boolean(true))])., raw_output={
+E       "response": true
 E     }, prompt=[chat] user: Return one of these values: 
 E     Answer in JSON using any of these schemas:
 E     1 or true or "string output"
 E     )
 
-baml_client/async_client.py:1408: BamlValidationError
Captured stderr call
[2024-11-26T00:34:26Z WARN  baml_events] Function LiteralUnionsTest:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 426ms. StopReason: stop. Tokens(in/out): 31/9
+baml_client/async_client.py:1408: BamlValidationError
Captured stderr call
[2024-11-26T16:55:48Z WARN  baml_events] Function LiteralUnionsTest:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 502ms. StopReason: stop. Tokens(in/out): 31/8
     ---PROMPT---
     [chat] user: Return one of these values: 
     Answer in JSON using any of these schemas:
@@ -155,15 +155,15 @@
     
     ---LLM REPLY---
     {
-      "Answer": 1
+      "response": true
     }
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed to find any (1 | true | "string output") in 3 items
-      - <root>: Expected 1, got Object([("Answer", Number(Number(1)))]).
-      - <root>: Expected true, got Object([("Answer", Number(Number(1)))]).
-      - <root>: Expected "string output", got Object([("Answer", Number(Number(1)))]).
-

Teardown

PASSED TestAllInputs::test_constraints 0:00:00.838754

Setup

Call

Captured stderr call
[2024-11-26T00:34:27Z INFO  baml_events] Function PredictAge:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 827ms. StopReason: stop. Tokens(in/out): 116/36
+      - <root>: Expected 1, got Object([("response", Boolean(true))]).
+      - <root>: Expected true, got Object([("response", Boolean(true))]).
+      - <root>: Expected "string output", got Object([("response", Boolean(true))]).
+

Teardown

PASSED TestAllInputs::test_constraints 0:00:00.690783

Setup

Call

Captured stderr call
[2024-11-26T16:55:49Z INFO  baml_events] Function PredictAge:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 683ms. StopReason: stop. Tokens(in/out): 116/36
     ---PROMPT---
     [chat] user: Using your understanding of the historical popularity
     of names, predict the age of a person with the name
@@ -188,7 +188,7 @@
       "planetary_age": {
         "age": 41
       },
-      "certainty": 100,
+      "certainty": 95,
       "species": "Homo sapiens"
     }
     ---Parsed Response (class FooAny)---
@@ -206,7 +206,7 @@
         }
       },
       "certainty": {
-        "value": 100,
+        "value": 95,
         "checks": {
           "unreasonably_certain": {
             "name": "unreasonably_certain",
@@ -236,8 +236,8 @@
         }
       }
     }
-

Teardown

PASSED TestAllInputs::test_constraint_union_variant_checking 0:00:00.721323

Setup

Call

Captured stderr call
[2024-11-26T00:34:27Z INFO  baml_events] Function ExtractContactInfo:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 708ms. StopReason: stop. Tokens(in/out): 98/39
+

Teardown

PASSED TestAllInputs::test_constraint_union_variant_checking 0:00:00.771390

Setup

Call

Captured stderr call
[2024-11-26T16:55:50Z INFO  baml_events] Function ExtractContactInfo:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 761ms. StopReason: stop. Tokens(in/out): 98/35
     ---PROMPT---
     [chat] user: Extract a primary contact info, and if possible a secondary contact
     info, from this document:
@@ -260,11 +260,11 @@
     
     ---LLM REPLY---
     {
-      "primary": {
-        "value": "help@boundaryml.com"
+      primary: {
+        value: "help@boundaryml.com"
       },
-      "secondary": {
-        "value": "111-222-3333"
+      secondary: {
+        value: "111-222-3333"
       }
     }
     ---Parsed Response (class ContactInfo)---
@@ -276,8 +276,8 @@
         "value": "111-222-3333"
       }
     }
-

Teardown

PASSED TestAllInputs::test_return_malformed_constraint 0:00:00.529349

Setup

Call

Captured stderr call
[2024-11-26T00:34:28Z WARN  baml_events] Function ReturnMalformedConstraints:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 527ms. StopReason: stop. Tokens(in/out): 28/9
+

Teardown

PASSED TestAllInputs::test_return_malformed_constraint 0:00:00.919024

Setup

Call

Captured stderr call
[2024-11-26T16:55:50Z WARN  baml_events] Function ReturnMalformedConstraints:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 916ms. StopReason: stop. Tokens(in/out): 28/9
     ---PROMPT---
     [chat] user: Return the integer after 1
     
@@ -294,10 +294,10 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=0, unparsed=1
       - <root>: Failed to parse field foo: foo: Failed to evaluate constraints: unknown method: object has no method named length (in <string>:1)
         - foo: Failed to evaluate constraints: unknown method: object has no method named length (in <string>:1)
-

Teardown

PASSED TestAllInputs::test_use_malformed_constraint 0:00:00.001317

Setup

Call

Captured stderr call
[2024-11-26T00:34:28Z 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_use_malformed_constraint 0:00:00.001280

Setup

Call

Captured stderr call
[2024-11-26T16:55:50Z 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.453934

Setup

Call

Captured stderr call
[2024-11-26T00:34:28Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 452ms. StopReason: stop. Tokens(in/out): 19/5
+

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.379368

Setup

Call

Captured stderr call
[2024-11-26T16:55:51Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 377ms. StopReason: stop. Tokens(in/out): 19/5
     ---PROMPT---
     [chat] user: Print these values back to me:
     key
@@ -310,8 +310,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.525176

Setup

Call

Captured stderr call
[2024-11-26T00:34:29Z INFO  baml_events] Function TestMulticlassNamedArgs:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 522ms. StopReason: stop. Tokens(in/out): 25/11
+

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.464965

Setup

Call

Captured stderr call
[2024-11-26T16:55:51Z INFO  baml_events] Function TestMulticlassNamedArgs:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 462ms. StopReason: stop. Tokens(in/out): 25/11
     ---PROMPT---
     [chat] user: Print these values back to me:
     key
@@ -330,8 +330,8 @@
     64
     ---Parsed Response (string)---
     "key\ntrue\n52\nkey\ntrue\n64"
-

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.347136

Setup

Call

Captured stderr call
[2024-11-26T00:34:29Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 344ms. StopReason: stop. Tokens(in/out): 18/4
+

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.606994

Setup

Call

Captured stderr call
[2024-11-26T16:55:52Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 605ms. StopReason: stop. Tokens(in/out): 18/4
     ---PROMPT---
     [chat] user: Print these values back to me:
     ["TWO"]
@@ -340,8 +340,8 @@
     ["TWO"]
     ---Parsed Response (string)---
     "[\"TWO\"]"
-

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.369850

Setup

Call

Captured stderr call
[2024-11-26T00:34:30Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 367ms. StopReason: stop. Tokens(in/out): 18/3
+

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.317750

Setup

Call

Captured stderr call
[2024-11-26T16:55:52Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 315ms. StopReason: stop. Tokens(in/out): 18/3
     ---PROMPT---
     [chat] user: Return this value back to me: 3.12
     
@@ -349,8 +349,8 @@
     3.12
     ---Parsed Response (string)---
     "3.12"
-

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.327321

Setup

Call

Captured stderr call
[2024-11-26T00:34:30Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 325ms. StopReason: stop. Tokens(in/out): 17/2
+

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.462908

Setup

Call

Captured stderr call
[2024-11-26T16:55:53Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 461ms. StopReason: stop. Tokens(in/out): 17/2
     ---PROMPT---
     [chat] user: Return this value back to me: 3566
     
@@ -358,8 +358,8 @@
     3566
     ---Parsed Response (string)---
     "3566"
-

Teardown

PASSED TestAllInputs::test_single_literal_int 0:00:00.299279

Setup

Call

Captured stderr call
[2024-11-26T00:34:30Z INFO  baml_events] Function TestNamedArgsLiteralInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 297ms. StopReason: stop. Tokens(in/out): 16/1
+

Teardown

PASSED TestAllInputs::test_single_literal_int 0:00:00.420210

Setup

Call

Captured stderr call
[2024-11-26T16:55:53Z INFO  baml_events] Function TestNamedArgsLiteralInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 418ms. StopReason: stop. Tokens(in/out): 16/1
     ---PROMPT---
     [chat] user: Return this value back to me: 1
     
@@ -367,8 +367,8 @@
     1
     ---Parsed Response (string)---
     "1"
-

Teardown

PASSED TestAllInputs::test_single_literal_bool 0:00:00.882065

Setup

Call

Captured stderr call
[2024-11-26T00:34:31Z INFO  baml_events] Function TestNamedArgsLiteralBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 880ms. StopReason: stop. Tokens(in/out): 15/1
+

Teardown

PASSED TestAllInputs::test_single_literal_bool 0:00:00.303175

Setup

Call

Captured stderr call
[2024-11-26T16:55:53Z INFO  baml_events] Function TestNamedArgsLiteralBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 299ms. StopReason: stop. Tokens(in/out): 15/1
     ---PROMPT---
     [chat] user: Return this value back to me: true
     
@@ -376,8 +376,8 @@
     true
     ---Parsed Response (string)---
     "true"
-

Teardown

PASSED TestAllInputs::test_single_literal_string 0:00:00.435087

Setup

Call

Captured stderr call
[2024-11-26T00:34:32Z INFO  baml_events] Function TestNamedArgsLiteralString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 433ms. StopReason: stop. Tokens(in/out): 16/2
+

Teardown

PASSED TestAllInputs::test_single_literal_string 0:00:00.314409

Setup

Call

Captured stderr call
[2024-11-26T16:55:54Z INFO  baml_events] Function TestNamedArgsLiteralString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 312ms. StopReason: stop. Tokens(in/out): 16/2
     ---PROMPT---
     [chat] user: Return this value back to me: My String
     
@@ -385,8 +385,8 @@
     My String
     ---Parsed Response (string)---
     "My String"
-

Teardown

PASSED TestAllInputs::test_class_with_literal_prop 0:00:01.559398

Setup

Call

Captured stderr call
[2024-11-26T00:34:33Z INFO  baml_events] Function FnLiteralClassInputOutput:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1555ms. StopReason: stop. Tokens(in/out): 30/13
+

Teardown

PASSED TestAllInputs::test_class_with_literal_prop 0:00:00.720734

Setup

Call

Captured stderr call
[2024-11-26T16:55:54Z INFO  baml_events] Function FnLiteralClassInputOutput:
+    Client: GPT4 (gpt-4o-2024-08-06) - 717ms. StopReason: stop. Tokens(in/out): 30/13
     ---PROMPT---
     [chat] user: Return the same object you were given.
     Answer in JSON using this schema:
@@ -404,8 +404,8 @@
     {
       "prop": "hello"
     }
-

Teardown

PASSED TestAllInputs::test_literal_classs_with_literal_union_prop 0:00:00.642134

Setup

Call

Captured stderr call
[2024-11-26T00:34:34Z INFO  baml_events] Function FnLiteralUnionClassInputOutput:
-    Client: GPT4 (gpt-4o-2024-08-06) - 638ms. StopReason: stop. Tokens(in/out): 49/13
+

Teardown

PASSED TestAllInputs::test_literal_classs_with_literal_union_prop 0:00:01.320595

Setup

Call

Captured stderr call
[2024-11-26T16:55:56Z INFO  baml_events] Function FnLiteralUnionClassInputOutput:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1316ms. StopReason: stop. Tokens(in/out): 49/13
     ---PROMPT---
     [chat] user: Return the same object you were given.
     Answer in JSON using any of these schemas:
@@ -427,8 +427,8 @@
     {
       "prop": "one"
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.504573

Setup

Call

Captured stderr call
[2024-11-26T00:34:34Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 502ms. StopReason: stop. Tokens(in/out): 29/15
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:03.919335

Setup

Call

Captured stderr call
[2024-11-26T16:56:00Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 3916ms. StopReason: stop. Tokens(in/out): 29/15
     ---PROMPT---
     [chat] user: Return this value back to me: {"lorem": "ipsum", "dolor": "sit"}
     
@@ -439,8 +439,8 @@
       "lorem": "ipsum",
       "dolor": "sit"
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.583404

Setup

Call

Captured stderr call
[2024-11-26T00:34:35Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 579ms. StopReason: stop. Tokens(in/out): 28/14
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.526154

Setup

Call

Captured stderr call
[2024-11-26T16:56:00Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 522ms. StopReason: stop. Tokens(in/out): 28/14
     ---PROMPT---
     [chat] user: Return this value back to me: {"lorem": {
         "word": "ipsum",
@@ -456,8 +456,8 @@
         "word": "ipsum"
       }
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.468936

Setup

Call

Captured stderr call
[2024-11-26T00:34:35Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 466ms. StopReason: stop. Tokens(in/out): 25/11
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.520990

Setup

Call

Captured stderr call
[2024-11-26T16:56:01Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 518ms. StopReason: stop. Tokens(in/out): 25/11
     ---PROMPT---
     [chat] user: Return this value back to me: {"lorem": {"word": "ipsum"}}
     
@@ -469,8 +469,8 @@
         "word": "ipsum"
       }
     }
-

Teardown

PASSED TestAllInputs::test_enum_key_in_map 0:00:00.770730

Setup

Call

Captured stderr call
[2024-11-26T00:34:36Z INFO  baml_events] Function InOutEnumMapKey:
-    Client: openai/gpt-4o (gpt-4o-2024-08-06) - 763ms. StopReason: stop. Tokens(in/out): 43/20
+

Teardown

PASSED TestAllInputs::test_enum_key_in_map 0:00:00.674149

Setup

Call

Captured stderr call
[2024-11-26T16:56:01Z INFO  baml_events] Function InOutEnumMapKey:
+    Client: openai/gpt-4o (gpt-4o-2024-08-06) - 670ms. StopReason: stop. Tokens(in/out): 43/20
     ---PROMPT---
     [chat] user: Merge these: {"A": "A"} {"B": "B"}
     
@@ -480,8 +480,8 @@
     ---LLM REPLY---
     ```json
     {
-      "A": "A",
-      "B": "B"
+        "A": "A",
+        "B": "B"
     }
     ```
     ---Parsed Response (map<string, string>)---
@@ -489,8 +489,8 @@
       "A": "A",
       "B": "B"
     }
-

Teardown

PASSED TestAllInputs::test_literal_string_union_key_in_map 0:00:00.853689

Setup

Call

Captured stderr call
[2024-11-26T00:34:37Z INFO  baml_events] Function InOutLiteralStringUnionMapKey:
-    Client: openai/gpt-4o (gpt-4o-2024-08-06) - 850ms. StopReason: stop. Tokens(in/out): 48/20
+

Teardown

PASSED TestAllInputs::test_literal_string_union_key_in_map 0:00:00.905860

Setup

Call

Captured stderr call
[2024-11-26T16:56:02Z INFO  baml_events] Function InOutLiteralStringUnionMapKey:
+    Client: openai/gpt-4o (gpt-4o-2024-08-06) - 901ms. StopReason: stop. Tokens(in/out): 48/20
     ---PROMPT---
     [chat] user: Merge these:
     
@@ -513,8 +513,8 @@
       "one": "1",
       "two": "2"
     }
-

Teardown

PASSED TestAllInputs::test_single_literal_string_key_in_map 0:00:00.907595

Setup

Call

Captured stderr call
[2024-11-26T00:34:38Z INFO  baml_events] Function InOutSingleLiteralStringMapKey:
-    Client: openai/gpt-4o (gpt-4o-2024-08-06) - 904ms. StopReason: stop. Tokens(in/out): 35/13
+

Teardown

PASSED TestAllInputs::test_single_literal_string_key_in_map 0:00:00.855693

Setup

Call

Captured stderr call
[2024-11-26T16:56:03Z INFO  baml_events] Function InOutSingleLiteralStringMapKey:
+    Client: openai/gpt-4o (gpt-4o-2024-08-06) - 852ms. StopReason: stop. Tokens(in/out): 35/10
     ---PROMPT---
     [chat] user: Return the same map you were given:
     
@@ -525,25 +525,23 @@
     
     ---LLM REPLY---
     ```json
-    {
-      "key": "1"
-    }
+    {"key": "1"}
     ```
     ---Parsed Response (map<string, string>)---
     {
       "key": "1"
     }
-

Teardown

PASSED test_should_work_for_all_outputs 0:00:04.834969

Setup

Call

Captured stderr call
[2024-11-26T00:34:38Z INFO  baml_events] Function FnOutputBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 332ms. StopReason: stop. Tokens(in/out): 15/1
+

Teardown

PASSED test_should_work_for_all_outputs 0:00:04.958059

Setup

Call

Captured stderr call
[2024-11-26T16:56:04Z INFO  baml_events] Function FnOutputBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 329ms. StopReason: stop. Tokens(in/out): 15/1
     ---PROMPT---
     [chat] user: Return a true: Answer as a bool
     
     ---LLM REPLY---
-    true
+    True
     ---Parsed Response (bool)---
     true
-[2024-11-26T00:34:39Z INFO  baml_events] Function FnOutputInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 365ms. StopReason: stop. Tokens(in/out): 17/1
+[2024-11-26T16:56:04Z INFO  baml_events] Function FnOutputInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 499ms. StopReason: stop. Tokens(in/out): 17/1
     ---PROMPT---
     [chat] user: Return the integer 5 with no additional context.
     
@@ -551,18 +549,18 @@
     5
     ---Parsed Response (int)---
     5
-[2024-11-26T00:34:39Z INFO  baml_events] Function FnOutputLiteralInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 398ms. StopReason: stop. Tokens(in/out): 18/7
+[2024-11-26T16:56:04Z INFO  baml_events] Function FnOutputLiteralInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 399ms. StopReason: stop. Tokens(in/out): 18/7
     ---PROMPT---
     [chat] user: Return an integer: Answer using this specific value:
     5
     
     ---LLM REPLY---
-    The integer value is 5.
+    The integer would be: 5
     ---Parsed Response (int)---
     5
-[2024-11-26T00:34:39Z INFO  baml_events] Function FnOutputLiteralBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 308ms. StopReason: stop. Tokens(in/out): 18/1
+[2024-11-26T16:56:05Z INFO  baml_events] Function FnOutputLiteralBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 339ms. StopReason: stop. Tokens(in/out): 18/1
     ---PROMPT---
     [chat] user: Return a false: Answer using this specific value:
     false
@@ -571,18 +569,18 @@
     false
     ---Parsed Response (bool)---
     false
-[2024-11-26T00:34:40Z INFO  baml_events] Function FnOutputLiteralString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 716ms. StopReason: stop. Tokens(in/out): 21/8
+[2024-11-26T16:56:05Z INFO  baml_events] Function FnOutputLiteralString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 427ms. StopReason: stop. Tokens(in/out): 21/4
     ---PROMPT---
     [chat] user: Return a string: Answer using this specific value:
     "example output"
     
     ---LLM REPLY---
-    The answer is: "example output"
+    "example output"
     ---Parsed Response (string)---
     "example output"
-[2024-11-26T00:34:41Z INFO  baml_events] Function FnOutputClassList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 719ms. StopReason: stop. Tokens(in/out): 46/62
+[2024-11-26T16:56:06Z INFO  baml_events] Function FnOutputClassList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 797ms. StopReason: stop. Tokens(in/out): 46/63
     ---PROMPT---
     [chat] user: Return a JSON array that follows this schema: 
     Answer with a JSON Array using this schema:
@@ -598,35 +596,35 @@
     ---LLM REPLY---
     [
       {
-        "prop1": "apple",
-        "prop2": 10
+        "prop1": "Apple",
+        "prop2": 5
       },
       {
-        "prop1": "banana",
-        "prop2": 20
+        "prop1": "Banana",
+        "prop2": 3
       },
       {
-        "prop1": "orange",
-        "prop2": 15
+        "prop1": "Orange",
+        "prop2": 7
       }
     ]
     ---Parsed Response (list<class TestOutputClass>)---
     [
       {
-        "prop1": "apple",
-        "prop2": 10
+        "prop1": "Apple",
+        "prop2": 5
       },
       {
-        "prop1": "banana",
-        "prop2": 20
+        "prop1": "Banana",
+        "prop2": 3
       },
       {
-        "prop1": "orange",
-        "prop2": 15
+        "prop1": "Orange",
+        "prop2": 7
       }
     ]
-[2024-11-26T00:34:41Z INFO  baml_events] Function FnOutputClassWithEnum:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 487ms. StopReason: stop. Tokens(in/out): 48/20
+[2024-11-26T16:56:06Z INFO  baml_events] Function FnOutputClassWithEnum:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 523ms. StopReason: stop. Tokens(in/out): 48/19
     ---PROMPT---
     [chat] user: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -640,16 +638,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello World",
-      "prop2": "TWO"
+      "prop1": "Hello world",
+      "prop2": "ONE"
     }
     ---Parsed Response (class TestClassWithEnum)---
     {
-      "prop1": "Hello World",
-      "prop2": "TWO"
+      "prop1": "Hello world",
+      "prop2": "ONE"
     }
-[2024-11-26T00:34:42Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 510ms. StopReason: stop. Tokens(in/out): 50/20
+[2024-11-26T16:56:07Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 520ms. StopReason: stop. Tokens(in/out): 50/18
     ---PROMPT---
     [chat] user: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -664,16 +662,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, World!",
+      "prop1": "Hello",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, World!",
+      "prop1": "Hello",
       "prop2": 540
     }
-[2024-11-26T00:34:42Z INFO  baml_events] Function FnEnumListOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 380ms. StopReason: stop. Tokens(in/out): 51/12
+[2024-11-26T16:56:08Z INFO  baml_events] Function FnEnumListOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 527ms. StopReason: stop. Tokens(in/out): 51/11
     ---PROMPT---
     [chat] user: Print out two of these values randomly selected from the list below in a json array.
     
@@ -686,16 +684,16 @@
     
     ---LLM REPLY---
     [
-      'TWO',
+      'ONE',
       'THREE'
     ]
     ---Parsed Response (list<enum EnumOutput>)---
     [
-      "TWO",
+      "ONE",
       "THREE"
     ]
-[2024-11-26T00:34:43Z INFO  baml_events] Function FnEnumOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 593ms. StopReason: stop. Tokens(in/out): 42/26
+[2024-11-26T16:56:08Z INFO  baml_events] Function FnEnumOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 571ms. StopReason: stop. Tokens(in/out): 42/23
     ---PROMPT---
     [chat] user: Choose one of these values randomly. Before you give the answer, write out an unrelated haiku about the ocean.
     
@@ -706,15 +704,15 @@
     - THREE
     
     ---LLM REPLY---
-    Waves crash on the shore
-    Whispers of the deep blue sea
-    Nature's symphony
+    Waves crash upon shore
+    Majestic and powerful
+    Ocean's timeless roar
     
-    Randomly selected value: TWO
+    Randomly chosen value: TWO
     ---Parsed Response (enum EnumOutput)---
     "TWO"
-

Teardown

PASSED test_should_work_with_image_url 0:00:01.997576

Setup

Call

Captured stderr call
[2024-11-26T00:34:45Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1994ms. StopReason: stop. Tokens(in/out): 275/7
+

Teardown

PASSED test_should_work_with_image_url 0:00:01.227375

Setup

Call

Captured stderr call
[2024-11-26T16:56:09Z INFO  baml_events] Function TestImageInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1224ms. StopReason: stop. Tokens(in/out): 275/7
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder: https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png>
     
@@ -722,56 +720,48 @@
     Green ogre, brown vest.
     ---Parsed Response (string)---
     "Green ogre, brown vest."
-

Teardown

PASSED test_should_work_with_image_list 0:00:03.173481

Setup

Call

Captured stderr call
[2024-11-26T00:34:48Z INFO  baml_events] Function TestImageListInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 3169ms. StopReason: stop. Tokens(in/out): 528/9
+

Teardown

PASSED test_should_work_with_image_list 0:00:02.086553

Setup

Call

Captured stderr call
[2024-11-26T16:56:11Z INFO  baml_events] Function TestImageListInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 2084ms. StopReason: stop. Tokens(in/out): 528/7
     ---PROMPT---
     [chat] user: What colors do these have in common? [<image_placeholder: https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png>,<image_placeholder: https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png>]
     
     ---LLM REPLY---
-    The images have the color green in common.
+    Both images have shades of green.
     ---Parsed Response (string)---
-    "The images have the color green in common."
-

Teardown

PASSED test_should_work_with_vertex 0:00:11.122248

Setup

Call

Captured stderr call
[2024-11-26T00:34:59Z INFO  baml_events] Function TestVertex:
-    Client: Vertex () - 11117ms. StopReason: "STOP". Tokens(in/out): 8/563
+    "Both images have shades of green."
+

Teardown

PASSED test_should_work_with_vertex 0:00:07.674229

Setup

Call

Captured stderr call
[2024-11-26T16:56:19Z INFO  baml_events] Function TestVertex:
+    Client: Vertex () - 7671ms. StopReason: "STOP". Tokens(in/out): 8/363
     ---PROMPT---
     [chat] user: Write a nice short story about donkey kong
     
     ---LLM REPLY---
-    The morning sun, dappled and green through the jungle canopy, woke Donkey Kong with a yawn. He scratched his furry belly, remembering the dream he'd had – a mountain of perfectly ripe bananas, each one singing a merry tune. He glanced over at the pile of bananas beside him, already half gone from his midnight snack. 
-    
-    His stomach rumbled, reminding him of more important matters. Food. He grabbed a plump banana and peeled it with practiced ease. Just as he was about to take a bite, a tiny voice squeaked, "Daddy, I want banana!"
-    
-    Donkey Kong smiled. His little buddy, Diddy Kong, was awake. Diddy, full of energy even before breakfast, was already bouncing around like a furry pinball. Donkey Kong chuckled and broke the banana in half, offering one to Diddy. 
-    
-    "Easy now, little buddy," he rumbled, his voice deep and booming. "We need to go find more bananas after breakfast."
+    The last rays of sun were painting the jungle canopy in shades of orange and purple. Donkey Kong, his fur dusted with golden light, sat atop his banana hoard, a melancholic sigh escaping his chest. He missed them. The humans, with their funny clothes and even funnier habit of stealing his bananas. 
     
-    Diddy, mouth full of banana, nodded vigorously. After a quick breakfast, they set off into the jungle. Donkey Kong moved with surprising grace for his size, swinging from vines and leaping over streams. Diddy followed close behind, mimicking his every move with his own brand of chaotic energy.
+    It hadn't always been this way. Donkey Kong vividly remembered the days of chasing that plucky plumber, Mario, through elaborate barrel mazes. The thrill of the chase, the ingenuity of his traps, the frustrated yelps of the plumber – it had all been a game, a strange sort of friendship built on stolen bananas and daring escapes.
     
-    They searched high and low, but the banana trees seemed to be strangely empty.  Discouraged, they came to a stop by a rushing waterfall. Just as Donkey Kong was about to suggest they head back, Diddy let out a joyous whoop. 
+    But things had changed. Mario hadn't been seen in the jungle for years. Rumors whispered through the trees, tales of a distant princess and a world beyond the island. Donkey Kong, despite his gruff exterior, felt a pang of loneliness. 
     
-    "Look, Daddy!" He pointed towards a small cave hidden behind the cascading water.  Donkey Kong squinted. He could just make out a faint golden glow emanating from within. Could it be…?
+    Suddenly, a familiar sound pierced the evening quiet. The distinctive *thump-thump-thump* of Mario's jumps. Donkey Kong's head shot up, his heart pounding like a jungle drum. Could it be?
     
-    With a roar of determination, Donkey Kong plunged through the waterfall.  Diddy, a little worried, followed close behind. The cave was small, but what it lacked in size, it made up for in sheer, glorious abundance. 
+    Emerging from the foliage, looking a little older, a little wearier, was Mario. He smiled sheepishly at Donkey Kong, holding up a single, glistening banana.
     
-    Bananas.
+    "Brought you this one, old friend," Mario said, his voice carrying across the clearing. "Figured it was time for another game, wouldn't you say?"
     
-    Mountains of them, piled high to the ceiling.  Each one was perfectly ripe, glowing with an ethereal light. Donkey Kong and Diddy stared, speechless for a moment, before erupting in joyous yells.  Diddy jumped up and down, his signature red cap almost flying off his head. Donkey Kong let out a triumphant roar that echoed through the jungle.
-    
-    They feasted until they could eat no more, filling their tummies and their hearts with happiness. It was the best banana discovery ever, and as Donkey Kong settled down for a nap, his belly full and Diddy snuggled sleepily by his side, he knew that no matter what tomorrow brought, they would face it together, fueled by friendship and the memory of the secret cave of glowing bananas. 
+    Donkey Kong roared, a sound full of joy and anticipation, and beat his chest.  He might miss the peace, but some friendships, much like stolen bananas, were just too sweet to resist.  The chase, Donkey Kong realized with a grin, was back on. 
     
     ---Parsed Response (string)---
-    "The morning sun, dappled and green through the jungle canopy, woke Donkey Kong with a yawn. He scratched his furry belly, remembering the dream he'd had – a mountain of perfectly ripe bananas, each one singing a merry tune. He glanced over at the pile of bananas beside him, already half gone from his midnight snack. \n\nHis stomach rumbled, reminding him of more important matters. Food. He grabbed a plump banana and peeled it with practiced ease. Just as he was about to take a bite, a tiny voice squeaked, \"Daddy, I want banana!\"\n\nDonkey Kong smiled. His little buddy, Diddy Kong, was awake. Diddy, full of energy even before breakfast, was already bouncing around like a furry pinball. Donkey Kong chuckled and broke the banana in half, offering one to Diddy. \n\n\"Easy now, little buddy,\" he rumbled, his voice deep and booming. \"We need to go find more bananas after breakfast.\"\n\nDiddy, mouth full of banana, nodded vigorously. After a quick breakfast, they set off into the jungle. Donkey Kong moved with surprising grace for his size, swinging from vines and leaping over streams. Diddy followed close behind, mimicking his every move with his own brand of chaotic energy.\n\nThey searched high and low, but the banana trees seemed to be strangely empty.  Discouraged, they came to a stop by a rushing waterfall. Just as Donkey Kong was about to suggest they head back, Diddy let out a joyous whoop. \n\n\"Look, Daddy!\" He pointed towards a small cave hidden behind the cascading water.  Donkey Kong squinted. He could just make out a faint golden glow emanating from within. Could it be…?\n\nWith a roar of determination, Donkey Kong plunged through the waterfall.  Diddy, a little worried, followed close behind. The cave was small, but what it lacked in size, it made up for in sheer, glorious abundance. \n\nBananas.\n\nMountains of them, piled high to the ceiling.  Each one was perfectly ripe, glowing with an ethereal light. Donkey Kong and Diddy stared, speechless for a moment, before erupting in joyous yells.  Diddy jumped up and down, his signature red cap almost flying off his head. Donkey Kong let out a triumphant roar that echoed through the jungle.\n\nThey feasted until they could eat no more, filling their tummies and their hearts with happiness. It was the best banana discovery ever, and as Donkey Kong settled down for a nap, his belly full and Diddy snuggled sleepily by his side, he knew that no matter what tomorrow brought, they would face it together, fueled by friendship and the memory of the secret cave of glowing bananas. \n"
-

Teardown

PASSED test_should_work_with_image_base64 0:00:01.577244

Setup

Call

Captured stderr call
[2024-11-26T00:35:00Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1548ms. StopReason: stop. Tokens(in/out): 275/8
+    "The last rays of sun were painting the jungle canopy in shades of orange and purple. Donkey Kong, his fur dusted with golden light, sat atop his banana hoard, a melancholic sigh escaping his chest. He missed them. The humans, with their funny clothes and even funnier habit of stealing his bananas. \n\nIt hadn't always been this way. Donkey Kong vividly remembered the days of chasing that plucky plumber, Mario, through elaborate barrel mazes. The thrill of the chase, the ingenuity of his traps, the frustrated yelps of the plumber – it had all been a game, a strange sort of friendship built on stolen bananas and daring escapes.\n\nBut things had changed. Mario hadn't been seen in the jungle for years. Rumors whispered through the trees, tales of a distant princess and a world beyond the island. Donkey Kong, despite his gruff exterior, felt a pang of loneliness. \n\nSuddenly, a familiar sound pierced the evening quiet. The distinctive *thump-thump-thump* of Mario's jumps. Donkey Kong's head shot up, his heart pounding like a jungle drum. Could it be?\n\nEmerging from the foliage, looking a little older, a little wearier, was Mario. He smiled sheepishly at Donkey Kong, holding up a single, glistening banana.\n\n\"Brought you this one, old friend,\" Mario said, his voice carrying across the clearing. \"Figured it was time for another game, wouldn't you say?\"\n\nDonkey Kong roared, a sound full of joy and anticipation, and beat his chest.  He might miss the peace, but some friendships, much like stolen bananas, were just too sweet to resist.  The chase, Donkey Kong realized with a grin, was back on. \n"
+

Teardown

PASSED test_should_work_with_image_base64 0:00:01.754712

Setup

Call

Captured stderr call
[2024-11-26T16:56:21Z INFO  baml_events] Function TestImageInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1742ms. StopReason: stop. Tokens(in/out): 275/6
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder base64>
     
     ---LLM REPLY---
-    Green, smiling, animated ogre.
+    Green ogre in vest.
     ---Parsed Response (string)---
-    "Green, smiling, animated ogre."
-

Teardown

PASSED test_should_work_with_audio_base64 0:00:01.141043

Setup

Call

Captured stderr call
[2024-11-26T00:35:02Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 1125ms. StopReason: "STOP". Tokens(in/out): 114/1
+    "Green ogre in vest."
+

Teardown

PASSED test_should_work_with_audio_base64 0:00:00.922804

Setup

Call

Captured stderr call
[2024-11-26T16:56:22Z INFO  baml_events] Function AudioInput:
+    Client: Gemini (gemini-1.5-pro-001) - 916ms. StopReason: "STOP". Tokens(in/out): 114/1
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
@@ -780,8 +770,8 @@
     
     ---Parsed Response (string)---
     "Yes \n"
-

Teardown

PASSED test_should_work_with_audio_url 0:00:01.322203

Setup

Call

Captured stderr call
[2024-11-26T00:35:03Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 1054ms. StopReason: "STOP". Tokens(in/out): 178/1
+

Teardown

PASSED test_should_work_with_audio_url 0:00:01.341258

Setup

Call

Captured stderr call
[2024-11-26T16:56:23Z INFO  baml_events] Function AudioInput:
+    Client: Gemini (gemini-1.5-pro-001) - 1090ms. StopReason: "STOP". Tokens(in/out): 178/1
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
@@ -790,10 +780,10 @@
     
     ---Parsed Response (string)---
     "No \n"
-

Teardown

PASSED test_works_with_retries2 0:00:02.572222

Setup

Call

Captured stdout call
Expected error LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "user", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1732581305, tv_nsec: 706095000 }, latency: 336.116875ms, 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 }
-
Captured stderr call
[2024-11-26T00:35:06Z WARN  baml_events] Function TestRetryExponential:
+

Teardown

PASSED test_works_with_retries2 0:00:02.238205

Setup

Call

Captured stdout call
Expected error LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "user", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1732640185, tv_nsec: 664748000 }, latency: 208.712417ms, 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 }
+
Captured stderr call
[2024-11-26T16:56:25Z WARN  baml_events] Function TestRetryExponential:
     (3 other previous tries)
-    Client: RetryClientExponential (<unknown>) - 336ms
+    Client: RetryClientExponential (<unknown>) - 208ms
     ---PROMPT---
     [chat] user: Say a haiku
     
@@ -810,20 +800,20 @@
         }
     }
     
-

Teardown

PASSED test_works_with_fallbacks 0:00:02.786931

Setup

Call

Captured stderr call
[2024-11-26T00:35:08Z INFO  baml_events] Function TestFallbackClient:
+

Teardown

PASSED test_works_with_fallbacks 0:00:02.096143

Setup

Call

Captured stderr call
[2024-11-26T16:56:27Z INFO  baml_events] Function TestFallbackClient:
     (5 other previous tries)
-    Client: GPT35 (gpt-3.5-turbo-0125) - 688ms. StopReason: stop. Tokens(in/out): 14/16
+    Client: GPT35 (gpt-3.5-turbo-0125) - 525ms. StopReason: stop. Tokens(in/out): 14/16
     ---PROMPT---
     [chat] user: Say a haiku about mexico.
     
     ---LLM REPLY---
-    Colorful fiestas
-    Mariachis playing tunes
-    Mexico's charm shines
+    Vibrant colors bloom
+    Ancient rhythms fill the air
+    Mexico's beauty
     ---Parsed Response (string)---
-    "Colorful fiestas\nMariachis playing tunes\nMexico's charm shines"
-

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.028621

Setup

Call

Captured stderr call
[2024-11-26T00:35:08Z WARN  baml_events] Function TestSingleFallbackClient:
-    Client: FaultyAzureClient (<unknown>) - 25ms
+    "Vibrant colors bloom\nAncient rhythms fill the air\nMexico's beauty"
+

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.039650

Setup

Call

Captured stderr call
[2024-11-26T16:56:28Z WARN  baml_events] Function TestSingleFallbackClient:
+    Client: FaultyAzureClient (<unknown>) - 37ms
     ---PROMPT---
     [chat] user: Say a haiku about mexico.
     
@@ -832,198 +822,206 @@
     max_tokens: 4096
     ---ERROR (Unspecified error code: 2)---
     reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("unknown-resource-id.openai.azure.com")), port: None, path: "/openai/deployments/unknown-deployment-id/chat/completions", query: None, fragment: None }, source: hyper_util::client::legacy::Error(Connect, ConnectError("dns error", Custom { kind: Uncategorized, error: "failed to lookup address information: nodename nor servname provided, or not known" })) }
-

Teardown

PASSED test_claude 0:00:01.943309

Setup

Call

Captured stderr call
[2024-11-26T00:35:10Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 1939ms. StopReason: "end_turn". Tokens(in/out): 19/35
+

Teardown

PASSED test_claude 0:00:01.080573

Setup

Call

Captured stderr call
[2024-11-26T16:56:29Z INFO  baml_events] Function PromptTestClaude:
+    Client: Sonnet (claude-3-5-sonnet-20241022) - 1077ms. StopReason: "end_turn". Tokens(in/out): 19/31
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here's a haiku about Mt. Rainier:
+    Here's a haiku about Mount Rainier:
     
-    Rainier stands proud, bold
-    Fourteen thousand feet of snow
-    Pierce the summer clouds
+    Rainier stands supreme
+    Fourteen thousand feet skyward
+    Guardian of home
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier:\n\nRainier stands proud, bold\nFourteen thousand feet of snow\nPierce the summer clouds"
-

Teardown

PASSED test_gemini 0:00:07.602795

Setup

Call

Captured stdout call
LLM output from Gemini: Dr. Pete Pepper wasn't a real doctor, but his name always elicited a chuckle. He owned a small, dusty bookstore tucked between a bakery and a vintage clothing shop. It was the kind of place where sunlight snuck through the cracks in the blinds, illuminating motes of dust dancing above stacks of forgotten stories. 
-
-One rainy afternoon, a young girl named Lily shuffled in, her frown deeper than the puddles gathering on the sidewalk outside. "My dad says reading is boring," she mumbled, kicking at a loose floorboard. 
+    "Here's a haiku about Mount Rainier:\n\nRainier stands supreme\nFourteen thousand feet skyward\nGuardian of home"
+

Teardown

PASSED test_gemini 0:00:07.972470

Setup

Call

Captured stdout call
LLM output from Gemini: Mildred adjusted her thick glasses and peered through the dusty antique shop window.  A glint of crimson caught her eye. It was a bottle, nestled between a chipped porcelain doll and a tarnished silver hand mirror.  The glass was a deep, rich red and a faded label proclaimed, in an elegant script, "Dr. Pepper."
 
-Dr. Pete, perched on a rolling ladder behind the counter, raised an eyebrow. "Did he now?" He hopped down, his knees protesting with a loud creak. "And what does your dad find exciting?"
+Mildred had never been one for sugary drinks, but something about the bottle, the air of forgotten elegance, called to her. She entered the shop, the bell above the door chiming a greeting.
 
-"He likes fixing cars," Lily admitted, her voice barely a whisper. "He says books don't go anywhere."
+"That old bottle?" chuckled the shopkeeper, a portly man with a handlebar mustache. "Haven't seen that one in years. Found it in my grandmother's attic. Said it belonged to a beau of hers, a real smooth talker."
 
-Dr. Pete smiled, his eyes twinkling. "Ah, but that's where he's wrong," he said, leading Lily through a labyrinth of bookshelves. "Books take you everywhere! They can take you to the moon, to the bottom of the ocean, even inside a car engine!" 
+Mildred bought the bottle, intrigued by the story.  At home, she carefully washed away the years of dust. As she held it up to the light, she imagined this "beau" – a dapper young man in a straw boater hat, offering the drink to his sweetheart. 
 
-He pulled out a book with a shiny cover depicting a sleek red race car. Lily's eyes widened. Dr. Pete opened it, and they both leaned in, the scent of old paper and ink filling the air. 
+Later that week, Mildred was feeling unusually adventurous.  She found herself in the soda aisle of the grocery store, staring at rows of brightly colored Dr Pepper bottles.  She grabbed one, remembering the antique bottle and the story of the smooth-talking beau. 
 
-From that day on, Lily became a regular, her initial frown replaced by a wide, gap-toothed grin. The bookstore, once silent, echoed with her laughter as she devoured tales of daring adventurers, fantastical creatures, and yes, even the intricate workings of car engines. 
+The first sip was a revelation. A unique, complex flavor danced on her tongue – a hint of cherry, a touch of licorice, all wrapped in a comforting sweetness. It was unlike any soda she'd ever tasted. 
 
-Dr. Pete, with a twinkle in his eye and a book in his hand, had proven that sometimes, the most exciting journeys start in the quiet corners of a dusty bookstore. 
+From that day on, Dr Pepper became Mildred's guilty pleasure. Every sip was a trip back in time, a reminder of faded romance and hidden stories. And whenever she saw an antique shop, she couldn't help but peek inside, just in case another piece of Dr Pepper's history was waiting to be discovered. 
 
-
Captured stderr call
[2024-11-26T00:35:18Z INFO  baml_events] Function TestGemini:
-    Client: Gemini () - 7596ms. StopReason: "STOP". Tokens(in/out): 10/387
+
Captured stderr call
[2024-11-26T16:56:37Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 7969ms. StopReason: "STOP". Tokens(in/out): 10/393
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Dr. Pete Pepper wasn't a real doctor, but his name always elicited a chuckle. He owned a small, dusty bookstore tucked between a bakery and a vintage clothing shop. It was the kind of place where sunlight snuck through the cracks in the blinds, illuminating motes of dust dancing above stacks of forgotten stories. 
+    Mildred adjusted her thick glasses and peered through the dusty antique shop window.  A glint of crimson caught her eye. It was a bottle, nestled between a chipped porcelain doll and a tarnished silver hand mirror.  The glass was a deep, rich red and a faded label proclaimed, in an elegant script, "Dr. Pepper."
     
-    One rainy afternoon, a young girl named Lily shuffled in, her frown deeper than the puddles gathering on the sidewalk outside. "My dad says reading is boring," she mumbled, kicking at a loose floorboard. 
+    Mildred had never been one for sugary drinks, but something about the bottle, the air of forgotten elegance, called to her. She entered the shop, the bell above the door chiming a greeting.
     
-    Dr. Pete, perched on a rolling ladder behind the counter, raised an eyebrow. "Did he now?" He hopped down, his knees protesting with a loud creak. "And what does your dad find exciting?"
+    "That old bottle?" chuckled the shopkeeper, a portly man with a handlebar mustache. "Haven't seen that one in years. Found it in my grandmother's attic. Said it belonged to a beau of hers, a real smooth talker."
     
-    "He likes fixing cars," Lily admitted, her voice barely a whisper. "He says books don't go anywhere."
+    Mildred bought the bottle, intrigued by the story.  At home, she carefully washed away the years of dust. As she held it up to the light, she imagined this "beau" – a dapper young man in a straw boater hat, offering the drink to his sweetheart. 
     
-    Dr. Pete smiled, his eyes twinkling. "Ah, but that's where he's wrong," he said, leading Lily through a labyrinth of bookshelves. "Books take you everywhere! They can take you to the moon, to the bottom of the ocean, even inside a car engine!" 
+    Later that week, Mildred was feeling unusually adventurous.  She found herself in the soda aisle of the grocery store, staring at rows of brightly colored Dr Pepper bottles.  She grabbed one, remembering the antique bottle and the story of the smooth-talking beau. 
     
-    He pulled out a book with a shiny cover depicting a sleek red race car. Lily's eyes widened. Dr. Pete opened it, and they both leaned in, the scent of old paper and ink filling the air. 
+    The first sip was a revelation. A unique, complex flavor danced on her tongue – a hint of cherry, a touch of licorice, all wrapped in a comforting sweetness. It was unlike any soda she'd ever tasted. 
     
-    From that day on, Lily became a regular, her initial frown replaced by a wide, gap-toothed grin. The bookstore, once silent, echoed with her laughter as she devoured tales of daring adventurers, fantastical creatures, and yes, even the intricate workings of car engines. 
-    
-    Dr. Pete, with a twinkle in his eye and a book in his hand, had proven that sometimes, the most exciting journeys start in the quiet corners of a dusty bookstore. 
+    From that day on, Dr Pepper became Mildred's guilty pleasure. Every sip was a trip back in time, a reminder of faded romance and hidden stories. And whenever she saw an antique shop, she couldn't help but peek inside, just in case another piece of Dr Pepper's history was waiting to be discovered. 
     
     ---Parsed Response (string)---
-    "Dr. Pete Pepper wasn't a real doctor, but his name always elicited a chuckle. He owned a small, dusty bookstore tucked between a bakery and a vintage clothing shop. It was the kind of place where sunlight snuck through the cracks in the blinds, illuminating motes of dust dancing above stacks of forgotten stories. \n\nOne rainy afternoon, a young girl named Lily shuffled in, her frown deeper than the puddles gathering on the sidewalk outside. \"My dad says reading is boring,\" she mumbled, kicking at a loose floorboard. \n\nDr. Pete, perched on a rolling ladder behind the counter, raised an eyebrow. \"Did he now?\" He hopped down, his knees protesting with a loud creak. \"And what does your dad find exciting?\"\n\n\"He likes fixing cars,\" Lily admitted, her voice barely a whisper. \"He says books don't go anywhere.\"\n\nDr. Pete smiled, his eyes twinkling. \"Ah, but that's where he's wrong,\" he said, leading Lily through a labyrinth of bookshelves. \"Books take you everywhere! They can take you to the moon, to the bottom of the ocean, even inside a car engine!\" \n\nHe pulled out a book with a shiny cover depicting a sleek red race car. Lily's eyes widened. Dr. Pete opened it, and they both leaned in, the scent of old paper and ink filling the air. \n\nFrom that day on, Lily became a regular, her initial frown replaced by a wide, gap-toothed grin. The bookstore, once silent, echoed with her laughter as she devoured tales of daring adventurers, fantastical creatures, and yes, even the intricate workings of car engines. \n\nDr. Pete, with a twinkle in his eye and a book in his hand, had proven that sometimes, the most exciting journeys start in the quiet corners of a dusty bookstore. \n"
-

Teardown

PASSED test_gemini_streaming 0:00:08.970334

Setup

Call

Captured stdout call
LLM output from Gemini: The old diner was quiet, the silence broken only by the rhythmic whir of the ceiling fan and the sizzle of the grill. A lone figure sat at the counter, a Stetson pulled low over his eyes. He was nursing a glass of something dark and mysterious, the ice clinking softly against the rim. 
+    "Mildred adjusted her thick glasses and peered through the dusty antique shop window.  A glint of crimson caught her eye. It was a bottle, nestled between a chipped porcelain doll and a tarnished silver hand mirror.  The glass was a deep, rich red and a faded label proclaimed, in an elegant script, \"Dr. Pepper.\"\n\nMildred had never been one for sugary drinks, but something about the bottle, the air of forgotten elegance, called to her. She entered the shop, the bell above the door chiming a greeting.\n\n\"That old bottle?\" chuckled the shopkeeper, a portly man with a handlebar mustache. \"Haven't seen that one in years. Found it in my grandmother's attic. Said it belonged to a beau of hers, a real smooth talker.\"\n\nMildred bought the bottle, intrigued by the story.  At home, she carefully washed away the years of dust. As she held it up to the light, she imagined this \"beau\" – a dapper young man in a straw boater hat, offering the drink to his sweetheart. \n\nLater that week, Mildred was feeling unusually adventurous.  She found herself in the soda aisle of the grocery store, staring at rows of brightly colored Dr Pepper bottles.  She grabbed one, remembering the antique bottle and the story of the smooth-talking beau. \n\nThe first sip was a revelation. A unique, complex flavor danced on her tongue – a hint of cherry, a touch of licorice, all wrapped in a comforting sweetness. It was unlike any soda she'd ever tasted. \n\nFrom that day on, Dr Pepper became Mildred's guilty pleasure. Every sip was a trip back in time, a reminder of faded romance and hidden stories. And whenever she saw an antique shop, she couldn't help but peek inside, just in case another piece of Dr Pepper's history was waiting to be discovered. \n"
+

Teardown

PASSED test_gemini_streaming 0:00:07.885364

Setup

Call

Captured stdout call
LLM output from Gemini: Mildred wasn't like the other sodas. Coca-Cola was boisterous, always the center of attention. Sprite was bubbly and carefree. Root Beer was smooth and charming. But Mildred, or Dr. Pepper as she preferred, was an enigma. A complex symphony of 23 flavors, she was spicy and sweet, familiar yet surprising. 
+
+She sat on the top shelf of the corner store cooler, watching the world go by. People rarely chose her. They’d reach for the familiar comfort of a Coke or the lightheartedness of a Sprite.  
+
+One day, a young woman with bright eyes and a hesitant smile stood before the cooler. Her gaze darted over the colorful cans, landing on Dr. Pepper. 
 
-Ellie, the diner owner, knew the drink well. "Another Dr. Pepper, Earl?" she asked, wiping down the counter with a practiced hand. 
+“Hmm,” she murmured, “Never tried this one.” 
 
-Earl chuckled, a low rumble in his chest. "Ain't nothin' else like it, Ellie. Not in this town, not in this world."
+She pulled Dr. Pepper from the shelf. 
 
-Ellie smiled, knowing the truth behind his words. Dr. Pepper wasn't just a drink in this town; it was a legend. They said it tasted like the West Texas wind after a storm, like freedom and possibility all bottled up.
+“You look interesting,” the woman said, popping the tab. 
 
-Earl had been coming to the diner for over fifty years, always ordering the same thing. He claimed he tasted something different in every glass, a new story unfolding with each sip. 
+Dr. Pepper braced herself. Would she be too much? Too different? 
 
-One day, a young man, all city swagger and designer sunglasses, sauntered in. He ordered a cola, scoffing at Earl's Dr. Pepper. "Seriously, old timer?" he laughed. "That stuff is older than you are."
+The woman took a long sip, her eyes widening. 
 
-Earl took a long, slow sip, his eyes twinkling. "Son," he drawled, "you're right. It is older. It’s older than time itself. Each sip is a journey through history, a taste of memories yet to be made." 
+“Wow,” she breathed, “You’re amazing! You’re like… a party in my mouth!” 
 
-Intrigued, the young man hesitantly took a sip from Earl's glass. His eyes widened. He tasted the dusty roads, the scent of sagebrush, the thrill of a cattle drive at dawn. It was unlike anything he had ever experienced.
+A warm feeling spread through Dr. Pepper's aluminum shell. For the first time, she felt seen, appreciated for the unique blend of flavors she was. 
 
-From that day on, the young man became a regular, his love for Dr. Pepper rivaling even Earl's. The diner, once quiet, became a place where stories flowed as freely as the legendary drink. And Earl? He just smiled, knowing that the legend of Dr. Pepper, like a good story, would live on forever. 
+From that day on, the woman became a regular, always choosing Dr. Pepper.  And slowly, others started to follow.  They were intrigued by the woman's enjoyment, by the mystery of the 23 flavors. 
 
-
Captured stderr call
[2024-11-26T00:35:27Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 8953ms. StopReason: Stop. Tokens(in/out): unknown/unknown
+Dr. Pepper learned that being different wasn't a bad thing. It was her unique blend, her complexity, that made her special. She didn't need to be like the other sodas. She was Dr. Pepper, and that was more than enough.  She was the perfect choice for those looking for something different, something more. 
+
+
Captured stderr call
[2024-11-26T16:56:44Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 7879ms. StopReason: Stop. Tokens(in/out): unknown/unknown
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    The old diner was quiet, the silence broken only by the rhythmic whir of the ceiling fan and the sizzle of the grill. A lone figure sat at the counter, a Stetson pulled low over his eyes. He was nursing a glass of something dark and mysterious, the ice clinking softly against the rim. 
+    Mildred wasn't like the other sodas. Coca-Cola was boisterous, always the center of attention. Sprite was bubbly and carefree. Root Beer was smooth and charming. But Mildred, or Dr. Pepper as she preferred, was an enigma. A complex symphony of 23 flavors, she was spicy and sweet, familiar yet surprising. 
+    
+    She sat on the top shelf of the corner store cooler, watching the world go by. People rarely chose her. They’d reach for the familiar comfort of a Coke or the lightheartedness of a Sprite.  
+    
+    One day, a young woman with bright eyes and a hesitant smile stood before the cooler. Her gaze darted over the colorful cans, landing on Dr. Pepper. 
+    
+    “Hmm,” she murmured, “Never tried this one.” 
     
-    Ellie, the diner owner, knew the drink well. "Another Dr. Pepper, Earl?" she asked, wiping down the counter with a practiced hand. 
+    She pulled Dr. Pepper from the shelf. 
     
-    Earl chuckled, a low rumble in his chest. "Ain't nothin' else like it, Ellie. Not in this town, not in this world."
+    “You look interesting,” the woman said, popping the tab. 
     
-    Ellie smiled, knowing the truth behind his words. Dr. Pepper wasn't just a drink in this town; it was a legend. They said it tasted like the West Texas wind after a storm, like freedom and possibility all bottled up.
+    Dr. Pepper braced herself. Would she be too much? Too different? 
     
-    Earl had been coming to the diner for over fifty years, always ordering the same thing. He claimed he tasted something different in every glass, a new story unfolding with each sip. 
+    The woman took a long sip, her eyes widening. 
     
-    One day, a young man, all city swagger and designer sunglasses, sauntered in. He ordered a cola, scoffing at Earl's Dr. Pepper. "Seriously, old timer?" he laughed. "That stuff is older than you are."
+    “Wow,” she breathed, “You’re amazing! You’re like… a party in my mouth!” 
     
-    Earl took a long, slow sip, his eyes twinkling. "Son," he drawled, "you're right. It is older. It’s older than time itself. Each sip is a journey through history, a taste of memories yet to be made." 
+    A warm feeling spread through Dr. Pepper's aluminum shell. For the first time, she felt seen, appreciated for the unique blend of flavors she was. 
     
-    Intrigued, the young man hesitantly took a sip from Earl's glass. His eyes widened. He tasted the dusty roads, the scent of sagebrush, the thrill of a cattle drive at dawn. It was unlike anything he had ever experienced.
+    From that day on, the woman became a regular, always choosing Dr. Pepper.  And slowly, others started to follow.  They were intrigued by the woman's enjoyment, by the mystery of the 23 flavors. 
     
-    From that day on, the young man became a regular, his love for Dr. Pepper rivaling even Earl's. The diner, once quiet, became a place where stories flowed as freely as the legendary drink. And Earl? He just smiled, knowing that the legend of Dr. Pepper, like a good story, would live on forever. 
+    Dr. Pepper learned that being different wasn't a bad thing. It was her unique blend, her complexity, that made her special. She didn't need to be like the other sodas. She was Dr. Pepper, and that was more than enough.  She was the perfect choice for those looking for something different, something more. 
     
     ---Parsed Response (string)---
-    "The old diner was quiet, the silence broken only by the rhythmic whir of the ceiling fan and the sizzle of the grill. A lone figure sat at the counter, a Stetson pulled low over his eyes. He was nursing a glass of something dark and mysterious, the ice clinking softly against the rim. \n\nEllie, the diner owner, knew the drink well. \"Another Dr. Pepper, Earl?\" she asked, wiping down the counter with a practiced hand. \n\nEarl chuckled, a low rumble in his chest. \"Ain't nothin' else like it, Ellie. Not in this town, not in this world.\"\n\nEllie smiled, knowing the truth behind his words. Dr. Pepper wasn't just a drink in this town; it was a legend. They said it tasted like the West Texas wind after a storm, like freedom and possibility all bottled up.\n\nEarl had been coming to the diner for over fifty years, always ordering the same thing. He claimed he tasted something different in every glass, a new story unfolding with each sip. \n\nOne day, a young man, all city swagger and designer sunglasses, sauntered in. He ordered a cola, scoffing at Earl's Dr. Pepper. \"Seriously, old timer?\" he laughed. \"That stuff is older than you are.\"\n\nEarl took a long, slow sip, his eyes twinkling. \"Son,\" he drawled, \"you're right. It is older. It’s older than time itself. Each sip is a journey through history, a taste of memories yet to be made.\" \n\nIntrigued, the young man hesitantly took a sip from Earl's glass. His eyes widened. He tasted the dusty roads, the scent of sagebrush, the thrill of a cattle drive at dawn. It was unlike anything he had ever experienced.\n\nFrom that day on, the young man became a regular, his love for Dr. Pepper rivaling even Earl's. The diner, once quiet, became a place where stories flowed as freely as the legendary drink. And Earl? He just smiled, knowing that the legend of Dr. Pepper, like a good story, would live on forever. \n"
-

Teardown

PASSED test_aws 0:00:01.731086

Setup

Call

Captured stderr call
[2024-11-26T00:35:27Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-11-26T00:35:29Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1559ms. StopReason: max_tokens. Tokens(in/out): 25/100
+    "Mildred wasn't like the other sodas. Coca-Cola was boisterous, always the center of attention. Sprite was bubbly and carefree. Root Beer was smooth and charming. But Mildred, or Dr. Pepper as she preferred, was an enigma. A complex symphony of 23 flavors, she was spicy and sweet, familiar yet surprising. \n\nShe sat on the top shelf of the corner store cooler, watching the world go by. People rarely chose her. They’d reach for the familiar comfort of a Coke or the lightheartedness of a Sprite.  \n\nOne day, a young woman with bright eyes and a hesitant smile stood before the cooler. Her gaze darted over the colorful cans, landing on Dr. Pepper. \n\n“Hmm,” she murmured, “Never tried this one.” \n\nShe pulled Dr. Pepper from the shelf. \n\n“You look interesting,” the woman said, popping the tab. \n\nDr. Pepper braced herself. Would she be too much? Too different? \n\nThe woman took a long sip, her eyes widening. \n\n“Wow,” she breathed, “You’re amazing! You’re like… a party in my mouth!” \n\nA warm feeling spread through Dr. Pepper's aluminum shell. For the first time, she felt seen, appreciated for the unique blend of flavors she was. \n\nFrom that day on, the woman became a regular, always choosing Dr. Pepper.  And slowly, others started to follow.  They were intrigued by the woman's enjoyment, by the mystery of the 23 flavors. \n\nDr. Pepper learned that being different wasn't a bad thing. It was her unique blend, her complexity, that made her special. She didn't need to be like the other sodas. She was Dr. Pepper, and that was more than enough.  She was the perfect choice for those looking for something different, something more. \n"
+

Teardown

PASSED test_aws 0:00:01.895384

Setup

Call

Captured stderr call
[2024-11-26T16:56:44Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-11-26T16:56:46Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1725ms. StopReason: max_tokens. Tokens(in/out): 25/100
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     
     
-    As the sun rose over the small town of Ashford, Washington, a sense of awe washed over the residents. For on this day, they would be treated to a rare sight: a clear view of Mt. Rainier's towering peak.
+    The sun was setting over the Puget Sound, casting a warm orange glow over the landscape. Emma stood at the base of Mt. Rainier, her eyes fixed on the towering peak above her. She had always been fascinated by the mountain's grandeur, and today she had finally made the journey to see it up close.
     
-    The mountain, a dormant volcano, stood sentinel over the surrounding landscape, its snow-capped summit reaching for the clouds at an astonishing 14,411 feet. It was a sight that never failed to inspire, and today was no exception.
-    
-    Lena
+    As she gazed up at the mountain, Emma felt a sense of awe wash over her. Mt. Rainier was indeed a behemoth, its peak reaching for
     ---Parsed Response (string)---
-    "\n\nAs the sun rose over the small town of Ashford, Washington, a sense of awe washed over the residents. For on this day, they would be treated to a rare sight: a clear view of Mt. Rainier's towering peak.\n\nThe mountain, a dormant volcano, stood sentinel over the surrounding landscape, its snow-capped summit reaching for the clouds at an astonishing 14,411 feet. It was a sight that never failed to inspire, and today was no exception.\n\nLena"
-

Teardown

PASSED test_openai_shorthand 0:00:10.524816

Setup

Call

Captured stderr call
[2024-11-26T00:35:39Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 10516ms. StopReason: stop. Tokens(in/out): 18/695
+    "\n\nThe sun was setting over the Puget Sound, casting a warm orange glow over the landscape. Emma stood at the base of Mt. Rainier, her eyes fixed on the towering peak above her. She had always been fascinated by the mountain's grandeur, and today she had finally made the journey to see it up close.\n\nAs she gazed up at the mountain, Emma felt a sense of awe wash over her. Mt. Rainier was indeed a behemoth, its peak reaching for"
+

Teardown

PASSED test_openai_shorthand 0:00:08.915584

Setup

Call

Captured stderr call
[2024-11-26T16:56:55Z INFO  baml_events] Function TestOpenAIShorthand:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 8912ms. StopReason: stop. Tokens(in/out): 18/608
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time, in a small town nestled at the foot of the majestic Mount Rainier, the people lived in the shadow of its towering presence. Each morning, as the sun rose, it painted the snow-capped peak with hues of gold and pink, bringing warmth to the chilly air. The mountain stood tall, a steadfast guardian watching over the town and its inhabitants.
-    
-    In the heart of the town lived a young girl named Lila. With a spirit as vibrant as the wildflowers that dotted the meadows, Lila had always dreamt of climbing to the summit of Mount Rainier. She imagined herself standing at the top, feeling the clouds at her fingertips and the world sprawling out below her.
-    
-    One sunny day, filled with excitement, Lila shared her dream with her best friend, Sam. “We should climb it together!” she exclaimed, her eyes sparkling like the morning dew. Sam, though a bit more cautious, couldn't resist Lila's enthusiasm. They spent weeks preparing, gathering supplies, studying maps, and listening to the stories of seasoned climbers in the town.
+    Once upon a time in the Pacific Northwest, there was a mountain named Rainier. Towering majestically at 14,411 feet, Mt. Rainier was not just a mountain; it was a sentinel watching over the lush forests, sparkling rivers, and vibrant meadows below. With its snow-capped peak glistening under the sun, it stood as a symbol of strength and beauty.
     
-    Finally, the day of their adventure arrived. With backpacks packed and hearts pounding, they set off early in the morning. The path twisted and turned, winding through tall trees and over babbling brooks. As they climbed higher, the air grew cooler, and the view grew more breathtaking. Lila felt alive, her spirit soaring with the altitude.
+    In a small village at the foot of this grand giant, lived a curious girl named Elara. From her earliest days, she would gaze up at Mt. Rainier, captivated by its towering presence. Her grandmother would often tell her stories about the mountain. “It’s not just tall, dear,” she would say, her voice a whisper of reverence. “It’s alive. It holds the memories of the earth and the whispers of the winds.”
     
-    As they neared the summit, the trail became steeper, and the snow deepened. On a particularly challenging stretch, Sam paused, his breath coming in quick bursts. “Lila, it’s so tall... What if we can’t make it?” he asked, doubt creeping into his voice.
+    One early summer day, Elara decided that it was time to get a closer look. With a backpack filled with snacks, her trusty sketchbook, and a heart full of dreams, she set off toward the mountain. As she ascended, the lush forest enveloped her in a cocoon of greenery, and the air turned crisp with every step.
     
-    Lila looked up at the mountain, its peak piercing the sky. “But that’s what makes it beautiful, Sam,” she replied, her voice firm and filled with resolve. “It’s tall, and so are we! Let’s take it one step at a time.”
+    The journey was filled with the sweet songs of birds and the rustling of leaves. Elara climbed higher, her legs growing weary but her spirit undaunted. Finally, as she reached a clearing, she stood before the mountain, its true magnificence unveiling itself before her. 
     
-    With renewed determination, they pushed forward, each step fueled by their friendship and dreams. Finally, after hours of climbing, they reached a plateau that led to the summit. The moment they stepped onto the top of Mount Rainier, a feeling of pure joy washed over them. They stood together, arms raised in triumph, the world sprawling out in every direction beneath their feet.
+    Elara sat down on the grass, pulled out her sketchbook, and began to draw. As she sketched the mountain's rugged ridges and glistening glaciers, she felt an electric connection to it. In that moment, she understood that its height was not just a physical attribute; it was an embodiment of dreams, aspirations, and resilience. 
     
-    The town looked like a miniature model, and the rivers sparkled like ribbons of light. The clouds danced around them, and Lila felt like she could touch the sky. In that moment of accomplishment, they understood that the mountain, as tall as it was, symbolized more than just a physical challenge. It represented hope, perseverance, and the strength found in friendship.
+    As the sun began to set, bathing the peak in hues of gold and orange, Elara realized she hadn’t just climbed a mountain; she had found a piece of herself. With each brushstroke, she poured her heart into capturing Mt. Rainier—not just as a tall, unwavering giant, but as a source of inspiration. 
     
-    As the sun began to set, casting a warm glow over the summit, Lila and Sam sat side by side, taking it all in. They realized that it wasn’t just the height of the mountain that mattered, but the journey they had taken to get there. 
+    Eventually, it was time to head home. As Elara made her way down, she turned back for one last look. The mountain stood firm, a protector of secrets and stories, its silhouette against the twilight sky a reminder of the adventures yet to come.
     
-    With a smile, Lila turned to Sam and said, “We’re so much taller than we thought we could be.” And they both knew that together, they could conquer anything, even the biggest mountains in life.
+    From that day on, Elara returned to the mountain often, each time discovering new facets of its personality. She learned that while Mt. Rainier was tall, its real greatness lay in its ability to inspire those who looked up to it. To Elara, the mountain became more than just a piece of land; it was a companion in her journey of growth, a reminder to keep reaching for the heights, no matter how daunting they seemed. 
     
-    And as they made their way back down, laughter echoed through the valleys, a sweet reminder that the tallest of peaks were meant to be climbed, and the greatest adventures were done side by side.
+    And so, Mt. Rainier remained not just a mountain, but a beacon of hope for all who dared to dream.
     ---Parsed Response (string)---
-    "Once upon a time, in a small town nestled at the foot of the majestic Mount Rainier, the people lived in the shadow of its towering presence. Each morning, as the sun rose, it painted the snow-capped peak with hues of gold and pink, bringing warmth to the chilly air. The mountain stood tall, a steadfast guardian watching over the town and its inhabitants.\n\nIn the heart of the town lived a young girl named Lila. With a spirit as vibrant as the wildflowers that dotted the meadows, Lila had always dreamt of climbing to the summit of Mount Rainier. She imagined herself standing at the top, feeling the clouds at her fingertips and the world sprawling out below her.\n\nOne sunny day, filled with excitement, Lila shared her dream with her best friend, Sam. “We should climb it together!” she exclaimed, her eyes sparkling like the morning dew. Sam, though a bit more cautious, couldn't resist Lila's enthusiasm. They spent weeks preparing, gathering supplies, studying maps, and listening to the stories of seasoned climbers in the town.\n\nFinally, the day of their adventure arrived. With backpacks packed and hearts pounding, they set off early in the morning. The path twisted and turned, winding through tall trees and over babbling brooks. As they climbed higher, the air grew cooler, and the view grew more breathtaking. Lila felt alive, her spirit soaring with the altitude.\n\nAs they neared the summit, the trail became steeper, and the snow deepened. On a particularly challenging stretch, Sam paused, his breath coming in quick bursts. “Lila, it’s so tall... What if we can’t make it?” he asked, doubt creeping into his voice.\n\nLila looked up at the mountain, its peak piercing the sky. “But that’s what makes it beautiful, Sam,” she replied, her voice firm and filled with resolve. “It’s tall, and so are we! Let’s take it one step at a time.”\n\nWith renewed determination, they pushed forward, each step fueled by their friendship and dreams. Finally, after hours of climbing, they reached a plateau that led to the summit. The moment they stepped onto the top of Mount Rainier, a feeling of pure joy washed over them. They stood together, arms raised in triumph, the world sprawling out in every direction beneath their feet.\n\nThe town looked like a miniature model, and the rivers sparkled like ribbons of light. The clouds danced around them, and Lila felt like she could touch the sky. In that moment of accomplishment, they understood that the mountain, as tall as it was, symbolized more than just a physical challenge. It represented hope, perseverance, and the strength found in friendship.\n\nAs the sun began to set, casting a warm glow over the summit, Lila and Sam sat side by side, taking it all in. They realized that it wasn’t just the height of the mountain that mattered, but the journey they had taken to get there. \n\nWith a smile, Lila turned to Sam and said, “We’re so much taller than we thought we could be.” And they both knew that together, they could conquer anything, even the biggest mountains in life.\n\nAnd as they made their way back down, laughter echoed through the valleys, a sweet reminder that the tallest of peaks were meant to be climbed, and the greatest adventures were done side by side."
-

Teardown

PASSED test_openai_shorthand_streaming 0:00:09.234752

Setup

Call

Captured stderr call
[2024-11-26T00:35:48Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 9225ms. StopReason: stop. Tokens(in/out): 18/684
+    "Once upon a time in the Pacific Northwest, there was a mountain named Rainier. Towering majestically at 14,411 feet, Mt. Rainier was not just a mountain; it was a sentinel watching over the lush forests, sparkling rivers, and vibrant meadows below. With its snow-capped peak glistening under the sun, it stood as a symbol of strength and beauty.\n\nIn a small village at the foot of this grand giant, lived a curious girl named Elara. From her earliest days, she would gaze up at Mt. Rainier, captivated by its towering presence. Her grandmother would often tell her stories about the mountain. “It’s not just tall, dear,” she would say, her voice a whisper of reverence. “It’s alive. It holds the memories of the earth and the whispers of the winds.”\n\nOne early summer day, Elara decided that it was time to get a closer look. With a backpack filled with snacks, her trusty sketchbook, and a heart full of dreams, she set off toward the mountain. As she ascended, the lush forest enveloped her in a cocoon of greenery, and the air turned crisp with every step.\n\nThe journey was filled with the sweet songs of birds and the rustling of leaves. Elara climbed higher, her legs growing weary but her spirit undaunted. Finally, as she reached a clearing, she stood before the mountain, its true magnificence unveiling itself before her. \n\nElara sat down on the grass, pulled out her sketchbook, and began to draw. As she sketched the mountain's rugged ridges and glistening glaciers, she felt an electric connection to it. In that moment, she understood that its height was not just a physical attribute; it was an embodiment of dreams, aspirations, and resilience. \n\nAs the sun began to set, bathing the peak in hues of gold and orange, Elara realized she hadn’t just climbed a mountain; she had found a piece of herself. With each brushstroke, she poured her heart into capturing Mt. Rainier—not just as a tall, unwavering giant, but as a source of inspiration. \n\nEventually, it was time to head home. As Elara made her way down, she turned back for one last look. The mountain stood firm, a protector of secrets and stories, its silhouette against the twilight sky a reminder of the adventures yet to come.\n\nFrom that day on, Elara returned to the mountain often, each time discovering new facets of its personality. She learned that while Mt. Rainier was tall, its real greatness lay in its ability to inspire those who looked up to it. To Elara, the mountain became more than just a piece of land; it was a companion in her journey of growth, a reminder to keep reaching for the heights, no matter how daunting they seemed. \n\nAnd so, Mt. Rainier remained not just a mountain, but a beacon of hope for all who dared to dream."
+

Teardown

PASSED test_openai_shorthand_streaming 0:00:09.962984

Setup

Call

Captured stderr call
[2024-11-26T16:57:05Z INFO  baml_events] Function TestOpenAIShorthand:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 9957ms. StopReason: stop. Tokens(in/out): 18/686
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time, in the heart of the Pacific Northwest, stood the majestic Mt. Rainier, a towering giant cloaked in snow and mystery. The mountain was not just a geological wonder but also a guardian of tales, dreams, and adventures that surrounded its rocky slopes.
+    Once upon a time in the Pacific Northwest, towering majestically above the lush green valleys and serene lakes, stood Mt. Rainier. With its snow-capped peak glistening under the sun, it seemed to touch the clouds, a proud sentinel watching over the landscape below.
     
-    In a small town nestled at its base lived a young girl named Lila. Her days were filled with dreams of exploring the great outdoors. She often gazed up at Mt. Rainier, where the clouds kissed the peak and the sun painted its face in hues of orange and pink at dusk. To Lila, the mountain was a symbol of adventure and a challenge waiting to be conquered.
+    In a small town nestled at the base of this magnificent mountain lived a young girl named Elara. Ever since she could remember, Mt. Rainier had been a part of her life. Its grandeur inspired her dreams, and she would often gaze up at it from her bedroom window, imagining the adventures that lay atop its lofty summit.
     
-    One summer morning, she gathered her courage and decided to climb Mt. Rainier. With her backpack filled with snacks, a water bottle, and a trusty old map, she set off toward the trailhead, her heart bubbling with excitement. The path wound through ancient forests where tall evergreens whispered secrets to the wind, and streams sang cheerful songs as they danced over pebbles.
+    One day, as Elara played in her backyard, a wise old owl perched on a branch above her. “Why do you look at the mountain with such longing?” it hooted softly.
     
-    As she climbed higher, the air grew thinner, but Lila felt invigorated by the beauty surrounding her. Wildflowers blanketed the meadows, and the sweet scent of pine surrounded her like an embrace. With each step, she could feel Mt. Rainier’s spirit encouraging her.
+    Elara blinked in surprise. “Oh, wise owl, I dream of climbing Mt. Rainier! I want to see the world from its peak and touch the sky.”
     
-    Hours passed, and Lila reached a large boulder that jutted out, forming a perfect perch to catch her breath. As she paused, she noticed a group of mountain goats grazing nearby. Their nimble feet danced over the rocky terrain, reminding her of how small and insignificant she felt compared to the mountain’s grandeur. Yet, she stood tall, inspired and filled with determination.
+    The owl fluffed its feathers, thoughtful. “A noble dream, young one. But the journey to the top is not an easy one. It requires bravery, knowledge, and respect for the mountain’s might.”
     
-    After a short rest, she continued her ascent. The trail became steeper, but Lila was undeterred. She recollected a saying her grandmother used to share: “The tallest mountains can be climbed one step at a time.” With renewed strength, she pressed on, focusing on the ground beneath her feet, counting each step as a small victory.
+    Determined, Elara spent the following months learning everything she could about climbing. She read books, watched tutorials, and trained her body to become stronger. Each day, she looked up at the mountain, feeling its call echoing within her heart.
     
-    As the sun began to set, Lila finally reached the mountain’s summit. She stood at the top, breathless not just from the climb but from the view that sprawled before her. The world below was a tapestry of greens and blues, the valleys cradling shimmering lakes and winding rivers. She could see the horizon stretch endlessly, meeting the sky in a brilliant palette of oranges, purples, and golds.
+    Finally, the day came when she felt ready to embark on her adventure. With her backpack filled with supplies and her spirit high, Elara began her ascent. The trail twisted and turned, leading her through vibrant wildflower meadows and dense forests filled with the songs of chirping birds.
     
-    In that moment, Lila understood; Mt. Rainier was not just a mountain. It was a teacher. A reminder that the greatest heights are conquered not just by strength but by persistence, hope, and belief in oneself. She took a deep breath, feeling the crisp, cool air fill her lungs, and a smile spread across her face as she whispered, “I did it!”
+    As she climbed higher, she encountered challenges that tested her resolve—steep slopes, rocky paths, and sudden weather changes. But with each obstacle, Elara remembered the owl’s words, summoning her courage and determination. She forged ahead, fueled by her dream.
     
-    As the stars began to twinkle above, Lila sat in serene silence, cradled by the universe and enveloped in the mountain’s ancient embrace. Mt. Rainier, tall and proud, stood watch over her – a friend who would always guide her back into the embrace of nature and adventure.
+    After hours of climbing, she reached a glacial overlook—a breathtaking vista that left her speechless. Below, the world stretched out like a canvas, painted with lakes, rivers, and forests. The peaks of other mountains appeared like guardians, all bowing to the greatness of Mt. Rainier.
     
-    And so, Lila made her way back down the mountain, the memory of her climb forever etched in her heart, knowing that she could achieve great things, one step at a time.
+    With renewed vigor, Elara continued her journey, finally reaching the summit just as the sun began to set. The view was unlike anything she had ever imagined. The clouds danced below her, and the horizon was awash in golds, pinks, and deep blues. For a moment, she felt as if she were floating in the sky, her heart soaring with the eagles.
+    
+    Standing at the top, Elara whispered her thanks to the mountain. “You are so tall, so grand,” she said, “but you have shown me that with courage and perseverance, I can reach great heights too.”
+    
+    As the stars began to twinkle above, Elara knew that Mt. Rainier would always hold a special place in her heart, not just as a towering mountain but as a reminder that dreams can be reached with hard work, bravery, and a little bit of magic.
+    
+    And from that day forward, she often returned to the mountain, not just to climb but to sit at its base, listening to the whispers of the wind and sharing her dreams with the towering giant that had inspired them all.
     ---Parsed Response (string)---
-    "Once upon a time, in the heart of the Pacific Northwest, stood the majestic Mt. Rainier, a towering giant cloaked in snow and mystery. The mountain was not just a geological wonder but also a guardian of tales, dreams, and adventures that surrounded its rocky slopes.\n\nIn a small town nestled at its base lived a young girl named Lila. Her days were filled with dreams of exploring the great outdoors. She often gazed up at Mt. Rainier, where the clouds kissed the peak and the sun painted its face in hues of orange and pink at dusk. To Lila, the mountain was a symbol of adventure and a challenge waiting to be conquered.\n\nOne summer morning, she gathered her courage and decided to climb Mt. Rainier. With her backpack filled with snacks, a water bottle, and a trusty old map, she set off toward the trailhead, her heart bubbling with excitement. The path wound through ancient forests where tall evergreens whispered secrets to the wind, and streams sang cheerful songs as they danced over pebbles.\n\nAs she climbed higher, the air grew thinner, but Lila felt invigorated by the beauty surrounding her. Wildflowers blanketed the meadows, and the sweet scent of pine surrounded her like an embrace. With each step, she could feel Mt. Rainier’s spirit encouraging her.\n\nHours passed, and Lila reached a large boulder that jutted out, forming a perfect perch to catch her breath. As she paused, she noticed a group of mountain goats grazing nearby. Their nimble feet danced over the rocky terrain, reminding her of how small and insignificant she felt compared to the mountain’s grandeur. Yet, she stood tall, inspired and filled with determination.\n\nAfter a short rest, she continued her ascent. The trail became steeper, but Lila was undeterred. She recollected a saying her grandmother used to share: “The tallest mountains can be climbed one step at a time.” With renewed strength, she pressed on, focusing on the ground beneath her feet, counting each step as a small victory.\n\nAs the sun began to set, Lila finally reached the mountain’s summit. She stood at the top, breathless not just from the climb but from the view that sprawled before her. The world below was a tapestry of greens and blues, the valleys cradling shimmering lakes and winding rivers. She could see the horizon stretch endlessly, meeting the sky in a brilliant palette of oranges, purples, and golds.\n\nIn that moment, Lila understood; Mt. Rainier was not just a mountain. It was a teacher. A reminder that the greatest heights are conquered not just by strength but by persistence, hope, and belief in oneself. She took a deep breath, feeling the crisp, cool air fill her lungs, and a smile spread across her face as she whispered, “I did it!”\n\nAs the stars began to twinkle above, Lila sat in serene silence, cradled by the universe and enveloped in the mountain’s ancient embrace. Mt. Rainier, tall and proud, stood watch over her – a friend who would always guide her back into the embrace of nature and adventure.\n\nAnd so, Lila made her way back down the mountain, the memory of her climb forever etched in her heart, knowing that she could achieve great things, one step at a time."
-

Teardown

PASSED test_anthropic_shorthand 0:00:02.926146

Setup

Call

Captured stderr call
[2024-11-26T00:35:51Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2920ms. StopReason: "end_turn". Tokens(in/out): 19/376
+    "Once upon a time in the Pacific Northwest, towering majestically above the lush green valleys and serene lakes, stood Mt. Rainier. With its snow-capped peak glistening under the sun, it seemed to touch the clouds, a proud sentinel watching over the landscape below.\n\nIn a small town nestled at the base of this magnificent mountain lived a young girl named Elara. Ever since she could remember, Mt. Rainier had been a part of her life. Its grandeur inspired her dreams, and she would often gaze up at it from her bedroom window, imagining the adventures that lay atop its lofty summit.\n\nOne day, as Elara played in her backyard, a wise old owl perched on a branch above her. “Why do you look at the mountain with such longing?” it hooted softly.\n\nElara blinked in surprise. “Oh, wise owl, I dream of climbing Mt. Rainier! I want to see the world from its peak and touch the sky.”\n\nThe owl fluffed its feathers, thoughtful. “A noble dream, young one. But the journey to the top is not an easy one. It requires bravery, knowledge, and respect for the mountain’s might.”\n\nDetermined, Elara spent the following months learning everything she could about climbing. She read books, watched tutorials, and trained her body to become stronger. Each day, she looked up at the mountain, feeling its call echoing within her heart.\n\nFinally, the day came when she felt ready to embark on her adventure. With her backpack filled with supplies and her spirit high, Elara began her ascent. The trail twisted and turned, leading her through vibrant wildflower meadows and dense forests filled with the songs of chirping birds.\n\nAs she climbed higher, she encountered challenges that tested her resolve—steep slopes, rocky paths, and sudden weather changes. But with each obstacle, Elara remembered the owl’s words, summoning her courage and determination. She forged ahead, fueled by her dream.\n\nAfter hours of climbing, she reached a glacial overlook—a breathtaking vista that left her speechless. Below, the world stretched out like a canvas, painted with lakes, rivers, and forests. The peaks of other mountains appeared like guardians, all bowing to the greatness of Mt. Rainier.\n\nWith renewed vigor, Elara continued her journey, finally reaching the summit just as the sun began to set. The view was unlike anything she had ever imagined. The clouds danced below her, and the horizon was awash in golds, pinks, and deep blues. For a moment, she felt as if she were floating in the sky, her heart soaring with the eagles.\n\nStanding at the top, Elara whispered her thanks to the mountain. “You are so tall, so grand,” she said, “but you have shown me that with courage and perseverance, I can reach great heights too.”\n\nAs the stars began to twinkle above, Elara knew that Mt. Rainier would always hold a special place in her heart, not just as a towering mountain but as a reminder that dreams can be reached with hard work, bravery, and a little bit of magic.\n\nAnd from that day forward, she often returned to the mountain, not just to climb but to sit at its base, listening to the whispers of the wind and sharing her dreams with the towering giant that had inspired them all."
+

Teardown

PASSED test_anthropic_shorthand 0:00:03.961095

Setup

Call

Captured stderr call
[2024-11-26T16:57:09Z INFO  baml_events] Function TestAnthropicShorthand:
+    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 3957ms. StopReason: "end_turn". Tokens(in/out): 19/518
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here is a short story about Mount Rainier:
+    Here is a short story about the majestic Mount Rainier:
     
-    The Majestic Sentinel
+    Towering high above the lush green forests and sparkling blue waters of the Pacific Northwest, Mount Rainier stood as a grand sentinel, its snow-capped peak piercing the cloudless azure sky. For generations, the indigenous peoples who called this land home had revered the colossal mountain, seeing it as a symbol of their connection to the natural world.
     
-    As the morning sun peeked over the horizon, its golden rays illuminated the towering presence of Mount Rainier. Standing tall and proud at 14,411 feet, the dormant volcano seemed to watch over the surrounding landscape, a silent guardian keeping vigilant watch.
+    As the morning sun peeked over the distant horizon, its golden rays danced across the glaciers that clung to Rainier's flanks, casting a warm glow upon the surrounding landscape. The crisp, clean air was filled with the sounds of birdsong and the gentle rustling of the evergreen trees. 
     
-    For generations, the mountain had stood as a beacon, a landmark that guided weary travelers and inspired awe in all who gazed upon its snow-capped peak. Its sheer size and scale were humbling, a testament to the raw power and grandeur of the natural world.
+    John, a seasoned hiker, gazed up at the mountain with a sense of awe and wonder. He had climbed Rainier many times before, but each journey held a new adventure, a deeper appreciation for the sheer scale and power of this natural wonder. As he prepared his gear, he felt a familiar stirring of excitement, knowing that the challenge that lay ahead would test his physical and mental fortitude.
     
-    To the indigenous peoples who had called this region home for centuries, Mount Rainier was more than just a mountain – it was a sacred place, a symbol of their connection to the land and the rhythms of the universe. They revered its strength and reveled in the way its presence seemed to imbue the entire region with a sense of timelessness and wonder.
+    Setting out on the trail, John's footsteps crunched on the rocky path, his eyes drawn repeatedly to the towering silhouette that loomed ever larger as he gained elevation. The hike was arduous, with steep switchbacks and sections that required careful navigation over snow and ice, but John relished the challenge, fueled by the breathtaking vistas that unfolded before him.
     
-    As the years passed, and more and more people came to experience the splendor of Mount Rainier, its legend only grew. Hikers, climbers, and nature enthusiasts from around the world flocked to its slopes, seeking to conquer its challenges and bask in the glory of its majesty.
+    Finally, after hours of determined effort, John reached the summit, standing in triumph atop the majestic peak. He gazed out over the patchwork of forests, lakes, and distant mountain ranges, a profound sense of humility and awe washing over him. In this moment, he felt truly connected to the primal power of the natural world, and he knew that the memory of this incredible journey would forever be etched in his heart and mind.
     
-    Yet, no matter how many times the mountain was scaled or explored, it remained a force to be reckoned with, a constant reminder of the enduring power of the natural world. And as the sun continued to rise and set, casting its ever-shifting light upon the mountain's flanks, Mount Rainier stood tall and steadfast, a majestic sentinel watching over the land it had called home for countless millennia.
+    As he began his descent, John couldn't help but marvel at the sheer scale and grandeur of Mount Rainier, a testament to the awe-inspiring wonders of our planet. This towering, snow-capped sentinel would continue to inspire and captivate all who crossed its path, a timeless and eternal symbol of nature's enduring beauty and majesty.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nThe Majestic Sentinel\n\nAs the morning sun peeked over the horizon, its golden rays illuminated the towering presence of Mount Rainier. Standing tall and proud at 14,411 feet, the dormant volcano seemed to watch over the surrounding landscape, a silent guardian keeping vigilant watch.\n\nFor generations, the mountain had stood as a beacon, a landmark that guided weary travelers and inspired awe in all who gazed upon its snow-capped peak. Its sheer size and scale were humbling, a testament to the raw power and grandeur of the natural world.\n\nTo the indigenous peoples who had called this region home for centuries, Mount Rainier was more than just a mountain – it was a sacred place, a symbol of their connection to the land and the rhythms of the universe. They revered its strength and reveled in the way its presence seemed to imbue the entire region with a sense of timelessness and wonder.\n\nAs the years passed, and more and more people came to experience the splendor of Mount Rainier, its legend only grew. Hikers, climbers, and nature enthusiasts from around the world flocked to its slopes, seeking to conquer its challenges and bask in the glory of its majesty.\n\nYet, no matter how many times the mountain was scaled or explored, it remained a force to be reckoned with, a constant reminder of the enduring power of the natural world. And as the sun continued to rise and set, casting its ever-shifting light upon the mountain's flanks, Mount Rainier stood tall and steadfast, a majestic sentinel watching over the land it had called home for countless millennia."
-

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:02.665601

Setup

Call

Captured stderr call
[2024-11-26T00:35:54Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2644ms. StopReason: "end_turn". Tokens(in/out): 19/379
+    "Here is a short story about the majestic Mount Rainier:\n\nTowering high above the lush green forests and sparkling blue waters of the Pacific Northwest, Mount Rainier stood as a grand sentinel, its snow-capped peak piercing the cloudless azure sky. For generations, the indigenous peoples who called this land home had revered the colossal mountain, seeing it as a symbol of their connection to the natural world.\n\nAs the morning sun peeked over the distant horizon, its golden rays danced across the glaciers that clung to Rainier's flanks, casting a warm glow upon the surrounding landscape. The crisp, clean air was filled with the sounds of birdsong and the gentle rustling of the evergreen trees. \n\nJohn, a seasoned hiker, gazed up at the mountain with a sense of awe and wonder. He had climbed Rainier many times before, but each journey held a new adventure, a deeper appreciation for the sheer scale and power of this natural wonder. As he prepared his gear, he felt a familiar stirring of excitement, knowing that the challenge that lay ahead would test his physical and mental fortitude.\n\nSetting out on the trail, John's footsteps crunched on the rocky path, his eyes drawn repeatedly to the towering silhouette that loomed ever larger as he gained elevation. The hike was arduous, with steep switchbacks and sections that required careful navigation over snow and ice, but John relished the challenge, fueled by the breathtaking vistas that unfolded before him.\n\nFinally, after hours of determined effort, John reached the summit, standing in triumph atop the majestic peak. He gazed out over the patchwork of forests, lakes, and distant mountain ranges, a profound sense of humility and awe washing over him. In this moment, he felt truly connected to the primal power of the natural world, and he knew that the memory of this incredible journey would forever be etched in his heart and mind.\n\nAs he began his descent, John couldn't help but marvel at the sheer scale and grandeur of Mount Rainier, a testament to the awe-inspiring wonders of our planet. This towering, snow-capped sentinel would continue to inspire and captivate all who crossed its path, a timeless and eternal symbol of nature's enduring beauty and majesty."
+

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:03.256320

Setup

Call

Captured stderr call
[2024-11-26T16:57:12Z INFO  baml_events] Function TestAnthropicShorthand:
+    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 3248ms. StopReason: "end_turn". Tokens(in/out): 19/329
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
@@ -1032,199 +1030,209 @@
     
     The Towering Titan
     
-    Gazing up at the majestic Mt. Rainier, its snowcapped peak piercing the azure sky, Sarah felt a sense of awe wash over her. Standing at 14,411 feet, the towering volcanic mountain reigned supreme over the surrounding landscape, a testament to the raw power and grandeur of nature.
-    
-    As she began her hike along the winding trails, Sarah couldn't help but be humbled by the sheer scale of the mountain before her. With each step, the summit seemed to loom ever higher, a challenge that beckoned to be conquered.
+    Amelia gazed up in awe at the majestic mountain looming before her. Mt. Rainier stood tall and proud, its snow-capped peak piercing the clear blue sky. At over 14,000 feet, the colossal volcano was the highest point in the state of Washington, and one of the most iconic natural wonders of the Pacific Northwest.
     
-    The trail grew steeper, the air thinner, but Sarah's determination only strengthened. She pressed on, her eyes fixed on the distant crest, each glimpse spurring her forward. The view became more breathtaking with every stride, the world below shrinking away as she ascended.
+    As Amelia hiked closer, the sheer scale of the mountain became even more apparent. The stark, glaciated cliffs rose up dramatically, seeming to touch the heavens. Amelia felt tiny in comparison, like an ant at the base of a mighty skyscraper. 
     
-    Finally, reaching the summit, Sarah stood in reverent silence, taking in the stunning panorama that stretched out before her. The Cascades, the forests, the glistening glaciers – all seemed diminished in the shadow of this towering titan, a natural wonder that commanded respect and awe.
+    She couldn't help but marvel at the power and grandeur of this sleeping giant. Mt. Rainier had been building its massive form for thousands of years, slowly and steadily carving its place on the landscape. Despite its tremendous size, the mountain had a quiet, almost serene presence - an ancient, slumbering titan watching over the land.
     
-    In that moment, Sarah felt a deep connection to the mountain, a sense of being part of something greater than herself. Mt. Rainier, with its majestic presence and timeless beauty, had left an indelible mark on her soul, a reminder of the power and magnificence of the natural world.
-    
-    As she began her descent, Sarah knew that she would carry the memory of this experience with her forever, a testament to the towering splendor of Mt. Rainier.
+    As Amelia continued her hike, she felt a profound sense of wonder and respect for this natural wonder. Mt. Rainier was a testament to the raw, untamed beauty of the Pacific Northwest, a stunning monument that inspired awe in all who laid eyes upon it. In its towering presence, Amelia felt small, yet humbled - reminded of the awesome power and majesty of the natural world.
     ---Parsed Response (string)---
-    "Here is a short story about Mt. Rainier:\n\nThe Towering Titan\n\nGazing up at the majestic Mt. Rainier, its snowcapped peak piercing the azure sky, Sarah felt a sense of awe wash over her. Standing at 14,411 feet, the towering volcanic mountain reigned supreme over the surrounding landscape, a testament to the raw power and grandeur of nature.\n\nAs she began her hike along the winding trails, Sarah couldn't help but be humbled by the sheer scale of the mountain before her. With each step, the summit seemed to loom ever higher, a challenge that beckoned to be conquered.\n\nThe trail grew steeper, the air thinner, but Sarah's determination only strengthened. She pressed on, her eyes fixed on the distant crest, each glimpse spurring her forward. The view became more breathtaking with every stride, the world below shrinking away as she ascended.\n\nFinally, reaching the summit, Sarah stood in reverent silence, taking in the stunning panorama that stretched out before her. The Cascades, the forests, the glistening glaciers – all seemed diminished in the shadow of this towering titan, a natural wonder that commanded respect and awe.\n\nIn that moment, Sarah felt a deep connection to the mountain, a sense of being part of something greater than herself. Mt. Rainier, with its majestic presence and timeless beauty, had left an indelible mark on her soul, a reminder of the power and magnificence of the natural world.\n\nAs she began her descent, Sarah knew that she would carry the memory of this experience with her forever, a testament to the towering splendor of Mt. Rainier."
-

Teardown

PASSED test_fallback_to_shorthand 0:00:01.082669

Setup

Call

Captured stderr call
[2024-11-26T00:35:55Z INFO  baml_events] Function TestFallbackToShorthand:
+    "Here is a short story about Mt. Rainier:\n\nThe Towering Titan\n\nAmelia gazed up in awe at the majestic mountain looming before her. Mt. Rainier stood tall and proud, its snow-capped peak piercing the clear blue sky. At over 14,000 feet, the colossal volcano was the highest point in the state of Washington, and one of the most iconic natural wonders of the Pacific Northwest.\n\nAs Amelia hiked closer, the sheer scale of the mountain became even more apparent. The stark, glaciated cliffs rose up dramatically, seeming to touch the heavens. Amelia felt tiny in comparison, like an ant at the base of a mighty skyscraper. \n\nShe couldn't help but marvel at the power and grandeur of this sleeping giant. Mt. Rainier had been building its massive form for thousands of years, slowly and steadily carving its place on the landscape. Despite its tremendous size, the mountain had a quiet, almost serene presence - an ancient, slumbering titan watching over the land.\n\nAs Amelia continued her hike, she felt a profound sense of wonder and respect for this natural wonder. Mt. Rainier was a testament to the raw, untamed beauty of the Pacific Northwest, a stunning monument that inspired awe in all who laid eyes upon it. In its towering presence, Amelia felt small, yet humbled - reminded of the awesome power and majesty of the natural world."
+

Teardown

PASSED test_fallback_to_shorthand 0:00:01.385621

Setup

Call

Captured stderr call
[2024-11-26T16:57:14Z INFO  baml_events] Function TestFallbackToShorthand:
     (1 other previous tries)
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 741ms. StopReason: stop. Tokens(in/out): 18/22
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1082ms. StopReason: stop. Tokens(in/out): 18/18
     ---PROMPT---
     [chat] user: Say a haiku about Mt Rainier is tall.
     
     ---LLM REPLY---
-    Mount Rainier stands proud,  
-    Cloaked in snow and whispered clouds,  
-    Nature's towering crown.
+    Majestic and proud,  
+    Mt. Rainier kisses sky,  
+    Silent sentinel.  
     ---Parsed Response (string)---
-    "Mount Rainier stands proud,  \nCloaked in snow and whispered clouds,  \nNature's towering crown."
-

Teardown

PASSED test_aws_streaming 0:00:01.716384

Setup

Call

Captured stderr call
[2024-11-26T00:35:55Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-11-26T00:35:57Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1706ms. StopReason: unknown. Tokens(in/out): 25/100
+    "Majestic and proud,  \nMt. Rainier kisses sky,  \nSilent sentinel.  "
+

Teardown

PASSED test_aws_streaming 0:00:01.487517

Setup

Call

Captured stderr call
[2024-11-26T16:57:14Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-11-26T16:57:15Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1483ms. StopReason: unknown. Tokens(in/out): 25/100
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    .
     
-    Here a few joy of the beauty of the mountains that the world is to know the heart of the world, the littleness of the littleness of the moment, the world's second. "The world is a big and the world of the moment, the moment of the moment, the world of the mind, the world of the moment, the one that was a moment of the moment, the little of the world, the little of the book of the moment, the one of the moment
+    
+    The sun was setting over the Puget Sound, casting a warm orange glow over the landscape. The air was crisp and clean, filled with the scent of wildflowers and the distant hint of saltwater. In the distance, the majestic peak of Mt. Rainier rose high into the sky, its snow-capped summit glistening like a beacon.
+    
+    Lena, a young girl with a mop of curly brown hair, stood at the edge of the meadow, her eyes fixed on the mountain
     ---Parsed Response (string)---
-    ".\n\nHere a few joy of the beauty of the mountains that the world is to know the heart of the world, the littleness of the littleness of the moment, the world's second. \"The world is a big and the world of the moment, the moment of the moment, the world of the mind, the world of the moment, the one that was a moment of the moment, the little of the world, the little of the book of the moment, the one of the moment"
-

Teardown

PASSED test_streaming 0:00:02.264261

Setup

Call

Captured stderr call
[2024-11-26T00:35:59Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 2254ms. StopReason: stop. Tokens(in/out): 19/240
+    "\n\nThe sun was setting over the Puget Sound, casting a warm orange glow over the landscape. The air was crisp and clean, filled with the scent of wildflowers and the distant hint of saltwater. In the distance, the majestic peak of Mt. Rainier rose high into the sky, its snow-capped summit glistening like a beacon.\n\nLena, a young girl with a mop of curly brown hair, stood at the edge of the meadow, her eyes fixed on the mountain"
+

Teardown

PASSED test_streaming 0:00:02.723649

Setup

Call

Captured stderr call
[2024-11-26T16:57:18Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2719ms. StopReason: stop. Tokens(in/out): 19/235
     ---PROMPT---
     [chat] user: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    There once was a young programmer named Lily who had a passion for creating new things. She spent hours at her computer, coding and experimenting with different programming languages. One day, she had an idea to create her own programming language from scratch.
+    Once upon a time, in a world where coding was the key to unlocking endless possibilities, a group of brilliant minds came together to create their own programming language. They spent countless hours brainstorming, coding, and testing to bring their vision to life.
     
-    Lily started by researching various programming languages and studying their syntax and features. She then began to brainstorm how she could combine the best aspects of each language to create something unique and innovative.
+    As they worked tirelessly, they found joy in the process of creating something entirely new. Each line of code was like a stroke of paint on a canvas, shaping their language into a masterpiece of logic and precision.
     
-    After weeks of hard work and late nights, Lily finally unveiled her new programming language, which she called "LilyScript." It was a versatile language that allowed for easy manipulation of data and seamless integration with other programming languages.
+    They incorporated elements from different languages, adding unique features and functionalities that set their creation apart from the rest. And with every bug they fixed and every improvement they made, their excitement grew.
     
-    To her delight, LilyScript quickly gained popularity among other programmers who found it easy to learn and fun to use. Lily was overjoyed to see her creation being used by others to develop amazing new software and applications.
+    Finally, after months of hard work, their programming language was ready to be unleashed into the world. Developers from far and wide were eager to try it out, and they marveled at its simplicity, flexibility, and power.
     
-    Programming languages are often seen as tools for solving problems, but for Lily, creating her own language was a creative and exciting endeavor. She realized that programming languages are not just functional, but can also be a form of art, allowing for boundless imagination and creativity. And for Lily, that was the most fun part of all.
+    The creators beamed with pride as they watched others use their language to build incredible projects, knowing that they had made a lasting impact on the world of coding. And as they continued to innovate and improve their creation, they knew that the journey of creating programming languages would always be a fun and fulfilling one.
     ---Parsed Response (string)---
-    "There once was a young programmer named Lily who had a passion for creating new things. She spent hours at her computer, coding and experimenting with different programming languages. One day, she had an idea to create her own programming language from scratch.\n\nLily started by researching various programming languages and studying their syntax and features. She then began to brainstorm how she could combine the best aspects of each language to create something unique and innovative.\n\nAfter weeks of hard work and late nights, Lily finally unveiled her new programming language, which she called \"LilyScript.\" It was a versatile language that allowed for easy manipulation of data and seamless integration with other programming languages.\n\nTo her delight, LilyScript quickly gained popularity among other programmers who found it easy to learn and fun to use. Lily was overjoyed to see her creation being used by others to develop amazing new software and applications.\n\nProgramming languages are often seen as tools for solving problems, but for Lily, creating her own language was a creative and exciting endeavor. She realized that programming languages are not just functional, but can also be a form of art, allowing for boundless imagination and creativity. And for Lily, that was the most fun part of all."
-

Teardown

PASSED test_streaming_uniterated 0:00:01.840321

Setup

Call

Captured stderr call
[2024-11-26T00:36:01Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1832ms. StopReason: stop. Tokens(in/out): 19/240
+    "Once upon a time, in a world where coding was the key to unlocking endless possibilities, a group of brilliant minds came together to create their own programming language. They spent countless hours brainstorming, coding, and testing to bring their vision to life.\n\nAs they worked tirelessly, they found joy in the process of creating something entirely new. Each line of code was like a stroke of paint on a canvas, shaping their language into a masterpiece of logic and precision.\n\nThey incorporated elements from different languages, adding unique features and functionalities that set their creation apart from the rest. And with every bug they fixed and every improvement they made, their excitement grew.\n\nFinally, after months of hard work, their programming language was ready to be unleashed into the world. Developers from far and wide were eager to try it out, and they marveled at its simplicity, flexibility, and power.\n\nThe creators beamed with pride as they watched others use their language to build incredible projects, knowing that they had made a lasting impact on the world of coding. And as they continued to innovate and improve their creation, they knew that the journey of creating programming languages would always be a fun and fulfilling one."
+

Teardown

PASSED test_streaming_uniterated 0:00:02.067288

Setup

Call

Captured stderr call
[2024-11-26T16:57:20Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2063ms. StopReason: stop. Tokens(in/out): 19/209
     ---PROMPT---
     [chat] user: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Sarah loved the color blue. It reminded her of the clear skies of summer, the depths of the ocean, and the calming presence of a gentle breeze. But one day, everything changed.
+    Once there was a girl named Sarah who had always loved the color blue. She thought it was the prettiest and most calming color in the world. She surrounded herself with blue clothes, blue decorations, and even painted her room blue.
     
-    Sarah's best friend, Jenny, was involved in a car accident. The car that hit her was blue. Ever since then, the color blue made Sarah sad. Every time she saw it, memories of that fateful day flooded her mind.
+    But one day, something changed. Sarah experienced a great loss and from that moment on, whenever she looked at the color blue, she felt a deep sadness in her heart. It reminded her of the pain and loneliness she felt after losing someone she loved.
     
-    She tried to avoid anything blue, but it was everywhere. The blue sky, blue flowers, blue clothing – it was impossible to escape. Sarah would often find herself overcome with grief whenever she caught a glimpse of the color that once brought her so much joy.
+    No matter how hard she tried, Sarah couldn't shake the feeling of sadness that the color blue brought to her. It no longer brought her the same joy and peace that it once did.
     
-    But as time passed, Sarah realized that she couldn't let the color blue control her emotions forever. She started to associate the color with happier memories of her friend, remembering all the good times they shared together.
+    Despite the sadness, Sarah learned to embrace her emotions and use them to inspire her art. She painted beautiful, emotional pieces that captured the feeling of sadness and loss that the color blue evoked in her.
     
-    Slowly but surely, the color blue lost its power over Sarah. It no longer made her sad, but instead served as a reminder of the love and friendship she shared with Jenny. And in that way, the color blue became a source of comfort and healing for Sarah, rather than sadness.
+    And though the color blue still made her sad, Sarah found solace in expressing her emotions through her art, turning her pain into something beautiful and meaningful.
     ---Parsed Response (string)---
-    "Sarah loved the color blue. It reminded her of the clear skies of summer, the depths of the ocean, and the calming presence of a gentle breeze. But one day, everything changed.\n\nSarah's best friend, Jenny, was involved in a car accident. The car that hit her was blue. Ever since then, the color blue made Sarah sad. Every time she saw it, memories of that fateful day flooded her mind.\n\nShe tried to avoid anything blue, but it was everywhere. The blue sky, blue flowers, blue clothing – it was impossible to escape. Sarah would often find herself overcome with grief whenever she caught a glimpse of the color that once brought her so much joy.\n\nBut as time passed, Sarah realized that she couldn't let the color blue control her emotions forever. She started to associate the color with happier memories of her friend, remembering all the good times they shared together.\n\nSlowly but surely, the color blue lost its power over Sarah. It no longer made her sad, but instead served as a reminder of the love and friendship she shared with Jenny. And in that way, the color blue became a source of comfort and healing for Sarah, rather than sadness."
-

Teardown

PASSED test_streaming_sync 0:00:02.413249

Setup

Call

Captured stderr call
[2024-11-26T00:36:03Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 2407ms. StopReason: stop. Tokens(in/out): 19/283
+    "Once there was a girl named Sarah who had always loved the color blue. She thought it was the prettiest and most calming color in the world. She surrounded herself with blue clothes, blue decorations, and even painted her room blue.\n\nBut one day, something changed. Sarah experienced a great loss and from that moment on, whenever she looked at the color blue, she felt a deep sadness in her heart. It reminded her of the pain and loneliness she felt after losing someone she loved.\n\nNo matter how hard she tried, Sarah couldn't shake the feeling of sadness that the color blue brought to her. It no longer brought her the same joy and peace that it once did.\n\nDespite the sadness, Sarah learned to embrace her emotions and use them to inspire her art. She painted beautiful, emotional pieces that captured the feeling of sadness and loss that the color blue evoked in her.\n\nAnd though the color blue still made her sad, Sarah found solace in expressing her emotions through her art, turning her pain into something beautiful and meaningful."
+

Teardown

PASSED test_streaming_sync 0:00:02.550689

Setup

Call

Captured stderr call
[2024-11-26T16:57:23Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2548ms. StopReason: stop. Tokens(in/out): 19/248
     ---PROMPT---
     [chat] user: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time, in a land where technology reigned supreme, a group of brilliant programmers set out to create their own programming languages. Each one had a unique vision and sought to bring their creations to life.
+    Once upon a time, in a world where technology reigned supreme, a group of passionate programmers came together to create their own unique programming language. They spent countless hours brainstorming, writing code, and debugging until finally, their creation came to life.
     
-    The first programmer, a young and ambitious woman, crafted a language that was sleek, intuitive, and easy to learn. It was designed for beginners, making it accessible to anyone who wanted to delve into the world of coding.
+    They named it CodeX, and it was unlike any other programming language the world had ever seen. It was sleek, efficient, and user-friendly, making it a joy to work with. Programmers from all over the world quickly took notice, and soon, CodeX became the language of choice for developers everywhere.
     
-    The second programmer, a seasoned veteran in the field, developed a language that was powerful, efficient, and perfect for handling complex tasks. It was a tool for advanced programmers, enabling them to tackle any challenge with ease.
+    As more and more people began using CodeX, its creators felt a sense of pride and accomplishment. They had created something truly special, something that brought joy and excitement to all who used it. And as they continued to update and improve CodeX, the language only became more fun and innovative.
     
-    And lastly, the third programmer, a quirky and creative individual, came up with a language that was quirky, unconventional, and full of surprises. It was meant to inspire creativity and innovation, allowing users to think outside the box and push the boundaries of what was possible.
-    
-    As they shared their creations with the world, programmers everywhere rejoiced at the prospect of exploring these new languages. They found joy in experimenting, problem-solving, and creating new projects that were only limited by their imaginations.
-    
-    And so, the world of programming was forever changed, as these languages brought a sense of fun, excitement, and endless possibilities to all who used them. And the programmers lived happily ever after, knowing that they had left their mark on the world of technology.
+    In the end, the creators of CodeX realized that programming languages weren't just tools for writing code – they were works of art, creations to be cherished and enjoyed. And as they looked out at the world of technology they had helped shape, they knew that their love for programming languages would never waver. For creating languages, after all, was the most fun of all.
     ---Parsed Response (string)---
-    "Once upon a time, in a land where technology reigned supreme, a group of brilliant programmers set out to create their own programming languages. Each one had a unique vision and sought to bring their creations to life.\n\nThe first programmer, a young and ambitious woman, crafted a language that was sleek, intuitive, and easy to learn. It was designed for beginners, making it accessible to anyone who wanted to delve into the world of coding.\n\nThe second programmer, a seasoned veteran in the field, developed a language that was powerful, efficient, and perfect for handling complex tasks. It was a tool for advanced programmers, enabling them to tackle any challenge with ease.\n\nAnd lastly, the third programmer, a quirky and creative individual, came up with a language that was quirky, unconventional, and full of surprises. It was meant to inspire creativity and innovation, allowing users to think outside the box and push the boundaries of what was possible.\n\nAs they shared their creations with the world, programmers everywhere rejoiced at the prospect of exploring these new languages. They found joy in experimenting, problem-solving, and creating new projects that were only limited by their imaginations.\n\nAnd so, the world of programming was forever changed, as these languages brought a sense of fun, excitement, and endless possibilities to all who used them. And the programmers lived happily ever after, knowing that they had left their mark on the world of technology."
-

Teardown

PASSED test_streaming_uniterated_sync 0:00:02.961963

Setup

Call

Captured stderr call
[2024-11-26T00:36:06Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 2954ms. StopReason: stop. Tokens(in/out): 19/315
+    "Once upon a time, in a world where technology reigned supreme, a group of passionate programmers came together to create their own unique programming language. They spent countless hours brainstorming, writing code, and debugging until finally, their creation came to life.\n\nThey named it CodeX, and it was unlike any other programming language the world had ever seen. It was sleek, efficient, and user-friendly, making it a joy to work with. Programmers from all over the world quickly took notice, and soon, CodeX became the language of choice for developers everywhere.\n\nAs more and more people began using CodeX, its creators felt a sense of pride and accomplishment. They had created something truly special, something that brought joy and excitement to all who used it. And as they continued to update and improve CodeX, the language only became more fun and innovative.\n\nIn the end, the creators of CodeX realized that programming languages weren't just tools for writing code – they were works of art, creations to be cherished and enjoyed. And as they looked out at the world of technology they had helped shape, they knew that their love for programming languages would never waver. For creating languages, after all, was the most fun of all."
+

Teardown

PASSED test_streaming_uniterated_sync 0:00:02.482999

Setup

Call

Captured stderr call
[2024-11-26T16:57:25Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2480ms. StopReason: stop. Tokens(in/out): 19/220
     ---PROMPT---
     [chat] user: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Every time Lisa saw the color blue, it reminded her of the day her father passed away. He had been wearing a blue shirt, and since then, the color had taken on a heavy weight in her heart.
+    Once there was a girl named Sadie who believed that the color blue made her feel sad. Whenever she saw the color blue, whether it be in the sky, on a piece of clothing, or in a painting, a wave of melancholy washed over her.
     
-    She found herself avoiding anything blue, from the sky to her favorite sweater. The mere sight of it would bring back memories of that fateful day, the sound of hospital machines beeping in the background, and the look of sorrow on her mother's face.
+    Sadie's friends didn't understand why the color blue affected her so deeply. They would try to cheer her up by pointing out all the beauty in the color, but Sadie couldn't shake the feeling of sadness that enveloped her.
     
-    No matter how hard she tried to shake off the sadness that accompanied the color blue, it seemed to linger everywhere she turned. It was as if the color had seeped into her soul and would never let her forget the pain and loss she had experienced.
+    One day, as Sadie was walking through a park, she noticed a vibrant blue flower blooming by a bench. Instead of feeling sad, she felt a sense of peace wash over her. It was as if the color blue was comforting her instead of making her sad.
     
-    But one day, as she sat by the ocean watching the waves crash against the shore, she realized that blue wasn't just a color of sadness. It was also a color of peace and tranquility, of vastness and wonder. And in that moment, she decided to embrace the color blue once again, not as a reminder of her father's passing, but as a symbol of the love and memories they had shared.
-    
-    From then on, whenever she saw the color blue, she would smile, knowing that her father was watching over her, bringing her comfort and joy in the most unexpected of places. And as she gazed at the endless expanse of blue sky above her, she felt a sense of peace and happiness wash over her, knowing that her father's spirit was always with her, guiding her through the darkest of days.
+    From that moment on, Sadie started to see the color blue in a new light. She realized that even though the color blue may be associated with sadness, it could also bring moments of beauty, tranquility, and comfort. Sadie learned to embrace the color blue, and it no longer made her feel sad.
     ---Parsed Response (string)---
-    "Every time Lisa saw the color blue, it reminded her of the day her father passed away. He had been wearing a blue shirt, and since then, the color had taken on a heavy weight in her heart.\n\nShe found herself avoiding anything blue, from the sky to her favorite sweater. The mere sight of it would bring back memories of that fateful day, the sound of hospital machines beeping in the background, and the look of sorrow on her mother's face.\n\nNo matter how hard she tried to shake off the sadness that accompanied the color blue, it seemed to linger everywhere she turned. It was as if the color had seeped into her soul and would never let her forget the pain and loss she had experienced.\n\nBut one day, as she sat by the ocean watching the waves crash against the shore, she realized that blue wasn't just a color of sadness. It was also a color of peace and tranquility, of vastness and wonder. And in that moment, she decided to embrace the color blue once again, not as a reminder of her father's passing, but as a symbol of the love and memories they had shared.\n\nFrom then on, whenever she saw the color blue, she would smile, knowing that her father was watching over her, bringing her comfort and joy in the most unexpected of places. And as she gazed at the endless expanse of blue sky above her, she felt a sense of peace and happiness wash over her, knowing that her father's spirit was always with her, guiding her through the darkest of days."
-

Teardown

PASSED test_streaming_claude 0:00:01.490866

Setup

Call

Captured stdout call
msgs:
+    "Once there was a girl named Sadie who believed that the color blue made her feel sad. Whenever she saw the color blue, whether it be in the sky, on a piece of clothing, or in a painting, a wave of melancholy washed over her.\n\nSadie's friends didn't understand why the color blue affected her so deeply. They would try to cheer her up by pointing out all the beauty in the color, but Sadie couldn't shake the feeling of sadness that enveloped her.\n\nOne day, as Sadie was walking through a park, she noticed a vibrant blue flower blooming by a bench. Instead of feeling sad, she felt a sense of peace wash over her. It was as if the color blue was comforting her instead of making her sad.\n\nFrom that moment on, Sadie started to see the color blue in a new light. She realized that even though the color blue may be associated with sadness, it could also bring moments of beauty, tranquility, and comfort. Sadie learned to embrace the color blue, and it no longer made her feel sad."
+

Teardown

PASSED test_streaming_claude 0:00:01.335350

Setup

Call

Captured stdout call
msgs:
 Here's a haiku about Mt. Rainier:
 
-Rainier stands above
-Piercing through clouds in splendor
-Ancient ice crowned peak
+Rainier stands proud, high
+Guardian of Puget Sound
+Snow crown touches sky
 final:
 Here's a haiku about Mt. Rainier:
 
-Rainier stands above
-Piercing through clouds in splendor
-Ancient ice crowned peak
-
Captured stderr call
[2024-11-26T00:36:08Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 1460ms. StopReason: "end_turn". Tokens(in/out): 19/36
+Rainier stands proud, high
+Guardian of Puget Sound
+Snow crown touches sky
+
Captured stderr call
[2024-11-26T16:57:26Z INFO  baml_events] Function PromptTestClaude:
+    Client: Sonnet (claude-3-5-sonnet-20241022) - 1315ms. StopReason: "end_turn". Tokens(in/out): 19/35
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
     Here's a haiku about Mt. Rainier:
     
-    Rainier stands above
-    Piercing through clouds in splendor
-    Ancient ice crowned peak
+    Rainier stands proud, high
+    Guardian of Puget Sound
+    Snow crown touches sky
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier:\n\nRainier stands above\nPiercing through clouds in splendor\nAncient ice crowned peak"
-

Teardown

PASSED test_streaming_gemini 0:00:08.346627

Setup

Call

Captured stdout call
msgs:
-Dottie Mae's Diner bustled with the usual lunchtime crowd. Truckers, weary from the endless ribbon of highway, hunched over steaming plates of meatloaf. Locals swapped gossip over bottomless cups of coffee. And then there was Millie, perched on her usual stool at the counter, nursing a glass of ice-cold Dr Pepper. 
+    "Here's a haiku about Mt. Rainier:\n\nRainier stands proud, high\nGuardian of Puget Sound\nSnow crown touches sky"
+

Teardown

PASSED test_streaming_gemini 0:00:09.462676

Setup

Call

Captured stdout call
msgs:
+Dottie, a woman of routine, sat on her usual park bench, unwrapping her usual lunch: peanut butter and banana sandwich, a handful of almonds, and a can of Dr. Pepper.  Not the diet kind, mind you.  Dottie believed firmly in enjoying the little things in life. 
+
+As she popped the tab, the familiar fizz sang its happy song. It was a sound she'd known since childhood, a sound that always made her think of her grandfather. He used to say, "Dr. Pepper, Dottie, it's not just a drink, it's an experience. 23 flavors of pure joy!" 
 
-Now, Millie knew her Dr Pepper. Had a glass every day since she was a girl, back when a nickel bought you a smile and a frosty bottle. Today, something was different. The familiar bite was sharper, the caramel notes singing a little louder. She swirled the dark liquid, mesmerized by the way it caught the light.
+A young boy, no older than five, stopped in front of her, mesmerized by the bubbles fizzing over the rim of the can. "What's that?" he asked, eyes wide with wonder. 
 
-"Something wrong with your drink, Millie?" asked Earl, the owner, wiping his hands on his apron.
+"This, my dear boy," Dottie said with a wink, "is a Dr. Pepper." She took a sip, savoring the sweet, unique flavor.
 
-"Earl, this Dr Pepper...it's different. It's like...magic."
+"What does it taste like?" the boy questioned, tilting his head.
 
-Earl chuckled, "It's the same 23 flavors, Millie. Maybe the heat's getting to you."
+Dottie chuckled.  "Well, some say it tastes like cherry, others licorice. My grandpa swore it had a hint of amaretto." She paused. "But you know what? You have to try it to decide for yourself."
 
-But Millie knew better. This wasn't just any Dr Pepper. This was a taste of forgotten dreams, of summer evenings on porch swings, of a time when life was simpler. As she sipped, a warm feeling spread through her, chasing away the aches and pains that came with her 80-odd years. 
+The boy's mother, who had just caught up, looked apologetic. "I'm sorry, he's not usually this forward."
 
-Word got around about Millie's "magic" Dr Pepper. Soon, the diner was packed. People lined up, not just for a burger or a slice of pie, but for a chance to taste the extraordinary in the ordinary. And you know what? Some swore they felt it too. A forgotten memory resurfacing, a spark of joy, a moment of pure, simple happiness. 
+"Nonsense!" Dottie exclaimed. "Curiosity should be encouraged." She looked at the boy.  "Tell you what, why don't you have a sip?" 
 
-It didn't last, of course. The next day, the Dr Pepper tasted just like it always had. But for a fleeting moment, Dottie Mae's Diner had been touched by something special. And it all started with Millie and her belief in the magic of a simple soda. 
+With his mother's hesitant nod, Dottie poured a little Dr. Pepper into the bottle cap.  The boy, eyes wide with anticipation, took a careful sip.
+
+He scrunched up his face in thought, then his expression broke into a wide, gap-toothed grin.  "It tastes...like adventure!" he declared.
+
+Dottie laughed, a warm feeling spreading through her.  Her grandfather was right. Dr. Pepper wasn't just a drink. It was a reminder that even the simplest things could hold a world of flavor, a universe of possibilities, and maybe, just maybe, a little bit of magic. 
 
 final:
-Dottie Mae's Diner bustled with the usual lunchtime crowd. Truckers, weary from the endless ribbon of highway, hunched over steaming plates of meatloaf. Locals swapped gossip over bottomless cups of coffee. And then there was Millie, perched on her usual stool at the counter, nursing a glass of ice-cold Dr Pepper. 
+Dottie, a woman of routine, sat on her usual park bench, unwrapping her usual lunch: peanut butter and banana sandwich, a handful of almonds, and a can of Dr. Pepper.  Not the diet kind, mind you.  Dottie believed firmly in enjoying the little things in life. 
+
+As she popped the tab, the familiar fizz sang its happy song. It was a sound she'd known since childhood, a sound that always made her think of her grandfather. He used to say, "Dr. Pepper, Dottie, it's not just a drink, it's an experience. 23 flavors of pure joy!" 
 
-Now, Millie knew her Dr Pepper. Had a glass every day since she was a girl, back when a nickel bought you a smile and a frosty bottle. Today, something was different. The familiar bite was sharper, the caramel notes singing a little louder. She swirled the dark liquid, mesmerized by the way it caught the light.
+A young boy, no older than five, stopped in front of her, mesmerized by the bubbles fizzing over the rim of the can. "What's that?" he asked, eyes wide with wonder. 
 
-"Something wrong with your drink, Millie?" asked Earl, the owner, wiping his hands on his apron.
+"This, my dear boy," Dottie said with a wink, "is a Dr. Pepper." She took a sip, savoring the sweet, unique flavor.
 
-"Earl, this Dr Pepper...it's different. It's like...magic."
+"What does it taste like?" the boy questioned, tilting his head.
 
-Earl chuckled, "It's the same 23 flavors, Millie. Maybe the heat's getting to you."
+Dottie chuckled.  "Well, some say it tastes like cherry, others licorice. My grandpa swore it had a hint of amaretto." She paused. "But you know what? You have to try it to decide for yourself."
 
-But Millie knew better. This wasn't just any Dr Pepper. This was a taste of forgotten dreams, of summer evenings on porch swings, of a time when life was simpler. As she sipped, a warm feeling spread through her, chasing away the aches and pains that came with her 80-odd years. 
+The boy's mother, who had just caught up, looked apologetic. "I'm sorry, he's not usually this forward."
 
-Word got around about Millie's "magic" Dr Pepper. Soon, the diner was packed. People lined up, not just for a burger or a slice of pie, but for a chance to taste the extraordinary in the ordinary. And you know what? Some swore they felt it too. A forgotten memory resurfacing, a spark of joy, a moment of pure, simple happiness. 
+"Nonsense!" Dottie exclaimed. "Curiosity should be encouraged." She looked at the boy.  "Tell you what, why don't you have a sip?" 
 
-It didn't last, of course. The next day, the Dr Pepper tasted just like it always had. But for a fleeting moment, Dottie Mae's Diner had been touched by something special. And it all started with Millie and her belief in the magic of a simple soda. 
+With his mother's hesitant nod, Dottie poured a little Dr. Pepper into the bottle cap.  The boy, eyes wide with anticipation, took a careful sip.
 
-
Captured stderr call
[2024-11-26T00:36:16Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 8337ms. StopReason: Stop. Tokens(in/out): unknown/unknown
+He scrunched up his face in thought, then his expression broke into a wide, gap-toothed grin.  "It tastes...like adventure!" he declared.
+
+Dottie laughed, a warm feeling spreading through her.  Her grandfather was right. Dr. Pepper wasn't just a drink. It was a reminder that even the simplest things could hold a world of flavor, a universe of possibilities, and maybe, just maybe, a little bit of magic. 
+
+
Captured stderr call
[2024-11-26T16:57:36Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 9458ms. StopReason: Stop. Tokens(in/out): unknown/unknown
     ---PROMPT---
     [chat] user: Write a nice short story about Dr.Pepper
     
     ---LLM REPLY---
-    Dottie Mae's Diner bustled with the usual lunchtime crowd. Truckers, weary from the endless ribbon of highway, hunched over steaming plates of meatloaf. Locals swapped gossip over bottomless cups of coffee. And then there was Millie, perched on her usual stool at the counter, nursing a glass of ice-cold Dr Pepper. 
+    Dottie, a woman of routine, sat on her usual park bench, unwrapping her usual lunch: peanut butter and banana sandwich, a handful of almonds, and a can of Dr. Pepper.  Not the diet kind, mind you.  Dottie believed firmly in enjoying the little things in life. 
+    
+    As she popped the tab, the familiar fizz sang its happy song. It was a sound she'd known since childhood, a sound that always made her think of her grandfather. He used to say, "Dr. Pepper, Dottie, it's not just a drink, it's an experience. 23 flavors of pure joy!" 
     
-    Now, Millie knew her Dr Pepper. Had a glass every day since she was a girl, back when a nickel bought you a smile and a frosty bottle. Today, something was different. The familiar bite was sharper, the caramel notes singing a little louder. She swirled the dark liquid, mesmerized by the way it caught the light.
+    A young boy, no older than five, stopped in front of her, mesmerized by the bubbles fizzing over the rim of the can. "What's that?" he asked, eyes wide with wonder. 
     
-    "Something wrong with your drink, Millie?" asked Earl, the owner, wiping his hands on his apron.
+    "This, my dear boy," Dottie said with a wink, "is a Dr. Pepper." She took a sip, savoring the sweet, unique flavor.
     
-    "Earl, this Dr Pepper...it's different. It's like...magic."
+    "What does it taste like?" the boy questioned, tilting his head.
     
-    Earl chuckled, "It's the same 23 flavors, Millie. Maybe the heat's getting to you."
+    Dottie chuckled.  "Well, some say it tastes like cherry, others licorice. My grandpa swore it had a hint of amaretto." She paused. "But you know what? You have to try it to decide for yourself."
     
-    But Millie knew better. This wasn't just any Dr Pepper. This was a taste of forgotten dreams, of summer evenings on porch swings, of a time when life was simpler. As she sipped, a warm feeling spread through her, chasing away the aches and pains that came with her 80-odd years. 
+    The boy's mother, who had just caught up, looked apologetic. "I'm sorry, he's not usually this forward."
     
-    Word got around about Millie's "magic" Dr Pepper. Soon, the diner was packed. People lined up, not just for a burger or a slice of pie, but for a chance to taste the extraordinary in the ordinary. And you know what? Some swore they felt it too. A forgotten memory resurfacing, a spark of joy, a moment of pure, simple happiness. 
+    "Nonsense!" Dottie exclaimed. "Curiosity should be encouraged." She looked at the boy.  "Tell you what, why don't you have a sip?" 
     
-    It didn't last, of course. The next day, the Dr Pepper tasted just like it always had. But for a fleeting moment, Dottie Mae's Diner had been touched by something special. And it all started with Millie and her belief in the magic of a simple soda. 
+    With his mother's hesitant nod, Dottie poured a little Dr. Pepper into the bottle cap.  The boy, eyes wide with anticipation, took a careful sip.
+    
+    He scrunched up his face in thought, then his expression broke into a wide, gap-toothed grin.  "It tastes...like adventure!" he declared.
+    
+    Dottie laughed, a warm feeling spreading through her.  Her grandfather was right. Dr. Pepper wasn't just a drink. It was a reminder that even the simplest things could hold a world of flavor, a universe of possibilities, and maybe, just maybe, a little bit of magic. 
     
     ---Parsed Response (string)---
-    "Dottie Mae's Diner bustled with the usual lunchtime crowd. Truckers, weary from the endless ribbon of highway, hunched over steaming plates of meatloaf. Locals swapped gossip over bottomless cups of coffee. And then there was Millie, perched on her usual stool at the counter, nursing a glass of ice-cold Dr Pepper. \n\nNow, Millie knew her Dr Pepper. Had a glass every day since she was a girl, back when a nickel bought you a smile and a frosty bottle. Today, something was different. The familiar bite was sharper, the caramel notes singing a little louder. She swirled the dark liquid, mesmerized by the way it caught the light.\n\n\"Something wrong with your drink, Millie?\" asked Earl, the owner, wiping his hands on his apron.\n\n\"Earl, this Dr Pepper...it's different. It's like...magic.\"\n\nEarl chuckled, \"It's the same 23 flavors, Millie. Maybe the heat's getting to you.\"\n\nBut Millie knew better. This wasn't just any Dr Pepper. This was a taste of forgotten dreams, of summer evenings on porch swings, of a time when life was simpler. As she sipped, a warm feeling spread through her, chasing away the aches and pains that came with her 80-odd years. \n\nWord got around about Millie's \"magic\" Dr Pepper. Soon, the diner was packed. People lined up, not just for a burger or a slice of pie, but for a chance to taste the extraordinary in the ordinary. And you know what? Some swore they felt it too. A forgotten memory resurfacing, a spark of joy, a moment of pure, simple happiness. \n\nIt didn't last, of course. The next day, the Dr Pepper tasted just like it always had. But for a fleeting moment, Dottie Mae's Diner had been touched by something special. And it all started with Millie and her belief in the magic of a simple soda. \n"
-

Teardown

PASSED test_tracing_async_only 0:00:05.556180

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
-
Captured stderr call
[2024-11-26T00:36:17Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 727ms. StopReason: stop. Tokens(in/out): 50/18
+    "Dottie, a woman of routine, sat on her usual park bench, unwrapping her usual lunch: peanut butter and banana sandwich, a handful of almonds, and a can of Dr. Pepper.  Not the diet kind, mind you.  Dottie believed firmly in enjoying the little things in life. \n\nAs she popped the tab, the familiar fizz sang its happy song. It was a sound she'd known since childhood, a sound that always made her think of her grandfather. He used to say, \"Dr. Pepper, Dottie, it's not just a drink, it's an experience. 23 flavors of pure joy!\" \n\nA young boy, no older than five, stopped in front of her, mesmerized by the bubbles fizzing over the rim of the can. \"What's that?\" he asked, eyes wide with wonder. \n\n\"This, my dear boy,\" Dottie said with a wink, \"is a Dr. Pepper.\" She took a sip, savoring the sweet, unique flavor.\n\n\"What does it taste like?\" the boy questioned, tilting his head.\n\nDottie chuckled.  \"Well, some say it tastes like cherry, others licorice. My grandpa swore it had a hint of amaretto.\" She paused. \"But you know what? You have to try it to decide for yourself.\"\n\nThe boy's mother, who had just caught up, looked apologetic. \"I'm sorry, he's not usually this forward.\"\n\n\"Nonsense!\" Dottie exclaimed. \"Curiosity should be encouraged.\" She looked at the boy.  \"Tell you what, why don't you have a sip?\" \n\nWith his mother's hesitant nod, Dottie poured a little Dr. Pepper into the bottle cap.  The boy, eyes wide with anticipation, took a careful sip.\n\nHe scrunched up his face in thought, then his expression broke into a wide, gap-toothed grin.  \"It tastes...like adventure!\" he declared.\n\nDottie laughed, a warm feeling spreading through her.  Her grandfather was right. Dr. Pepper wasn't just a drink. It was a reminder that even the simplest things could hold a world of flavor, a universe of possibilities, and maybe, just maybe, a little bit of magic. \n"
+

Teardown

PASSED test_tracing_async_only 0:00:06.393127

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
+
Captured stderr call
[2024-11-26T16:57:37Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 460ms. StopReason: stop. Tokens(in/out): 50/19
     ---PROMPT---
     [chat] user: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1239,16 +1247,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello",
+      "prop1": "Hello World",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello",
+      "prop1": "Hello World",
       "prop2": 540
     }
-[2024-11-26T00:36:18Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 437ms. StopReason: stop. Tokens(in/out): 50/18
+[2024-11-26T16:57:38Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 565ms. StopReason: stop. Tokens(in/out): 50/19
     ---PROMPT---
     [chat] user: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1263,16 +1271,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello",
+      "prop1": "example string",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello",
+      "prop1": "example string",
       "prop2": 540
     }
-[2024-11-26T00:36:19Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 667ms. StopReason: stop. Tokens(in/out): 50/18
+[2024-11-26T16:57:39Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 563ms. StopReason: stop. Tokens(in/out): 50/18
     ---PROMPT---
     [chat] user: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1295,8 +1303,8 @@
       "prop1": "Hello",
       "prop2": 540
     }
-[2024-11-26T00:36:21Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 446ms. StopReason: stop. Tokens(in/out): 50/18
+[2024-11-26T16:57:42Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 563ms. StopReason: stop. Tokens(in/out): 50/18
     ---PROMPT---
     [chat] user: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -1319,9 +1327,9 @@
       "prop1": "example",
       "prop2": 540
     }
-

Teardown

PASSED test_tracing_sync 0:00:00.000356

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.489107

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:14.129490

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.398919

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.282715

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.131032

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.8288, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
-
Captured stderr call
[2024-11-26T00:36:41Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1123ms. StopReason: stop. Tokens(in/out): 177/50
+

Teardown

PASSED test_tracing_sync 0:00:00.000293

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.456758

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:14.140540

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.122119

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.263676

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.690548

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.83, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
+
Captured stderr call
[2024-11-26T16:58:02Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1685ms. StopReason: stop. Tokens(in/out): 177/53
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -1348,8 +1356,10 @@
         "name": "Harrison",
         "hair_color": "BLACK",
         "last_name": [],
-        "height": 1.8288,
-        "hobbies": ["sports"]
+        "height": 1.83,
+        "hobbies": [
+          "sports"
+        ]
       }
     ]
     ```
@@ -1359,16 +1369,16 @@
         "name": "Harrison",
         "hair_color": "BLACK",
         "last_name": [],
-        "height": 1.8288,
+        "height": 1.83,
         "hobbies": [
           "SPORTS"
         ]
       }
     ]
-

Teardown

PASSED test_dynamic_class_output 0:00:00.931332

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_class_output 0:00:00.968772

Setup

Call

Captured stdout call
[]
 {"hair_color":"black"}
-
Captured stderr call
[2024-11-26T00:36:42Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 449ms. StopReason: stop. Tokens(in/out): 49/10
+
Captured stderr call
[2024-11-26T16:58:02Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 456ms. StopReason: stop. Tokens(in/out): 49/10
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1387,8 +1397,8 @@
     {
       "hair_color": "black"
     }
-[2024-11-26T00:36:42Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 471ms. StopReason: stop. Tokens(in/out): 49/10
+[2024-11-26T16:58:03Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 507ms. StopReason: stop. Tokens(in/out): 49/10
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1407,9 +1417,9 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:01.176101

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
-
Captured stderr call
[2024-11-26T00:36:43Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1164ms. StopReason: stop. Tokens(in/out): 117/57
+

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:00.767708

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
+
Captured stderr call
[2024-11-26T16:58:04Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 762ms. StopReason: stop. Tokens(in/out): 117/57
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1454,7 +1464,7 @@
       "hair_color": "black",
       "height": 6.0
     }
-

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.717229

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
+

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.725572

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}
@@ -1531,8 +1541,8 @@
 streamed  name={'first_name': 'Mark', 'last_name': 'Gonzalez'} hair_color='black'
 streamed  {'name': {'first_name': 'Mark', 'last_name': 'Gonzalez'}, 'hair_color': 'black'}
 {"name":{"first_name":"Mark","last_name":"Gonzalez"},"hair_color":"black"}
-
Captured stderr call
[2024-11-26T00:36:44Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 710ms. StopReason: stop. Tokens(in/out): 73/35
+
Captured stderr call
[2024-11-26T16:58:04Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 720ms. StopReason: stop. Tokens(in/out): 73/35
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1563,7 +1573,7 @@
       },
       "hair_color": "black"
     }
-

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.785962

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.659535

Setup

Call

Captured stdout call
[]
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{\n  "'}
@@ -1580,8 +1590,8 @@
 final  hair_color='black'
 final  {'hair_color': 'black'}
 final  {"hair_color":"black"}
-
Captured stderr call
[2024-11-26T00:36:45Z INFO  baml_events] Function MyFunc:
-    Client: MyClient (gpt-4o-mini-2024-07-18) - 780ms. StopReason: stop. Tokens(in/out): 48/14
+
Captured stderr call
[2024-11-26T16:58:05Z INFO  baml_events] Function MyFunc:
+    Client: MyClient (gpt-4o-mini-2024-07-18) - 654ms. StopReason: stop. Tokens(in/out): 48/14
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1602,23 +1612,23 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.407343

Setup

Call

Captured stderr call
[2024-11-26T00:36:46Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1399ms. StopReason: stop. Tokens(in/out): 135/79
+

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.014890

Setup

Call

Captured stderr call
[2024-11-26T16:58:06Z INFO  baml_events] Function DynamicListInputOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1010ms. StopReason: stop. Tokens(in/out): 135/79
     ---PROMPT---
     [chat] user: Here is some input data:
     ----
     [{
-        "testKey": "myTest",
         "new_key": "hi1",
         "blah": {
             "nestedKey1": "nestedVal",
         },
+        "testKey": "myTest",
     }, {
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "new_key": "hi",
         "testKey": "myTest",
+        "new_key": "hi",
     }]
     ----
     
@@ -1668,8 +1678,8 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_types_new_enum 0:00:01.202549

Setup

Call

Captured stderr call
[2024-11-26T00:36:47Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1196ms. StopReason: stop. Tokens(in/out): 149/32
+

Teardown

PASSED test_dynamic_types_new_enum 0:00:01.076369

Setup

Call

Captured stderr call
[2024-11-26T16:58:07Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1072ms. StopReason: stop. Tokens(in/out): 149/36
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -1684,6 +1694,7 @@
     user: My name is Harrison. My hair is black and I'm 6 feet tall. I'm pretty good around the hoop. I like giraffes.
     
     ---LLM REPLY---
+    ```json
     [
       {
         "name": "Harrison",
@@ -1691,6 +1702,7 @@
         "animalLiked": "GIRAFFE"
       }
     ]
+    ```
     ---Parsed Response (list<class Person>)---
     [
       {
@@ -1699,8 +1711,8 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.775854

Setup

Call

Captured stderr call
[2024-11-26T00:36:48Z INFO  baml_events] Function ExtractHobby:
-    Client: GPT4 (gpt-4o-2024-08-06) - 770ms. StopReason: stop. Tokens(in/out): 65/12
+

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.696264

Setup

Call

Captured stderr call
[2024-11-26T16:58:08Z INFO  baml_events] Function ExtractHobby:
+    Client: GPT4 (gpt-4o-2024-08-06) - 693ms. StopReason: stop. Tokens(in/out): 65/16
     ---PROMPT---
     [chat] system: Answer with a JSON Array using this schema:
     [
@@ -1709,17 +1721,19 @@
     user: My name is Harrison. My hair is black and I'm 6 feet tall. golf and music are my favorite!.
     
     ---LLM REPLY---
+    ```json
     [
       "Golfing",
       "MUSIC"
     ]
+    ```
     ---Parsed Response (list<enum Hobby>)---
     [
       "Golfing",
       "MUSIC"
     ]
-

Teardown

PASSED test_dynamic_literals 0:00:02.349094

Setup

Call

Captured stderr call
[2024-11-26T00:36:50Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 2342ms. StopReason: stop. Tokens(in/out): 149/32
+

Teardown

PASSED test_dynamic_literals 0:00:01.261003

Setup

Call

Captured stderr call
[2024-11-26T16:58:09Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1258ms. StopReason: stop. Tokens(in/out): 149/32
     ---PROMPT---
     [chat] system: You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.
     
@@ -1749,23 +1763,23 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_inputs_list 0:00:00.894979

Setup

Call

Captured stderr call
[2024-11-26T00:36:51Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 884ms. StopReason: stop. Tokens(in/out): 134/78
+

Teardown

PASSED test_dynamic_inputs_list 0:00:01.045577

Setup

Call

Captured stderr call
[2024-11-26T16:58:10Z INFO  baml_events] Function DynamicListInputOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1040ms. StopReason: stop. Tokens(in/out): 134/78
     ---PROMPT---
     [chat] user: Here is some input data:
     ----
     [{
-        "new_key": "hi",
         "testKey": "myTest",
+        "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
     }, {
-        "new_key": "hi",
-        "testKey": "myTest",
         "blah": {
             "nestedKey1": "nestedVal",
         },
+        "testKey": "myTest",
+        "new_key": "hi",
     }]
     ----
     
@@ -1783,20 +1797,20 @@
     
     ---LLM REPLY---
     [
-      {
-        "testKey": "myTest",
-        "new_key": "hi",
-        "blah": {
-          "nestedKey1": "nestedVal"
-        }
-      },
-      {
-        "testKey": "myTest",
-        "new_key": "hi",
-        "blah": {
-          "nestedKey1": "nestedVal"
+        {
+            "testKey": "myTest",
+            "new_key": "hi",
+            "blah": {
+                "nestedKey1": "nestedVal"
+            }
+        },
+        {
+            "testKey": "myTest",
+            "new_key": "hi",
+            "blah": {
+                "nestedKey1": "nestedVal"
+            }
         }
-      }
     ]
     ---Parsed Response (list<class DynInputOutput>)---
     [
@@ -1815,12 +1829,12 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_output_map 0:00:00.718771

Setup

Call

Captured stdout call
[]
-final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"}}
-
Captured stderr call
[2024-11-26T00:36:52Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 711ms. StopReason: stop. Tokens(in/out): 80/36
+

Teardown

PASSED test_dynamic_output_map 0:00:00.679308

Setup

Call

Captured stdout call
[]
+final  hair_color='black' attributes={'height': '6 feet', 'eye_color': 'blue', 'facial_hair': 'beard'}
+final  {'hair_color': 'black', 'attributes': {'height': '6 feet', 'eye_color': 'blue', 'facial_hair': 'beard'}}
+final  {"hair_color":"black","attributes":{"height":"6 feet","eye_color":"blue","facial_hair":"beard"}}
+
Captured stderr call
[2024-11-26T16:58:11Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 676ms. StopReason: stop. Tokens(in/out): 80/44
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1837,6 +1851,7 @@
     {
       "hair_color": "black",
       "attributes": {
+        "height": "6 feet",
         "eye_color": "blue",
         "facial_hair": "beard"
       }
@@ -1845,19 +1860,20 @@
     {
       "hair_color": "black",
       "attributes": {
+        "height": "6 feet",
         "eye_color": "blue",
         "facial_hair": "beard"
       }
     }
-

Teardown

PASSED test_dynamic_output_union 0:00:01.911571

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_output_union 0:00:01.587734

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 years'} height={'meters': 1.8}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30 years'}, 'height': {'meters': 1.8}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard","age":"30 years"},"height":{"meters":1.8}}
-
Captured stderr call
[2024-11-26T00:36:53Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 779ms. StopReason: stop. Tokens(in/out): 114/58
+final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'} height={'meters': 1.8}
+final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}, 'height': {'meters': 1.8}}
+final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"},"height":{"meters":1.8}}
+
Captured stderr call
[2024-11-26T16:58:12Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 716ms. StopReason: stop. Tokens(in/out): 114/58
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1900,8 +1916,8 @@
         "inches": null
       }
     }
-[2024-11-26T00:36:54Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1112ms. StopReason: stop. Tokens(in/out): 116/61
+[2024-11-26T16:58:12Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 860ms. StopReason: stop. Tokens(in/out): 116/53
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -1925,8 +1941,7 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "age": "30 years"
+        "facial_hair": "beard"
       },
       "height": {
         "meters": 1.8
@@ -1937,14 +1952,13 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "age": "30 years"
+        "facial_hair": "beard"
       },
       "height": {
         "meters": 1.8
       }
     }
-

Teardown

PASSED test_nested_class_streaming 0:00:08.064284

Setup

Call

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

Teardown

PASSED test_nested_class_streaming 0:00:01.990326

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}
@@ -1974,90 +1988,93 @@
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': '', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': None}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': '', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'good', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': None}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-final  {'prop1': 'hello', 'prop2': {'prop1': 'world', 'prop2': 'goodbye', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-
Captured stderr call
[2024-11-26T00:37:02Z INFO  baml_events] Function FnOutputClassNested:
-    Client: Ollama (llama2) - 8050ms. StopReason: stop. Tokens(in/out): unknown/unknown
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': None}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': '', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': None}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+final  {'prop1': 'Example', 'prop2': {'prop1': 'Value 1', 'prop2': 'Value 2', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+
Captured stderr call
[2024-11-26T16:58:14Z INFO  baml_events] Function FnOutputClassNested:
+    Client: Ollama (llama2) - 1984ms. StopReason: stop. Tokens(in/out): unknown/unknown
     ---PROMPT---
     [chat] user: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -2080,10 +2097,10 @@
     Sure! Here is a made-up JSON blob that matches the schema you provided:
     ```json
     {
-      "prop1": "hello",
+      "prop1": "Example",
       "prop2": {
-        "prop1": "world",
-        "prop2": "goodbye",
+        "prop1": "Value 1",
+        "prop2": "Value 2",
         "inner": {
           "prop2": 42,
           "prop3": 3.14,
@@ -2094,27 +2111,27 @@
     Let me know if you have any questions or need further assistance!
     ---Parsed Response (class TestClassNested)---
     {
-      "prop1": "hello",
+      "prop1": "Example",
       "prop2": {
-        "prop1": "world",
-        "prop2": "goodbye",
+        "prop1": "Value 1",
+        "prop2": "Value 2",
         "inner": {
           "prop2": 42,
           "prop3": 3.14
         }
       }
     }
-

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.436631

Setup

Call

Captured stderr call
[2024-11-26T00:37:02Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient (gpt-3.5-turbo-0125) - 431ms. StopReason: stop. Tokens(in/out): 14/1
+

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.460625

Setup

Call

Captured stderr call
[2024-11-26T16:58:15Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient (gpt-3.5-turbo-0125) - 458ms. StopReason: stop. Tokens(in/out): 14/7
     ---PROMPT---
     [chat] user: What is the capital of England?
     
     ---LLM REPLY---
-    London
+    The capital of England is London.
     ---Parsed Response (string)---
-    "London"
-

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:00.915723

Setup

Call

Captured stderr call
[2024-11-26T00:37:03Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 911ms. StopReason: "STOP". Tokens(in/out): 7/10
+    "The capital of England is London."
+

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:00.842830

Setup

Call

Captured stderr call
[2024-11-26T16:58:16Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient () - 840ms. StopReason: "STOP". Tokens(in/out): 7/10
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -2123,8 +2140,8 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.175949

Setup

Call

Captured stderr call
[2024-11-26T00:37:05Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 1173ms. StopReason: "STOP". Tokens(in/out): 7/10
+

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.108165

Setup

Call

Captured stderr call
[2024-11-26T16:58:17Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient () - 1105ms. StopReason: "STOP". Tokens(in/out): 7/10
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -2133,12 +2150,12 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_event_log_hook 0:00:01.121972

Setup

Call

Captured stdout call
Event log hook1: 
+

Teardown

PASSED test_event_log_hook 0:00:01.235860

Setup

Call

Captured stdout call
Event log hook1: 
 Event log event  BamlLogEvent {
     metadata: {
-        event_id: "4fe6d1f0-0318-4199-9b4a-599b0631cee0",
+        event_id: "44009259-30f3-48f0-8333-2b4268d4a1de",
         parent_id: None,
-        root_event_id: "4fe6d1f0-0318-4199-9b4a-599b0631cee0"
+        root_event_id: "44009259-30f3-48f0-8333-2b4268d4a1de"
     },
     prompt: "[
   {
@@ -2152,10 +2169,10 @@
 ]",
     raw_output: "["a", "b", "c"]",
     parsed_output: "["a", "b", "c"]",
-    start_time: "2024-11-26T00:37:05.368Z"
+    start_time: "2024-11-26T16:58:17.823Z"
 }
-
Captured stderr call
[2024-11-26T00:37:05Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 392ms. StopReason: stop. Tokens(in/out): 23/9
+
Captured stderr call
[2024-11-26T16:58:18Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 500ms. StopReason: stop. Tokens(in/out): 23/9
     ---PROMPT---
     [chat] user: Return this value back to me: ["a", "b", "c"]
     
@@ -2163,154 +2180,150 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED test_aws_bedrock 0:00:03.076307

Setup

Call

Captured stdout call
unstreamed 
-
-The old rock sat nestled among the roots of a ancient oak tree, its weathered surface bearing the scars of countless seasons. It was a peculiar rock, with veins of quartz that seemed to shimmer in the fading light of day.
+

Teardown

PASSED test_aws_bedrock 0:00:03.102714

Setup

Call

Captured stdout call
unstreamed 
 
-As the storm clouds gathered, the air grew heavy with electricity. The wind began to pick up, rustling the leaves of the oak tree and causing the rock to vibrate with an otherworldly energy.
+The old miner, Jack, had spent his entire life digging for precious gems and metals in the depths of the earth. He had seen it all - the glittering veins of quartz, the veins of gold, and the dark, mysterious depths of coal. But nothing had ever prepared him for what he was about to find.
 
-Suddenly, a brilliant flash of lightning illuminated the sky,
+As he panned through the dirt and debris of an old mine shaft, Jack's eyes scanned the ground for any sign of something valuable. His pickaxe had been silent
 streamed  '\n\n'
 streamed  '\n\nIn'
 streamed  '\n\nIn the'
 streamed  '\n\nIn the heart'
 streamed  '\n\nIn the heart of'
 streamed  '\n\nIn the heart of the'
-streamed  '\n\nIn the heart of the ancient'
-streamed  '\n\nIn the heart of the ancient forest'
-streamed  '\n\nIn the heart of the ancient forest,'
-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 that'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock that had'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock that had been'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock that had been passed'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock that had been passed down'
-streamed  '\n\nIn the heart of the ancient forest, there was a peculiar rock that had been passed down through'
-streamed  'heart of the ancient forest, there was a peculiar rock that had been passed down through generations'
-streamed  'rt of the ancient forest, there was a peculiar rock that had been passed down through generations of'
-streamed  'f the ancient forest, there was a peculiar rock that had been passed down through generations of the'
-streamed  'ancient forest, there was a peculiar rock that had been passed down through generations of the local'
-streamed  't forest, there was a peculiar rock that had been passed down through generations of the local tribe'
-streamed  ' forest, there was a peculiar rock that had been passed down through generations of the local tribe.'
-streamed  'rest, there was a peculiar rock that had been passed down through generations of the local tribe. It'
-streamed  ', there was a peculiar rock that had been passed down through generations of the local tribe. It was'
-streamed  're was a peculiar rock that had been passed down through generations of the local tribe. It was said'
-streamed  's a peculiar rock that had been passed down through generations of the local tribe. It was said that'
-streamed  'peculiar rock that had been passed down through generations of the local tribe. It was said that the'
-streamed  'iar rock that had been passed down through generations of the local tribe. It was said that the rock'
-streamed  'ock that had been passed down through generations of the local tribe. It was said that the rock held'
-streamed  'k that had been passed down through generations of the local tribe. It was said that the rock held a'
-streamed  'had been passed down through generations of the local tribe. It was said that the rock held a secret'
-streamed  'ad been passed down through generations of the local tribe. It was said that the rock held a secret,'
-streamed  ' been passed down through generations of the local tribe. It was said that the rock held a secret, a'
-streamed  'assed down through generations of the local tribe. It was said that the rock held a secret, a secret'
-streamed  ' down through generations of the local tribe. It was said that the rock held a secret, a secret that'
-streamed  ' through generations of the local tribe. It was said that the rock held a secret, a secret that only'
-streamed  'generations of the local tribe. It was said that the rock held a secret, a secret that only revealed'
-streamed  'ions of the local tribe. It was said that the rock held a secret, a secret that only revealed itself'
-streamed  's of the local tribe. It was said that the rock held a secret, a secret that only revealed itself to'
-streamed  'he local tribe. It was said that the rock held a secret, a secret that only revealed itself to those'
-streamed  'ocal tribe. It was said that the rock held a secret, a secret that only revealed itself to those who'
-streamed  'e. It was said that the rock held a secret, a secret that only revealed itself to those who listened'
-streamed  's said that the rock held a secret, a secret that only revealed itself to those who listened closely'
-streamed  'aid that the rock held a secret, a secret that only revealed itself to those who listened closely to'
-streamed  'that the rock held a secret, a secret that only revealed itself to those who listened closely to the'
-streamed  'rock held a secret, a secret that only revealed itself to those who listened closely to the whispers'
-streamed  'k held a secret, a secret that only revealed itself to those who listened closely to the whispers of'
-streamed  'ld a secret, a secret that only revealed itself to those who listened closely to the whispers of the'
-streamed  'secret, a secret that only revealed itself to those who listened closely to the whispers of the wind'
-streamed  'ret, a secret that only revealed itself to those who listened closely to the whispers of the wind.\n\n'
-streamed  ', a secret that only revealed itself to those who listened closely to the whispers of the wind.\n\nThe'
-streamed  'ecret that only revealed itself to those who listened closely to the whispers of the wind.\n\nThe rock'
-streamed  't that only revealed itself to those who listened closely to the whispers of the wind.\n\nThe rock was'
-streamed  'that only revealed itself to those who listened closely to the whispers of the wind.\n\nThe rock was a'
-streamed  'only revealed itself to those who listened closely to the whispers of the wind.\n\nThe rock was a deep'
-streamed  'nly revealed itself to those who listened closely to the whispers of the wind.\n\nThe rock was a deep,'
-streamed  'evealed itself to those who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich'
-streamed  'd itself to those who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown'
-streamed  ' itself to those who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown,'
-streamed  'elf to those who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and'
-streamed  'to those who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its'
-streamed  ' who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface'
-streamed  ' listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface was'
-streamed  'stened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface was et'
-streamed  'ed closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface was etched'
-streamed  'osely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface was etched with'
-streamed  ' the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface was etched with strange'
-streamed  'spers of the wind.\n\nThe rock was a deep, rich brown, and its surface was etched with strange symbols'
-streamed  ' of the wind.\n\nThe rock was a deep, rich brown, and its surface was etched with strange symbols that'
-streamed  ' wind.\n\nThe rock was a deep, rich brown, and its surface was etched with strange symbols that seemed'
-streamed  'nd.\n\nThe rock was a deep, rich brown, and its surface was etched with strange symbols that seemed to'
-streamed  ' rock was a deep, rich brown, and its surface was etched with strange symbols that seemed to shimmer'
-streamed  'ck was a deep, rich brown, and its surface was etched with strange symbols that seemed to shimmer in'
-streamed  'as a deep, rich brown, and its surface was etched with strange symbols that seemed to shimmer in the'
-streamed  'eep, rich brown, and its surface was etched with strange symbols that seemed to shimmer in the flick'
-streamed  'rich brown, and its surface was etched with strange symbols that seemed to shimmer in the flickering'
-streamed  'n, and its surface was etched with strange symbols that seemed to shimmer in the flickering sunlight'
-streamed  ', and its surface was etched with strange symbols that seemed to shimmer in the flickering sunlight.'
-streamed  'd its surface was etched with strange symbols that seemed to shimmer in the flickering sunlight. The'
-streamed  'surface was etched with strange symbols that seemed to shimmer in the flickering sunlight. The tribe'
-streamed  "rface was etched with strange symbols that seemed to shimmer in the flickering sunlight. The tribe's"
-streamed  "as etched with strange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders"
-streamed  " with strange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed"
-streamed  " strange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that"
-streamed  "ange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the"
-streamed  "symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock"
-streamed  "ols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock was"
-streamed  "that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imb"
-streamed  "t seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imbued"
-streamed  "med to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imbued with"
-streamed  "to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imbued with the"
-streamed  "mmer in the flickering sunlight. The tribe's elders believed that the rock was imbued with the power"
-streamed  "r in the flickering sunlight. The tribe's elders believed that the rock was imbued with the power of"
-streamed  " the flickering sunlight. The tribe's elders believed that the rock was imbued with the power of the"
-streamed  "ering sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning"
-streamed  " sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that"
-streamed  " sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that"
-streamed  " sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that"
-streamed  " sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that"
+streamed  '\n\nIn the heart of the desert'
+streamed  '\n\nIn the heart of the desert,'
+streamed  '\n\nIn the heart of the desert, there'
+streamed  '\n\nIn the heart of the desert, there was'
+streamed  '\n\nIn the heart of the desert, there was a'
+streamed  '\n\nIn the heart of the desert, there was a peculiar'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation that'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation that had'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation that had been'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation that had been a'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation that had been a subject'
+streamed  '\n\nIn the heart of the desert, there was a peculiar rock formation that had been a subject of'
+streamed  ' the heart of the desert, there was a peculiar rock formation that had been a subject of fascination'
+streamed  ' heart of the desert, there was a peculiar rock formation that had been a subject of fascination for'
+streamed  'rt of the desert, there was a peculiar rock formation that had been a subject of fascination for the'
+streamed  'the desert, there was a peculiar rock formation that had been a subject of fascination for the local'
+streamed  ', there was a peculiar rock formation that had been a subject of fascination for the local villagers'
+streamed  'ere was a peculiar rock formation that had been a subject of fascination for the local villagers for'
+streamed  'culiar rock formation that had been a subject of fascination for the local villagers for generations'
+streamed  'uliar rock formation that had been a subject of fascination for the local villagers for generations.'
+streamed  'r rock formation that had been a subject of fascination for the local villagers for generations. The'
+streamed  'k formation that had been a subject of fascination for the local villagers for generations. The rock'
+streamed  ' formation that had been a subject of fascination for the local villagers for generations. The rock,'
+streamed  'tion that had been a subject of fascination for the local villagers for generations. The rock, known'
+streamed  'n that had been a subject of fascination for the local villagers for generations. The rock, known as'
+streamed  'that had been a subject of fascination for the local villagers for generations. The rock, known as "'
+streamed  't had been a subject of fascination for the local villagers for generations. The rock, known as "The'
+streamed  'n a subject of fascination for the local villagers for generations. The rock, known as "The Guardian'
+streamed  'a subject of fascination for the local villagers for generations. The rock, known as "The Guardian,"'
+streamed  'bject of fascination for the local villagers for generations. The rock, known as "The Guardian," was'
+streamed  'ect of fascination for the local villagers for generations. The rock, known as "The Guardian," was a'
+streamed  'scination for the local villagers for generations. The rock, known as "The Guardian," was a towering'
+streamed  'ation for the local villagers for generations. The rock, known as "The Guardian," was a towering mon'
+streamed  ' for the local villagers for generations. The rock, known as "The Guardian," was a towering monolith'
+streamed  'r the local villagers for generations. The rock, known as "The Guardian," was a towering monolith of'
+streamed  'cal villagers for generations. The rock, known as "The Guardian," was a towering monolith of granite'
+streamed  'al villagers for generations. The rock, known as "The Guardian," was a towering monolith of granite,'
+streamed  'illagers for generations. The rock, known as "The Guardian," was a towering monolith of granite, its'
+streamed  ' for generations. The rock, known as "The Guardian," was a towering monolith of granite, its surface'
+streamed  'r generations. The rock, known as "The Guardian," was a towering monolith of granite, its surface et'
+streamed  'nerations. The rock, known as "The Guardian," was a towering monolith of granite, its surface etched'
+streamed  'ions. The rock, known as "The Guardian," was a towering monolith of granite, its surface etched with'
+streamed  'e rock, known as "The Guardian," was a towering monolith of granite, its surface etched with ancient'
+streamed  'known as "The Guardian," was a towering monolith of granite, its surface etched with ancient symbols'
+streamed  'n as "The Guardian," was a towering monolith of granite, its surface etched with ancient symbols and'
+streamed  ' Guardian," was a towering monolith of granite, its surface etched with ancient symbols and markings'
+streamed  'dian," was a towering monolith of granite, its surface etched with ancient symbols and markings that'
+streamed  '" was a towering monolith of granite, its surface etched with ancient symbols and markings that told'
+streamed  's a towering monolith of granite, its surface etched with ancient symbols and markings that told the'
+streamed  'wering monolith of granite, its surface etched with ancient symbols and markings that told the story'
+streamed  'ing monolith of granite, its surface etched with ancient symbols and markings that told the story of'
+streamed  'monolith of granite, its surface etched with ancient symbols and markings that told the story of the'
+streamed  'ith of granite, its surface etched with ancient symbols and markings that told the story of the land'
+streamed  "h of granite, its surface etched with ancient symbols and markings that told the story of the land's"
+streamed  "nite, its surface etched with ancient symbols and markings that told the story of the land's history"
+streamed  "e, its surface etched with ancient symbols and markings that told the story of the land's history.\n\n"
+streamed  "its surface etched with ancient symbols and markings that told the story of the land's history.\n\nOne"
+streamed  "rface etched with ancient symbols and markings that told the story of the land's history.\n\nOne storm"
+streamed  "face etched with ancient symbols and markings that told the story of the land's history.\n\nOne stormy"
+streamed  "tched with ancient symbols and markings that told the story of the land's history.\n\nOne stormy night"
+streamed  "ched with ancient symbols and markings that told the story of the land's history.\n\nOne stormy night,"
+streamed  "ed with ancient symbols and markings that told the story of the land's history.\n\nOne stormy night, a"
+streamed  "th ancient symbols and markings that told the story of the land's history.\n\nOne stormy night, a bolt"
+streamed  "ancient symbols and markings that told the story of the land's history.\n\nOne stormy night, a bolt of"
+streamed  "mbols and markings that told the story of the land's history.\n\nOne stormy night, a bolt of lightning"
+streamed  "nd markings that told the story of the land's history.\n\nOne stormy night, a bolt of lightning struck"
+streamed  "arkings that told the story of the land's history.\n\nOne stormy night, a bolt of lightning struck the"
+streamed  "gs that told the story of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock"
+streamed  "s that told the story of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock,"
+streamed  "old the story of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock, illumin"
+streamed  "he story of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating"
+streamed  "tory of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the"
+streamed  "of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the dark"
+streamed  "he land's history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the dark sky"
+streamed  "nd's history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the dark sky with"
+streamed  "'s history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the dark sky with a"
+streamed  '.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant'
+streamed  ' stormy night, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash'
+streamed  'ormy night, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of'
+streamed  'ight, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of light'
+streamed  'ght, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of light.'
+streamed  ' a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of light. The'
+streamed  ' lightning struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers'
+streamed  'lightning struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers,'
+streamed  'ghtning struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers, h'
+streamed  'g struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers, huddled'
+streamed  'truck the rock, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in'
+streamed  'the rock, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in their'
+streamed  'ck, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in their homes'
+streamed  'k, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in their homes,'
+streamed  'luminating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt'
+streamed  'nating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the'
+streamed  'nating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the'
+streamed  'nating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the'
+streamed  'nating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the'
 streamed final 
 
-In the heart of the ancient forest, there was a peculiar rock that had been passed down through generations of the local tribe. It was said that the rock held a secret, a secret that only revealed itself to those who listened closely to the whispers of the wind.
+In the heart of the desert, there was a peculiar rock formation that had been a subject of fascination for the local villagers for generations. The rock, known as "The Guardian," was a towering monolith of granite, its surface etched with ancient symbols and markings that told the story of the land's history.
 
-The rock was a deep, rich brown, and its surface was etched with strange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that
-
Captured stderr call
[2024-11-26T00:37:06Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-11-26T00:37:07Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1532ms. StopReason: max_tokens. Tokens(in/out): 24/100
+One stormy night, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the
+
Captured stderr call
[2024-11-26T16:58:18Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-11-26T16:58:20Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1530ms. StopReason: max_tokens. Tokens(in/out): 24/100
     ---PROMPT---
     [chat] user: Write a nice short story about lightning in a rock
     
     ---LLM REPLY---
     
     
-    The old rock sat nestled among the roots of a ancient oak tree, its weathered surface bearing the scars of countless seasons. It was a peculiar rock, with veins of quartz that seemed to shimmer in the fading light of day.
+    The old miner, Jack, had spent his entire life digging for precious gems and metals in the depths of the earth. He had seen it all - the glittering veins of quartz, the veins of gold, and the dark, mysterious depths of coal. But nothing had ever prepared him for what he was about to find.
     
-    As the storm clouds gathered, the air grew heavy with electricity. The wind began to pick up, rustling the leaves of the oak tree and causing the rock to vibrate with an otherworldly energy.
-    
-    Suddenly, a brilliant flash of lightning illuminated the sky,
+    As he panned through the dirt and debris of an old mine shaft, Jack's eyes scanned the ground for any sign of something valuable. His pickaxe had been silent
     ---Parsed Response (string)---
-    "\n\nThe old rock sat nestled among the roots of a ancient oak tree, its weathered surface bearing the scars of countless seasons. It was a peculiar rock, with veins of quartz that seemed to shimmer in the fading light of day.\n\nAs the storm clouds gathered, the air grew heavy with electricity. The wind began to pick up, rustling the leaves of the oak tree and causing the rock to vibrate with an otherworldly energy.\n\nSuddenly, a brilliant flash of lightning illuminated the sky,"
-[2024-11-26T00:37:07Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-11-26T00:37:09Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1528ms. StopReason: unknown. Tokens(in/out): 24/100
+    "\n\nThe old miner, Jack, had spent his entire life digging for precious gems and metals in the depths of the earth. He had seen it all - the glittering veins of quartz, the veins of gold, and the dark, mysterious depths of coal. But nothing had ever prepared him for what he was about to find.\n\nAs he panned through the dirt and debris of an old mine shaft, Jack's eyes scanned the ground for any sign of something valuable. His pickaxe had been silent"
+[2024-11-26T16:58:20Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-11-26T16:58:21Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (meta.llama3-8b-instruct-v1:0) - 1566ms. StopReason: unknown. Tokens(in/out): 24/100
     ---PROMPT---
     [chat] user: Write a nice short story about lightning in a rock
     
     ---LLM REPLY---
     
     
-    In the heart of the ancient forest, there was a peculiar rock that had been passed down through generations of the local tribe. It was said that the rock held a secret, a secret that only revealed itself to those who listened closely to the whispers of the wind.
+    In the heart of the desert, there was a peculiar rock formation that had been a subject of fascination for the local villagers for generations. The rock, known as "The Guardian," was a towering monolith of granite, its surface etched with ancient symbols and markings that told the story of the land's history.
     
-    The rock was a deep, rich brown, and its surface was etched with strange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that
+    One stormy night, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the
     ---Parsed Response (string)---
-    "\n\nIn the heart of the ancient forest, there was a peculiar rock that had been passed down through generations of the local tribe. It was said that the rock held a secret, a secret that only revealed itself to those who listened closely to the whispers of the wind.\n\nThe rock was a deep, rich brown, and its surface was etched with strange symbols that seemed to shimmer in the flickering sunlight. The tribe's elders believed that the rock was imbued with the power of the lightning that"
-

Teardown

PASSED test_aws_bedrock_invalid_region 0:00:00.012686

Setup

Call

Captured stderr call
[2024-11-26T00:37:09Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-11-26T00:37:09Z WARN  baml_events] Function TestAwsInvalidRegion:
-    Client: AwsBedrockInvalidRegion (meta.llama3-8b-instruct-v1:0) - 6ms
+    "\n\nIn the heart of the desert, there was a peculiar rock formation that had been a subject of fascination for the local villagers for generations. The rock, known as \"The Guardian,\" was a towering monolith of granite, its surface etched with ancient symbols and markings that told the story of the land's history.\n\nOne stormy night, a bolt of lightning struck the rock, illuminating the dark sky with a brilliant flash of light. The villagers, huddled in their homes, felt the"
+

Teardown

PASSED test_aws_bedrock_invalid_region 0:00:00.005704

Setup

Call

Captured stderr call
[2024-11-26T16:58:21Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-11-26T16:58:21Z WARN  baml_events] Function TestAwsInvalidRegion:
+    Client: AwsBedrockInvalidRegion (meta.llama3-8b-instruct-v1:0) - 2ms
     ---PROMPT---
     [chat] user: Write a nice short story about lightning in a rock
     
@@ -2334,11 +2347,11 @@
             },
         },
     )
-

Teardown

PASSED test_serialization_exception 0:00:00.393358

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...ld: nonce
+

Teardown

PASSED test_serialization_exception 0:00:00.329398

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...ld: nonce
   - <root>: Missing required field: nonce2, raw_output=Hello there!, prompt=[chat] user: Say "hello there".
 ) tblen=2>
-
Captured stderr call
[2024-11-26T00:37:09Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 387ms. StopReason: stop. Tokens(in/out): 12/3
+
Captured stderr call
[2024-11-26T16:58:22Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 326ms. StopReason: stop. Tokens(in/out): 12/3
     ---PROMPT---
     [chat] user: Say "hello there".
     
@@ -2348,7 +2361,7 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_stream_serialization_exception 0:00:00.636167

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
+

Teardown

PASSED test_stream_serialization_exception 0:00:00.349468

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
@@ -2357,8 +2370,8 @@
 Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...ld: nonce
   - <root>: Missing required field: nonce2, raw_output=Hello there!, prompt=[chat] user: Say "hello there".
 ) tblen=3>
-
Captured stderr call
[2024-11-26T00:37:10Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 631ms. StopReason: stop. Tokens(in/out): 12/3
+
Captured stderr call
[2024-11-26T16:58:22Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 345ms. StopReason: stop. Tokens(in/out): 12/3
     ---PROMPT---
     [chat] user: Say "hello there".
     
@@ -2368,7 +2381,7 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_stream2_serialization_exception 0:00:00.363745

Setup

Call

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

Teardown

PASSED test_stream2_serialization_exception 0:00:00.430927

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
@@ -2377,8 +2390,8 @@
 Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...d: nonce2
   - <root>: Missing required field: nonce3, raw_output=Hello there!, prompt=[chat] user: Say "hello there".
 ) tblen=3>
-
Captured stderr call
[2024-11-26T00:37:10Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 357ms. StopReason: stop. Tokens(in/out): 12/3
+
Captured stderr call
[2024-11-26T16:58:22Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 426ms. StopReason: stop. Tokens(in/out): 12/3
     ---PROMPT---
     [chat] user: Say "hello there".
     
@@ -2389,8 +2402,8 @@
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
       - <root>: Missing required field: nonce3
-

Teardown

PASSED test_descriptions 0:00:02.110718

Setup

Call

Captured stderr call
[2024-11-26T00:37:12Z INFO  baml_events] Function SchemaDescriptions:
-    Client: GPT4o (gpt-4o-2024-08-06) - 2098ms. StopReason: stop. Tokens(in/out): 340/108
+

Teardown

PASSED test_descriptions 0:00:02.036899

Setup

Call

Captured stderr call
[2024-11-26T16:58:24Z INFO  baml_events] Function SchemaDescriptions:
+    Client: GPT4o (gpt-4o-2024-08-06) - 2029ms. StopReason: stop. Tokens(in/out): 340/104
     ---PROMPT---
     [chat] user: Return a schema with this format:
     
@@ -2467,9 +2480,7 @@
         "hi"
       ],
       "blah": "blah",
-      "nested_attrs": [
-        "nested"
-      ],
+      "nested_attrs": "nested",
       "parens": "parens1",
       "other": "other"
     }
@@ -2495,8 +2506,8 @@
       "parens": "parens1",
       "other_group": "other"
     }
-

Teardown

FAILED test_caching 0:00:07.604673

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

Setup

Call

@pytest.mark.asyncio
+

Teardown

FAILED test_caching 0:00:06.041508

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

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.
@@ -2532,16 +2543,16 @@
 >       assert (
             duration2 < duration
         ), f"{duration2} < {duration}. Expected second call to be faster than first by a large margin."
-E       AssertionError: 3.9973297119140625 < 3.6063649654388428. Expected second call to be faster than first by a large margin.
-E       assert 3.9973297119140625 < 3.6063649654388428
+E       AssertionError: 3.157634735107422 < 2.8829891681671143. Expected second call to be faster than first by a large margin.
+E       assert 3.157634735107422 < 2.8829891681671143
 
-tests/test_functions.py:1271: AssertionError
Captured stdout call
Duration no caching:  3.6063649654388428
-Duration with caching:  3.9973297119140625
-
Captured stderr call
[2024-11-26T00:37:16Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 3597ms. StopReason: "end_turn". Tokens(in/out): 14/421
+tests/test_functions.py:1271: AssertionError
Captured stdout call
Duration no caching:  2.8829891681671143
+Duration with caching:  3.157634735107422
+
Captured stderr call
[2024-11-26T16:58:27Z INFO  baml_events] Function TestCaching:
+    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 2879ms. StopReason: "end_turn". Tokens(in/out): 14/312
     ---PROMPT---
     [chat] system: {"cache_control": Object {"type": String("ephemeral")}}::Generate the following story
-    50ad921e06064de89a839db471078df1
+    15ca70697fa64487aae2cc10c42a082f
     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.
     
     Challenges emerge when a secretive government organization becomes aware of Alex's distinct talents. They propose Alex utilize their gift for "the greater good," suggesting uses in therapy, criminal reform, and even national defense. Concurrently, a covert resistance group contacts Alex, cautioning them about the risks of dream manipulation and the potential for widespread control and exploitation. Trapped between these conflicting forces, Alex must navigate a tangled web of moral dilemmas. They wrestle with issues of free will, the essence of consciousness, and the duty that comes with having influence over people's minds. As the repercussions of their actions ripple outward, impacting the lives of loved ones and strangers alike, Alex is compelled to face the true nature of their power and decide how—or if—it should be wielded.
@@ -2559,7 +2570,7 @@
     In conclusion, this story is a reflection on the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind. But it's also a story about the power of imagination and the potential for change, even in a world where our deepest thoughts are no longer our own. And it's a story about the power of choice, and the importance of fighting for the freedom to dream.
     
     
-    50ad921e06064de89a839db471078df1
+    15ca70697fa64487aae2cc10c42a082f
     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.
     
     Challenges emerge when a secretive government organization becomes aware of Alex's distinct talents. They propose Alex utilize their gift for "the greater good," suggesting uses in therapy, criminal reform, and even national defense. Concurrently, a covert resistance group contacts Alex, cautioning them about the risks of dream manipulation and the potential for widespread control and exploitation. Trapped between these conflicting forces, Alex must navigate a tangled web of moral dilemmas. They wrestle with issues of free will, the essence of consciousness, and the duty that comes with having influence over people's minds. As the repercussions of their actions ripple outward, impacting the lives of loved ones and strangers alike, Alex is compelled to face the true nature of their power and decide how—or if—it should be wielded.
@@ -2578,24 +2589,22 @@
     user: 1. try to be funny
     
     ---LLM REPLY---
-    Sure, let's see if we can add a little humor to this futuristic tale of dream manipulation:
+    Okay, let's try to inject some humor into this futuristic tale of dream manipulation. How about this:
     
-    In a world where dreams are the new cryptocurrency, a socially awkward teen named Alex discovers they have the power to hack into people's subconscious and redesign their nightly adventures. At first, Alex uses their powers for good - helping their peers overcome fears of public speaking or giving grandma the dream vacation of a lifetime. But it's not long before Alex starts dabbling in the dream black market, crafting bespoke dreamscapes for wealthy insomniacs who'll pay top dollar for a good night's sleep. 
+    In this world of dreamscaping, Alex's powers were such a hit that they became the most sought-after "dream designer" around. Clients would line up, wallets in hand, desperate to experience Alex's latest fever dream creations. One particularly wealthy client requested a luxurious tropical getaway, only to wake up covered in sand and seagull poop, wondering if the resort's daiquiri bar was serving something a little extra.
     
-    The only problem? Some clients get a little too attached to their custom-made dreams. One CEO wakes up convinced he's a dolphin and starts swimming laps in the company koi pond. Another client develops an unhealthy fixation on her dream persona - a suave secret agent - and starts showing up to work in a catsuit, demanding to be called "Velvet Thunder."
+    Meanwhile, Alex's own dreamscape was a perpetual montage of awkward social interactions and poorly timed bodily functions. They spent most nights trying to lucidly steer their subconscious away from such humiliating scenarios, only to accidentally project those same embarrassing dreams onto their unsuspecting friends and family members. 
     
-    As government agencies and shadowy resistance groups come calling, Alex has to navigate a maze of moral quandaries. Should they embrace their power and capitalize on it? Team up with the feds to use dream manipulation for good? Or join the rebels fighting to protect the sanctity of the subconscious?
+    As the government and resistance groups closed in, Alex had to make a choice - use their powers for good, evil, or just plain weirdness? The fate of the dreamworld rested on their shoulders, along with the ever-present risk of giving someone nightmares about being trapped in a never-ending karaoke session.
     
-    It's enough to give anyone night terrors! But through it all, Alex discovers the true power isn't just in designing dreams - it's in having the courage to face their own.
-    
-    How's that? I tried to inject a bit more humor by poking fun at some of the more absurd consequences of Alex's dream hacking, like the CEO who thinks he's a dolphin and the client who gets dangerously immersed in her secret agent persona. Hopefully that adds a lighthearted touch without losing the core themes and dramatic tension of the story. Let me know if you'd like me to try a different comedic angle.
+    How's that? I tried to inject some lighthearted, absurdist humor into the story while still maintaining the core themes and tensions. Let me know if you'd like me to take another pass at the comedic elements.
     ---Parsed Response (string)---
-    "Sure, let's see if we can add a little humor to this futuristic tale of dream manipulation:\n\nIn a world where dreams are the new cryptocurrency, a socially awkward teen named Alex discovers they have the power to hack into people's subconscious and redesign their nightly adventures. At first, Alex uses their powers for good - helping their peers overcome fears of public speaking or giving grandma the dream vacation of a lifetime. But it's not long before Alex starts dabbling in the dream black market, crafting bespoke dreamscapes for wealthy insomniacs who'll pay top dollar for a good night's sleep. \n\nThe only problem? Some clients get a little too attached to their custom-made dreams. One CEO wakes up convinced he's a dolphin and starts swimming laps in the company koi pond. Another client develops an unhealthy fixation on her dream persona - a suave secret agent - and starts showing up to work in a catsuit, demanding to be called \"Velvet Thunder.\"\n\nAs government agencies and shadowy resistance groups come calling, Alex has to navigate a maze of moral quandaries. Should they embrace their power and capitalize on it? Team up with the feds to use dream manipulation for good? Or join the rebels fighting to protect the sanctity of the subconscious?\n\nIt's enough to give anyone night terrors! But through it all, Alex discovers the true power isn't just in designing dreams - it's in having the courage to face their own.\n\nHow's that? I tried to inject a bit more humor by poking fun at some of the more absurd consequences of Alex's dream hacking, like the CEO who thinks he's a dolphin and the client who gets dangerously immersed in her secret agent persona. Hopefully that adds a lighthearted touch without losing the core themes and dramatic tension of the story. Let me know if you'd like me to try a different comedic angle."
-[2024-11-26T00:37:20Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 3988ms. StopReason: "end_turn". Tokens(in/out): 14/442
+    "Okay, let's try to inject some humor into this futuristic tale of dream manipulation. How about this:\n\nIn this world of dreamscaping, Alex's powers were such a hit that they became the most sought-after \"dream designer\" around. Clients would line up, wallets in hand, desperate to experience Alex's latest fever dream creations. One particularly wealthy client requested a luxurious tropical getaway, only to wake up covered in sand and seagull poop, wondering if the resort's daiquiri bar was serving something a little extra.\n\nMeanwhile, Alex's own dreamscape was a perpetual montage of awkward social interactions and poorly timed bodily functions. They spent most nights trying to lucidly steer their subconscious away from such humiliating scenarios, only to accidentally project those same embarrassing dreams onto their unsuspecting friends and family members. \n\nAs the government and resistance groups closed in, Alex had to make a choice - use their powers for good, evil, or just plain weirdness? The fate of the dreamworld rested on their shoulders, along with the ever-present risk of giving someone nightmares about being trapped in a never-ending karaoke session.\n\nHow's that? I tried to inject some lighthearted, absurdist humor into the story while still maintaining the core themes and tensions. Let me know if you'd like me to take another pass at the comedic elements."
+[2024-11-26T16:58:30Z INFO  baml_events] Function TestCaching:
+    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 3153ms. StopReason: "end_turn". Tokens(in/out): 14/328
     ---PROMPT---
     [chat] system: {"cache_control": Object {"type": String("ephemeral")}}::Generate the following story
-    50ad921e06064de89a839db471078df1
+    15ca70697fa64487aae2cc10c42a082f
     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.
     
     Challenges emerge when a secretive government organization becomes aware of Alex's distinct talents. They propose Alex utilize their gift for "the greater good," suggesting uses in therapy, criminal reform, and even national defense. Concurrently, a covert resistance group contacts Alex, cautioning them about the risks of dream manipulation and the potential for widespread control and exploitation. Trapped between these conflicting forces, Alex must navigate a tangled web of moral dilemmas. They wrestle with issues of free will, the essence of consciousness, and the duty that comes with having influence over people's minds. As the repercussions of their actions ripple outward, impacting the lives of loved ones and strangers alike, Alex is compelled to face the true nature of their power and decide how—or if—it should be wielded.
@@ -2613,7 +2622,7 @@
     In conclusion, this story is a reflection on the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind. But it's also a story about the power of imagination and the potential for change, even in a world where our deepest thoughts are no longer our own. And it's a story about the power of choice, and the importance of fighting for the freedom to dream.
     
     
-    50ad921e06064de89a839db471078df1
+    15ca70697fa64487aae2cc10c42a082f
     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.
     
     Challenges emerge when a secretive government organization becomes aware of Alex's distinct talents. They propose Alex utilize their gift for "the greater good," suggesting uses in therapy, criminal reform, and even national defense. Concurrently, a covert resistance group contacts Alex, cautioning them about the risks of dream manipulation and the potential for widespread control and exploitation. Trapped between these conflicting forces, Alex must navigate a tangled web of moral dilemmas. They wrestle with issues of free will, the essence of consciousness, and the duty that comes with having influence over people's minds. As the repercussions of their actions ripple outward, impacting the lives of loved ones and strangers alike, Alex is compelled to face the true nature of their power and decide how—or if—it should be wielded.
@@ -2632,23 +2641,21 @@
     user: 1. try to be funny
     
     ---LLM REPLY---
-    Alright, let's try to inject a little humor into this futuristic tale of dream manipulation. Here's an attempt at adding some comedic elements:
-    
-    In this world of commercialized dream experiences, Alex - the socially awkward teen with a penchant for meddling in others' subconscious - finds themselves in a rather peculiar predicament. Armed with the ability to sculpt dreams like a virtuoso sculptor, Alex can't help but get carried away, crafting increasingly bizarre and outlandish dreamscapes for their unsuspecting clients.
+    Here's an attempt to add some humor to the story:
     
-    One wealthy businessman pays handsomely for a VIP dream package, only to find himself trapped in a never-ending loop of show tunes and tap-dancing penguins. Another client, a high-strung workaholic, commissions Alex to create a soothing nature retreat, only to wake up covered in glitter and neon-colored flower petals, much to the delight of their coworkers.
+    In a futuristic world where dreams are the newest commodity, a socially awkward teenager named Alex discovers they have a special power - the ability to manipulate other people's dreams. At first, Alex uses this skill to help their friends and family, tweaking their dreams to boost their confidence or conquer their fears. But before long, the teenage dream architect starts getting a little too big for their britches.
     
-    As Alex's reputation grows, so do the expectations - and the eccentricities. The government agents tasked with recruiting Alex find themselves struggling to keep a straight face during the pitch meeting, as Alex describes their latest dream design involving a herd of levitating llamas and a game of volleyball with sentient marshmallows.
+    Alex starts secretly designing custom dream experiences for wealthy clients, creating lavish fantasy worlds tailored to their deepest desires. Of course, the line between dream and reality becomes increasingly blurred, leading to some rather uncomfortable situations. One client wakes up convinced they're now the president of the United States, while another thinks they're engaged to their celebrity crush. Oops!
     
-    Meanwhile, the resistance fighters trying to sway Alex to their cause can't help but chuckle at the sheer absurdity of Alex's creations, even as they warn of the dangers of dream manipulation. "So, let me get this straight," one rebel leader says, "you've been making people think they're dancing with sentient toasters? Well, that's certainly one way to fight the system."
+    When a shady government agency catches wind of Alex's illicit dream dealings, they try to recruit the young visionary, promising to put their talents to use for "the greater good" - whatever that means. Meanwhile, a rebel group warns Alex about the dangers of messing with people's minds. Talk about a rock and a hard place!
     
-    Through it all, Alex remains oblivious to the humor of their situation, laser-focused on perfecting their craft and exploring the boundless possibilities of the dream world. After all, who needs reality when you can design your own fantastical escapes - even if they do involve the occasional mutant unicorn or singing paperclip.
+    Torn between personal gain, governmental control, and the fight for freedom, Alex has to figure out how to navigate this brave new world of dream commerce without completely losing their own grip on reality. After all, the last thing they need is to get stuck in a never-ending dream loop, unable to tell if they're awake or still snoozing. Sweet dreams, everyone!
     ---Parsed Response (string)---
-    "Alright, let's try to inject a little humor into this futuristic tale of dream manipulation. Here's an attempt at adding some comedic elements:\n\nIn this world of commercialized dream experiences, Alex - the socially awkward teen with a penchant for meddling in others' subconscious - finds themselves in a rather peculiar predicament. Armed with the ability to sculpt dreams like a virtuoso sculptor, Alex can't help but get carried away, crafting increasingly bizarre and outlandish dreamscapes for their unsuspecting clients.\n\nOne wealthy businessman pays handsomely for a VIP dream package, only to find himself trapped in a never-ending loop of show tunes and tap-dancing penguins. Another client, a high-strung workaholic, commissions Alex to create a soothing nature retreat, only to wake up covered in glitter and neon-colored flower petals, much to the delight of their coworkers.\n\nAs Alex's reputation grows, so do the expectations - and the eccentricities. The government agents tasked with recruiting Alex find themselves struggling to keep a straight face during the pitch meeting, as Alex describes their latest dream design involving a herd of levitating llamas and a game of volleyball with sentient marshmallows.\n\nMeanwhile, the resistance fighters trying to sway Alex to their cause can't help but chuckle at the sheer absurdity of Alex's creations, even as they warn of the dangers of dream manipulation. \"So, let me get this straight,\" one rebel leader says, \"you've been making people think they're dancing with sentient toasters? Well, that's certainly one way to fight the system.\"\n\nThrough it all, Alex remains oblivious to the humor of their situation, laser-focused on perfecting their craft and exploring the boundless possibilities of the dream world. After all, who needs reality when you can design your own fantastical escapes - even if they do involve the occasional mutant unicorn or singing paperclip."
-

Teardown

PASSED test_arg_exceptions 0:00:00.989845

Setup

Call

Captured stderr call
[2024-11-26T00:37:20Z ERROR baml_runtime::tracing]   Error: input: Expected type String, got `Number(111)`
+    "Here's an attempt to add some humor to the story:\n\nIn a futuristic world where dreams are the newest commodity, a socially awkward teenager named Alex discovers they have a special power - the ability to manipulate other people's dreams. At first, Alex uses this skill to help their friends and family, tweaking their dreams to boost their confidence or conquer their fears. But before long, the teenage dream architect starts getting a little too big for their britches.\n\nAlex starts secretly designing custom dream experiences for wealthy clients, creating lavish fantasy worlds tailored to their deepest desires. Of course, the line between dream and reality becomes increasingly blurred, leading to some rather uncomfortable situations. One client wakes up convinced they're now the president of the United States, while another thinks they're engaged to their celebrity crush. Oops!\n\nWhen a shady government agency catches wind of Alex's illicit dream dealings, they try to recruit the young visionary, promising to put their talents to use for \"the greater good\" - whatever that means. Meanwhile, a rebel group warns Alex about the dangers of messing with people's minds. Talk about a rock and a hard place!\n\nTorn between personal gain, governmental control, and the fight for freedom, Alex has to figure out how to navigate this brave new world of dream commerce without completely losing their own grip on reality. After all, the last thing they need is to get stuck in a never-ending dream loop, unable to tell if they're awake or still snoozing. Sweet dreams, everyone!"
+

Teardown

PASSED test_arg_exceptions 0:00:00.786247

Setup

Call

Captured stderr call
[2024-11-26T16:58:30Z ERROR baml_runtime::tracing]   Error: input: Expected type String, got `Number(111)`
     
-[2024-11-26T00:37:20Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 385ms
+[2024-11-26T16:58:31Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 222ms
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -2671,8 +2678,8 @@
         }
     }
     
-[2024-11-26T00:37:20Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 161ms
+[2024-11-26T16:58:31Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 163ms
     ---PROMPT---
     [chat] user: Given a string, extract info using the schema:
     
@@ -2695,8 +2702,8 @@
         }
     }
     
-[2024-11-26T00:37:21Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 426ms. StopReason: stop. Tokens(in/out): 12/3
+[2024-11-26T16:58:31Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 393ms. StopReason: stop. Tokens(in/out): 12/3
     ---PROMPT---
     [chat] user: Say "hello there".
     
@@ -2706,25 +2713,25 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_map_as_param 0:00:00.001731

Setup

Call

Captured stderr call
[2024-11-26T00:37:21Z ERROR baml_runtime::tracing]   Error: myMap: a: Expected map, got `String("b")`
+

Teardown

PASSED test_map_as_param 0:00:00.001083

Setup

Call

Captured stderr call
[2024-11-26T16:58:31Z ERROR baml_runtime::tracing]   Error: myMap: a: Expected map, got `String("b")`
     
-

Teardown

PASSED test_baml_validation_error_format 0:00:00.724016

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

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] user: Say "hello there".
+  - <root>: Missing required field: nonce2, raw_output=Hello there!, prompt=[chat] user: Say "hello there".
 )
-
Captured stderr call
[2024-11-26T00:37:22Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 717ms. StopReason: stop. Tokens(in/out): 12/10
+
Captured stderr call
[2024-11-26T16:58:32Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 490ms. StopReason: stop. Tokens(in/out): 12/3
     ---PROMPT---
     [chat] user: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I assist you today?
+    Hello there!
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_no_stream_big_integer 0:00:00.416612

Setup

Call

Captured stderr call
[2024-11-26T00:37:22Z INFO  baml_events] Function StreamOneBigNumber:
-    Client: GPT4 (gpt-4o-2024-08-06) - 411ms. StopReason: stop. Tokens(in/out): 46/4
+

Teardown

PASSED test_no_stream_big_integer 0:00:00.640104

Setup

Call

Captured stderr call
[2024-11-26T16:58:32Z INFO  baml_events] Function StreamOneBigNumber:
+    Client: GPT4 (gpt-4o-2024-08-06) - 637ms. StopReason: stop. Tokens(in/out): 46/4
     ---PROMPT---
     [chat] user: Respond with only an integer, no affirmations or prefixes or anything.
     The response should be parsable as a JSON number.
@@ -2734,11 +2741,11 @@
     Answer as an int
     
     ---LLM REPLY---
-    102345678901
+    123456789012
     ---Parsed Response (int)---
-    102345678901
-

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.454241

Setup

Call

Captured stderr call
[2024-11-26T00:37:22Z INFO  baml_events] Function StreamBigNumbers:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 449ms. StopReason: stop. Tokens(in/out): 70/23
+    123456789012
+

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.617458

Setup

Call

Captured stderr call
[2024-11-26T16:58:33Z INFO  baml_events] Function StreamBigNumbers:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 614ms. StopReason: stop. Tokens(in/out): 70/24
     ---PROMPT---
     [chat] user: Please make sure every integer in the output has 12 digits.
     For floats, provide a mix - from 0-10 places before the decimal point,
@@ -2753,15 +2760,15 @@
     ---LLM REPLY---
     {
       "a": 123456789012,
-      "b": 7.890123456
+      "b": 7890.123456789
     }
     ---Parsed Response (class BigNumbers)---
     {
       "a": 123456789012,
-      "b": 7.890123456
+      "b": 7890.123456789
     }
-

Teardown

PASSED test_no_stream_compound_object 0:00:02.528516

Setup

Call

Captured stderr call
[2024-11-26T00:37:25Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 2522ms. StopReason: stop. Tokens(in/out): 133/149
+

Teardown

PASSED test_no_stream_compound_object 0:00:02.732210

Setup

Call

Captured stderr call
[2024-11-26T16:58:36Z INFO  baml_events] Function StreamingCompoundNumbers:
+    Client: GPT4 (gpt-4o-2024-08-06) - 2727ms. StopReason: stop. Tokens(in/out): 133/119
     ---PROMPT---
     [chat] user:     Respond in pure json. Don't use any English descriptions like "Sure, I'll do that",
         nor put the result into a fenced code block.
@@ -2788,54 +2795,46 @@
     {
       "big": {
         "a": 123456789012,
-        "b": 9876543210.1234567890
+        "b": 0.123456789
       },
       "big_nums": [
         {
-          "a": 234567890123,
+          "a": 987654321098,
           "b": 1234567.89
         },
         {
-          "a": 345678901234,
-          "b": 1234567890123.456789
-        },
-        {
-          "a": 456789012345,
-          "b": 12345.6789012
+          "a": 112233445566,
+          "b": 76543210.987654321
         }
       ],
       "another": {
-        "a": 567890123456,
-        "b": 123.456789012
+        "a": 998877665544,
+        "b": 9876543210.1
       }
     }
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
         "a": 123456789012,
-        "b": 9876543210.123457
+        "b": 0.123456789
       },
       "big_nums": [
         {
-          "a": 234567890123,
+          "a": 987654321098,
           "b": 1234567.89
         },
         {
-          "a": 345678901234,
-          "b": 1234567890123.4568
-        },
-        {
-          "a": 456789012345,
-          "b": 12345.6789012
+          "a": 112233445566,
+          "b": 76543210.98765433
         }
       ],
       "another": {
-        "a": 567890123456,
-        "b": 123.456789012
+        "a": 998877665544,
+        "b": 9876543210.1
       }
     }
-

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:01.786465

Setup

Call

Captured stderr call
[2024-11-26T00:37:27Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1781ms. StopReason: stop. Tokens(in/out): 114/148
+

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:03.102353

Setup

Call

Captured stderr call
[2024-11-26T16:58:39Z INFO  baml_events] Function StreamingCompoundNumbers:
+    Client: GPT4 (gpt-4o-2024-08-06) - 3096ms. StopReason: stop. Tokens(in/out): 114/159
     ---PROMPT---
     [chat] user:     Please give me a friendly response before outputting json. And put the JSON
         into a fenced code block.
@@ -2857,53 +2856,61 @@
     }
     
     ---LLM REPLY---
-    Hey there! I'm about to share some JSON data with you following your specifications. Check it out below:
+    Sure! Here you go with your requested JSON response:
     
     ```json
     {
       "big": {
-        "a": 100000000001,
-        "b": 1234567890.123456789
+        "a": 123456789012,
+        "b": 3456789.123456
       },
       "big_nums": [
         {
-          "a": 200000000002,
-          "b": 987654321.1
+          "a": 987654321234,
+          "b": 12345678.123
         },
         {
-          "a": 300000000003,
-          "b": 12340000000.1234
+          "a": 112233445566,
+          "b": 9876543210.123456789
+        },
+        {
+          "a": 998877665544,
+          "b": 1234.567
         }
       ],
       "another": {
-        "a": 400000000004,
-        "b": 567890123.987654321
+        "a": 334455667788,
+        "b": 98765.4321
       }
     }
     ```
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
-        "a": 100000000001,
-        "b": 1234567890.1234567
+        "a": 123456789012,
+        "b": 3456789.123456
       },
       "big_nums": [
         {
-          "a": 200000000002,
-          "b": 987654321.1
+          "a": 987654321234,
+          "b": 12345678.123
         },
         {
-          "a": 300000000003,
-          "b": 12340000000.1234
+          "a": 112233445566,
+          "b": 9876543210.123457
+        },
+        {
+          "a": 998877665544,
+          "b": 1234.567
         }
       ],
       "another": {
-        "a": 400000000004,
-        "b": 567890123.9876543
+        "a": 334455667788,
+        "b": 98765.4321
       }
     }
-

Teardown

PASSED test_differing_unions 0:00:01.066114

Setup

Call

Captured stderr call
[2024-11-26T00:37:28Z INFO  baml_events] Function DifferentiateUnions:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1057ms. StopReason: stop. Tokens(in/out): 50/60
+

Teardown

PASSED test_differing_unions 0:00:01.964311

Setup

Call

Captured stderr call
[2024-11-26T16:58:41Z INFO  baml_events] Function DifferentiateUnions:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1960ms. StopReason: stop. Tokens(in/out): 50/72
     ---PROMPT---
     [chat] user: Create a data model that represents the latter of the two classes.
     
@@ -2916,7 +2923,7 @@
     }
     
     ---LLM REPLY---
-    Here’s a data model in JSON that represents the latter of the two classes, which includes an integer value and a string value:
+    Sure! Below is an example of a JSON data model that represents the latter of the two classes as specified, which includes both an integer value and a string value2.
     
     ```json
     {
@@ -2925,14 +2932,14 @@
     }
     ``` 
     
-    Feel free to customize the values to suit your needs!
+    You can replace the values with any integers and strings as per your requirements.
     ---Parsed Response (class OriginalB)---
     {
       "value": 42,
       "value2": "example string"
     }
-

Teardown

PASSED test_return_failing_assert 0:00:00.619982

Setup

Call

Captured stderr call
[2024-11-26T00:37:28Z WARN  baml_events] Function ReturnFailingAssert:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 615ms. StopReason: stop. Tokens(in/out): 19/1
+

Teardown

PASSED test_return_failing_assert 0:00:00.409089

Setup

Call

Captured stderr call
[2024-11-26T16:58:41Z WARN  baml_events] Function ReturnFailingAssert:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 406ms. StopReason: stop. Tokens(in/out): 19/1
     ---PROMPT---
     [chat] user: Return the next integer after 1.
     
@@ -2942,9 +2949,27 @@
     2
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Assertions failed.
-

Teardown

PASSED test_parameter_failing_assert 0:00:00.002388

Setup

Call

Captured stderr call
[2024-11-26T00:37:28Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: small_int
+

Teardown

PASSED test_parameter_failing_assert 0:00:00.001178

Setup

Call

Captured stderr call
[2024-11-26T16:58:41Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: small_int
     
-

Teardown

PASSED test_failing_assert_can_stream 0:00:02.132530

Setup

Call

Captured stdout call
None
+

Teardown

PASSED test_failing_assert_can_stream 0:00:02.696614

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
@@ -3484,8 +3509,10 @@
 None
 None
 None
-
Captured stderr call
[2024-11-26T00:37:31Z WARN  baml_events] Function StreamFailingAssertion:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 2127ms. StopReason: stop. Tokens(in/out): 62/267
+None
+None
+
Captured stderr call
[2024-11-26T16:58:44Z WARN  baml_events] Function StreamFailingAssertion:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2692ms. StopReason: stop. Tokens(in/out): 62/277
     ---PROMPT---
     [chat] user: Tell me two different stories along the theme of Yoshimi battles the pink robots with the same title.
     Please make each about 300 words long.
@@ -3499,8 +3526,8 @@
     ---LLM REPLY---
     {
       "title": "Yoshimi Battles the Pink Robots",
-      "story_a": "Yoshimi was a skilled warrior, trained in the ancient art of robot combat. When a group of pink robots invaded her village, Yoshimi knew it was up to her to save the day. Armed with her trusty sword and fierce determination, she faced off against the robots in a battle that shook the ground. With each swing of her sword, Yoshimi fought bravely, dodging lasers and parrying attacks. In the end, Yoshimi emerged victorious, her village saved from the robot threat. The townspeople cheered her name, grateful for her bravery and skill in battle.",
-      "story_b": "Yoshimi was a young musician who stumbled upon a mysterious pink robot invasion while on tour with her band. Intrigued by the strange creatures, Yoshimi decided to investigate further. As she delved deeper into the mystery, Yoshimi realized that the robots were not as menacing as they first appeared. In fact, they were lost and confused, searching for their way home. With her music, Yoshimi was able to communicate with the robots and guide them back to their own world, where they belonged. The pink robots danced joyfully as they bid Yoshimi farewell, grateful for her help and understanding."
+      "story_a": "Yoshimi was a skilled martial artist who lived in a small village plagued by metallic pink robots. The robots would terrorize the villagers, destroying their homes and crops. Yoshimi knew she had to take a stand against them. Armed with only her fighting skills and determination, she set out to defeat the robots. The battles were fierce and intense, but Yoshimi never wavered. She fought bravely, taking down each robot one by one until the village was safe once again. The villagers cheered and thanked Yoshimi for her bravery, knowing that she was their hero.",
+      "story_b": "Yoshimi was a scientist working at a research facility when she discovered a group of pink robots on a remote island. The robots seemed harmless at first, but Yoshimi soon realized they posed a threat to humanity. She knew she had to find a way to stop them before it was too late. Using her knowledge of technology and robotics, Yoshimi designed a powerful weapon to take down the robots. The battle was intense, with the robots putting up a strong fight. But Yoshimi's determination and quick thinking allowed her to defeat the robots and save humanity from their destructive plans. She was hailed as a hero and continued her work to protect the world from future threats."
     }
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=0, unparsed=2
@@ -3508,8 +3535,8 @@
         - <root>: Assertions failed.
       - <root>: Failed to parse field story_b: <root>: Assertions failed.
         - <root>: Assertions failed.
-

Teardown

PASSED test_simple_recursive_type 0:00:02.987520

Setup

Call

Captured stderr call
[2024-11-26T00:37:34Z INFO  baml_events] Function BuildLinkedList:
-    Client: O1 (o1-mini-2024-09-12) - 2978ms. StopReason: stop. Tokens(in/out): 81/357
+

Teardown

PASSED test_simple_recursive_type 0:00:14.575534

Setup

Call

Captured stderr call
[2024-11-26T16:58:58Z INFO  baml_events] Function BuildLinkedList:
+    Client: O1 (o1-mini-2024-09-12) - 14571ms. StopReason: stop. Tokens(in/out): 81/293
     ---PROMPT---
     [chat] user: Build a linked list from the input array of integers.
     
@@ -3569,43 +3596,43 @@
       },
       "len": 5
     }
-

Teardown

PASSED test_mutually_recursive_type 0:00:01.932089

Setup

Call

Captured stderr call
[2024-11-26T00:37:36Z INFO  baml_events] Function BuildTree:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1921ms. StopReason: stop. Tokens(in/out): 216/190
+

Teardown

PASSED test_mutually_recursive_type 0:00:02.094296

Setup

Call

Captured stderr call
[2024-11-26T16:59:01Z INFO  baml_events] Function BuildTree:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2088ms. StopReason: stop. Tokens(in/out): 216/190
     ---PROMPT---
     [chat] user: Given the input binary tree, transform it into a generic tree using the given schema.
     
     INPUT:
     {
         "left": {
-            "left": {
+            "data": 3,
+            "right": {
+                "left": none,
                 "right": none,
+                "data": 4,
+            },
+            "left": {
                 "data": 1,
+                "right": none,
                 "left": {
+                    "left": none,
                     "data": 2,
                     "right": none,
-                    "left": none,
                 },
             },
-            "right": {
-                "data": 4,
-                "right": none,
-                "left": none,
-            },
-            "data": 3,
         },
         "data": 5,
         "right": {
-            "data": 7,
             "left": {
-                "left": none,
-                "right": none,
                 "data": 6,
+                "right": none,
+                "left": none,
             },
             "right": {
-                "right": none,
-                "data": 8,
                 "left": none,
+                "data": 8,
+                "right": none,
             },
+            "data": 7,
         },
     }
     
@@ -3622,56 +3649,56 @@
     
     ---LLM REPLY---
     {
-        "data": 5,
-        "children": {
-            "trees": [
+      "data": 5,
+      "children": {
+        "trees": [
+          {
+            "data": 3,
+            "children": {
+              "trees": [
                 {
-                    "data": 3,
-                    "children": {
-                        "trees": [
-                            {
-                                "data": 1,
-                                "children": {
-                                    "trees": [
-                                        {
-                                            "data": 2,
-                                            "children": {
-                                                "trees": []
-                                            }
-                                        }
-                                    ]
-                                }
-                            },
-                            {
-                                "data": 4,
-                                "children": {
-                                    "trees": []
-                                }
-                            }
-                        ]
-                    }
+                  "data": 1,
+                  "children": {
+                    "trees": [
+                      {
+                        "data": 2,
+                        "children": {
+                          "trees": []
+                        }
+                      }
+                    ]
+                  }
                 },
                 {
-                    "data": 7,
-                    "children": {
-                        "trees": [
-                            {
-                                "data": 6,
-                                "children": {
-                                    "trees": []
-                                }
-                            },
-                            {
-                                "data": 8,
-                                "children": {
-                                    "trees": []
-                                }
-                            }
-                        ]
-                    }
+                  "data": 4,
+                  "children": {
+                    "trees": []
+                  }
                 }
-            ]
-        }
+              ]
+            }
+          },
+          {
+            "data": 7,
+            "children": {
+              "trees": [
+                {
+                  "data": 6,
+                  "children": {
+                    "trees": []
+                  }
+                },
+                {
+                  "data": 8,
+                  "children": {
+                    "trees": []
+                  }
+                }
+              ]
+            }
+          }
+        ]
+      }
     }
     ---Parsed Response (class Tree)---
     {
@@ -3726,8 +3753,8 @@
         ]
       }
     }
-

Teardown

PASSED test_block_constraints 0:00:00.493983

Setup

Call

Captured stderr call
[2024-11-26T00:37:36Z INFO  baml_events] Function MakeBlockConstraint:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 491ms. StopReason: stop. Tokens(in/out): 42/20
+

Teardown

PASSED test_block_constraints 0:00:00.558275

Setup

Call

Captured stderr call
[2024-11-26T16:59:01Z INFO  baml_events] Function MakeBlockConstraint:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 555ms. StopReason: stop. Tokens(in/out): 42/20
     ---PROMPT---
     [chat] user: Generate an output in the following schema with a short string and a large int.
     
@@ -3756,9 +3783,9 @@
         }
       }
     }
-

Teardown

PASSED test_nested_block_constraints 0:00:00.550835

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')})
-
Captured stderr call
[2024-11-26T00:37:37Z INFO  baml_events] Function MakeNestedBlockConstraint:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 543ms. StopReason: stop. Tokens(in/out): 52/21
+

Teardown

PASSED test_nested_block_constraints 0:00:00.536772

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')})
+
Captured stderr call
[2024-11-26T16:59:02Z INFO  baml_events] Function MakeNestedBlockConstraint:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 534ms. StopReason: stop. Tokens(in/out): 52/24
     ---PROMPT---
     [chat] user: Generate an output where the inner foo is 1 and the inner bar is "hello".
       Answer in JSON using this schema:
@@ -3771,10 +3798,10 @@
     
     ---LLM REPLY---
     {
-      nbc: {
-        foo: 1,
-        bar: "hello",
-      },
+      "nbc": {
+        "foo": 1,
+        "bar": "hello"
+      }
     }
     ---Parsed Response (class NestedBlockConstraint)---
     {
@@ -3792,8 +3819,8 @@
         }
       }
     }
-

Teardown

PASSED test_block_constraint_arguments 0:00:00.002001

Setup

Call

Captured stderr call
[2024-11-26T00:37:37Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
+

Teardown

PASSED test_block_constraint_arguments 0:00:00.001750

Setup

Call

Captured stderr call
[2024-11-26T16:59:02Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
     
-[2024-11-26T00:37:37Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
+[2024-11-26T16:59:02Z ERROR baml_runtime::tracing]   Error: inp: Failed assert: hi
     
-

Teardown

tests/test_pydantic.py 3 0:00:00.001668

PASSED test_model_validate_success 0:00:00.000383

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000537

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000749

Setup

Call

Teardown

\ No newline at end of file +

Teardown

tests/test_pydantic.py 3 0:00:00.001747

PASSED test_model_validate_success 0:00:00.000737

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000483

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000526

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 11b3f2a39..ff709a0ab 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.68.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.68.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.68.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.68.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml" => "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.69.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.69.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.69.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.69.0\"\n// on_generate \"rm .gitignore\"\n// }\n", "test-files/aliases/aliased-inputs.baml" => "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml" => "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml" => "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", diff --git a/integ-tests/typescript/baml_client/inlinedbaml.ts b/integ-tests/typescript/baml_client/inlinedbaml.ts index 6cf961ac7..da86e8e0e 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.68.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.68.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.68.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.68.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.69.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.69.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.69.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.69.0\"\n// on_generate \"rm .gitignore\"\n// }\n", "test-files/aliases/aliased-inputs.baml": "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml": "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml": "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", diff --git a/integ-tests/typescript/test-report.html b/integ-tests/typescript/test-report.html index fd505d175..d62ea4f2c 100644 --- a/integ-tests/typescript/test-report.html +++ b/integ-tests/typescript/test-report.html @@ -257,50 +257,24 @@ font-size: 1rem; padding: 0 0.5rem; } -

Test Report

Started: 2024-11-25 16:42:57
Suites (1)
0 passed
1 failed
0 pending
Tests (67)
65 passed
2 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
0.435s
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.472s
Integ tests > should work for all inputs
single class
passed
0.492s
Integ tests > should work for all inputs
multiple classes
passed
0.419s
Integ tests > should work for all inputs
single enum list
passed
0.379s
Integ tests > should work for all inputs
single float
passed
0.33s
Integ tests > should work for all inputs
single int
passed
0.4s
Integ tests > should work for all inputs
single literal int
passed
0.334s
Integ tests > should work for all inputs
single literal bool
passed
0.427s
Integ tests > should work for all inputs
single literal string
passed
0.377s
Integ tests > should work for all inputs
single class with literal prop
passed
0.947s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.551s
Integ tests > should work for all inputs
single optional string
passed
0.371s
Integ tests > should work for all inputs
single map string to string
passed
0.429s
Integ tests > should work for all inputs
single map string to class
passed
0.808s
Integ tests > should work for all inputs
single map string to map
passed
0.51s
Integ tests > should work for all inputs
enum key in map
passed
0.795s
Integ tests > should work for all inputs
literal string union key in map
passed
0.507s
Integ tests > should work for all inputs
single literal string key in map
passed
0.615s
Integ tests
should work for all outputs
passed
4.625s
Integ tests
works with retries1
passed
1.139s
Integ tests
works with retries2
passed
2.203s
Integ tests
works with fallbacks
passed
1.743s
Integ tests
should work with image from url
passed
2.23s
Integ tests
should work with image from base 64
passed
1.562s
Integ tests
should work with audio base 64
passed
1.054s
Integ tests
should work with audio from url
passed
1.086s
Integ tests
should support streaming in OpenAI
passed
2.135s
Integ tests
should support streaming in Gemini
passed
9.901s
Integ tests
should support AWS
passed
1.69s
Integ tests
should support streaming in AWS
passed
1.619s
Integ tests
should allow overriding the region
passed
0.024s
Integ tests
should support OpenAI shorthand
passed
14.595s
Integ tests
should support OpenAI shorthand streaming
passed
8.963s
Integ tests
should support anthropic shorthand
passed
2.5s
Integ tests
should support anthropic shorthand streaming
passed
2.398s
Integ tests
should support streaming without iterating
passed
1.873s
Integ tests
should support streaming in Claude
passed
1.216s
Integ tests
should support vertex
passed
10.167s
Integ tests
supports tracing sync
passed
0.02s
Integ tests
supports tracing async
passed
3.711s
Integ tests
should work with dynamic types single
passed
1.13s
Integ tests
should work with dynamic types enum
passed
1.201s
Integ tests
should work with dynamic literals
passed
1.021s
Integ tests
should work with dynamic types class
passed
1.343s
Integ tests
should work with dynamic inputs class
passed
0.515s
Integ tests
should work with dynamic inputs list
passed
0.486s
Integ tests
should work with dynamic output map
passed
0.58s
Integ tests
should work with dynamic output union
passed
1.902s
Integ tests
should work with nested classes
failed
9.02s
Error: {"type":"BamlValidationError","prompt":"[\u001b[2mchat\u001b[0m] \u001b[43muser: \u001b[0mReturn a made up json blob that matches this schema:\nAnswer in JSON using this schema:\n{\n  prop1: string,\n  prop2: {\n    prop1: string,\n    prop2: string,\n    inner: {\n      prop2: int,\n      prop3: float,\n    },\n  },\n}\n---\n\nJSON:\n","raw_output":"Sure! Here's a made-up JSON blob that matches the schema you provided:\n```json\n{\n  \"prop1\": \"Hello World!\",\n  \"prop2\": {\n    \"prop1\": \"Foo”,\n    \"prop2\": \"Bar\",\n    \"inner\": {\n      \"prop2\": 42,\n      \"prop3\": 3.14,\n    },\n  },\n}\n```\nExplanation:\n\n* The `prop1` field is a string with the value \"Hello World!\".\n* The `prop2` field is an object with three keys: `prop1`, `prop2`, and `inner`.\n\t+ The `prop1` field within the `prop2` object is a string with the value \"Foo”.\n\t+ The `prop2` field within the `prop2` object is a string with the value \"Bar\".\n\t+ The `inner` field within the `prop2` object is an object with two keys: `prop2` and `prop3`.\n\t\t- The `prop2` field within the `inner` object is an integer with the value 42.\n\t\t- The `prop3` field within the `inner` object is a floating-point number with the value 3.14.\n\nI hope this helps! Let me know if you have any questions or need further assistance.","message":"BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Failed to find any TestClassNested in 3 items\n  - <root>: Failed while parsing required fields: missing=0, unparsed=1\n    - <root>: Failed to parse field prop2: prop2: Failed while parsing required fields: missing=1, unparsed=0\n      - prop2: Missing required field: prop2\n      - prop2: Failed while parsing required fields: missing=1, unparsed=0\n        - prop2: Missing required field: prop2\n  - <root>: Failed while parsing required fields: missing=2, unparsed=0\n    - <root>: Missing required field: prop1\n    - <root>: Missing required field: prop2\n  - <root>: Failed while parsing required fields: missing=0, unparsed=1\n    - <root>: Failed to parse field prop2: prop2: Failed while parsing required fields: missing=1, unparsed=0\n      - prop2: Missing required field: prop2\n      - prop2: Failed while parsing required fields: missing=1, unparsed=0\n        - prop2: Missing required field: prop2"}
-    at BamlStream.parsed [as getFinalResponse] (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/stream.js:58:39)
-    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:602:19)
Integ tests
should work with dynamic client
passed
0.55s
Integ tests
should work with 'onLogEvent'
passed
1.828s
Integ tests
should work with a sync client
passed
0.797s
Integ tests
should raise an error when appropriate
passed
0.779s
Integ tests
should raise a BAMLValidationError
passed
0.354s
Integ tests
should reset environment variables correctly
passed
1.23s
Integ tests
should use aliases when serializing input objects - classes
passed
0.881s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
0.947s
Integ tests
should use aliases when serializing input objects - enums
passed
0.523s
Integ tests
should use aliases when serializing input objects - lists
passed
0.401s
Integ tests
constraints: should handle checks in return types
passed
0.671s
Integ tests
constraints: should handle checks in returned unions
passed
3.124s
Integ tests
constraints: should handle block-level checks
passed
0.52s
Integ tests
constraints: should handle nested-block-level checks
passed
0.526s
Integ tests
simple recursive type
passed
8.24s
Integ tests
mutually recursive type
failed
1.903s
Error: expect(received).toEqual(expected) // deep equality
+

Test Report

Started: 2024-11-26 08:53:34
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.715s
Integ tests > should work for all inputs
single string list
passed
0.382s
Integ tests > should work for all inputs
return literal union
passed
0.748s
Integ tests > should work for all inputs
single class
passed
0.505s
Integ tests > should work for all inputs
multiple classes
passed
0.46s
Integ tests > should work for all inputs
single enum list
passed
0.336s
Integ tests > should work for all inputs
single float
passed
0.402s
Integ tests > should work for all inputs
single int
passed
0.337s
Integ tests > should work for all inputs
single literal int
passed
0.632s
Integ tests > should work for all inputs
single literal bool
passed
0.388s
Integ tests > should work for all inputs
single literal string
passed
0.299s
Integ tests > should work for all inputs
single class with literal prop
passed
0.597s
Integ tests > should work for all inputs
single class with literal union prop
passed
0.675s
Integ tests > should work for all inputs
single optional string
passed
0.365s
Integ tests > should work for all inputs
single map string to string
passed
0.551s
Integ tests > should work for all inputs
single map string to class
passed
2.455s
Integ tests > should work for all inputs
single map string to map
passed
0.51s
Integ tests > should work for all inputs
enum key in map
passed
0.897s
Integ tests > should work for all inputs
literal string union key in map
passed
0.717s
Integ tests > should work for all inputs
single literal string key in map
passed
0.629s
Integ tests
should work for all outputs
passed
5.004s
Integ tests
works with retries1
passed
1.089s
Integ tests
works with retries2
passed
2.107s
Integ tests
works with fallbacks
passed
1.748s
Integ tests
should work with image from url
passed
1.61s
Integ tests
should work with image from base 64
passed
1.27s
Integ tests
should work with audio base 64
passed
0.991s
Integ tests
should work with audio from url
passed
1.083s
Integ tests
should support streaming in OpenAI
passed
2.228s
Integ tests
should support streaming in Gemini
passed
9.793s
Integ tests
should support AWS
passed
1.833s
Integ tests
should support streaming in AWS
passed
1.618s
Integ tests
should allow overriding the region
passed
0.056s
Integ tests
should support OpenAI shorthand
passed
11.457s
Integ tests
should support OpenAI shorthand streaming
passed
17.055s
Integ tests
should support anthropic shorthand
passed
2.906s
Integ tests
should support anthropic shorthand streaming
passed
2.369s
Integ tests
should support streaming without iterating
passed
1.626s
Integ tests
should support streaming in Claude
passed
1.515s
Integ tests
should support vertex
passed
9.006s
Integ tests
supports tracing sync
passed
0.009s
Integ tests
supports tracing async
passed
4.163s
Integ tests
should work with dynamic types single
passed
1.418s
Integ tests
should work with dynamic types enum
passed
0.909s
Integ tests
should work with dynamic literals
passed
1.001s
Integ tests
should work with dynamic types class
passed
1.114s
Integ tests
should work with dynamic inputs class
passed
0.523s
Integ tests
should work with dynamic inputs list
passed
0.643s
Integ tests
should work with dynamic output map
passed
0.703s
Integ tests
should work with dynamic output union
passed
1.71s
Integ tests
should work with nested classes
failed
10.822s
Error: expect(received).toEqual(expected) // deep equality
 
-- Expected  - 6
-+ Received  + 5
+- Expected  - 1
++ Received  + 1
 
-@@ -4,30 +4,29 @@
-        Object {
-          "children": Object {
-            "trees": Array [
-              Object {
-                "children": Object {
--                 "trees": Array [
-+                 "trees": Array [],
-+               },
-+               "data": 1,
-+             },
-              Object {
-                "children": Object {
-                  "trees": Array [],
-                },
-                "data": 2,
-              },
-            ],
-          },
--               "data": 1,
-+         "data": 3,
-        },
-        Object {
-          "children": Object {
-            "trees": Array [],
-          },
-          "data": 4,
--             },
--           ],
--         },
--         "data": 3,
-        },
-        Object {
-          "children": Object {
-            "trees": Array [
-              Object {
-    at Object.toEqual (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:838:17)
Console Log
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:48:15)
+  Object {
+    "prop1": "Hello",
+    "prop2": Object {
+      "inner": Object {
+        "prop2": 42,
+-       "prop3": 3.14,
++       "prop3": null,
+      },
+      "prop1": "World",
+      "prop2": "Javascript",
+    },
+  }
+    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.446s
Integ tests
should work with 'onLogEvent'
passed
1.604s
Integ tests
should work with a sync client
passed
0.513s
Integ tests
should raise an error when appropriate
passed
0.676s
Integ tests
should raise a BAMLValidationError
passed
0.324s
Integ tests
should reset environment variables correctly
passed
1.013s
Integ tests
should use aliases when serializing input objects - classes
passed
1.046s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
0.78s
Integ tests
should use aliases when serializing input objects - enums
passed
0.362s
Integ tests
should use aliases when serializing input objects - lists
passed
0.301s
Integ tests
constraints: should handle checks in return types
passed
0.773s
Integ tests
constraints: should handle checks in returned unions
passed
0.695s
Integ tests
constraints: should handle block-level checks
passed
0.447s
Integ tests
constraints: should handle nested-block-level checks
passed
0.56s
Integ tests
simple recursive type
passed
2.252s
Integ tests
mutually recursive type
passed
2.226s
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)
@@ -313,11 +287,13 @@
     at runAndTransformResultsToJestFormat (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
     at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
     at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
-    at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
calling with class
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts: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: "user", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1732581794, tv_nsec: 12578000 }, latency: 272.346375ms, 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 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: "user", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1732640033, tv_nsec: 802692000 }, latency: 163.428167ms, 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: "user", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1732581796, tv_nsec: 310300000 }, latency: 197.029625ms, 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: "user", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1732640035, tv_nsec: 927579000 }, latency: 166.684125ms, 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'
@@ -370,6 +346,9 @@
     at jestAdapter (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
     at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
     at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
dummyFunc2 returned
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
     at async Promise.all (index 0)
@@ -577,6 +556,9 @@
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:407:17)
samDummyNested nested2
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:383:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
     at async Promise.all (index 2)
@@ -587,6 +569,9 @@
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:407:17)
samDummyNested nested3
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:394:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:38
     at /Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:13
     at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:421:20
@@ -596,7 +581,13 @@
     at func (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:104:44)
     at AsyncLocalStorage.run (node:async_hooks:338:14)
     at run (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:102:28)
-    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:433:5)
hello world
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:437:13)
stats {"failed":0,"started":30,"finalized":30,"submitted":30,"sent":30,"done":30}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:461:13)
[
+    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:433:5)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
hello world
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:437:13)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
stats {"failed":0,"started":30,"finalized":30,"submitted":30,"sent":30,"done":30}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:461:13)
[
   {
     name: 'Harrison',
     hair_color: 'BLACK',
@@ -651,7 +642,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>)
@@ -712,1824 +703,1330 @@
     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' },
   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' },
   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: 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 World', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg { prop1: 'Hello World!', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  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 World!',
-  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 World!',
-  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 World!',
-  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 World!',
-  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 World!',
-  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 World!',
-  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 World!',
-  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 World!',
-  prop2: { prop1: 'Foo', 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 World!',
-  prop2: { prop1: 'Foo”,', 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 World!',
-  prop2: { prop1: 'Foo”,', prop2: null, 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: '', 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: 'J', 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: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,', prop2: null, inner: null }
+  prop1: 'Hello',
+  prop2: { prop1: 'World', prop2: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,\n    ', prop2: null, inner: null }
+  prop1: 'Hello',
+  prop2: { prop1: 'World', prop2: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,\n    "prop', prop2: null, inner: null }
+  prop1: 'Hello',
+  prop2: { prop1: 'World', prop2: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,\n    "prop2', prop2: null, inner: null }
+  prop1: 'Hello',
+  prop2: { prop1: 'World', prop2: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,\n    "prop2":', prop2: null, inner: null }
+  prop1: 'Hello',
+  prop2: { prop1: 'World', prop2: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": ', prop2: null, inner: null }
+  prop1: 'Hello',
+  prop2: { prop1: 'World', prop2: 'Javascript', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
msg {
-  prop1: 'Hello World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
-  prop2: { prop1: 'Foo”,\n    "prop2": "Bar', 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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
-  }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
-    at runNextTicks (node:internal/process/task_queues:60:5)
-    at listOnTimeout (node:internal/timers:538:9)
-    at processTimers (node:internal/timers:512:7)
msg {
-  prop1: 'Hello World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
+    prop1: 'World',
+    prop2: 'Javascript',
+    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    inner: { prop2: 42, prop3: 3.14 }
+    prop1: 'World',
+    prop2: 'Javascript',
+    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at processTimers (node:internal/timers:509:9)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:15)
+    at runNextTicks (node:internal/process/task_queues:60:5)
+    at listOnTimeout (node:internal/timers:538:9)
+    at processTimers (node:internal/timers:512:7)
msg {
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
-    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 World!',
-  prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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 World!',
+  prop1: 'Hello',
   prop2: {
-    prop1: 'Foo”,\n    "prop2": "Bar',
-    prop2: null,
+    prop1: 'World',
+    prop2: 'Javascript',
     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: '4965c78f-09d8-436d-931d-305945add5d4',
-    rootEventId: '4965c78f-09d8-436d-931d-305945add5d4'
+    eventId: '66813c1f-6af6-457c-8cbe-3d59263196ff',
+    rootEventId: '66813c1f-6af6-457c-8cbe-3d59263196ff'
   },
   prompt: '[\n' +
     '  {\n' +
@@ -2543,12 +2040,12 @@
     ']',
   rawOutput: '["a", "b", "c"]',
   parsedOutput: '["a", "b", "c"]',
-  startTime: '2024-11-26T00:44:43.387Z'
+  startTime: '2024-11-26T16:55:28.057Z'
 }
    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: 'c0cee060-530e-43dc-84c0-be5077be71ca',
-    rootEventId: 'c0cee060-530e-43dc-84c0-be5077be71ca'
+    eventId: 'a4564200-6e8c-47be-9880-d153a020d11c',
+    rootEventId: 'a4564200-6e8c-47be-9880-d153a020d11c'
   },
   prompt: '[\n' +
     '  {\n' +
@@ -2562,8 +2059,8 @@
     ']',
   rawOutput: '["d", "e", "f"]',
   parsedOutput: '["d", "e", "f"]',
-  startTime: '2024-11-26T00:44:43.813Z'
-}
    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: "user", 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: 1732581885, tv_nsec: 564378000 }, latency: 158.524416ms, 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-11-26T16:55:28.438Z'
+}
    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: "user", 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: 1732640129, tv_nsec: 988540000 }, latency: 139.890458ms, 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'
@@ -2586,5 +2083,5 @@
     at BamlAsyncClient.DummyOutputFunction (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:562:50)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:673:7) {
   prompt: '[\x1B[2mchat\x1B[0m] \x1B[43muser: \x1B[0mSay "hello there".\n',
-  raw_output: 'Hello there! How can I assist you today?'
+  raw_output: 'Hello there!'
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:777:13)
{"nbc":{"value":{"foo":1,"bar":"hello"},"checks":{"cross_field":{"name":"cross_field","expression":"this.bar|length > this.foo","status":"succeeded"}}}}
\ No newline at end of file diff --git a/tools/versions/engine.cfg b/tools/versions/engine.cfg index e4afd4768..42b16d121 100644 --- a/tools/versions/engine.cfg +++ b/tools/versions/engine.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.68.0 +current_version = 0.69.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/integ-tests.cfg b/tools/versions/integ-tests.cfg index 404ecfae7..042d42177 100644 --- a/tools/versions/integ-tests.cfg +++ b/tools/versions/integ-tests.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.68.0 +current_version = 0.69.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/python.cfg b/tools/versions/python.cfg index f649dfd17..d45a134e6 100644 --- a/tools/versions/python.cfg +++ b/tools/versions/python.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.68.0 +current_version = 0.69.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/ruby.cfg b/tools/versions/ruby.cfg index 718decc9d..204a2acb3 100644 --- a/tools/versions/ruby.cfg +++ b/tools/versions/ruby.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.68.0 +current_version = 0.69.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/typescript.cfg b/tools/versions/typescript.cfg index a668780da..c9621ace0 100644 --- a/tools/versions/typescript.cfg +++ b/tools/versions/typescript.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.68.0 +current_version = 0.69.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/tools/versions/vscode.cfg b/tools/versions/vscode.cfg index 08d3fad12..dd2b61800 100644 --- a/tools/versions/vscode.cfg +++ b/tools/versions/vscode.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.68.0 +current_version = 0.69.0 commit = False tag = False parse = ^(?P\d+)\.(?P\d+).(?P\d+)$ diff --git a/typescript/vscode-ext/packages/package.json b/typescript/vscode-ext/packages/package.json index 4502dfc16..86a6ea352 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.68.0", + "version": "0.69.0", "publisher": "Boundary", "repository": "https://github.com/BoundaryML/baml", "homepage": "https://www.boundaryml.com",