diff --git a/CHANGELOG.md b/CHANGELOG.md
index be7dd7175..476cfb2f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,17 +2,19 @@
 
 All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
 
+<info>BAML generally gets an update every Monday.</info>
+
+
+## [0.73.4](https://github.com/boundaryml/baml/compare/0.73.3..0.73.4) - 2025-01-22
+Fix another issue where playground could rerender over and over
+
 ## [0.73.3](https://github.com/boundaryml/baml/compare/0.73.2..0.73.3) - 2025-01-22
+Fix issue where playground could rerender over and over
 
 ### Bug Fixes
 
 - fix rerendering of component causing performance issue in the playground (#1368)
-  
-# Changelog
-
-<info>BAML generally gets an update every Monday.</info>
 
-All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
 ## [0.73.2](https://github.com/boundaryml/baml/compare/0.73.1..0.73.2) - 2025-01-22
 
 
diff --git a/engine/Cargo.lock b/engine/Cargo.lock
index 3647fe773..66c6be112 100644
--- a/engine/Cargo.lock
+++ b/engine/Cargo.lock
@@ -803,7 +803,7 @@ dependencies = [
 
 [[package]]
 name = "baml-cli"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "ambassador",
  "anyhow",
@@ -891,7 +891,7 @@ dependencies = [
 
 [[package]]
 name = "baml-lib"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "base64 0.13.1",
  "dissimilar",
@@ -934,7 +934,7 @@ dependencies = [
 
 [[package]]
 name = "baml-runtime"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "ambassador",
  "anyhow",
@@ -1032,7 +1032,7 @@ dependencies = [
 
 [[package]]
 name = "baml-schema-build"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "baml-runtime",
@@ -1070,7 +1070,7 @@ dependencies = [
 
 [[package]]
 name = "baml-types"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "clap",
@@ -1199,7 +1199,7 @@ dependencies = [
 
 [[package]]
 name = "bstd"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -2641,7 +2641,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-codegen"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "askama",
@@ -2666,7 +2666,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-core"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "baml-types",
@@ -2703,7 +2703,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-diagnostics"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "colored",
@@ -2716,7 +2716,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-jinja"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "askama",
@@ -2737,7 +2737,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-jinja-types"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "askama",
@@ -2756,7 +2756,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-parser-database"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "baml-types",
@@ -2781,7 +2781,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-prompt-parser"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "internal-baml-diagnostics",
  "internal-baml-schema-ast",
@@ -2793,7 +2793,7 @@ dependencies = [
 
 [[package]]
 name = "internal-baml-schema-ast"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "baml-types",
@@ -2814,7 +2814,7 @@ dependencies = [
 
 [[package]]
 name = "internal-llm-client"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "aws-config",
@@ -2913,7 +2913,7 @@ checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105"
 
 [[package]]
 name = "jsonish"
-version = "0.73.3"
+version = "0.73.4"
 dependencies = [
  "anyhow",
  "assert-json-diff",
diff --git a/engine/Cargo.toml b/engine/Cargo.toml
index 919587351..93da8ff0e 100644
--- a/engine/Cargo.toml
+++ b/engine/Cargo.toml
@@ -96,7 +96,7 @@ internal-baml-jinja = { path = "baml-lib/jinja" }
 internal-baml-schema-ast = { path = "baml-lib/schema-ast" }
 
 [workspace.package]
-version = "0.73.3"
+version = "0.73.4"
 authors = ["Boundary <contact@boundaryml.com>"]
 
 description = "BAML Toolchain"
diff --git a/engine/language_client_python/pyproject.toml b/engine/language_client_python/pyproject.toml
index 026d82ee1..210d06bee 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.73.3"
+version = "0.73.4"
 description = "BAML python bindings (pyproject.toml)"
 readme = "README.md"
 authors = [{ "name" = "Boundary", "email" = "contact@boundaryml.com" }]
diff --git a/engine/language_client_ruby/baml.gemspec b/engine/language_client_ruby/baml.gemspec
index e61bbec1c..64122440e 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.73.3"
+  spec.version = "0.73.4"
   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 f7047a661..5d2208d06 100644
--- a/engine/language_client_typescript/package.json
+++ b/engine/language_client_typescript/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@boundaryml/baml",
-  "version": "0.73.3",
+  "version": "0.73.4",
   "description": "BAML typescript bindings (package.json)",
   "repository": {
     "type": "git",
diff --git a/fern/pages/changelog.mdx b/fern/pages/changelog.mdx
index 3dba2d0be..8e8be189c 100644
--- a/fern/pages/changelog.mdx
+++ b/fern/pages/changelog.mdx
@@ -4,17 +4,19 @@ title: Changelog
 
 All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
 
+<info>BAML generally gets an update every Monday.</info>
+
+
+## [0.73.4](https://github.com/boundaryml/baml/compare/0.73.3..0.73.4) - 2025-01-22
+Fix another issue where playground could rerender over and over
+
 ## [0.73.3](https://github.com/boundaryml/baml/compare/0.73.2..0.73.3) - 2025-01-22
+Fix issue where playground could rerender over and over
 
 ### Bug Fixes
 
 - fix rerendering of component causing performance issue in the playground (#1368)
-  
-# Changelog
 
-<info>BAML generally gets an update every Monday.</info>
-
-All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
 ## [0.73.2](https://github.com/boundaryml/baml/compare/0.73.1..0.73.2) - 2025-01-22
 
 
diff --git a/integ-tests/baml_src/generators.baml b/integ-tests/baml_src/generators.baml
index a30ec854e..43dc03c53 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.73.3"
+  version "0.73.4"
 }
 
 generator lang_typescript {
   output_type typescript
   output_dir "../typescript"
-  version "0.73.3"
+  version "0.73.4"
 }
 
 generator lang_ruby {
   output_type ruby/sorbet
   output_dir "../ruby"
-  version "0.73.3"
+  version "0.73.4"
 }
 
 // generator openapi {
 //   output_type rest/openapi
 //   output_dir "../openapi"
-//   version "0.73.3"
+//   version "0.73.4"
 //   on_generate "rm .gitignore"
 // }
diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py
index c2347d083..3d50ad260 100644
--- a/integ-tests/python/baml_client/inlinedbaml.py
+++ b/integ-tests/python/baml_client/inlinedbaml.py
@@ -26,7 +26,7 @@
     "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}",
     "formatter/test-comments.baml": "class FormatterTest0 {\n  lorem string  // trailing comments should be preserved\n  ipsum string\n}\n\nclass FormatterTest1 {\n  lorem string\n  ipsum string\n  // dolor string\n}\n\nclass FormatterTest2 {\n  // \"lorem\" is a latin word\n  lorem string\n  // \"ipsum\" is a latin word\n  ipsum string\n}\n\nclass FormatterTest3 {\n  lorem string\n  ipsum string\n  // Lorem ipsum dolor sit amet\n  // Consectetur adipiscing elit\n  // Sed do eiusmod tempor incididunt\n  // Ut labore et dolore magna aliqua\n  // Ut enim ad minim veniam\n}",
-    "generators.baml": "generator lang_python {\n  output_type python/pydantic\n  output_dir \"../python\"\n  version \"0.73.3\"\n}\n\ngenerator lang_typescript {\n  output_type typescript\n  output_dir \"../typescript\"\n  version \"0.73.3\"\n}\n\ngenerator lang_ruby {\n  output_type ruby/sorbet\n  output_dir \"../ruby\"\n  version \"0.73.3\"\n}\n\n// generator openapi {\n//   output_type rest/openapi\n//   output_dir \"../openapi\"\n//   version \"0.73.3\"\n//   on_generate \"rm .gitignore\"\n// }\n",
+    "generators.baml": "generator lang_python {\n  output_type python/pydantic\n  output_dir \"../python\"\n  version \"0.73.4\"\n}\n\ngenerator lang_typescript {\n  output_type typescript\n  output_dir \"../typescript\"\n  version \"0.73.4\"\n}\n\ngenerator lang_ruby {\n  output_type ruby/sorbet\n  output_dir \"../ruby\"\n  version \"0.73.4\"\n}\n\n// generator openapi {\n//   output_type rest/openapi\n//   output_dir \"../openapi\"\n//   version \"0.73.4\"\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/ruby/baml_client/inlined.rb b/integ-tests/ruby/baml_client/inlined.rb
index ebfdc6bf2..f3cc78e30 100644
--- a/integ-tests/ruby/baml_client/inlined.rb
+++ b/integ-tests/ruby/baml_client/inlined.rb
@@ -26,7 +26,7 @@ module Inlined
         "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}",
         "formatter/test-comments.baml" => "class FormatterTest0 {\n  lorem string  // trailing comments should be preserved\n  ipsum string\n}\n\nclass FormatterTest1 {\n  lorem string\n  ipsum string\n  // dolor string\n}\n\nclass FormatterTest2 {\n  // \"lorem\" is a latin word\n  lorem string\n  // \"ipsum\" is a latin word\n  ipsum string\n}\n\nclass FormatterTest3 {\n  lorem string\n  ipsum string\n  // Lorem ipsum dolor sit amet\n  // Consectetur adipiscing elit\n  // Sed do eiusmod tempor incididunt\n  // Ut labore et dolore magna aliqua\n  // Ut enim ad minim veniam\n}",
-        "generators.baml" => "generator lang_python {\n  output_type python/pydantic\n  output_dir \"../python\"\n  version \"0.73.3\"\n}\n\ngenerator lang_typescript {\n  output_type typescript\n  output_dir \"../typescript\"\n  version \"0.73.3\"\n}\n\ngenerator lang_ruby {\n  output_type ruby/sorbet\n  output_dir \"../ruby\"\n  version \"0.73.3\"\n}\n\n// generator openapi {\n//   output_type rest/openapi\n//   output_dir \"../openapi\"\n//   version \"0.73.3\"\n//   on_generate \"rm .gitignore\"\n// }\n",
+        "generators.baml" => "generator lang_python {\n  output_type python/pydantic\n  output_dir \"../python\"\n  version \"0.73.4\"\n}\n\ngenerator lang_typescript {\n  output_type typescript\n  output_dir \"../typescript\"\n  version \"0.73.4\"\n}\n\ngenerator lang_ruby {\n  output_type ruby/sorbet\n  output_dir \"../ruby\"\n  version \"0.73.4\"\n}\n\n// generator openapi {\n//   output_type rest/openapi\n//   output_dir \"../openapi\"\n//   version \"0.73.4\"\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 07ce41dfe..a06692924 100644
--- a/integ-tests/typescript/baml_client/inlinedbaml.ts
+++ b/integ-tests/typescript/baml_client/inlinedbaml.ts
@@ -27,7 +27,7 @@ const fileMap = {
   "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}",
   "formatter/test-comments.baml": "class FormatterTest0 {\n  lorem string  // trailing comments should be preserved\n  ipsum string\n}\n\nclass FormatterTest1 {\n  lorem string\n  ipsum string\n  // dolor string\n}\n\nclass FormatterTest2 {\n  // \"lorem\" is a latin word\n  lorem string\n  // \"ipsum\" is a latin word\n  ipsum string\n}\n\nclass FormatterTest3 {\n  lorem string\n  ipsum string\n  // Lorem ipsum dolor sit amet\n  // Consectetur adipiscing elit\n  // Sed do eiusmod tempor incididunt\n  // Ut labore et dolore magna aliqua\n  // Ut enim ad minim veniam\n}",
-  "generators.baml": "generator lang_python {\n  output_type python/pydantic\n  output_dir \"../python\"\n  version \"0.73.3\"\n}\n\ngenerator lang_typescript {\n  output_type typescript\n  output_dir \"../typescript\"\n  version \"0.73.3\"\n}\n\ngenerator lang_ruby {\n  output_type ruby/sorbet\n  output_dir \"../ruby\"\n  version \"0.73.3\"\n}\n\n// generator openapi {\n//   output_type rest/openapi\n//   output_dir \"../openapi\"\n//   version \"0.73.3\"\n//   on_generate \"rm .gitignore\"\n// }\n",
+  "generators.baml": "generator lang_python {\n  output_type python/pydantic\n  output_dir \"../python\"\n  version \"0.73.4\"\n}\n\ngenerator lang_typescript {\n  output_type typescript\n  output_dir \"../typescript\"\n  version \"0.73.4\"\n}\n\ngenerator lang_ruby {\n  output_type ruby/sorbet\n  output_dir \"../ruby\"\n  version \"0.73.4\"\n}\n\n// generator openapi {\n//   output_type rest/openapi\n//   output_dir \"../openapi\"\n//   version \"0.73.4\"\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/junit.xml b/integ-tests/typescript/junit.xml
index db5ec0fa8..aba1b811a 100644
--- a/integ-tests/typescript/junit.xml
+++ b/integ-tests/typescript/junit.xml
@@ -1,165 +1,131 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<testsuites name="jest tests" tests="52" failures="2" errors="0" time="39.162">
-  <testsuite name="Constraint Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="7.549" tests="4">
-    <testcase classname="Constraint Tests should handle checks in return types" name="Constraint Tests should handle checks in return types" time="1.025">
+<testsuites name="jest tests" tests="52" failures="0" errors="0" time="33.082">
+  <testsuite name="Azure Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="5.156" tests="2">
+    <testcase classname="Azure Provider should support azure" name="Azure Provider should support azure" time="0.387">
     </testcase>
-    <testcase classname="Constraint Tests should handle checks in returned unions" name="Constraint Tests should handle checks in returned unions" time="0.965">
+    <testcase classname="Azure Provider should fail if azure is not configured" name="Azure Provider should fail if azure is not configured" time="0.068">
     </testcase>
-    <testcase classname="Constraint Tests should handle block-level checks" name="Constraint Tests should handle block-level checks" time="0.744">
+  </testsuite>
+  <testsuite name="Anthropic Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:43" time="4.604" tests="2">
+    <testcase classname="Anthropic Provider should support anthropic shorthand" name="Anthropic Provider should support anthropic shorthand" time="2.883">
     </testcase>
-    <testcase classname="Constraint Tests should handle nested-block-level checks" name="Constraint Tests should handle nested-block-level checks" time="0.892">
+    <testcase classname="Anthropic Provider Streaming should support streaming in Claude" name="Anthropic Provider Streaming should support streaming in Claude" time="1.321">
     </testcase>
   </testsuite>
-  <testsuite name="Anthropic Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="8.25" tests="2">
-    <testcase classname="Anthropic Provider should support anthropic shorthand" name="Anthropic Provider should support anthropic shorthand" time="3.103">
+  <testsuite name="Recursive Type Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="10.058" tests="2">
+    <testcase classname="Recursive Type Tests simple recursive type" name="Recursive Type Tests simple recursive type" time="2.563">
     </testcase>
-    <testcase classname="Anthropic Provider Streaming should support streaming in Claude" name="Anthropic Provider Streaming should support streaming in Claude" time="1.116">
+    <testcase classname="Recursive Type Tests mutually recursive type" name="Recursive Type Tests mutually recursive type" time="2.944">
     </testcase>
   </testsuite>
-  <testsuite name="Error Handling Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:46:08" time="1.361" tests="4">
-    <testcase classname="Error Handling Tests should raise an error for invalid argument types" name="Error Handling Tests should raise an error for invalid argument types" time="0.004">
+  <testsuite name="Constraint Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="10.06" tests="4">
+    <testcase classname="Constraint Tests should handle checks in return types" name="Constraint Tests should handle checks in return types" time="1.335">
     </testcase>
-    <testcase classname="Error Handling Tests should raise an error for invalid client configuration" name="Error Handling Tests should raise an error for invalid client configuration" time="0.193">
+    <testcase classname="Constraint Tests should handle checks in returned unions" name="Constraint Tests should handle checks in returned unions" time="1.154">
     </testcase>
-    <testcase classname="Error Handling Tests should raise a BAMLValidationError with proper details" name="Error Handling Tests should raise a BAMLValidationError with proper details" time="0.602">
+    <testcase classname="Constraint Tests should handle block-level checks" name="Constraint Tests should handle block-level checks" time="0.98">
     </testcase>
-    <testcase classname="Error Handling Tests should handle client HTTP errors" name="Error Handling Tests should handle client HTTP errors" time="0.164">
+    <testcase classname="Constraint Tests should handle nested-block-level checks" name="Constraint Tests should handle nested-block-level checks" time="2.023">
     </testcase>
   </testsuite>
-  <testsuite name="Azure Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:46:09" time="0.845" tests="2">
-    <testcase classname="Azure Provider should support azure" name="Azure Provider should support azure" time="0.421">
+  <testsuite name="Dynamic Type Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="10.594" tests="4">
+    <testcase classname="Dynamic Type Tests Basic Dynamic Types should work with dynamic types single" name="Dynamic Type Tests Basic Dynamic Types should work with dynamic types single" time="2.169">
     </testcase>
-    <testcase classname="Azure Provider should fail if azure is not configured" name="Azure Provider should fail if azure is not configured" time="0.031">
+    <testcase classname="Dynamic Type Tests Basic Dynamic Types should work with dynamic types enum" name="Dynamic Type Tests Basic Dynamic Types should work with dynamic types enum" time="1.294">
     </testcase>
-  </testsuite>
-  <testsuite name="Tracing Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:46:07" time="3.087" tests="2">
-    <testcase classname="Tracing Tests Sync Tracing supports tracing sync" name="Tracing Tests Sync Tracing supports tracing sync" time="0.001">
+    <testcase classname="Dynamic Type Tests Complex Dynamic Types should work with dynamic output map" name="Dynamic Type Tests Complex Dynamic Types should work with dynamic output map" time="0.93">
     </testcase>
-    <testcase classname="Tracing Tests Async Tracing supports tracing async" name="Tracing Tests Async Tracing supports tracing async" time="2.875">
+    <testcase classname="Dynamic Type Tests Complex Dynamic Types should work with dynamic output union" name="Dynamic Type Tests Complex Dynamic Types should work with dynamic output union" time="1.492">
     </testcase>
   </testsuite>
-  <testsuite name="Recursive Type Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="11.666" tests="2">
-    <testcase classname="Recursive Type Tests simple recursive type" name="Recursive Type Tests simple recursive type" time="2.135">
+  <testsuite name="Error Handling Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:47" time="2.358" tests="4">
+    <testcase classname="Error Handling Tests should raise an error for invalid argument types" name="Error Handling Tests should raise an error for invalid argument types" time="0.001">
     </testcase>
-    <testcase classname="Recursive Type Tests mutually recursive type" name="Recursive Type Tests mutually recursive type" time="5.513">
+    <testcase classname="Error Handling Tests should raise an error for invalid client configuration" name="Error Handling Tests should raise an error for invalid client configuration" time="0.199">
     </testcase>
-  </testsuite>
-  <testsuite name="Vertex Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="18.652" tests="2">
-    <testcase classname="Vertex Provider should support vertex" name="Vertex Provider should support vertex" time="9.799">
+    <testcase classname="Error Handling Tests should raise a BAMLValidationError with proper details" name="Error Handling Tests should raise a BAMLValidationError with proper details" time="0.362">
     </testcase>
-    <testcase classname="Vertex Provider should support vertex with system_instructions" name="Vertex Provider should support vertex with system_instructions" time="4.885">
+    <testcase classname="Error Handling Tests should handle client HTTP errors" name="Error Handling Tests should handle client HTTP errors" time="0.161">
     </testcase>
   </testsuite>
-  <testsuite name="Gemini Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="20.221" tests="2">
-    <testcase classname="Gemini Provider Streaming should support streaming in Gemini" name="Gemini Provider Streaming should support streaming in Gemini" time="7.113">
+  <testsuite name="Tracing Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:47" time="3.712" tests="2">
+    <testcase classname="Tracing Tests Sync Tracing supports tracing sync" name="Tracing Tests Sync Tracing supports tracing sync" time="0.001">
     </testcase>
-    <testcase classname="Gemini Provider system message should support system_instructions in Gemini" name="Gemini Provider system message should support system_instructions in Gemini" time="9.102">
+    <testcase classname="Tracing Tests Async Tracing supports tracing async" name="Tracing Tests Async Tracing supports tracing async" time="3.509">
     </testcase>
   </testsuite>
-  <testsuite name="AWS Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="30.921" tests="17">
-    <testcase classname="AWS Provider should support AWS" name="AWS Provider should support AWS" time="1.683">
+  <testsuite name="Basic Input/Output Tests" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="14.478" tests="8">
+    <testcase classname="Basic Input/Output Tests Input Types single bool" name="Basic Input/Output Tests Input Types single bool" time="0.39">
     </testcase>
-    <testcase classname="AWS Provider should handle invalid AWS region gracefully" name="AWS Provider should handle invalid AWS region gracefully" time="1.227">
+    <testcase classname="Basic Input/Output Tests Input Types single string list" name="Basic Input/Output Tests Input Types single string list" time="0.515">
     </testcase>
-    <testcase classname="AWS Provider should handle invalid AWS access key gracefully" name="AWS Provider should handle invalid AWS access key gracefully" time="0.401">
+    <testcase classname="Basic Input/Output Tests Input Types single class" name="Basic Input/Output Tests Input Types single class" time="1.011">
     </testcase>
-    <testcase classname="AWS Provider Streaming should support streaming in AWS" name="AWS Provider Streaming should support streaming in AWS" time="1.521">
+    <testcase classname="Basic Input/Output Tests Input Types multiple classes" name="Basic Input/Output Tests Input Types multiple classes" time="0.936">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry Credential Resolution should handle session credentials correctly" name="AWS Provider Dynamic Client Registry Credential Resolution should handle session credentials correctly" time="7.001">
+    <testcase classname="Basic Input/Output Tests Input Types single enum list" name="Basic Input/Output Tests Input Types single enum list" time="1.914">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry Credential Resolution should require region in all environments" name="AWS Provider Dynamic Client Registry Credential Resolution should require region in all environments" time="0.41">
+    <testcase classname="Basic Input/Output Tests Input Types single float" name="Basic Input/Output Tests Input Types single float" time="0.57">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry Credential Resolution should throw error when region is empty or AWS_REGION is unset" name="AWS Provider Dynamic Client Registry Credential Resolution should throw error when region is empty or AWS_REGION is unset" time="0.366">
+    <testcase classname="Basic Input/Output Tests Input Types single int" name="Basic Input/Output Tests Input Types single int" time="0.517">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should support dynamic client configuration" name="AWS Provider Dynamic Client Registry should support dynamic client configuration" time="1.407">
+    <testcase classname="Basic Input/Output Tests Output Types should work for all outputs" name="Basic Input/Output Tests Output Types should work for all outputs" time="4.024">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should support AWS credentials configuration" name="AWS Provider Dynamic Client Registry should support AWS credentials configuration" time="0.394">
+  </testsuite>
+  <testsuite name="Vertex Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="18.344" tests="2">
+    <testcase classname="Vertex Provider should support vertex" name="Vertex Provider should support vertex" time="9.326">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should support AWS profile configuration" name="AWS Provider Dynamic Client Registry should support AWS profile configuration" time="1.432">
+    <testcase classname="Vertex Provider should support vertex with system_instructions" name="Vertex Provider should support vertex with system_instructions" time="4.44">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should support both model and model_id parameters" name="AWS Provider Dynamic Client Registry should support both model and model_id parameters" time="2.963">
+  </testsuite>
+  <testsuite name="Gemini Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="19.698" tests="2">
+    <testcase classname="Gemini Provider Streaming should support streaming in Gemini" name="Gemini Provider Streaming should support streaming in Gemini" time="7.21">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should handle invalid configuration gracefully" name="AWS Provider Dynamic Client Registry should handle invalid configuration gracefully" time="2.264">
+    <testcase classname="Gemini Provider system message should support system_instructions in Gemini" name="Gemini Provider system message should support system_instructions in Gemini" time="7.806">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should handle non-existent model gracefully" name="AWS Provider Dynamic Client Registry should handle non-existent model gracefully" time="0.364">
+  </testsuite>
+  <testsuite name="AWS Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="29.351" tests="17">
+    <testcase classname="AWS Provider should support AWS" name="AWS Provider should support AWS" time="1.705">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should throw error when using temporary credentials without session token" name="AWS Provider Dynamic Client Registry should throw error when using temporary credentials without session token" time="0.749">
+    <testcase classname="AWS Provider should handle invalid AWS region gracefully" name="AWS Provider should handle invalid AWS region gracefully" time="1.582">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should throw error when region is not provided" name="AWS Provider Dynamic Client Registry should throw error when region is not provided" time="0.003">
+    <testcase classname="AWS Provider should handle invalid AWS access key gracefully" name="AWS Provider should handle invalid AWS access key gracefully" time="0.387">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should throw error when using invalid profile" name="AWS Provider Dynamic Client Registry should throw error when using invalid profile" time="0.002">
+    <testcase classname="AWS Provider Streaming should support streaming in AWS" name="AWS Provider Streaming should support streaming in AWS" time="1.521">
     </testcase>
-    <testcase classname="AWS Provider Dynamic Client Registry should support both AWS_REGION and AWS_DEFAULT_REGION environment variables" name="AWS Provider Dynamic Client Registry should support both AWS_REGION and AWS_DEFAULT_REGION environment variables" time="4.445">
+    <testcase classname="AWS Provider Dynamic Client Registry Credential Resolution should handle session credentials correctly" name="AWS Provider Dynamic Client Registry Credential Resolution should handle session credentials correctly" time="5.167">
     </testcase>
-  </testsuite>
-  <testsuite name="OpenAI Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T21:45:59" time="34.681" tests="3">
-    <testcase classname="OpenAI Provider should support OpenAI shorthand" name="OpenAI Provider should support OpenAI shorthand" time="16.47">
+    <testcase classname="AWS Provider Dynamic Client Registry Credential Resolution should require region in all environments" name="AWS Provider Dynamic Client Registry Credential Resolution should require region in all environments" time="0.402">
     </testcase>
-    <testcase classname="OpenAI Provider Streaming should support streaming in OpenAI" name="OpenAI Provider Streaming should support streaming in OpenAI" time="7.234">
+    <testcase classname="AWS Provider Dynamic Client Registry Credential Resolution should throw error when region is empty or AWS_REGION is unset" name="AWS Provider Dynamic Client Registry Credential Resolution should throw error when region is empty or AWS_REGION is unset" time="0.346">
     </testcase>
-    <testcase classname="OpenAI Provider Streaming should support streaming without iterating" name="OpenAI Provider Streaming should support streaming without iterating" time="6.959">
+    <testcase classname="AWS Provider Dynamic Client Registry should support dynamic client configuration" name="AWS Provider Dynamic Client Registry should support dynamic client configuration" time="1.503">
     </testcase>
-  </testsuite>
-  <testsuite name="Basic Input/Output Tests" errors="0" failures="1" skipped="0" timestamp="2025-01-22T21:45:59" time="38.274" tests="8">
-    <testcase classname="Basic Input/Output Tests Input Types single bool" name="Basic Input/Output Tests Input Types single bool" time="0.821">
+    <testcase classname="AWS Provider Dynamic Client Registry should support AWS credentials configuration" name="AWS Provider Dynamic Client Registry should support AWS credentials configuration" time="0.399">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Input Types single string list" name="Basic Input/Output Tests Input Types single string list" time="0.748">
+    <testcase classname="AWS Provider Dynamic Client Registry should support AWS profile configuration" name="AWS Provider Dynamic Client Registry should support AWS profile configuration" time="1.546">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Input Types single class" name="Basic Input/Output Tests Input Types single class" time="0.717">
+    <testcase classname="AWS Provider Dynamic Client Registry should support both model and model_id parameters" name="AWS Provider Dynamic Client Registry should support both model and model_id parameters" time="2.964">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Input Types multiple classes" name="Basic Input/Output Tests Input Types multiple classes" time="0.646">
+    <testcase classname="AWS Provider Dynamic Client Registry should handle invalid configuration gracefully" name="AWS Provider Dynamic Client Registry should handle invalid configuration gracefully" time="1.528">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Input Types single enum list" name="Basic Input/Output Tests Input Types single enum list" time="0.517">
+    <testcase classname="AWS Provider Dynamic Client Registry should handle non-existent model gracefully" name="AWS Provider Dynamic Client Registry should handle non-existent model gracefully" time="0.36">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Input Types single float" name="Basic Input/Output Tests Input Types single float" time="0.514">
+    <testcase classname="AWS Provider Dynamic Client Registry should throw error when using temporary credentials without session token" name="AWS Provider Dynamic Client Registry should throw error when using temporary credentials without session token" time="0.73">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Input Types single int" name="Basic Input/Output Tests Input Types single int" time="0.499">
+    <testcase classname="AWS Provider Dynamic Client Registry should throw error when region is not provided" name="AWS Provider Dynamic Client Registry should throw error when region is not provided" time="0.002">
     </testcase>
-    <testcase classname="Basic Input/Output Tests Output Types should work for all outputs" name="Basic Input/Output Tests Output Types should work for all outputs" time="30.014">
-      <failure>Error: thrown: &quot;Exceeded timeout of 30000 ms for a test.
-Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout.&quot;
-    at /Users/aaronvillalpando/Projects/baml/integ-tests/typescript/tests/input-output.test.ts:61:5
-    at _dispatchDescribe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:91:26)
-    at describe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:55:5)
-    at /Users/aaronvillalpando/Projects/baml/integ-tests/typescript/tests/input-output.test.ts:60:3
-    at _dispatchDescribe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:91:26)
-    at describe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:55:5)
-    at Object.&lt;anonymous&gt; (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/tests/input-output.test.ts:4:1)
-    at Runtime._execModule (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1439:24)
-    at Runtime._loadModule (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1022:12)
-    at Runtime.requireModule (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:882:12)
-    at jestAdapter (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)
-    at processTicksAndRejections (node:internal/process/task_queues:95:5)
-    at runTestInternal (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
-    at runTest (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
-    at Object.worker (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/testWorker.js:106:12)</failure>
+    <testcase classname="AWS Provider Dynamic Client Registry should throw error when using invalid profile" name="AWS Provider Dynamic Client Registry should throw error when using invalid profile" time="0.003">
+    </testcase>
+    <testcase classname="AWS Provider Dynamic Client Registry should support both AWS_REGION and AWS_DEFAULT_REGION environment variables" name="AWS Provider Dynamic Client Registry should support both AWS_REGION and AWS_DEFAULT_REGION environment variables" time="4.274">
     </testcase>
   </testsuite>
-  <testsuite name="Dynamic Type Tests" errors="0" failures="1" skipped="0" timestamp="2025-01-22T21:45:59" time="38.45" tests="4">
-    <testcase classname="Dynamic Type Tests Basic Dynamic Types should work with dynamic types single" name="Dynamic Type Tests Basic Dynamic Types should work with dynamic types single" time="1.729">
-    </testcase>
-    <testcase classname="Dynamic Type Tests Basic Dynamic Types should work with dynamic types enum" name="Dynamic Type Tests Basic Dynamic Types should work with dynamic types enum" time="1.659">
-    </testcase>
-    <testcase classname="Dynamic Type Tests Complex Dynamic Types should work with dynamic output map" name="Dynamic Type Tests Complex Dynamic Types should work with dynamic output map" time="1.205">
-    </testcase>
-    <testcase classname="Dynamic Type Tests Complex Dynamic Types should work with dynamic output union" name="Dynamic Type Tests Complex Dynamic Types should work with dynamic output union" time="30.002">
-      <failure>Error: thrown: &quot;Exceeded timeout of 30000 ms for a test.
-Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout.&quot;
-    at /Users/aaronvillalpando/Projects/baml/integ-tests/typescript/tests/dynamic-types.test.ts:58:5
-    at _dispatchDescribe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:91:26)
-    at describe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:55:5)
-    at /Users/aaronvillalpando/Projects/baml/integ-tests/typescript/tests/dynamic-types.test.ts:40:3
-    at _dispatchDescribe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:91:26)
-    at describe (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/index.js:55:5)
-    at Object.&lt;anonymous&gt; (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/tests/dynamic-types.test.ts:4:1)
-    at Runtime._execModule (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1439:24)
-    at Runtime._loadModule (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1022:12)
-    at Runtime.requireModule (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:882:12)
-    at jestAdapter (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)
-    at processTicksAndRejections (node:internal/process/task_queues:95:5)
-    at runTestInternal (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
-    at runTest (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
-    at Object.worker (/Users/aaronvillalpando/Projects/baml/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/testWorker.js:106:12)</failure>
+  <testsuite name="OpenAI Provider" errors="0" failures="0" skipped="0" timestamp="2025-01-22T22:27:37" time="32.719" tests="3">
+    <testcase classname="OpenAI Provider should support OpenAI shorthand" name="OpenAI Provider should support OpenAI shorthand" time="14.182">
+    </testcase>
+    <testcase classname="OpenAI Provider Streaming should support streaming in OpenAI" name="OpenAI Provider Streaming should support streaming in OpenAI" time="8.034">
+    </testcase>
+    <testcase classname="OpenAI Provider Streaming should support streaming without iterating" name="OpenAI Provider Streaming should support streaming without iterating" time="5.795">
     </testcase>
   </testsuite>
 </testsuites>
\ No newline at end of file
diff --git a/tools/versions/engine.cfg b/tools/versions/engine.cfg
index 74c41c57d..62d20ff32 100644
--- a/tools/versions/engine.cfg
+++ b/tools/versions/engine.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.73.3
+current_version = 0.73.4
 commit = False
 tag = False
 parse = ^(?P<major>\d+)\.(?P<minor>\d+).(?P<patch>\d+)$
diff --git a/tools/versions/integ-tests.cfg b/tools/versions/integ-tests.cfg
index d488fcf4e..bce8762cf 100644
--- a/tools/versions/integ-tests.cfg
+++ b/tools/versions/integ-tests.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.73.3
+current_version = 0.73.4
 commit = False
 tag = False
 parse = ^(?P<major>\d+)\.(?P<minor>\d+).(?P<patch>\d+)$
diff --git a/tools/versions/python.cfg b/tools/versions/python.cfg
index 188d0f01e..a4f7a044d 100644
--- a/tools/versions/python.cfg
+++ b/tools/versions/python.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.73.3
+current_version = 0.73.4
 commit = False
 tag = False
 parse = ^(?P<major>\d+)\.(?P<minor>\d+).(?P<patch>\d+)$
diff --git a/tools/versions/ruby.cfg b/tools/versions/ruby.cfg
index 14a199aa9..d992bab32 100644
--- a/tools/versions/ruby.cfg
+++ b/tools/versions/ruby.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.73.3
+current_version = 0.73.4
 commit = False
 tag = False
 parse = ^(?P<major>\d+)\.(?P<minor>\d+).(?P<patch>\d+)$
diff --git a/tools/versions/typescript.cfg b/tools/versions/typescript.cfg
index 52753d3b1..15f1f5177 100644
--- a/tools/versions/typescript.cfg
+++ b/tools/versions/typescript.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.73.3
+current_version = 0.73.4
 commit = False
 tag = False
 parse = ^(?P<major>\d+)\.(?P<minor>\d+).(?P<patch>\d+)$
diff --git a/tools/versions/vscode.cfg b/tools/versions/vscode.cfg
index 6cc79eafb..3d8e49477 100644
--- a/tools/versions/vscode.cfg
+++ b/tools/versions/vscode.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.73.3
+current_version = 0.73.4
 commit = False
 tag = False
 parse = ^(?P<major>\d+)\.(?P<minor>\d+).(?P<patch>\d+)$
diff --git a/typescript/vscode-ext/packages/package.json b/typescript/vscode-ext/packages/package.json
index edd036b88..ec2fa00fa 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.73.3",
+  "version": "0.73.4",
   "publisher": "Boundary",
   "repository": "https://github.com/BoundaryML/baml",
   "homepage": "https://www.boundaryml.com",